官术网_书友最值得收藏!

2.2 DML語句

DML是(Data Manipulation Language,數據操縱語言)的縮寫。如果說SELECT語句對數據進行的是讀操作,那么DML語句對數據進行的是寫操作。DML語句的操作對象是表中的行,這樣的語句一次可以影響一行或多行數據。DML語句包括3種操作:插入(INSERT)、刪除(DELETE)、修改(UPDATE)。

2.2.1 INSERT語句(插入操作)

INSERT語句的作用是在表中插入一行,它的語法格式為:

INSERT INTO表(列1,列2,…)VALUES(表達式1,表達式2,…);

在向表中插入一行時,INSERT語句將表達式的值作為對應列的值,列的排列順序、數據類型和數量應該與表達式一致,否則可能會出錯。如果沒有指定某個列,那么在插入數據時這個列的值將為空。在表達式中,字符串類型數據的大小寫是敏感的,日期型數據的格式在不同系統中是有區別的。例如,要往dept表中插入一行,部門號為50,部門名稱為NETWORK,部門地址為BEIJING,相應的INSERT語句為:

SQL>INSERT INTO dept(deptno,dname,loc)VALUES(50,'NETWORK','BEIJING');  [00093]

在INSERT語句中如果指定了列名,那么它們的順序可以隨意,只要與VALUES子句中的表達式一一對應即可。如果要為所有的列都提供數據,則可以省略列名,但是VALUES子句中表達式的順序、數據類型和數量必須與表中列的定義一致。例如,上面的INSERT語句為所有的3個列都提供了數據,所以可以簡寫為:

SQL>INSERT INTO dept VALUES(50,'NETWORK','BEIJING');  [00094]

在INSERT語句中為各列指定數據時,可以指定一個常量,或者指定一個表達式,如函數、算術運算表達式等。例如,當公司新來一名員工時,可以將當前時間作為它的受聘日期,作為表emp中列hiredate的值:

SQL>INSERT INTO emp(empno,ename,deptno,sal,hiredate)VALUES(9999,'Hello',30,1000,SYSDATE);  [00095]

利用INSERT語句中還可以從另一個表中復制數據,這時要在INSERT語句中使用子查詢,對應的語法格式為:

INSERT INTO表1(列l,列2,…)SELECT列1,列2,… FROM表2 WHERE條件表達式

這里的SELECT子句實際上是一個子查詢。執行這樣的語句時,首先執行SELECT子句,將返回的查詢結果作為指定列的值,插入表1中。用這種方法可以一次向表中插入多行,但是需要注意的是,表1的指定各列要與SELECT子句中的各列在排列順序、數據類型和數量上保持一致。例如,假設有一個表empl,它的結構與emp相同,現在希望從表emp中將部門10和部門20的員工數據復制到表empl中,相應的SELECT語句為:

SQL>INSERT INTO empl(empno,ename,deptno,sal,hiredate)SELECT empno,ename,deptno,sal,hiredate FROM emp WHERE deptno=10 or deptno=20;  [00096]

2.2.2 DELETE語句(刪除操作)

DELETE語句用來從表中刪除指定的行,它一次可以刪除一行,也可以刪除多行。DELETE語句的語法格式為:

DELETE FROM表名WHERE條件

在默認情況下,DELETE語句可以不使用WHERE子句,這時將刪除表中的所有行。例如,下面的DELETE語句將刪除表emp中的所有行:

SQL>DELETE FROM emp;  [00097]

如果希望只刪除表中的一部分數據,需要通過WHERE指定條件。例如,要從表emp中刪除部門30的工資低于1000元的員工數據,相應的DELETE語句為:

SQL>DELETE FROM emp WHERE deptno=30 AND sal<1000;  [00098]

在DELETE語句的WHERE子句中也可以使用子查詢,子查詢與SELECT語句中的子查詢用法相同。例如,要從表dept中刪除這樣的部門數據,它在表emp中沒有所屬的員工,即空部門,相應的DELETE語句為:

DELETE FROM dept WHERE deptno NOT in(SELECT distinct deptno FROM emp);[00099]

2.2.3 UPDATE語句(修改操作)

UPDATE語句的作用是對表中已經存在的數據進行修改。它可以一次修改一行,也可以修改多行。這條語句的語法格式為:

UPDATE語句通過SET子句為指定列指定新值,將列值修改為指定的表達式。在SET子句中指定所有需要修改的列。在默認情況下,UPDATE語句不需要WHERE子句,這時UPDATE語句將修改表中的所有行。例如,下面的UPDATE語句將emp表中所有員工的工資增加10%,獎金增加100元:

SQL>UPDATE emp SET sal=sal*l.l,comm=nvl(comm,0)+100;  [000100]

如果通過WHERE子句指定了條件,那么UPDATE語句只修改滿足條件的行。例如,如果要為部門10和20中工資高于2000元的員工增加工資和獎金,增加幅度與上一條UPDATE語句相同。相應的UPDATE語句為:

SQL>UPDATE emp SET sal=sal*l.l,comm=nvl(commr,0)+100 WHERE deptno=l0 OR deptno=20 AND sal>2000;  [000101]

在UPDATE語句的WHERE子句中,也可以使用子查詢。這時的條件并不是一個確定的條件,而是依賴于對另一個表的查詢。例如,要對與員工BLAKE同在一個部門的員工增加工資和獎金,增加幅度與上一條UPDATE語句相同。相應的UPDATE語句為:

SQL>UPDATE emp SET sal=sal*l.l,comm=nvl(comm,0)+100 WHERE deptno=(SELECT deptno FROM emp WHERE ename='BLAKET');  [000102]

主站蜘蛛池模板: 曲松县| 永平县| 资源县| 徐汇区| 天长市| 岚皋县| 望城县| 逊克县| 波密县| 蚌埠市| 扶沟县| 双柏县| 彰化县| 安图县| 锦屏县| 海城市| 厦门市| 平昌县| 滦平县| 鲜城| 青河县| 三原县| 准格尔旗| 靖江市| 台南县| 南丹县| 台南市| 潼关县| 任丘市| 合作市| 云林县| 社会| 昆明市| 易门县| 株洲市| 江安县| 四子王旗| 东台市| 黔南| 达孜县| 绥芬河市|