SQL的幾種連接:內連接、左連接、右連接、全連接、交叉連接

這篇文章專門爲小女友寫的,我們家羅妹子測試一枚,可能最近在現在的公司呆着不爽就想換工作,在面試的幾家公司都有問數據庫方面的知識或筆試題,可是我家妹子在他們公司都是用navicat管理工具查數據的,基本上也不會寫SQL語句,所以在接下來的面試基本都沒有拿到 offer,妹子面試了幾天可鬱悶壞了,最後讓我教他基本的SQL語句,ε=(´ο`*)))唉….我只想說現在沒有幾把刷子連測試的工作都不好找了,作爲一個高質量的男票外加一枚程序員的我只能敗在她的石榴裙下了,哈哈….此處省略一萬字……..


準備工作(數據庫表)

這裏先準備兩張表 Agent:代理商標 Sales:銷售人員表
Agent:代理商標  Sales:銷售人員表


運算符

等值連接:在連接條件中使用等於號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重複列。
不等值連接:在連接條件使用除等於運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!<和<>。
自然連接:在連接條件中使用等於(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,並刪除連接表中的重複列。


內連接( inner join )

內連接也叫連接,是最早的一種連接。還可以被稱爲普通連接或者自然連接,內連接是從結果表中刪除與其他被連接表中沒有匹配行的所有行,所以內連接可能會丟失信息。

第一種SQL語句:SELECT * FROM Agent AS a , Sales AS s WHERE a.A# = s.A#
第二種SQL語句:SELECT * FROM Agent AS a INNER JOIN Sales AS s ON a.A# = s.A#
第三種SQL語句:SELECT * FROM Agent AS a JOIN Sales AS s ON a.A# = s.A#
其連接結果如下圖,是按照a.A#= s.A#進行連接。
內連接執行結果


外連接

左連接( left join )

全稱是 左外連接(left outer join),是外連接中的一種。left join是以A表的記錄爲基礎的,A可以看成左表,B可以看成右表,left join是以左表爲準的。換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中爲: A.aID = B.bID)。B表記錄不足的地方均爲null。

SQL語句:SELECT * FROM Agent AS a LEFT JOIN Sales AS s ON a.A# = s.A#
其連接結果如下圖,是按照a.A#= s.A#進行連接。
左連接執行結果

右連接( right join )

全稱是 右外連接(right outer join) ,是以B表的記錄爲基礎的,A可以看成左表,B可以看成右表,right join是以右表爲準的。換句話說,右表(B)的記錄將會全部表示出來,而左表(A)只會顯示符合搜索條件的記錄(例子中爲: A.aID = B.bID)。A表記錄不足的地方均爲null。

SQL語句:SELECT * FROM Agent AS a RIGHT JOIN Sales AS s ON a.A# = s.A#
其連接結果如下圖,是按照a.A#= s.A#進行連接。
右連接執行結果

全連接 ( full join )

存在匹配,匹配顯示;同時,將各個表中不匹配的數據與空數據行匹配進行顯示。可以看成是左外連接與右外連接的並集。full join 關鍵字會從左表 (Persons) 和右表 (Orders) 那裏返回所有的行。如果 “Persons” 中的行在表 “Orders” 中沒有匹配,或者如果 “Orders” 中的行在表 “Persons” 中沒有匹配,這些行同樣會列出。

SQL語句:SELECT * FROM Agent AS a FULL JOIN Sales AS s ON a.A# = s.A#
其連接結果如下圖,是按照a.A#= s.A#進行連接。
全連接執行結果


交叉聯接( cross join )

交叉聯接也稱作笛卡爾集,返回的記錄數爲兩個表的記錄數乘積,將A表的所有行分別與B表的所有行進行連接。

SQL語句:SELECT * FROM Agent AS a CROSS JOIN Sales AS s
其連接結果如下圖,是按照a.A#= s.A#進行連接。
交叉聯接執行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章