前面着重介绍了查询语句,因为在实际工作中,增、删、改、查,使用的最多的就是查询语句。同时,绝大多数软件系统,都是读多写少的,查询的条件也是各种各样,所以前面着重介绍了查询语句。
目录
四:INSERT子查询:将子查询的结果集全部插入
一:INSERT语句简介
案例1:一次插入一条数据:向t_dept表中增加一条记录;
INSERT INTO t_dept(deptno,dname,loc)
VALUES(50,"技术部","北京");
案例2:一次插入多条数据:向t_dept表中增加多条记录;
INSERT INTO t_dept(deptno,dname,loc)
VALUES(60,"后勤部","北京"),(70,"保安部","北京");
案例3:INSERT中附带子查询:向t_emp表中,插入一条部门为技术部的员工信息;
这种子查询,是将子查询放在了VALUES中了;这种情况下,子查询的结果需要是单行子查询,即子查询的结果必须是单行单列的;
INSERT INTO t_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUES(8001,"李四","SALESMAN",8000,"1988-12-20",2000,NULL,(SELECT deptno FROM t_dept WHERE dname="技术部"));
二:INSERT语句方言
SQL的方言:只能在某一个数据库上执行的方言语法,不具备如通用型。MySQL的方言只能在MySQL上执行,Oracle的方言只能在Oracle上执行。
如:
INSERT INTO t_emp SET empno=8002,ename="李明",job="CLEARK",mgr=7782,hiredate="1985-5-18",sal=2500,comm=NULL,deptno=50;
INTO关键字可以不写:
INSERT t_emp SET empno=8003,ename="刘三",job="CLEARK",mgr=7782,hiredate="1985-5-18",sal=2500,comm=NULL,deptno=50;
三:IGNORE关键字
IGNORE关键字:可以让INSERT语句忽略冲突的记录,只写入那些不冲突的记录。比如用INSERT写入多条记录的时候,某一条记录数据没写对,产生了注入主键冲突或唯一值的冲突等,此时,数据库会报错然后整个INSERT语句连一条语句都写不进去。。。但是如果使用了IGNORE关键字,就可以忽略冲突的记录,不冲突的记录还是能写到数据库里的;
四:INSERT子查询:将子查询的结果集全部插入
INSERT语句中可以包含子查询语句,代表把子查询的内容写入到数据表
如:把人数超过5人的部门记录拷贝到新的部门表:
先创建t_dept_new表:
CREATE TABLE t_dept_new LIKE t_dept;
然后,查询数据,将查询的数据插入到t_dept_new表中:下面省略了VALUES哎。
INSERT INTO t_dept_new(deptno,dname,loc)
(SELECT d.deptno,d.dname,d.loc FROM t_dept d JOIN(SELECT deptno FROM t_emp GROUP BY deptno HAVING COUNT(*)>=5) temp ON d.deptno=temp.deptno);
注:
REPLACE INTO语句:
(1)和INSERT INTO语句类似,都可以写入数据;
(2)在使用IGNORE的情况下,INSERT INTO 会忽略产生冲突的记录,REPLACE INTO语句会将产生冲突的记录进行替换;