第六章 多表連接

多表連接初步

引出

?思考如下問題筏养?

–寫一條查詢語(yǔ)句寻咒,查詢員工姓名谭胚、部門名稱徐块、工作地點(diǎn)?

寫一個(gè)查詢顯示員工姓名 員工編號(hào) 部門名稱 地址

笛卡爾積

selectemp.ename,emp.empno,emp.deptno,dept.deptno,dept.dname

from emp,dept

order by ename

--上述情況叫笛卡爾積現(xiàn)象

等值連接

利用關(guān)聯(lián)連接相等漏選掉多余數(shù)據(jù)

--多表連接實(shí)際上是利用意義相同的字段相同來漏選掉多余數(shù)據(jù)

select ename,empno,dname

from emp,dept

where emp.deptno=dept.deptno

order by ename

限制歧義別名

用 表名.列名

selectename,empno,emp.deptno,dept.deptno,dname

from emp,dept

where emp.deptno=dept.deptno

order by ename

練習(xí)1:

?1.寫一個(gè)查詢灾而,顯示所有員工姓名胡控,部門編號(hào),部門名稱旁趟。

?2.寫一個(gè)查詢铜犬,顯示所有工作在CHICAGO并且獎(jiǎng)金不為空的員工姓名,工作地點(diǎn)轻庆,獎(jiǎng)金

SELECT ename,loc,comm

from emp,dept

where emp.DEPTNO=dept.DEPTNO

and loc='CHICAGO'

and comm is not null;

?3.寫一個(gè)查詢癣猾,顯示所有姓名中含有A字符的員工姓名,工作地點(diǎn)余爆。

SELECT ename,loc FROM emp,dept

WHERE emp.deptno=dept.deptno

and INSTR(ename,'a')>0;

SELECT ename,loc FROM emp,dept

WHERE emp.deptno=dept.deptno

and ename like '%A%';

表別名

可以為表定義別名,上面的語(yǔ)句可以精簡(jiǎn)為:

兩種寫法 tablename as 別名 |tablename 別名

SELECT ename,loc,e.deptno

FROM emp as e,dept as d

WHERE e.deptno=d.deptno

and ename like '%A%';

多于兩個(gè)表的連接及非等值連接

查詢員工編號(hào)纷宇,員工姓名,工作崗位名稱蛾方,工作地點(diǎn)像捶,月工資,薪資等級(jí)

select e.empno,e.ename,e.job,d.LOC,e.sal,s.GRADE

from emp e,dept d,salgrade s

where e.deptno=d.DEPTNO

and e.sal BETWEEN s.LOSAL and s.HISAL;

多表連接的寫法

1桩砰、分析查詢結(jié)果都來自哪些表 產(chǎn)生from子句

2拓春、分析表之間的關(guān)聯(lián)條件 產(chǎn)生where子句(注意重復(fù)字段問題)

如果還有其他的限制條件上,就繼續(xù)向where子句中追加

3亚隅、如果涉及排序的硼莽,把order by寫上

4、分析要顯示哪些字段 產(chǎn)生select語(yǔ)句

自身連接

?思考:查詢每個(gè)員工的姓名和直接上級(jí)姓名煮纵?(把自己分身懂鸵,利用表別名)

查詢每個(gè)員工的姓名和直接上級(jí)姓名剪勿?

這種自已跟自己連接的寫法叫自身連接

select e.ename 員工姓名,m.ENAME 主管姓名

from emp e,emp m

where e.mgr=m.empno;

sql99寫法

美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)的SQL:1999標(biāo)準(zhǔn)的連接語(yǔ)法藕咏。

交叉連接(笛卡爾積)

select e.,d.

from emp e,dept d;

sql99寫法

select e.,d.

from emp e

cross join dept d;

例子:

a表 學(xué)生表(a,b,c,c)

b表 課程(java,oracle,jquery,c)

每個(gè)班的學(xué)生的選課系統(tǒng)

NATURAL JOIN 自然連接(了解,兩種寫法對(duì)比寫)

缺點(diǎn):無法控制用哪些字段連接衣撬。

兩個(gè)表里字段名相同的酿联,自動(dòng)加到連接條件里终息。

select e.,d.

from emp e,dept d

where e.deptno=d.deptno;

等價(jià)sql99寫法

select e.,d.

from emp e

NATURAL join dept d;

自然連接時(shí)是利用字段名稱和類型都相同的字段進(jìn)行連接夺巩。

用using子句(建議了解)

(可以控制用哪些字段進(jìn)行連接)

用using子句的寫法,指定用哪個(gè)字段將兩個(gè)表連接起來周崭。

select e.,d.

from emp e

join dept d using (deptno);

外連接(重點(diǎn)掌握)

引出:查詢所有員工的姓名及其主管姓名劲够,沒有主管的也要顯示出來

左外連接

(以左邊為基準(zhǔn),顯示左邊所有數(shù)據(jù)休傍,如果右邊沒有對(duì)應(yīng)數(shù)據(jù),就補(bǔ)充一個(gè)空數(shù)據(jù))

from emp e,emp m

查詢所有員工的姓名及其主管姓名蹲姐,沒有主管的也要顯示出來

select e.ENAME,m.ENAME

from emp e

LEFT OUTER JOIN emp m

on e.mgr=m.empno;

結(jié)果是:沒有主管的也能顯示出數(shù)據(jù)

右外連接

查詢所有雇員姓名磨取,部門編號(hào),部門名稱柴墩,包括沒有員工的部門也要顯示出來

select e.ENAME,d.DEPTNO,d.DNAME

from emp e

right join dept d

on e.deptno=d.deptno;

where連接條件注意事項(xiàng)

–在 WHERE子句中書寫連接條件忙厌。

–如果在多個(gè)表中出現(xiàn)相同的列名,則需要使用表名作為來自該表的列名的前綴江咳。

–N個(gè)表相連時(shí)逢净,至少需要N-1個(gè)連接條件。

練習(xí)4

?使用SQL-99寫法歼指,完成如下練習(xí)

?1.創(chuàng)建一個(gè)員工表和部門表的交叉連接爹土。

select e.,d.

from emp e cross join dept d;

2.使用自然連接,顯示入職日期在80年5月1日之后的員工姓名踩身,部門名稱胀茵,入職日期

select e.ENAME,d.DNAME,e.HIREDATE

from emp e

NATURAL join dept d

where e.hiredate>'1980-05-01';

作業(yè)

練習(xí)2

?1.查詢每個(gè)員工的編號(hào),姓名挟阻,工資琼娘,工資等級(jí),所在工作城市附鸽,按照工資等級(jí)進(jìn)行升序排序脱拼。

select empno,ename,sal,salgrade.grade,dept.loc

from emp,dept,salgrade

where emp.deptno=dept.deptno

and sal between losal and hisal

order by salgrade.grade

練習(xí)3

?1.查詢所有工作在NEW YORK和CHICAGO的員工姓名,員工編號(hào)坷备,以及他們的經(jīng)理姓名熄浓,經(jīng)理編號(hào)。

select e.ename,e.empno,m.ename,m.empno,loc

from emp e,emp m,dept d

where e.mgr = m.empno

and e.deptno=d.deptno

and (loc = 'NEW YORK' or loc = 'CHICAGO')

練習(xí)4

3.使用USING子句省撑,顯示工作在CHICAGO的員工姓名玉组,部門名稱,工作地點(diǎn)

select ename,dname,loc

from emp

join dept

using(deptno)

where loc = 'CHICAGO'

4.使用ON子句丁侄,顯示工作在CHICAGO的員工姓名惯雳,部門名稱,工作地點(diǎn)鸿摇,薪資等級(jí)

select ename,dname,loc,grade

from emp

join dept

on emp.deptno = dept.deptno

join salgrade

on sal between losal and hisal

where loc = 'CHICAGO'

5.使用左連接石景,查詢每個(gè)員工的姓名,經(jīng)理姓名,沒有經(jīng)理的King也要顯示出來潮孽。

select e.ename,m.ename

from emp e

left join emp m

on e.mgr = m.empno

?6.使用右連接揪荣,查詢每個(gè)員工的姓名,經(jīng)理姓名往史,沒有經(jīng)理的King也要顯示出來仗颈。

課后作業(yè)

3.顯示員工KING和FORD管理的員工姓名及其經(jīng)理姓名。

select e.empno,e.ename,m.ename

from emp e,emp m

where

(e.mgr=m.empno and e. mgr in(select empno from emp where ename in('KING','FORD') ))

or (e.mgr=m.empno and e.empno in(select mgr from emp where ename='FORD' ))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末椎例,一起剝皮案震驚了整個(gè)濱河市挨决,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌订歪,老刑警劉巖脖祈,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異刷晋,居然都是意外死亡盖高,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門眼虱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喻奥,“玉大人,你說我怎么就攤上這事捏悬∮车剩” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵邮破,是天一觀的道長(zhǎng)诈豌。 經(jīng)常有香客問我,道長(zhǎng)抒和,這世上最難降的妖魔是什么矫渔? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮摧莽,結(jié)果婚禮上庙洼,老公的妹妹穿的比我還像新娘。我一直安慰自己镊辕,他們只是感情好油够,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著征懈,像睡著了一般石咬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卖哎,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天鬼悠,我揣著相機(jī)與錄音删性,去河邊找鬼。 笑死焕窝,一個(gè)胖子當(dāng)著我的面吹牛蹬挺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播它掂,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼巴帮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了虐秋?” 一聲冷哼從身側(cè)響起榕茧,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熟妓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栏尚,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡起愈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了译仗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抬虽。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纵菌,靈堂內(nèi)的尸體忽然破棺而出阐污,到底是詐尸還是另有隱情,我是刑警寧澤咱圆,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布笛辟,位于F島的核電站,受9級(jí)特大地震影響序苏,放射性物質(zhì)發(fā)生泄漏手幢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一忱详、第九天 我趴在偏房一處隱蔽的房頂上張望围来。 院中可真熱鬧,春花似錦匈睁、人聲如沸监透。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)胀蛮。三九已至,卻和暖如春糯钙,著一層夾襖步出監(jiān)牢的瞬間醇滥,已是汗流浹背黎比。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸳玩,地道東北人阅虫。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像不跟,于是被迫代替她去往敵國(guó)和親颓帝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容