連線是多表查詢的基礎。
因為關聯式資料庫不包括指標或其它關聯記錄與記錄的機制,連線成為了生成跨表資料關係的唯一機制。
這也就是要用連線的原因。
1、內連線
使用比較運算子比較被連線列的列值。
等值——"="
不等——"="以外運算子
自然——"=",但它使用選擇列表指出查詢結果集合中所包含的列。並刪除連線表中的反覆列。
演示樣例:
資料庫中的兩張表分別為dbo.staff和dbo.province.
注:dbo.staff表中的主鍵為code。dbo.province表中的namecode即為第一張表的主鍵。
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 連線查詢
集合操作 並集 union all 合併集合 select tt1,tt2,tt3 from test1 union all select from test2 union 合併集合且去重複 select tt1,tt2,tt3 from test1 union select from test2 ...
nodejs高階 6 連線MySQL資料庫
連線mysql資料庫需要安裝支援 npm install mysql 我們需要提前安裝按mysql sever端 建乙個資料庫mydb1 mysql create database mydb1 mysql show databases database information schema mysq...
VB6 連線MySql資料庫
目測 vb6 的資料比較少了,花了好久時間寫了個查詢語句 dim cn as newadodb.connection dim rs as newadodb.recordset 定義資料庫連線字串變數 dim strcn as string 定義資料庫連線引數變數 dim db host as str...