inner join(等值連接) 僅僅返回兩個表中聯(lián)結(jié)字段相等的行
left join(左聯(lián)接) 返回包含左表中的全部記錄和右表中聯(lián)結(jié)字段相等的記錄
right join(右聯(lián)接) 返回包含右表中的全部記錄和左表中聯(lián)結(jié)字段相等的記錄
?
INNER JOIN 語法:
?
INNER JOIN 連接兩個數(shù)據(jù)表的使用方法:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段號=表2.字段號
?
INNER JOIN 連接三個數(shù)據(jù)表的使用方法:
SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段號=表2.字段號) INNER JOIN 表3 ON 表1.字段號=表3.字段號
?
INNER JOIN 連接四個數(shù)據(jù)表的使用方法:
SELECT * FROM ((表1 INNER JOIN 表2 ON 表1.字段號=表2.字段號) INNER JOIN 表3 ON 表1.字段號=表3.字段號) INNER JOIN
表4 ON Member.字段號=表4.字段號
?
INNER JOIN 連接五個數(shù)據(jù)表的使用方法:
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.字段號
?
連接六個數(shù)據(jù)表的使用方法:略,與上述聯(lián)接方法相似,大家舉一反三吧:)
?
注意事項:
在輸入字母過程中,一定要用英文半角標(biāo)點符號,單詞之間留一半角空格;
在建立數(shù)據(jù)表時,假設(shè)一個表與多個表聯(lián)接,那么這一個表中的字段必須是“數(shù)字”數(shù)據(jù)類型,而多個表中的同樣字段必須是主鍵,并且是“自己主動編號”數(shù)據(jù)類型。否則,非常難聯(lián)接成功。
代碼嵌套高速方法:如,想連接五個表,則僅僅要在連接四個表的代碼上加一個前后括號(前括號加在FROM的后面,后括號加在代碼的末尾就可以),然后在后括號后面繼續(xù)加入“INNER JOIN 表名X ON 表1.字段號=表X.字段號”代碼就可以,這樣就能夠無限聯(lián)接數(shù)據(jù)表了:)
僅僅要兩個表的公共字段有匹配值,就將這兩個表中的記錄組合起來。
個人理解:以一個共同的字段求兩個表中符合要求的交集,并將每一個表符合要求的記錄以共同的字段為牽引合并起來。
語法
select * FROM table1 INNER JOIN table2 ON table1 . field1 compopr table2 . field2
INNER JOIN 操作包括下面部分:
部分 |
說明
? |
table1, table2 | 要組合當(dāng)中的記錄的表的名稱。 |
field1,field2 | 要聯(lián)接的字段的名稱。假設(shè)它們不是數(shù)字,則這些字段的數(shù)據(jù)類型必須同樣,而且包括同類數(shù)據(jù),可是,它們不必具有同樣的名稱。 |
compopr
? |
不論什么關(guān)系比較運算符:“=”、“<”、“>”、“<=”、“>=”或者“<>”。 |
說明
能夠在不論什么 FROM 子句中使用 INNER JOIN 操作。這是最經(jīng)常使用的聯(lián)接類型。僅僅要兩個表的公共字段上存在相匹配的值,Inner 聯(lián)接就會組合這些表中的記錄。
能夠?qū)?INNER JOIN 用于 Departments 及 Employees 表,以選擇出每一個部門的全部雇員。而要選擇全部部分(即使某些部門中并沒有被分配雇員)或者全部雇員(即使某些雇員沒有分配到不論什么部門),則能夠通過 LEFT JOIN 或者 RIGHT JOIN 操作來創(chuàng)建外部聯(lián)接。
假設(shè)試圖聯(lián)接包括備注或 OLE 對象數(shù)據(jù)的字段,將錯誤發(fā)生。
能夠聯(lián)接不論什么兩個類似類型的數(shù)字字段。比如,能夠聯(lián)接自己主動編號和長整型字段,由于它們均是類似類型。然而,不能聯(lián)接單精度型和雙精度型類型字段。
下例展示了怎樣通過 CategoryID 字段聯(lián)接 Categories 和 Products 表:
SELECT CategoryName, ProductName
FROM Categories INNER JOIN Products
ON Categories.CategoryID = Products.CategoryID;
在前面的演示樣例中,CategoryID 是被聯(lián)接字段,可是它不包括在查詢輸出中,由于它不包括在 SELECT 語句中。若要包括被聯(lián)接字段,請在 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
結(jié)果例如以下:
aID?????????????? aNum????????????????????????? bID????????????????? bName
1?????????????????? a20050111??????????????? 1????????????????????? 2006032401
2?????????????????? a20050112??????????????? 2???????????????????? 2006032402
3?????????????????? a20050113??????????????? 3???????????????????? 2006032403
4?????????????????? a20050114??????????????? 4???????????????????? 2006032404
5?????????????????? a20050115??????????????? NULL????????????? NULL
(所影響的行數(shù)為 5 行)
結(jié)果說明
:
?????????????? left join是以A表的記錄為基礎(chǔ)的,A能夠看成左表,B能夠看成右表,left join是以左表為準(zhǔn)的.
換句話說,左表(A)的記錄將會所有表示出來,而右表(B)僅僅會顯示符合搜索條件的記錄(樣例中為: A.aID = B.bID).
B表記錄不足的地方均為NULL.
2.right join
sql語句例如以下:
select * from A
right join B
on A.aID = B.bID
結(jié)果例如以下:
aID?????????????? aNum????????????????????????? bID????????????????? bName
1?????????????????? a20050111??????????????? 1????????????????????? 2006032401
2?????????????????? a20050112??????????????? 2???????????????????? 2006032402
3?????????????????? a20050113??????????????? 3???????????????????? 2006032403
4?????????????????? a20050114??????????????? 4???????????????????? 2006032404
NULL?????????? NULL????????????????????????? 8???????????????????? 2006032408
(所影響的行數(shù)為 5 行)
結(jié)果說明
:
??????? 細(xì)致觀察一下,就會發(fā)現(xiàn),和left join的結(jié)果剛好相反,這次是以右表(B)為基礎(chǔ)的,A表不足的地方用NULL填充.
3.inner join
sql語句例如以下:
select * from A
innerjoin B
on A.aID = B.bID
結(jié)果例如以下:
aID?????????????? aNum????????????????????????? bID????????????????? bName
1?????????????????? a20050111??????????????? 1????????????????????? 2006032401
2?????????????????? a20050112??????????????? 2???????????????????? 2006032402
3?????????????????? a20050113??????????????? 3???????????????????? 2006032403
4?????????????????? a20050114??????????????? 4???????????????????? 2006032404
結(jié)果說明
:
??????? 非常明顯,這里僅僅顯示出了 A.aID = B.bID的記錄.這說明inner join并不以誰為基礎(chǔ),它僅僅顯示符合條件的記錄.??還有就是inner join 能夠結(jié)合where語句來使用?如:???select * from A innerjoin B on A.aID = B.bID where b.bname='2006032401' 這種話 就僅僅會放回一條數(shù)據(jù)了
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
