一 、 SQL 語言
SQL ( Structure Query Language 結構化查詢語言)標準的關系數據庫語言, 用于建立、儲存、修改、檢索和管理數據庫中的信息。
二 、 SQL 語言的組成
數據定義語言 (DDL): 用來創建、刪除或者修改數據模式對象的結構。一般包括: CREATE,DROP,ALTER
數據操作語言( DML ): 用來操作數據。包括: UPDATE,INSERT,DELETE
數據查詢語言:查詢數據: SELECT
三、進入 SQL*PLUS ( ORACLE 自帶的 PL/SQL 使用器)
進入 ORACLE 目錄中 BIN/PLUS33W(5.0) 或者 BIN/PLUS80W(6.0)
編輯、運行, 在命令苻后輸入 SQL 命令, 如果上一個 sql 輸入有問題,鍵入 ‘ ed ’ 進行編輯
四、表
1. 創建表(創建表用 CREATE TABLE 語句):
CREATE TABLE <TABLE_NAME>(
Column_name1 Datetype1 [Constraint_Type]
,Column_name2 Datatype2 [Constraint_Type]
, …
,[CONSTRAINT Constraint_Name1 Constraint_Type (column_name) USING INDEX]
)
/
Constraint_Type 有以下幾種類型
PRIMARY KEY(column_name)- 主鍵約束
FOREIGN KEY(column_name) REFERENCES Table_Name(Colunm)- 外鍵約束
UNIQUE KEY (column_name)- 唯一鍵約束
DateType 一般是 ORACLE 可以支持的數據類型比較常用的有:
A. NUMBER
B.VARCHAR(n)
C.VARCHAR2(n)
D.LONG
E.DATE
F.CHAR(n)
G.INTGER
例子: 創建一個工人信息表, GRID,XM,XB,CSRQ 和一個工人工資表,包括 GRID,SZBM( 所在部門 ) , GZ,RQ 其中工人信息表是主表,工人工資表是從表
CREATE TABLE GR_XX(
GRID VARCHAR2(10)
,GRXM VARCHAR2(50) NOT NULL
,XB VARCHAR2(2) NOT NULL
,CSRQ DATE
,CONSTRAINT GR_XX$_GRID PRIMARY KEY (GRID) USING INDEX
)
/
CREATE TABLE GR_GZ(
GRID VARCHAR2(10)
,SZBM VARCHAR2(10)
,GZ NUMBER(10,2)
,RQ DATE
,CONSTRAINT GR_GZ$_GRID FOREIGN KEY (GRID) REFERENCES GR_XX(GRID)
,CONSTRAINT GR_GZ$_GRID_RQ UNIQUE (GRID,RQ)
)
/
2. 對表插入數據
插入一條記錄
INSERT INTO Table_Name [(column_name1,Column_name2,...)] VALUES(value1,value2,...);
例子:向工人信息表中插入數據
Insert into gr_xx (grid,grxm,xb,csrq) values (‘001’,’xjf’,’ 男 ’,SYSDATE);
Insert into gr_gz values(‘001’,’008’,560.92);
插入多條記錄
INSERT INTO Table_Name1 [(column_name1,Column_Name2,...)]
3. 修改表
UPDATE Table_Name SET column1=val1,column2=val2,… WHERE …
例子: update gr_gz set gz=80000 where grid='sw'or grid='dn';
4. 刪除數據
DELETE FROM TABLE_NAME WHERE ...
5. 提交數據
COMMIT-- 提交
ROLLBACK-- 回滾
例子:主表和從表需要同時更新數據時,需要更新兩條 sql 語句,為避免數據庫中的垃圾數據,當一條記錄失敗,即回滾。
6. 刪除表
DROP TABLE TABLE_NAME;
DELETE TABLE TABLE_NAME; 刪記錄
7. 修改表結構
增加列
ALTER TABLE TABLE_NAME ADD COLUMN_NAME DATATYPE ;
alter table gr_gz add sl varchar(4)
刪除列
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME ;
alter table gr_gz drop column sl;
刪除列時,該列不能有數據。
修改列
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DATATYPE;
alter table gr_gz modify sl varcher2(10)
注意:修改列時,可以將已有類型轉為新得類型,也可以擴大或者縮小原來得數據類型。當將已有類型轉為新得類型時,表中 此字段不能有數,擴大可以不受影響,縮小時,表中得數據大小不能超過修改后得大小。
虛表
SELECT SYSDATE FROM DUAL;
select 5*7 from dual;
五、視圖(由一個或者多個表建的視圖)
1. 創建視圖
CREATE OR REPLACE VIEW VIEW_NAME AS
SELECT COLUMN1,COLUMN2,… FROM TABLE_NAME1 A, TABLE_NAME2 …
2. 刪除視圖
DROP VIEW VIEW_NAME
例子:創建一個視圖,可以查出工人的姓名和工人的工資
create or replace view v_gz as
select a.grid.a.xm,b.gz
from gr_xx a,gr_gz b
where a.grid=b.grid
六、數據查詢
一般使用 select 語句進行查詢
基本結構:
SELECT COLUMN1,COLUMN2, …
FROM TABLE_NAME
[WHERE CONDTION ]
[GROUP BY COLUMN]
[HAVING CONDITION]
[ORDER BY COLUMN]
1. 查詢所有得列
SELECT * FROM TABLE_NAME [WHERE CONDTION]
例子:查詢工人信息表中 grid = ‘ 0001 ’ 的所有列的信息
select * from gr_xx where grid='0001'
2. 查詢指定的列
SELECT COLUMN1,COLUMN2,.. FROM TABLE_NAME [WHERE CONDITION]
例子: select grid,grxm from gr_xx where grid = ‘0001’ ;
3. 用被選擇的列的別名來指定顯示選擇結果時的列名
SELECT COLUMN1 BYNAME1,COLUMN2 BYNAME2 FROM TABLE_NAME [WHERE]
select grid,grxm,grgz from gr_xx where grid='0001';
4. 在 select 語句中使用表達式
SELECT EXPRESSION FROM TABLE_NAME [WHERE ]
select cgdz,300+100 from cg_xx ;
5.distinct 查關鍵字,消除冗余行 , 統計
SELECT DISTINCT(COLUMN) BYNAME FROM TABLE_NAME [WHERE CONDITION]
例子:如果有兩個記錄的姓氏字段皆包含 Smith ,則下列 SQL 語句只返回包含 Smith 的記錄
select distinct Smith from employees;
如果省略 DISTINCT ,則查詢將返回兩個包含 Smith 的記錄
6. where 子句
where 子句中常用的比較運算符 :<, >, <> , = ,!=,<= , >=
常用的關系運算符 :in(val1,val2,…),between val1 and val2,like ‘%tin%’ 百分號表示零個或任意多個字符 _ 表示任意一個字符
select * from gr_xx where grid in (‘0001’,’0002’);
select * from gr_xx where csrq between ’01-jan-1960’ and sysdate
select * from gr_xx where grxm like ‘%y%’ ;
組合查詢條件 :and ,or ,not
select * from gr_xx where csrq > 'june-01-1980' and xb=' 男 ';
select * from gr_xx where csrq > 'june-01-1980' or xb=' 男 ';
select * from gr_xx where grid not in('0001','0002');
7.order by 排序子句
按照定義字段的順序顯示查詢結果
Select * from gr_gz order by gz;
Asc 正序排列(由低到高) Desc 倒序排列
select * from gr_gz order by gz desc;
8.Group by having 分組函數
分組函數包括: max,min,avg,sum,conunt
having 與 where 的區別就在于 where 是執行前判斷條件,而 having 則是在執行查詢后判斷條件 ;group by 后只能用 having 而不能用 where
select grid,count(gz) from gr_gz
group by grid 把 grid 相同的分成一組
having grid = ‘yang’; 取出的結果中包含 grid='yang'
select xm , count(*) from gr_xx group by xm having count(*)>1 ; 取出有相同姓名的人
9. 查詢的并 ( union ) 、交 (intersect) 、差 (minus) 操作
union 去掉重復記錄, union all 全部保留 ( 按照缺省規定,使用 UNION 運算時不返回重復的記錄;然而,可以包含 ALL 謂詞來確保返回所有的記錄 )
select grid from gr_xx where xb=’ 男 ’ intersect select grid from gr_gz where gz > 400 ;
10. 連接查詢
利用兩個表的相關列之間的比較關系,控制個表中的行的組合。從多個表中查詢數據
A. 等值連接 ‘ = ’
select a.grid,a.xm,b.gz from gr_xx a gr_gz b where a.grid=b.grid;
B. 非等值連接
select a.grid,a.xm,b.gz from gr_xx a gr_gz b where a.grid='0001'and b.gz>'2000';
C. 自連接查詢:與本表進行連接查詢
select a.grid from gr_xx a,gr_xx b where a.grid=b.xm;
CREATE TABLE GR_jl(
GRID
,MGR
)
/
select a.grid,b.grid from gr_jl a, gr_jl b where a.mgr = b.grid ;
D.外連接:使用后,可以返回兩個表中相匹配的行,(+)跟在從表的列后。沒有匹配的數據為NULL
select a.id, b.id, from dept a, emp b;
a.id b.id
1 2
2 2
3 4
where a.id(+) = b.id
1 2
2 2
4
where a.id = b.id(+)
1 2
2 2
3
11. ORACLE 中的偽列
ROWNUM ,ROWID 每個表中都有的列
Select * from gr_xx where rownum < 10 ;
12.嵌套查詢:在select語句中,還存在另一個select語句,叫嵌套查詢
Select * from gr_xx
Where grid in ( select grid from gr_gz where gz >300 );
exists 的應用
Select count(1) from dual where exists (select 1 from Gr_xx where grid = ‘yang’);
13.||連接符
select 'time is '||sysdate from dual;
七、序列發生器
1.創建
create sequence a start with 10000 ;
2.使用
currval
nextval
select a.currval from dual;