#第三大部分
-- 多表查詢練習(xí)
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 查詢各地區(qū)的員工數(shù)(統(tǒng)計每個地區(qū),沒有員工計為0)
#1 確定來自那倆個表, from emp e left join dept d
#2 要的字段 地區(qū) ,員工數(shù) count(empno)
#3 各地區(qū)要group by分組
select loc 地區(qū), count(ename) from emp
left join dept on emp.deptno=dept.deptno
group by loc ;
-- 28 查詢manager的姓名、所屬部門名稱和入職日期:ename,dname,job,hiredate(內(nèi)連接/笛卡爾積連接)
#內(nèi)連接
select ename 姓名,job 職位, dname 部門名稱 ,hiredate 入職日期
from emp e inner join dept d on e.deptno=d.deptno
where job="manager";
-- 29 查詢所有員工姓名及其直屬領(lǐng)導(dǎo)姓名(自連接:通過別名,將同一張表視為多張表)
select * from emp;
#來自那兩張表的連接結(jié)果集,emp表連接emp表
#自連接 (同一性質(zhì)的字段就可以連接)
select * from emp as emp1 left join emp as emp2 on emp1.mgr=emp2.empno;
#取出我們要的字段
select emp1.ename 員工姓名 , emp2.ename 領(lǐng)導(dǎo)姓名 from emp as emp1 left join emp as emp2 on emp1.mgr=emp2.empno;
-- 30 查詢?nèi)肼毴掌谠缬谄渲睂兕I(lǐng)導(dǎo)的員工姓名及其所屬部門名稱:empno,ename,dname (兩張以上的多表連接)
#1,先解決 查詢?nèi)肼毴掌谠缬谄渲睂兕I(lǐng)導(dǎo)的員工姓名,涉及emp1和emp2
select emp1.ename 員工姓名, emp2.ename 領(lǐng)導(dǎo)姓名
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 領(lǐng)導(dǎo)姓名, dept.dname 部門名稱
from emp as emp1
left join emp as emp2 on emp1.mgr=emp2.empno
left join dept on emp1.deptno=dept.deptno;








暫無數(shù)據(jù)