数据操作语言主要包括如下几种:
增加行数据:使用INSERT语句实现
修改行数据:使用UPDATE语句实现
删除行数据:使用DELETE语句实现
-- 创建 emp2 dept2
create table emp2 as select * from emp
create table dept2 as select * from dept
-- 向 dept2 表中 插入 50部门
-- deptno:50 dname:teach loc:shenyang
-- select * from dept2
-- 向表中插入数据
-- 总结 :值要与字段 位置对应
*********** 常用语法一 语法三
-- 语法一:
-- insert into 表名(字段1,字段2,....) values(值1,值2 ,..)
insert into dept2(deptno,dname,loc)
values(50,'teach','shenyang')
insert into dept2(deptno,dname,loc)
values(90,null,'SHENYANG')
-- 语法二 表名后面没有字段 values按照表名所有列(字段)顺序书写插入语句
-- insert into 表名 values(值1,值2 ,..值n)
insert into dept2
values(60,'TEACH','SHENYANG')
insert into dept2
values(80,null,'SHENYANG')
-- 语法三
-- insert into 表名(字段3,字段1) values(值3,值1)
insert into dept2(loc,deptno)
values('SHENYANG',70)
-- 1.向部门表新增一个部门,部门编号为55,
-- 部门名称为HR,工作地点为SY。
insert into dept2(deptno,dname,loc) values(55,'HR','SY')
-- 2.向部门表新增一个部门,部门编号为65,
-- 部门名称为MARKET。
insert into dept2(deptno,dname) values(65,'MARKET')
-- 向emp2表中添加
-- 编号1001 姓名 tom 工资1000 入职日期:今天 部门编号40
insert into emp2(empno,ename,sal,hiredate,deptno)
values(1001,'tom',1000,'2020-02-12',40)
insert into emp2(empno,ename,sal,hiredate,deptno)
values(1001,'tom',1000,CURDATE(),40)
-- 批量插入数据 mysql(了解即可)
-- insert into 表名(字段1,字段2...字段n)
-- values(值1,值2,..值n),(值1,值2,..值n),(值1,值2,..值n)
-- 向 dept2 表中批量添加 61 d1 p1
-- 62 d2 p2
-- 63 d3 p3
insert into dept2 (deptno,dname,loc)
values(61,'d1','p1'),(62,'d2','p2'),(63,'d3','p3')
-- 向一个表插入另一个表信息(了解即可)
-- 新建空表 dept3
create table dept3 as select * from dept where 1=0
-- 向dept3 表插入 dept2 表信息
-- insert into 表名 (要插入的信息) 列名一致
insert into dept3 select * from dept2
-- 修改数据 UPDATE
-- update 表名 set 字段1=值1,字段2=值2....
-- where 条件
-- 查询10部门员工工资上调10% 的工资
select ename,deptno,sal,sal*1.1 from emp where deptno=10
-- 将emp2表中 10部门员工工资上调10% 的工资
update emp2 set sal=sal*1.1 where deptno=10
-- 把emp2 表中 员工编号为7782的部门编号修改为20
select * from emp2 where empno=7782
update emp2 set deptno=20 where empno=7782
-- 把emp2 表中 部门编号为20 修改为40,并且工资上调20%
-- update 语句中 修改多个条件使用 *** 逗号, ***分割
update emp2 set deptno=40 , sal=sal*1.2 where deptno=20
-- 2.把emp2 表中 修改奖金为null的员工,奖金设置为0
update emp2 set comm=0 where comm is null
-- 删除表
delete from 表名 where ....
-- 删除 emp2 表中 部门编号为 0 的员工信息
delete from emp2 where deptno=0
-- delete from 表名 如果无 where条件 会将表数据清空
delete from emp2
-- truncate 只能清空表的数据 效率比delete要高 ,作用:快速清空表
-- truncate table 表名
-- 将dept3表的数据清空
truncate table dept3
-- 将emp表中的信息插入 emp2中
insert into emp2 select * from emp
select * from emp2
-- 2.emp2删除工作在NEW YORK的员工记录
-- 使用java 开发是 解决复杂查询的解决办法
-- 但是如下语句在mysql 语句中不能一步实现
-- delete from emp2 where empno in(select empno
-- from emp2 join dept
-- on(emp2.deptno=dept.deptno)
-- where dept.loc='NEW YORK')
-- 1. 查询工作new york 的员工编号
select empno
from emp2 join dept
on(emp2.deptno=dept.deptno)
where dept.loc='NEW YORK' -- java 7782,7839,7934
-- 2. 拿之前获得的答案 带入到 删除语句中
delete from emp2 where empno in(7782,7839,7934)
-- emp2删除工作在NEW YORK的员工记录
-- 只用mysql 一句话解决
-- 方法一.找表关系
delete from emp2 where deptno =
(select deptno from dept where loc='NEW YORK')
-- 3.emp2 删除工资大于所在部门平均工资的员工记录
-- 相关子查询
-- 笔试题正确答案: 在解决实际问题中mysql不能执行,oracle可以执行
--
delete from emp2 t1
where t1.sal >(select avg(sal)
from emp2 t2
where t2.deptno=t1.deptno )
-- 用java解决实际问题时
-- 先求出部门的平均工资和部门编号
(select avg(sal) avgsal,deptno
from emp2
group by deptno) t1
-- 查询员工的部门编号
select deptno from emp where ename='SMITH'
-- 20部门的平均工资
select avgsal from (select avg(sal) avgsal,deptno
from emp2
group by deptno) t1
where t1.deptno=20
-- 判断当前员工 sal是否大于 2175
select count(*) from emp where sal>100 and ename='SMITH'
-- 1可以删 0 不能删
-- 根据判断结果进行数据删除
delete from emp2 where ename='SMITH'