第4章数据操作语言DML
内容介绍
◆插入记录(INSERT)、更新记录(UPDATE)、删除记录(DELETE)
数据操纵语言(Data Manipulation Language,DML)是SQL语言中,对数据库中表数据进行操作的指令集,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。
1.插入记录
语法:
指定字段插入数据
INSERT INTO表名 (字段名1,字段名2,字段名3,...,字段名n) VALUES (值1,值2,值3,...,值n);
顺序插入一条完整记录,值顺序需要和表字段一致
INSERT INTO表名VALUES(值1,值2,值3,...,值n);
一次性插入多条数据
INSERT INTO表名 (字段名1,字段名2,字段名3,...,字段名n)
VALUES
(值1,值2,值3,...,值n),(值1,值2,值3,...,值n),(值1,值2,值3,...,值n);
1.指定字段插入数据
INSERT INTO emp (empno,ename,deptno) VALUES (7777,'Lily',10);
2.插入一条完整的员工数据
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUES
(6666,'HELEN','SALESMAN',7698,'1988-12-12',3050,100,30);
或者省略字段列表
INSERT INTO emp VALUES (9999,'PETER','CLERK',7902,'1987-10-10',1200,NULL,20);
值的顺序和表中字段的顺序要一致.
3.一次性插入多条员工数据
INSERT INTO emp (empno,ename,deptno) VALUES
(1234,'LINDA',20),(2345,'DAISY',30),(3456,'MARY',40);
注意:
列名数与VALUES后面的值的个数相等
列的顺序与插入的值的顺序一致
列名的类型与插入的值要一致
插入值的时候不能超过最大长度
值如果是字符串或者日期需要加引号’’
4.IGNORE关键字
IGNORE关键字会让INSERT只插入数据库不存在的记录。
语法:
INSERT [IGNORE] INTO 表名 (字段列表) VALUES (值列表);
新增50号公关部,地址在上海,60号运输部,地址在青岛
INSERT IGNORE INTO dept(deptno,dname,loc)
VALUES (50,"公关部","上海"),(60,"运输部","青岛");
新增40号技术部,地址在北京
INSERT IGNORE INTO dept(deptno,dname,loc)
VALUES(40,"技术部","北京");
如果表中已存在要插入的内容,不会报错,会显示已影响的行数为0行。
2.更新记录
1.UPDATE语法:
UPDATE [IGNORE] 表名
SET 字段名1=新值1, 字段名2=新值2, ...字段名n=新值n
[WHERE 条件表达式1,条件表达式n]
[ORDER BY字段名1, 字段名n]
[LIMIT 起始索引,显示数目];
修改员工KING的工资为10000,直接领导为LINDA
UPDATE emp SET sal=10000,mgr=1234 WHERE ename='KING';
修改员工1234的职位为CLERK,入职日期为1982-3-22,工资信息为1000
UPDATE emp SET job='CLERK',mgr=7839,hiredate='1982-3-22',sal=1000 WHERE empno=1234;
把月收入前三名的员工底薪减100元,用LIMIT子句完成。
UPDATE emp SET sal=sal-100
ORDER BY sal+IFNULL(comm,0) DESC
LIMIT 3;
注意:
列名的类型与修改的值要一致
修改值的时候不能超过最大长度
字段值如果是字符串或者日期要加’’
2.UPDATE语句的表连接
UPDATE 表1 JOIN 表2 ON 条件 SET 字段名1=值1, 字段名2=值2, ...; 表连接的UPDATE语句可以修改多张表的记录。
把SOPHIA调往RESEARCH部门,职务调整为ANALYST
UPDATE emp e JOIN dept d
SET e.deptno=d.deptno,e.job="ANALYST"
ame="SOPHIA" AND d.dname="RESEARCH";
SALES部门低于2000元底薪的员工,都调往20部门
UPDATE emp e JOIN dept d ON e.deptno=d.deptno
SET e.deptno=20
WHERE d.dname="SALES" AND e.sal<2000;
3.删除记录
1.DELETE语法:
DELETE [IGNORE] FROM 表名
[WHERE 条件表达式1,条件表达式n]
[ORDER BY字段名1, 字段名n]
[LIMIT 起始索引,显示数目];
删除员工SOPHIA的信息
DELETE FROM emp WHERE ename='SOPHIA';
删除10部门中,工龄超过20年的员工记录
DELETE FROM emp
WHERE deptno=10 AND DATEDIFF(NOW(),hiredate)/365>=20;
删除20部门中工资最高的员工记录
DELETE FROM emp
WHERE deptno=20
ORDER BY sal+IFNULL(comm,0) DESC
LIMIT 1;
删除员工表的所有数据
DELETE FROM emp;
2.DELETE语句的表连接:
DELETE 表1,表2… FROM 表1 JOIN 表2 ON 条件
[WHERE 条件表达式1,条件表达式n]
[ORDER BY字段名1, 字段名n]
[LIMIT 起始索引,显示数目];
删除SALES部门的员工,以及没有部门的员工
DELETE e
FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno
WHERE d.dname="SALES" OR e.deptno IS NULL;
3.快速删除数据表全部记录
DELETE语句是在事务机制下删除记录,删除记录之前,先把将要删除的记录保存到日志文件里,然后再删除记录。
TRUNCATE语句在事务机制之外删除记录,速度远超过DELETE语句。
TRUNCATE语句使用方法:
TRUNCATE TABLE 表名;
清空员工表的数据
TRUNCATE TABLE emp;
4.数据操作语言练习
1.向emp表中插入以下数据
#员工编号8888,姓名SOPHIA,职位ANALYST,入职时间2024-3-11
INSERT INTO emp (empno,ename,job,hiredate) VALUE (8888,'SOPHIA','ANALYST','2024-3-11')
2.向emp表中插入以下数据
#员工编号9999,姓名PETER,职位MANAGER,直接领导7839,入职时间2024-3-11,工资2500,无奖金,40号部门
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)
truncatedeleteVALUE (9999,'PETER','MANAGER','7839','2024-3-11',2500,NULL,40);
INSERT INTO emp VALUE (9999,'PETER','MANAGER','7839','2024-3-11',2500,NULL,40);
3.向emp表中插入以下数据
#员工编号1111,姓名JACK,职位CLERK,直接领导7839,入职时间2024-3-12,工资3000,无奖金,10号部门#员工编号2222,姓名JOB,职位CLERK,直接领导7839,入职时间2024-3-12,工资3000,无奖金,20号部门#员工编号3333,姓名STEVE,职位CLERK,直接领导7839,入职时间2024-3-12,工资3000,无奖金,30号部门INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)
VALUE (1111,'JACK','CLERK','7839','2024-3-12',3000,NULL,10),
(2222,'JOB','CLERK','7839','2024-3-12',3000,NULL,20),
(3333,'STEVE','CLERK','7839','2024-3-12',3000,NULL,30);
4.向dept表中插入以下数据
#部门编号50,部门名称SECURITY,部门地址Washington
INSERT INTO dept (deptno,dname,loc) VALUES (50,'SECURITY','Washington');
INSERT INTO dept VALUES (50,'SECURITY','Washington');
5.将8888号员工的姓名修改为HELEN
UPDATE emp SET ename='HELEN' WHERE empno=8888;
6.将所有工资少于900的员工加薪100
UPDATE emp SET sal=1000 WHERE sal<900;
7.删除8888号员工
DELETE FROM emp WHERE empno=8888;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。