1. 程式人生 > >圖解SQL的各種連線(Inner join,outer join,left join,right join)

圖解SQL的各種連線(Inner join,outer join,left join,right join)

      由於 SQL Join 似乎被預設為基礎,同時利用 ‘文氏圖表’ 解釋它,乍一看似乎是很自然的選擇。然而,就像文章下面說的,我也發現在實際測試中,文氏圖並沒有完全符合SQL Join 語法。


     通過圖文並茂的方式對SQL的Join進行簡單的介紹:join大致分為以下七種情況:


1準備資料

  1. DROP TABLE [dbo].[test_a]  
  2. GO  
  3. CREATE TABLE [dbo].[test_a] (  
  4. [id] int NULL ,  
  5. [name] varchar(255) NULL   
  6. )  
  7. GO  
  8. -- ----------------------------  
  9. -- Records of test_a  
  10. -- ----------------------------  
  11. INSERT INTO [dbo].[test_a] ([id], [name]) VALUES (N'1', N'蘋果')  
  12. GO  
  13. GO  
  14. INSERT INTO [dbo].[test_a] ([id], [name]) VALUES (N'2', N'橘子')  
  15. GO  
  16. GO  
  17. INSERT INTO [dbo].[test_a] ([id], [name]) VALUES (N'3', N'菠蘿')  
  18. GO  
  19. GO  
  20. INSERT INTO [dbo].[test_a] ([id], [name]) VALUES (N'4'
    , N'香蕉')  
  21. GO  
  22. GO  
  23. INSERT INTO [dbo].[test_a] ([id], [name]) VALUES (N'5', N'西瓜')  
  24. GO  
  25. GO  
  26. -----------------------------------------------------------  
  27. DROP TABLE [dbo].[test_b]  
  28. GO  
  29. CREATE TABLE [dbo].[test_b] (  
  30. [id] int NULL ,  
  31. [name] varchar(255) NULL   
  32. )  
  33. GO  
  34. -- ----------------------------  
  35. -- Records of test_b  
  36. -- ----------------------------  
  37. INSERT INTO [dbo].[test_b] ([id], [name]) VALUES (N'1', N'梨子')  
  38. GO  
  39. GO  
  40. INSERT INTO [dbo].[test_b] ([id], [name]) VALUES (N'2', N'蘋果')  
  41. GO  
  42. GO  
  43. INSERT INTO [dbo].[test_b] ([id], [name]) VALUES (N'3', N'草莓')  
  44. GO  
  45. GO  
  46. INSERT INTO [dbo].[test_b] ([id], [name]) VALUES (N'4', N'桃子')  
  47. GO  
  48. GO  
  49. INSERT INTO [dbo].[test_b] ([id], [name]) VALUES (N'5', N'香蕉')  
  50. GO  
  51. GO   
2示例介紹

A.Inner join

產生A和B的交集。

  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. INNER JOIN test_b ON test_a.name = test_b.name   
222

B. Full outer join

產生A和B的並集。對於沒有匹配的記錄,則以null做為值。
  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. FULL OUTER JOIN test_b ON test_a.name = test_b.name   
222

C.Left outer join 

產生表A的完全集,而B表中匹配的則有值,沒匹配的以null值取代。
  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. LEFT OUTER JOIN test_b ON test_a.name = test_b.name   
222

D. Left outer join on where

產生在A表中有而在B表中沒有的集合。

  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. LEFT OUTER JOIN test_b ON test_a.name = test_b.name  
  6. WHERE  
  7.     test_b.name IS NULL   
222

E. RIGHT OUTER JOIN

產生表B的完全集,而A表中匹配的則有值,沒匹配的以null值取代。
  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. RIGHT OUTER JOIN test_b ON test_a.name = test_b.name   
222

F. right outer join on where

產生在B表中有而在A表中沒有的集合。
  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. RIGHT OUTER JOIN test_b ON test_a.name = test_b.name  
  6. WHERE  
  7.     test_a.name IS NULL   
222

G. FULL OUTER JOIN WHERE

產生(A表中有但B表沒有)和(B表中有但A表中沒有)的資料集。
  1. SELECT  
  2.     *  
  3. FROM  
  4.     test_a  
  5. FULL OUTER JOIN test_b ON test_a.name = test_b.name  
  6. WHERE  
  7.     test_a.name IS NULL  
  8. OR test_b.name IS NULL   
222

H. cross join

表A和表B的資料進行一個N*M的組合,即笛卡爾積(交差集)。一般來說,我們很少用到這個語法。因為這種集合的使用對於效能來說非常危險,尤其是表很大。這裡就不做介紹了…                                                            內容更新於:2017-02-17

相關推薦

圖解SQL各種連線(Inner join,outer join,left join,right join)

      由於 SQL Join 似乎被預設為基礎,同時利用 ‘文氏圖表’ 解釋它,乍一看似乎是很自然的選擇。然而,就像文章下面說的,我也發現在實際測試中,文氏圖並沒有完全符合SQL Join

MYSQL的各種連線(Inner join,outer join,left join,right join)

H. cross join表A和表B的資料進行一個N*M的組合,即笛卡爾積(交差集)。一般來說,我們很少用到這個語法。因為這種集合的使用對於效能來說非常危險,尤其是表很大。這裡就不做介紹了…例外的例子:一.先看一些最簡單的例子例子Table Aaid   adate 1      a1 2      a2 3

SQL各種Join語句(leftright、full、inner)的區別

iamlaosong文 實際工作中常常需要將多個表的查詢結果合成的一個查詢中,我一般採用join語句進行連線,用的最多的就是left join,這麼多join的差別是什麼呢?簡單的說就是最終結果以誰為

SQLINNERLEFTRIGHT JOIN的區別和用法詳解

相信很多人在剛開始使用資料庫的INNER JOIN、LEFT JOIN和RIGHT JOIN時,都不太能明確區分和正確使用這三種JOIN操作,本文通過一個簡單的例子通俗易懂的講解這三者的區別,希望對大家能帶來幫助。 首先,我們建立示例資料庫和表。同時也要明確一個概念:A INN

SQL各種連線(左連線、右連線、內連線、自連線、全連線

左連線、右連線、內連線、自連線、全連線 一、 左外連線也叫左連線(left outer join也可以簡寫為left join) 顯示左表的所有資料,然後根據條件與右表進行匹配,如果有匹配的就加在左表的後面,如果有多條匹配資料,則顯示多條。 沒有的話,該行的右表就

SQL各種連線查詢詳解(左連線、右連線..)

一、交叉連線(cross join) 交叉連線(cross join):有兩種,顯式的和隱式的,不帶on子句,返回的是兩表的乘積,也叫笛卡爾積。 例如:下面的語句1和語句2的結果是相同的。 語句1:隱式的交叉連線,沒有cross join。 select o.id, o.

inner join 各種連線 SQL語句

SQL INNER JOIN關鍵字表示在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。SQL INNER JOIN關鍵字表示在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。 1、連線兩個資料表的用法: FROM Member INNER JOIN MemberSort ON M

圖解SQL各種連線join

對於SQL的Join,在學習起來可能是比較亂的。我們知道,SQL的Join語法有很多inner的,有outer的,有left的,有時候,對於Select出來的結果集是什麼樣子有點不是很清楚。Coding Horror上有一篇文章(實在不清楚為什麼Coding Horr

SQL中的交叉連線(CROSS JOIN)、內連線(INNER JOIN)、外連線(OUTER JOIN)

1、交叉連線CROSS JOIN 如果不帶條件子句,交叉連線將會返回被連線的兩個表的笛卡爾積,返回結果的行數等於兩個錶行數的乘積; select  *from 表名 cross join  表名  on  條件表示式  2、內連線 INNER JOIN 內連線僅返回那些滿足連線條件的資料行。在內連線中,

SQLJOIN語法解析(inner join, left join, right join, full outer join的區別)

問題 至少 caption 左連接 右連接 class hole pty lock 總的來說,四種JOIN的使用/區別可以描述為: left join 會從左表(shop)那裏返回所有的記錄,即使在右表(sale_detail)中沒有匹配的行。 right oute

SQL Left Join, Right Join, Inner Join, and Natural Join 各種Join小結

在SQL語言中,存在著各種Join,有Left Join, Right Join, Inner Join, and Natural Join等,對於初學者來說肯定一頭霧水,都是神馬跟神馬啊,它們之間到底有著怎樣的區別和聯絡呢,我們先用一張圖片來說明:

sql多表操作-內連線inner join、外連線left/right (out) join和交叉連線

1 內連線、外連線和交叉連線的區別 內連線:匹配2個表中的相同欄位,沒有的不加入結果集。 外連線:匹配2個表中共有的欄位。分為3種: 左連線——以左邊的為基準,右表中沒有的(相同欄位值)為null; 右連線——以右邊的為基準,左表中沒有的為null;

SQL優化--使用內連線(inner join)代替外連線left join,right join)

避免 LEFT JOIN 和 NULL        當然,有很多時候您需要執行 LEFT JOIN 和使用 NULL 值。但是,它們並不適用於所有情況。改變 SQL 查詢的構建方式可能會產生將一個花幾分鐘執行的報告縮短到只花幾秒鐘這樣的天壤之別的效果。有時,必須在查詢中調

oracle中各種連線left join,right join,inner join)用法

left join:左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join :內連線,又叫等值連線,只返回兩個表中連線欄位相等的行。 full join:外連

SQL Server中的內連線(inner join)

目錄 零、碼仙勵志 不被嘲笑的夢想是沒有價值的。願你的夢想不只是空談的情懷,而是實幹的姿態 一、建庫和建表 create database scort use scort create table emp ( empno int primar

sql 各種 join的區別 left join,right join,inner join,full outter join

left join以左表為主,同時顯示左右表的內容,右表不存在的欄位顯示nullright join以右表為主,同時顯示兩個表的內容,左表不存在的欄位顯示nullinner join,只顯示符合條件的交

SQL joinleft joinright joininner joinouter join用法解析及HIVE join 優化

Sql程式碼   SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2)     join的快取和任務轉換 hive轉換多表join時,如果每個表在join字句中,使用的都是同

sql語句中left joinright joininner join的區別

select http img image ner -s style nbsp color left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄; right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄;inner j

SQL SERVER LEFT JOIN, INNER JOIN, RIGHT JOIN

技術 reat 至少 value com upper 左右 div server JOIN: 如果表中有至少一個匹配,則返回行 LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行 RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行 FULL JO

圖解SQLJoin(轉)

key dart width 通過 pre rom ros shell 取代 http://blog.csdn.net/xiao2004/article/details/6562435 原文地址:http://coolshell.cn/articles/3463.html