一、left join 涉及多個(gè)關(guān)聯(lián)條件時(shí)寫在on后面與where后面的區(qū)別
在 SQL 中,LEFT JOIN 連接操作是用來連接兩個(gè)或多個(gè)表的。當(dāng)涉及到多個(gè)關(guān)聯(lián)條件時(shí),這些條件可以寫在 ON 后面,也可以寫在 WHERE 后面。但是它們的作用是不同的。
如果多個(gè)關(guān)聯(lián)條件寫在 ON 后面,這些條件將被視為 LEFT JOIN 操作的一部分,并且將會(huì)影響到連接后的結(jié)果集。如果多個(gè)關(guān)聯(lián)條件寫在 WHERE 后面,這些條件將被視為對(duì)連接后的結(jié)果進(jìn)行過濾。實(shí)例:
表1(product):
表2(product_details):
查詢1:
SELECT * FROM product LEFT JOIN product_details
ON (product.id = product_details.id)
AND product.amount=200;
結(jié)果:
把on的所有條件作為匹配條件,不符合的右表都為null。
查詢2:
SELECT * FROM product LEFT JOIN product_details
ON (product.id = product_details.id)
WHERE product.amount=200;
結(jié)果:
匹配完再篩選,結(jié)果只有一條記錄。
二、SQL語(yǔ)言JOIN詳解
SQL JOIN 子句用于把來自兩個(gè)或多個(gè)表的行結(jié)合起來,基于這些表之間的共同字段。
不同的 SQL JOIN 類型:
INNER JOIN:如果表中有至少一個(gè)匹配,則返回行LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行FULL JOIN:只要其中一個(gè)表中存在匹配,則返回行下圖展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相關(guān)的 7 種用法:
1、SQL INNER JOIN
語(yǔ)法:
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
參數(shù)說明:
columns:要顯示的列名。table1:表1的名稱。table2:表2的名稱。column_name:表中用于連接的列名。注釋:INNER JOIN 與 JOIN 是相同的。
2、SQL LEFT JOIN
語(yǔ)法:
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
注釋:在某些數(shù)據(jù)庫(kù)中,LEFT JOIN 稱為 LEFT OUTER JOIN。
3、SQL RIGHT JOIN
語(yǔ)法:
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
注釋:在某些數(shù)據(jù)庫(kù)中,RIGHT JOIN 稱為 RIGHT OUTER JOIN。
4、SQL?FULL JOIN
語(yǔ)法:
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
延伸閱讀1:SQL是什么
SQL 指結(jié)構(gòu)化查詢語(yǔ)言,全稱是 Structured Query Language。SQL 讓您可以訪問和處理數(shù)據(jù)庫(kù),包括數(shù)據(jù)插入、查詢、更新和刪除。SQL 在1986年成為 ANSI(American National Standards Institute 美國(guó)國(guó)家標(biāo)準(zhǔn)化組織)的一項(xiàng)標(biāo)準(zhǔn),在 1987 年成為國(guó)際標(biāo)準(zhǔn)化組織(ISO)標(biāo)準(zhǔn)。