DML-增、删、改 操作
一、添加(插入)
1、作用
为表插入单行数据
也可以通过子查询将一张表的多行数据插入到另外一张表里面
同时为多张表插入数据
2、基础插入数据
2.1、语法格式
INSERT INTO 表或视图 [(列名,列名,列名,...)]
VALUE (值,值,值,...)
2.2、示例代码
dept 表中插入 dept 表中 deptno=100 的数据(了解)
insert into dept select * from dept where deptno=100;
往 emp 表中插入 empno,ename,sal 数据
(111,'1',1000)(222,'2',2000) INSERT INTO emp(empno,ename,sal) values(111,'1',1000); insert INTO emp(empno,ename,sal) values(222,'2',2000);
2.3、说明
添加数字:直接编写数字111,
INSERT INTO emp(empno,ename,sal) values(111,'1',1000);
添加字符串:字符串应该使用单引号''声明
INSERT INTO emp(ename) values('苍井空');
添加日期
第一种:可以按照已有的字符串的格式编写字符串,例如’17-12月-80’;第二种:利用TO_DATE()函数将字符串变为DATE型数据;第三种:如果设置的时间为当前系统时间,则使用SYSDATE;
3、批量插入(10g或以上版本)
3.1、语法格式
往一个表中插入多条记录
INSERT ALL INTO 表名 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') INTO 表名 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') INTO 表名 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') SELECT * FROM dual;
插入多个值到多个表中
INSERT ALL INTO 表1 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') INTO 表1 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') INTO 表1 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') INTO 表2 (列名1, 列名2, 列名3) VALUES ('VALUE1', 'VALUE2', 'VALUE3') INTO 表2 (列名1, 列名2, 列名3) VALUES ('VALUE1', ''VALUE2', 'VALUE3') SELECT * FROM dual;
3.2、示例代码
往emp表中批量插入数据
INSERT ALL INTO emp (EMPNO, ENAME, JOB,SAL) VALUES (1234, 'test1','IT', 2850.12) INTO emp (EMPNO, ENAME, JOB,SAL) VALUES (1233, 'test2','IT', 9200.12) INTO emp (EMPNO, ENAME, JOB,SAL) VALUES (1231, 'test3', 'IT', 9521.12) SELECT * FROM DUAL;
往emp,dept表中批量插入数据
INSERT ALL INTO emp (EMPNO, ENAME, JOB,SAL,DEPTNO) VALUES (1234, 'test1','IT', 2850.12,50) INTO emp (EMPNO, ENAME, JOB,SAL,DEPTNO) VALUES (1233, 'test2','IT', 9200.12,50) INTO emp (EMPNO, ENAME, JOB,SAL,DEPTNO) VALUES (1231, 'test3', 'IT', 9521.12,50) INTO DEPT (DEPTNO,DNAME,LOC) VALUES(50,'IT','shanghai') SELECT * FROM DUAL;
4、注意事项
INSERT时既可以指定列,也可以不指定列表
1、如果不指定列表,则values子句必须为table中的每个列提供数据,且数据顺序与列顺序相同
2、如果指定列表,提供的数据的顺序需与相应列对应
数字列可直接写入,字符列或日期列插入数据时必须使用单引号引住
插入数据必须满足约束规则,主键列和NOT NULL列必须提供数据值
插入的数据必须与列的个数及顺序保持一致
二、修改(更新)
1、作用
对表中已有的数据行进行操作
2、语法格式
UPDATE 表名称
SET 更新字段1=更新值1,更新字段2=更新值2,…
[WHERE 更新条件(s)];
3、说明
编写 UPDATE 语句的时候,没有编写任何的更新条件,则表示更新表之中的全部数据,进行所有数据更新的时候,都会返回数据的更新行数,如果是增加,会显示影响的行数,同样对于删除也 会出现影响的行数。
在以后编写程序的时候就可以通过是否有更新行数来判断某一个更新操作是否成功
4、示例代码
把 empno=111 的员工 comm 改成 100
UPDATE emp set comm=100 WEHER empno=111;
为所有人长工资,标准是:10 部门长 10%;20 部门长 15%;30 部门长 20%其他部门长 18%(要求用 DECODE 函数)
UPDATE emp SET sal=decode(deptno,'10',sal(1+0.1), '20',sal(1+0.15), '30',sal(1+0.2),sal(1+0.18));
根据工作年限长工资,标准是:为公司工作了几个月就长几个百分点
update emp set sal= round(sal * (1+(sysdate - hiredate)/365/12/100),2);
5、使用子查询插入
使雇员SCOTT的岗位、工资、补助与雇员SMITH的完全相同
UPDATE emp SET (job,sal,comm)=(SELECT job,sal,comm FROM emp WHERE ename='SMITH') WHERE ename='SCOTT';
二、删除操作
1、说明
没有删除条件,则删除表所有数据
2、语法格式
DELETE FROM 表名称
[WHERE 删除条件(s)];
3、示例代码
删除 empno=111 的数据
delete from emp where empno=111;
4、注意:
在开发中我们都不会使用delete删除数据,通常是假删除数据,通过设置字段来判断
说明
危险操作,开发中慎用,一般都是假删除,假删除是指在表中添加一个字段(列)作为标识,然后查询时多写一个条件来去除该记录