#要多練練
1.連接查詢根據連接方式分為
內連接
等值連接
非等值連接
自連接
外連接
左外連接(左連接)
右外連接(右連接)
當多張表進行連接查詢,若沒有任何條件進行限制,會
發生什么現象?
會出現笛卡爾積,即兩張表的記錄的條數的乘積
##哪里用as?為什么這里不能用as?
#sql92:內連接中的等值連接
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
#SQL99:內連接中的等值連接,優點:對表連接不滿意的話,
#可以再追加where進行過濾。
select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;
#SQL99:內連接中的非等值連接?
#eg:顯示薪水等級、部門名、薪水等
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
#找出每個員工的上級領導的名稱,說明領導也從屬於員工表,所以要
#把一張表看成兩張表(a、b兩張表)。
select a.ename empname,b.ename leadrname from emp a inner join emp b on a.mgr=b.empno; select a.ename empname,b.ename leadername from emp a join emp b on a.mgr=b.empno;
#找出每個員工對應的部門名稱,要求顯示全部
#部門名全部顯示
select e.ename,d.dname from emp e right join dept d on d.deptno=d.deptno;
#什么時候用外連接?什么時候用內連接?
#內連接的記錄條數小於等於外連接,內連接
#是會顯示相匹配的信息,對於不完整的信息不會顯示
#而外連接(無條件的全部顯示)是會對全部進行顯示的
#左連接是將左邊全部顯示出來,而右連接是將右邊全部
#顯示出來,若無記錄則用null來匹配
#案例:找出每個員工對應的領導名,要求顯示
#所有的員工
select a.ename empname,b.ename leadername from emp a left join emp b on a.mgr=b.empno;
#把一張表看成a、b兩張表
#案例:找出每一個員工對應的部門名稱,以及
#該員工對應的工資等級。要求顯示員工名、部門
#名、工資等級
#多張表進行連接的語法格式:
select
XXX
from
a
join
b
on
條件
join
c
on
條件;
原理:a和b連接,再用a和c連接。
select e.ename,d.dname,s.grade from emp e join dept d on e.deptno=d.deptno; join salgrade s on e.sal between s.losal and s.hisal;