- Oracle數據庫從入門到運維實戰
- 甘長春 孟飛編著
- 1329字
- 2021-09-27 12:48:23
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]
- OpenStack Cloud Computing Cookbook(Third Edition)
- Python程序設計教程(第2版)
- GeoServer Cookbook
- Java面向對象思想與程序設計
- C語言程序設計(第2版)
- 趣學Python算法100例
- HTML5從入門到精通 (第2版)
- UML 基礎與 Rose 建模案例(第3版)
- Yii Project Blueprints
- C語言程序設計習題與實驗指導
- Flink技術內幕:架構設計與實現原理
- Django Design Patterns and Best Practices
- 進入IT企業必讀的324個Java面試題
- Java編程指南:語法基礎、面向對象、函數式編程與項目實戰
- 軟技能2:軟件開發者職業生涯指南