1. 程式人生 > >再看數據庫——(6)連接

再看數據庫——(6)連接

style 連接 post 匹配 兩個 rom data- span 笛卡爾積

簡單介紹:

連接是多表查詢的基礎。

因為關系數據庫不包括指針或其它關聯記錄與記錄的機制,連接成為了生成跨表數據關系的唯一機制。

這也就是要用連接的原因。

分類:

1、內連接

使用比較運算符比較被連接列的列值。

等值——"="

不等——"="以外運算符

自然——"=",但它使用選擇列表指出查詢結果集合中所包含的列。並刪除連接表中的反復列。

演示樣例:

數據庫中的兩張表分別為dbo.Staff和dbo.Province.

註:dbo.Staff表中的主鍵為Code。dbo.Province表中的NameCode即為第一張表的主鍵。

dbo.Staff

技術分享

dbo.Province

技術分享

SELECT * FROM dbo.Staff,dbo.Province_Staff WHERE dbo.Staff.Code=dbo.Province_Staff.NameCode


使用別名為

SELECT * FROM dbo.Staff AS s,dbo.Province_Staff AS p WHERE s.Code=p.NameCode

等價於

SELECT * FROM dbo.Staff AS s INNER JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


顯示結果:

技術分享

內連接時,假設被連接的表不包括被匹配的記錄。有可能丟失信息。


2、外連接

查到的結果集合中包括了符合連接條件的行。也包括連接中的全部行

左外連接(也叫左關聯):

演示樣例:

SELECT * FROM dbo.Staff AS s LEFT JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


顯示結果:
技術分享


對照圖中的兩個表。左外連接是以左邊的表(dbo.Staff)為基準。補充右表的內容,假設沒有對應的匹配項,則顯示為NULL

右外連接

演示樣例:

SELECT * FROM dbo.Staff AS s RIGHT JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


顯示結果:
技術分享

全外連接

演示樣例:

SELECT * FROM dbo.Staff AS s FULL OUTER JOIN dbo.Province_Staff AS p ON s.Code=p.NameCode


顯示結果:
技術分享

運行時中先以Dbo.Staff表進行左外連接。然後以dbo.Province_Staff表進行右外連接。


3、交叉連接

演示樣例:

select *from dbo.Staff as s CROSS Join dbo.Province_Staff as pOrder by s.Code


顯示結果:
技術分享

先按dbo.staff表的Code排序,要Join的右表無條件拼接過來。這樣依次運行,這樣這樣的記錄便為兩個表的記錄的笛卡爾積。

總結:

在使用多表查詢時,也能夠不用連接查詢,那就須要用大量的where...and語句來取代。連接查詢有長處,也有缺點。

長處是SQL語句的可讀性好,易於維護和擴展。

缺點是相比之下,查詢效率比較低。當然,也有非常多人提出改善連接查詢效率的辦法,這就由開發者依據需求做出選擇。

再看數據庫——(6)連接