数据库操作语句(重点)
DML(Data Manipulation Language)数据操纵语言命令使用户能够查询数据库以及操作已有数据库中的数据。包括之前学习的SELECT语句,还有以下表中的语句:
插入数据
可以使用INSERT命令,向已经存在的表插入数据,语法格式如下:
INSERT INTO 表名 [(字段列表)] {VALUES(表达式1, 表达式2,...)|QUERY语句};
1.数据插入基本语法
最常见的插入操作可使用以下的语法(该形式一次只能插入一行数据):
INSERT INTO 表名[(字段列表)] VALUES ( 表达式列表);
插入字段的值的类型要和字段的类型一一对应。字符串类型的字段值必须用单引号括起来,例如:'CLERK'。字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验。
字段列表如果省略则代表全部字段。
范例:表的部分字段插入练习。将新雇员插入到emp表:
INSERT INTO emp(empno,ename,job)
VALUES (1000, '小李', 'CLERK');
这样只插入了一条记录,其他没有插入的字段,系统会填写为表的默认值。如果在表的创建时没有说明默认值,则将插入NULL值。
日期类型的字段值也要用单引号括起来,如'10-1月-03'。日期型的数据默认格式为DD-MON-YY,默认的世纪为当前的世纪,默认的时间为午夜12点。如果指定的世纪不是本世纪或时间不是午夜12点,则必须使用TO_DATE系统函数对字符串进行转换。
范例:时间字段的插入练习。将新雇员插入到emp表:
INSERT INTO emp(empno,ename,job,hiredate)
VALUES (1001, '小马', 'CLERK', '10-1月-03');
插入的雇员雇佣时间为2003年1月10日。
注意:时间的默认格式为DD-MON-YY。
范例:表的全部字段的插入练习。
INSERT INTO dept VALUES (50, '培训部','深圳');
说明:此种方式省略了字段名列表,要注意插入数据的顺序必须与表的字段默认顺序保持一致。如果不知道表的字段默认顺序,可以用DESCRIBE命令查看。
范例:插入空值练习。
INSERT INTO emp(empno,ename,job,sal) VALUES(1005,'杨华', 'CLERK',null);
说明:以上训练虽然指定了插入字段sal,但在插入的数值位置指定了NULL值,所以sal的插入值还是NULL。
练习:向雇员表插入全部字段的一条记录。
2.复制数据
另一种插入数据(相当于复制)方法的语法格式是:
INSERT INTO 表名(字段列表) SELECT(字段名1, 字段名2, ...) FROM 另外的表名;
该形式一次可以插入多行数据。
范例:通过其他表插入数据的练习。
创建一个新表manager
CREATE TABLE manager AS SELECT empno,ename,sal FROM emp WHERE job='MANAGER';
从emp表拷贝数据到manager
INSERT INTO manager
SELECTempno, ename, sal
FROM emp
WHEREjob = 'CLERK';
CREATE命令用来根据已经存在的表创建新表。步骤1根据emp表创建一个新表manager,该表只有3个字段empno,ename和sal,创建的同时将emp表中职务为manager的雇员复制到其中。步骤2从emp表中把职务为clerk的雇员插入到manager表中。
3.使用序列
使用INSERT语句时,可以通过序列来填写某些数值型或字符型的列。序列是一个要预先定义的有序的数值序列, 应该先建立一个序列,然后在插入语句中使用,序列将在以后章节中介绍。
范例:插入数据中使用序列的练习。
步骤1:创建从2000起始,增量为1 的序列abc:
CREATE SEQUENCE abc INCREMENT BY 1 START WITH 2000
MAXVALUE 99999 CYCLE NOCACHE;
步骤2:在INSERT 语句使用序列,序列的名称为abc:
INSERT INTO manager VALUES(abc.nextval,'小王',2500);
INSERT INTO manager VALUES(abc.nextval,'小赵',2800);
步骤3:使用SELECT语句观察结果:
SELECT empno,ename,sal FROM emp;
说明:步骤1创建序列,步骤2在插入时使用序列来填充雇员编号,使