再看數據庫——(6)連接
簡單介紹:
連接是多表查詢的基礎。
因為關系數據庫不包括指針或其它關聯記錄與記錄的機制,連接成為了生成跨表數據關系的唯一機制。
這也就是要用連接的原因。
分類:
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)連接