MySQL 员工信息查询

单表查询 

目录

单表查询 

 多表查询


SELECT * FROM emp;

-- 需求:查询出工资高于500或者岗位为MANAGER的员工,同时还要满足他们的姓名的首字母为大写的J的数据.
SELECT * FROM emp WHERE (SAL >= 500 or JOB='MANAGER') and ENAME like 'J%';


-- 需求:按照工资的从低到高的顺序显示员工信息。
SELECT * FROM emp order by SAL asc;

-- 需求:按照部门号升序,员工的工资按降序排序。
SELECT * FROM emp ORDER BY DEPTNO ASC,SAL desc;
 
-- 需求:查询员工的年薪,并以年薪进行升序排序。
select empno,ename,sal,comm,(sal+ifnull(comm,0))*12 as nx from emp ORDER BY nx;


-- 显示工资最高的员工的姓名,工作,工资。
select max(sal) from emp;
select ename,job,sal from emp WHERE sal=(select max(sal) from emp);

-- 显示工资高于平均工资的员工信息
select ename,job,sal from emp WHERE sal>(select avg(sal) from emp);

-- 每个部门的平均工资和最高工资。
select deptno,avg(sal),max(sal) from emp GROUP BY DEPTNO;
 
-- 每个部门的每种岗位的平均工资和最低工资。
select deptno,job,avg(sal),min(sal) from emp GROUP BY DEPTNO,job;

-- 按部门编号进行分组,平均工资低于2000的部门号和他的平均工资。
select deptno,avg(sal) from emp GROUP BY DEPTNO having avg(sal)<2000;

-- 如何显示工资比部门编号30的所有员工的工资高的员工的姓名,工资,部门号
select max(sal) from emp where deptno=30

select * from emp where sal > (select max(sal) from emp where deptno=30)

														-- > all(集合) 你查询的值是比集合中所有的值都大的。
select * from emp where sal > all(select sal from emp where deptno=30)

-- 
-- 
-- 如何显示工资比部门编号30的任意员工的工资高的员工的姓名,工资,部门号

select * from emp where sal > (select min(sal) from emp where deptno=30)
-- 
-- 
	                           -- > any(集合) 你查询的值是比集合中任意一个值都大的。

select * from emp where sal > any(select sal from emp where deptno=30)




 多表查询

-- 两个表 查询

/*
	select 列名1,列名2.......
  from 表1
	[cross left right ]join 表2
  on 连接的条件  表1.字段名=表2.字段名
  and 查询条件
	join 表3
  on 连接的条件  表1.字段名=表3.字段名
  where 查询条件
  group by ....
  having .....
  order by .....
  .......
*/

-- 交叉连接  两种表进行连接  一张表的每一条数据去跟另一张的表每一条数据进行连接  结果:笛卡尔乘积   5*4=20
select e.*,d.* from emp e
cross join dept  d

-- 多表查询  
-- 查询的字段来源于多张表  emp:员工编号、姓名、工种、工资、部门编号  dept:部门名称
-- 查询员工信息(员工编号、姓名、工种、工资、部门编号、部门名称)
-- 部门表和员工表: 一个部门下有多个员工  一个员工只能属于一个部门  部门:员工:1:n

-- select ...... from 表名 表别名  [inner] join  表名  表别名  on 连接条件  ...... 内连接 返回的数据必须满足on后面的连接条件 
select e.*,d.dname from emp e
join dept  d
on e.deptno = d.deptno
order by e.empno

-- 我要查询所有员工 即使没有部门编号也要把数据显示出来  
-- 外连接  左[外]连接  右[外]连接  全[外]连接
-- select ...... from 表名 表别名   left/right/full  [outer] join  表名  表别名  on 连接条件  ...... 
-- 外连接结果  主表  left join 前面表为主表    副表  left join后面的表为副表
-- 外连接结果:内连接结果+主表中不满足on条件的数据显示出来, 查询的字段 只要不是主表的字段都显示null值。

-- 左连接
select e.*,d.dname from emp e
left join dept  d
on e.deptno = d.deptno
order by e.empno

-- 右连接 主表  right join后面的表为表表    副表   right join 前面表为副表
-- 外连接结果:内连接结果+主表中不满足on条件的数据显示出来, 查询的字段 只要不是主表的字段都显示null值。
select e.*,d.dname from emp e
right join dept  d
on e.deptno = d.deptno
order by e.empno

-- 全连接  full outer join  mysql不支持该语法
-- 外连接结果:内连接结果+两种表中不满足on条件的数据显示出来, 查询的字段 只要不是主表的字段都显示null值。
-- UNION 查询结果的并集 去重复合并数据
-- UNION  all 不去重复合并数据
select * from (select e.*,d.dname from emp e
left join dept  d
on e.deptno = d.deptno
UNION  all
select e.*,d.dname from emp e
right join dept  d
on e.deptno = d.deptno) tab 
order by tab.sal


select e.*,d.dname from emp e
full outer join dept  d
on e.deptno = d.deptno



-- 查询所有员工,并显示员工工资的等级
SELECT e.*,sg.GRADE from emp e
join salgrade sg
ON e.sal>=sg.LOSAL and sg.hisal>e.sal
ORDER BY sg.GRADE

-- 返回工资处于第四级别的员工的姓名。

-- 方法一 子查询
SELECT tab.* FROM (SELECT e.*,sg.GRADE from emp e
join salgrade sg
ON e.sal>=sg.LOSAL and sg.hisal>e.sal) tab
WHERE tab.grade=4

-- 方法二 推荐
SELECT e.*,sg.GRADE from emp e
join salgrade sg
ON e.sal>=sg.LOSAL and sg.hisal>e.sal AND sg.grade=4



-- 返回工资为二等级的职员名字、部门所在地、和二等级的最低工资和最高工资
SELECT e.ename,sg.grade,d.loc,MAX(sal),MIN(sal) from emp e
-- 返回工资为二等级的职员名字
JOIN salgrade sg
ON e.sal>=sg.LOSAL and sg.hisal>e.sal AND sg.grade=2
-- 返回部门所在地
left JOIN dept d
on e.deptno=d.deptno
-- 二等级的最低工资和最高工资
GROUP BY sg.grade


-- 工资等级多于smith的员工信息。
SELECT e.*,sg.grade FROM emp e 
JOIN salgrade sg
ON e.sal>=sg.losal and sg.hisal >= e.sal and sg.grade>(
SELECT sg.grade FROM emp e
JOIN salgrade sg
ON e.sal>=sg.losal and sg.hisal >= e.sal
WHERE e.ename ='SMITH'
)
ORDER BY sg.grade

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值