17/12/5多表連接
join on 語句
select * from emp
join dept on emp.deptno = dept.deptno
1.on將連接條件和其他檢索條件分割開,其它檢索條件寫在WHERE字句立砸。
2.提高代碼的可讀性。
外連接
-右外連接:以右邊的表為主初茶,右表內(nèi)容全部保留颗祝。
select emp.ename, dept.deptno
from emp right join dept on emp.deptno = dept.deptno
-左外連接同理。
-全外連接(full join): 左右兩個(gè)表都為主恼布,兩表內(nèi)容全部顯示出來吐葵。
自身連接
列:查詢所有員工的上級。
select worker.ename|'的上級是'| manager.ename
from emp worker
join emp manager on woker.mgr = manager.empno
擴(kuò)展:多表連接可以在2個(gè)表或者多個(gè)表之間進(jìn)行桥氏。
練習(xí):
1.使用ON子句,顯示工作在CHICAGO的員工姓名猛铅,部門名稱字支,工作地點(diǎn)。
SELECT EMP.ENAME, DEPT.DNAME, DEPT.LOC, SALGRADE.GRADE
FROM EMP
join DEPT on EMP.DEPTNO = DEPT.DEPTNO
join SALGRADE on EMP.sal BETWEEN losal AND hisal
WHERE DEPT.LOC in ('CHICAGO')
2.使用左連接奸忽,查詢每個(gè)員工的姓名堕伪,經(jīng)理姓名,沒有經(jīng)理的KING也要顯示出來栗菜。
select woker.ename, manager.ename
from emp woker
left join emp manager on woker.mgr = manager.empno
3.使用右連接欠雌,查詢每個(gè)員工的姓名,經(jīng)理姓名疙筹,沒有經(jīng)理的KING也要顯示出來富俄。
? ? ?同理(略)
4.顯示員工SMITH的姓名,部門名稱而咆,直接上級名稱霍比。
SELECT WOKER.ename, DEPT.DNAME, manager.ename
FROM emp woker
join dept ON woker.deptno = dept.deptno
join emp manager ON woker.mgr = manager.empno
WHERE woker.ename in ('SMITH')
5.顯示員工姓名,部門名稱暴备,工資悠瞬,工資級別,要求工資級別大于4.
SELECT EMP.ENAME, DEPT.DNAME, EMP.SAL, SALGRADE.GRADE
FROM EMP
join SALGRADE ON EMP.SAL BETWEEN LOSAL and HISAL
join DEPT ON DEPT.deptno = EMP.deptno
WHERE SALGRADE.GRADE > 4
6.顯示員工KING和FORD管理的員工姓名及其經(jīng)理姓名涯捻。
SELECT emp.ENAME, MANAGER.ENAME, woker.ename
FROM EMP
LEFT JOIN EMP manager ON MANAGER.empno = EMP.mgr
LEFT JOIN EMP woker ON woker.mgr = EMP.empno
WHERE EMP.ENAME in ('KING', 'FORD')
7.顯示員工姓名浅妆,參加工作時(shí)間,經(jīng)理名障癌,參加工作時(shí)間凌外,要求參加工作時(shí)間比經(jīng)理早。
select woker.ename, woker.hiredate, manager.ename, manager.hiredate
from emp woker
join emp manager on woker.mgr = manager.empno
where woker.hiredate < manager.hiredate