1.2 DML语句

DML是“数据操纵语言”(Data Manipulation Language)的简写。如果说SELECT语句对数据进行的是读操作,那么DML语句对数据进行的是写操作。DML语句的操作对象是表中的行,这样的语句一次可以影响一行或多行数据。DML包括三种操作:插入(INSERT)、删除(DELETE)、修改(UPDATE)。

1.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');


在INSERT语句中如果指定了列名,那么它们的顺序可以随意,只要与VALUES子句中的表达式一一对应即可。如果要为所有的列都提供数据,则可以省略列名,但是VALUES子句中表达式的顺序、数据类型和数量必须与表中列的定义一致。例如,上面的INSERT语句为所有的三个列都提供了数据,所以可以简写为:


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


在INSERT语句中为各列指定数据时,可以指定一个常量,或者指定一个表达式,如函数、算术运算表达式等。例如,当公司新来一名员工时,可以将当前时间作为它的受聘日期,作为表emp中列hiredate的值:


SQL>INSERT INTO emp(empno, ename, deptno, sal, hiredate)

VALUES(9999,'Hello',30,1000,sysdate);


利用INSERT语句中还可以从另一个表中复制数据,这时要在INSERT语句中使用子查询,对应的语法格式为:


INSERT INTO表1(列1,列2……)

SELECT列1,列2……FROM表2 WHERE条件表达式


这里的SELECT子句实际上是一个子查询。执行这样的语句时,首先执行SELECT子句,将返回的查询结果作为指定列的值,插入到表1中。用这种方法可以一次向表中插入多行,但是需要注意的是,表1的指定各列要与SELECT子句中的各列在排列顺序、数据类型和数量上保持一致。例如,假设有一个表emp1,它的结构与emp相同,现在希望从表emp中将部门10和部门20的员工数据复制到表emp1中,相应的SELECT语句为:


SQL>INSERT INTO emp1(empno, ename, deptno, sal, hiredate)

SELECT empno, ename, deptno, sal, hiredate FROM emp

WHERE deptno=10 or deptno=20;