1. 程式人生 > >sql語法:inner join on, left join on, right join on詳細使用方法

sql語法:inner join on, left join on, right join on詳細使用方法

inner join(等值連線) 只返回兩個表中聯結欄位相等的行


left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄

right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄

INNER JOIN 語法:

INNER JOIN 連線兩個資料表的用法:


SELECT * FROM 表1 INNER JOIN 表2 ON 表1.欄位號=表2.欄位號

INNER JOIN 連線三個資料表的用法:


SELECT * FROM (表1 INNER JOIN 表2 ON 表1.欄位號=表2.欄位號) INNER JOIN 表3 ON 表1.欄位號=表3.欄位號

INNER JOIN 連線四個資料表的用法:


SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.欄位號=表2.欄位號) INNER JOIN 表3 ON 表1.欄位號=表3.欄位號) INNER JOIN

表4 ON Member.欄位號=表4.欄位號

INNER JOIN 連線五個資料表的用法:


SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.欄位號=表2.欄位號) INNER JOIN 表3 ON 表1.欄位號=表3.欄位號) INNER JOIN 表4 ON Member.欄位號=表4.欄位號) INNER JOIN 表5 ON Member.欄位號=表5.欄位號

連線六個資料表的用法:略,與上述聯接方法類似,大家舉一反三吧:)

注意事項:

在輸入字母過程中,一定要用英文半形標點符號,單詞之間留一半形空格;
在建立資料表時,如果一個表與多個表聯接,那麼這一個表中的欄位必須是“數字”資料型別,而多個表中的相同欄位必須是主鍵,而且是“自動編號”資料型別。否則,很難聯接成功。
程式碼巢狀快速方法:如,想連線五個表,則只要在連線四個表的程式碼上加一個前後括號(前括號加在FROM的後面,後括號加在程式碼的末尾即可),然後在後括號後面繼續新增“INNER JOIN 表名X ON 表1.欄位號=表X.欄位號”程式碼即可,這樣就可以無限聯接資料表了:)

1.理論

只要兩個表的公共欄位有匹配值,就將這兩個表中的記錄組合起來。

個人理解:以一個共同的欄位求兩個表中符合要求的交集,並將每個表符合要求的記錄以共同的欄位為牽引合併起來。

語法

select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2

INNER JOIN 操作包含以下部分:

部分 說明
 
table1, table2 要組合其中的記錄的表的名稱。
field1,field2 要聯接的欄位的名稱。如果它們不是數字,則這些欄位的資料型別必須相同,並且包含同類資料,但是,它們不必具有相同的名稱。
compopr
 
任何關係比較運算子:“=”、“<”、“>”、“<=”、“>=”或者“<>”。
     

說明

可以在任何 FROM 子句中使用 INNER JOIN 操作。這是最常用的聯接型別。只要兩個表的公共欄位上存在相匹配的值,Inner 聯接就會組合這些表中的記錄。

可以將 INNER JOIN 用於 Departments 及 Employees 表,以選擇出每個部門的所有僱員。而要選擇所有部分(即使某些部門中並沒有被分配僱員)或者所有僱員(即使某些僱員沒有分配到任何部門),則可以通過 LEFT JOIN 或者 RIGHT JOIN 操作來建立外部聯接。

如果試圖聯接包含備註或 OLE 物件資料的欄位,將發生錯誤。

可以聯接任何兩個相似型別的數字欄位。例如,可以聯接自動編號和長整型欄位,因為它們均是相似型別。然而,不能聯接單精度型和雙精度型型別欄位。

下例展示瞭如何通過 CategoryID 欄位聯接 Categories 和 Products 表:

SELECT CategoryName, ProductName

FROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID;

在前面的示例中,CategoryID 是被聯接欄位,但是它不包含在查詢輸出中,因為它不包含在 SELECT 語句中。若要包含被聯接欄位,請在 SELECT 語句中包含該欄位名,在本例中是指 Categories.CategoryID。

也可以在 JOIN 語句中連結多個 ON 子句,請使用如下語法:

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2 OR
ON table1.field3 compopr table2.field3;

也可以通過如下語法巢狀 JOIN 語句:

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

LEFT JOIN 或 RIGHT JOIN 可以巢狀在 INNER JOIN 之中,但是 INNER JOIN 不能巢狀於 LEFT JOIN 或 RIGHT JOIN 之中。


2.操作例項

表A記錄如下:
aID               aNum
1                  a20050111
2                  a20050112
3                  a20050113
4                  a20050114
5                  a20050115

表B記錄如下:
bID               bName
1                   2006032401
2                  2006032402
3                  2006032403
4                  2006032404
8                  2006032408


實驗如下:
1.left join

sql語句如下:
select * from A
left join B
on A.aID = B.bID

結果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
5                   a20050115                NULL              NULL
(所影響的行數為 5 行)

結果說明:
               left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜尋條件的記錄(例子中為: A.aID = B.bID).
B表記錄不足的地方均為NULL.

2.right join
sql語句如下:
select * from A
right join B
on A.aID = B.bID
結果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404
NULL           NULL                          8                     2006032408
(所影響的行數為 5 行)
結果說明:
        仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.


3.inner join
sql語句如下:
select * from A
innerjoin B
on A.aID = B.bID

結果如下:
aID               aNum                          bID                  bName
1                   a20050111                1                      2006032401
2                   a20050112                2                     2006032402
3                   a20050113                3                     2006032403
4                   a20050114                4                     2006032404

結果說明:
        很明顯,這裡只顯示出了 A.aID = B.bID的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.  還有就是inner join 可以結合where語句來使用 如:   select * from A innerjoin B on A.aID = B.bID where b.bname='2006032401' 這樣的話 就只會放回一條資料了

相關推薦

sql語法inner join on, left join on, right join on詳細使用方法

inner join(等值連線) 只返回兩個表中聯結欄位相等的行 left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄 INNER JOIN 語法: INN

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 on 多條件

left join on +多條件與where區別 點選下面的檢視原文 重點 先匹配,再篩選where條件。 本文將通過幾個例子說明兩者的差別。 表1:product id amount 1 100 2 200 3 300 4 400 表2:product_de

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

sqlleft joinright joininner join的區別

行數 觀察 返回 join 填充 顯示 字段 left join inner left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄inner join(等值連接)

sql 表的連接 inner join、full joinleft joinright join、natural join

名稱 cnblogs blog select語句 ble 組合 兩個 tro 左右 一、內連接-inner jion : SELECT * FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field

SQL夯實基礎(一)inner join、outer join和cross join的區別

創建 color varchar mage bubuko where 是你 cross http 一、數據構建 先建表,再說話 create database Test use Test create table A ( AID int identity(1

sqlleft joinright joininner join之間的區別

所有 eight mark 等值連接 tro inner sql font style sql中left join 、right join 、inner join之間的區別    left join (左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 ;  ri

sqlleft joinright joininner join的區別

sql語句 mage 分享 app bubuko 3.1 from wid http 1、數據庫 1.1、作者表 1.2、圖書表 1.3、出版社表 2、left join   left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄。 2.

SQLINNERLEFTRIGHT JOIN的區別和用法詳解

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

SQL文摘sql(joinon與where區別)

原文地址:https://www.cnblogs.com/wlzhang/p/4532587.html left join :左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join: 內連線

inner join on, left join on, right join on講解

inner join on, left join on, right join on講解 1.理論 只要兩個表的公共欄位有匹配值,就將這兩個表中的記錄組合起來。 個人理解:以一個共同的欄位求兩個表中符合要求的交集,並將每個表符合要求的記錄以共同的欄位為牽引合併起來。 語法 FROM table1 I

left join on後面 加條件和where後面加條件的區別 inner joinleft joinright join之間的區別

上一篇對三個join的語句做了一個區別,如果連最基礎的都不清楚,那麼請先參考:inner join 與 left join 和right join之間的區別 碰巧在專案中遇到了一個sql,是left join和where的條件限制的區別,想了好半天,這裡做一下筆記,萬一以後忘記了方便檢視。 話不多說,直接

sql inner join ,left join,right join 的區別

inner join 返回的是兩個表完全匹配的結果 如表tablea a :1,2,3,tableb b:4,5,6 select a.1,a.2,b.3 from tablea a inner join tableb b on a.1=b.2   left join

SQLLeft JoinRight JoinInner Join的使用

1、表結構 表A                                     表B 2、Left Join 示例:2.1 Select * From A left join B on A.aid = B.bid; left join是以A表

資料庫SQL查詢效率in、exists、left join onright join on 適用場景與比較

in 與 join例 select t1.id,sum(t1.num) from (select * from t2 where num =2) as t3 LEFT JOIN t1 on t3.id=t1.id GROUP BY t1.id; join 時間: 0.005

sql join 大彙總(inner join 內聯、full join 全連、 left join 左連、right join 右連 、cross join 交叉連以及union)

一、定義兩個表 ,結構如下 create table A (     id  nvarchar(50) null,     names nvarchar(50) null )  create table B (

sql join 大彙總(inner join 內聯、full join 全連、 left join 左連、right join 右連 、cross join 交叉連以及union)

一、定義兩個表 ,結構如下 create table A (     id  nvarchar(50) null,     names nvarchar(50) null )  create table B (     id  nvarchar(50) null,   

連線查詢inner joinleft joinright join

感謝原創:https://blog.csdn.net/plg17/article/details/78758593 準備工作:   1)新建兩張表a_table和b_table:   create table a_table(a_id int(10) primary key auto_increment