热线电话:13121318867

登录
2022-10-31 阅读量: 466
mysql学习15-多表查询练习

#第三大部分

-- 多表查询练习

create table salgrade(grade int,losal int,hisal int);

insert into salgrade values(1,700,1200),

(2,1201,1400),

(3,1401,2000),

(4,2001,3000),

(5,3001,9999);

use test2;

select * from salgrade;-- 5

select * from emp;-- 14

select * from dept;-- 4


-- 26查询每位员工的ename,dname,sal

#1, 左连接

select *

from emp e left join dept d on e.deptno=d.deptno;

#2,用想要的字段放在原来的星号处

select ename 员工姓名,dname 部门名称,sal 工资

from emp e left join dept d on e.deptno=d.deptno;


-- 27 查询各地区的员工数(统计每个地区,没有员工计为0)

#1 确定来自那俩个表, from emp e left join dept d

#2 要的字段 地区 ,员工数 count(empno)

#3 各地区要group by分组

select loc 地区, count(ename) from emp

left join dept on emp.deptno=dept.deptno

group by loc ;


-- 28 查询manager的姓名、所属部门名称和入职日期:ename,dname,job,hiredate(内连接/笛卡尔积连接)

#内连接

select ename 姓名,job 职位, dname 部门名称 ,hiredate 入职日期

from emp e inner join dept d on e.deptno=d.deptno

where job="manager";

-- 29 查询所有员工姓名及其直属领导姓名(自连接:通过别名,将同一张表视为多张表)

select * from emp;

#来自那两张表的连接结果集,emp表连接emp表

#自连接 (同一性质的字段就可以连接)

select * from emp as emp1 left join emp as emp2 on emp1.mgr=emp2.empno;

#取出我们要的字段

select emp1.ename 员工姓名 , emp2.ename 领导姓名 from emp as emp1 left join emp as emp2 on emp1.mgr=emp2.empno;



-- 30 查询入职日期早于其直属领导的员工姓名及其所属部门名称:empno,ename,dname (两张以上的多表连接)

#1,先解决 查询入职日期早于其直属领导的员工姓名,涉及emp1和emp2

select emp1.ename 员工姓名, emp2.ename 领导姓名

from emp as emp1

left join emp as emp2 on emp1.mgr=emp2.empno

where emp1.hiredate < emp2.hiredate;

#2,再解决 及其所属部门名称 ,涉及到dept表

select emp1.ename 员工姓名, emp2.ename 领导姓名, dept.dname 部门名称

from emp as emp1

left join emp as emp2 on emp1.mgr=emp2.empno

left join dept on emp1.deptno=dept.deptno;


0.0000
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子