推薦學習:《》
在關聯式資料庫中,資料分佈在多個邏輯表。想要獲得完整有意義的資料集,則需要使用連線來查詢這些表中的資料。SQL Server中支援多種連線,包括內連線、左連線、右連線、交叉連線和全外連線。
一、內連線
內部連線子句用於查詢來自兩個或多個相關表的資料。INNER JOIN 子句的語法:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id
注意:要查詢的欄位,必須要在欄位的前面加上表名或者表的別名,如:p.product_name
其中FROM後面的是主表,然後 INNER JOIN 後面的表是要連線的表。主表和連線表進行比較,查 找滿足的條件的所有行。連線謂詞的計算結果為true是,則將主表和連線表進行合併成新的結果 集,如下圖所示:
內連線的多個表連線,如下所示:
SELECT p.product_name, p.list_price ,c.category_name, b.brand_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id INNER JOIN production.brands b ON b.brand_id = p.brand_id
二、左連線
在左連線中使用 LEFT JOIN 子句用於查詢來自多個表的資料,它返回是左表中的所有行和右表中匹配行。若是右表中找不到匹配行,則使用NULL代替顯示,如圖所示:
使用 LEFT JOIN 語句進行連線:如下所示:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p LEFT JOIN production.categories c ON c.category_id = p.category_id
在上面的語法中 FROM 後面的表是左表(production.products),而 LEFT JOIN 後面緊跟的右 表(production.categories)。
三、右連線
在右連線中使用RIGHT JOIN子句來進行兩個表或多個表進行查詢。右查詢剛好與左查詢的是相反 的,返回右表的所有行和左表的匹配行,若左表找不到匹配行,則返回NULL代替顯示,如圖所示:
使用 RIGHT JOIN 語句進行連線:如下所示:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p RIGHT JOIN production.categories c ON c.category_id = p.category_id
在上面的語法中 FROM 後面的表是左表(production.products),而 RIGHT JOIN 後面緊跟的右 表(production.categories)。
四、交叉連線
CROSS JOIN 連線兩個或多個不相關的表。 以下是兩個表的CROSS JOIN 的語法,兩種寫法:
SELECT T1.select_list FROM T1 CROSS JOIN T2;
或者
SELECT T1.select_list FROM T1, T2;
CROSS JOIN 將第一個表(T1)中的每一行與第二個表(T2)中的每一行連線起來。 換句話說,交叉連 接返回兩個表中行的笛卡爾積。與INNER JOIN或LEFT JOIN不同,交叉連線不會在連線的表之間 建立關係。
假設 T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。 CROSS JOIN 從第一個 表(T1)獲取一行,然後為第二個表(T2)中的每一行建立一個新行。 然後它對 第一個 表(T1)中的 下一行執行相同操作,依此類推。在此圖中, CROSS JOIN 總共建立了 9 行。
五、自連線
自聯接用於將表連線到自身(同一個表)。 它對於查詢分層資料或比較同一個表中的行很有用。
自聯接使用內連線或左連線子句。 由於使用自聯接的查詢參照同一個表,因此表別名用於為查詢 中的表分配不同的名稱。
注意:如果在不使用表別名的情況下在查詢中多次參照同一個表,則會出現錯誤。
範例:
SELECT t1.select_list FROM T1 t1INNER JOIN T1 t2 ON t1.category_id = t2.category_id
在 INNER JOIN 這裡可以使用其他的子句,比如:LEFT JOIN ,RIGHT JOIN
六、全外連線
FULL OUTER JOIN當左表或右表中存在匹配項時,該命令將返回所有行。如圖所示:
使用 FULL OUTER JOIN 查詢 pm.projects 表和 pm.member 表中的資料:
SELECT m.name member, p.title project FROM pm.members m FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
pm.projects 表資料:
pm.member 表資料:
查詢結果:
推薦學習:《》
以上就是一起聊聊SQL的表連線的詳細內容,更多請關注TW511.COM其它相關文章!