INSERT语句
INSERT语句可以向数据表写入记录,可以是一条记录,也可以是多条记录。 写入多条:
INSERT语句案例
向技术部添加一条员工记录
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语句方言
MySQL的INSERT语句还有一种方言语法:
IGNORE关键字
IGNORE关键字会让INSERT只插入数据库不存在的记录。
UPDATE语句
UPDATE语句用于修改表的记录
UPDATE语句的表连接
因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造UPDATE语句。 UPDATE语句的表连接可以演变成下面的样子。 表连接的UPDATE语句可以修改多张表的记录。 UPDATE语句的表连接既可以是内连接,又可以是外连接
UPDATE语句案例
把每个员工的编号和上司的编号+1,用ORDER BY子句完成
UPDATE t_emp empno=empno+1, mgr=mgr+1
ORDER BY empno DESC;
把月收入前三名的员工底薪减100元,用LIMIT子句完成
UPDATE t_emp SET sal=sal-100
ORDER BY sal+IFNULL(comm, 0) DESC
LMIT 3;
把ALLEN调往RESEARCH部门,职务调整为ANALYST
UPDATE t_emp e JOIN t_dept d
SET e.deptno = d.deptno, e.job = "ANALYST"
WHERE e.ename="ALLEN" AND d.dname="RESEARCH"
把底薪低于公司平均底薪的员工,底薪增加150元
UPDATE t_emp e JOIN
(SELECT AVG(sal) AS avg FROM t_emp) t
ON e.sal<t.avg
SET e.sal=e.sal+150;
把没有部门的员工,或者SALES部门低于2000元底薪的员工,都调往20部门
UPDATE t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
SET e.deptno=20
WHERE e.deptno IS NULL OR (d.dname="SALES" AND e.sal<2000);
DELETE语句
DELETE语句用于删除记录,语法如下:
DELETE语句的表连接
因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造DELETE语句。 DELETE语句的表连接既可以是内连接,又可以是外连接
快速删除数据表全部记录
DELETE语句是在事务机制下删除记录,删除记录之前,先把将要删除的记录保存在日志文件里,然后再删除记录。 TRUNCATE语句在事物机制之外删除记录,速度远超过DELETE语句
DELETE语句案例
删除20部门中工资最高的员工记录
DELETE FROM t_emp
WHERE deptno= 20
ORDER BY sal+IFNULL(comm, 0) DESC
LIMIT 1;
删除SALES部门和该部门的全部员工记录
DELETE e, d
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname="SALES";
删除每个低于部门平均底薪的员工记录
DELETE e
FROM t_emp e JOIN
(SELECT deptno, AVG(sal) AS sal FROM t_emp GROUP BY deptno) t
ON e.deptno=t.deptno AND e.sal<t.sal;
删除员工KING和他的直接下属的员工记录,用表连接实现
DELETE e
FROM t_emp e JOIN
(SELECT empno FROM t_emp WHERE ename="KING") t
ON e.mgr=t.deptno OR e.empno=t.empno;
删除SALES部门的员工,以及没有部门的员工
DELETE e
FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname= "SALES" OR e.deptno IS NULL;
|