SQL中的連接查詢?cè)斀?/h1>
瀏覽:20日期:2023-03-06 14:25:15
Join 連接 (SQL Join)
SQL Join (連接) 是利用不同數(shù)據(jù)表之間字段的關(guān)連性來(lái)結(jié)合多數(shù)據(jù)表之檢索。
SQL Join是結(jié)合多個(gè)數(shù)據(jù)表而組成一抽象的暫時(shí)性數(shù)據(jù)表以供數(shù)據(jù)查詢,在原各數(shù)據(jù)表中之紀(jì)錄及結(jié)構(gòu)皆不會(huì)因此連接查詢而改變。
這是一個(gè)客戶數(shù)據(jù)表「customers」:
C_Id
Name
City
Address
Phone
1
張一
臺(tái)北市
XX路100號(hào)
02-12345678
2
王二
新竹縣
YY路200號(hào)
03-12345678
3
李三
高雄縣
ZZ路300號(hào)
07-12345678
而這是產(chǎn)品訂單的數(shù)據(jù)表「orders」:
O_Id
OrderNo
C_Id
1
2572
3
2
7375
3
3
7520
1
4
1054
1
5
1257
5
其中,C_Id 是客戶數(shù)據(jù)表中的主鍵 (Primary Key) 字段,我們?cè)趺磳⑦@兩張不同的數(shù)據(jù)表依相關(guān)字段來(lái)作個(gè)連接結(jié)合以便查詢呢?這就是接下來(lái)的主題 Join!
SQL 的 Join 查詢有哪幾種類型?
Inner Join : 內(nèi)部連接
LEFT (OUTER) JOIN : 左外部連接
RIGHT (OUTER) JOIN : 右外部連接
FULL (OUTER) JOIN : 全部外部連接
CROSS JOIN : 交叉連接
NATURAL JOIN : 自然連接
INNER JOIN - 內(nèi)部連接
INNER JOIN (內(nèi)部連接) 為等值連接,必需指定等值連接的條件,而查詢結(jié)果只會(huì)返回符合連接條件的數(shù)據(jù)。
INNER JOIN 語(yǔ)法 (SQL INNER JOIN Syntax)
SELECT table_column1, table_column2···
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
或
SELECT table_column1, table_column2···
FROM table_name1
INNER JOIN table_name2
USING (column_name);
INNER JOIN 查詢實(shí)例 (Example)
現(xiàn)在我們想列出所有客戶的訂單編號(hào)數(shù)據(jù),我們可以作一個(gè) INNER JOIN 查詢:
SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;
其中用點(diǎn)號(hào)連接之「XXX.YYY」表示XXX數(shù)據(jù)表中的YYY字段。
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
查詢結(jié)果只會(huì)返回符合連接條件的數(shù)據(jù)!
LEFT JOIN - 左外部連接
LEFT JOIN 可以用來(lái)建立左外部連接,查詢的 SQL 敘述句 LEFT JOIN 左側(cè)數(shù)據(jù)表 (table_name1) 的所有記錄都會(huì)加入到查詢結(jié)果中,即使右側(cè)數(shù)據(jù)表 (table_name2) 中的連接字段沒(méi)有符合的值也一樣。
LEFT JOIN 語(yǔ)法 (SQL LEFT JOIN Syntax)
SELECT table_column1, table_column2···
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
有些數(shù)據(jù)庫(kù)的語(yǔ)法會(huì)是LEFT OUTER JOIN。
LEFT JOIN 查詢實(shí)例 (Example)
現(xiàn)在我們想查詢所有客戶與其訂單狀況的數(shù)據(jù),我們可以作一個(gè) LEFT JOIN 查詢:
SELECT customers.Name, orders.Order_No
FROM customers
LEFT JOIN orders
ON customers.C_Id=orders.C_Id;
查詢結(jié)果如下:
Name
Order_No
張一
7520
張一
1054
王二
李三
2572
李三
7375
LEFT JOIN會(huì)返回左側(cè)數(shù)據(jù)表中所有數(shù)據(jù)列,就算沒(méi)有符合連接條件,而右側(cè)數(shù)據(jù)表中如果沒(méi)有匹配的數(shù)據(jù)值就會(huì)顯示為「NULL」。
RIGHT JOIN - 右外部連接
相對(duì)于LEFT JOIN,RIGHT JOIN 可以用來(lái)建立右外部連接,查詢的 SQL 敘述句 RIGHT JOIN 右側(cè)數(shù)據(jù)表 (table_name2) 的所有記錄都會(huì)加入到查詢結(jié)果中,即使左側(cè)數(shù)據(jù)表 (table_name2) 中的連接字段沒(méi)有符合的值也一樣。
RIGHT JOIN 語(yǔ)法 (SQL RIGHT JOIN Syntax)
SELECT table_column1, table_column2···
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
有些數(shù)據(jù)庫(kù)的語(yǔ)法會(huì)是RIGHT OUTER JOIN。
RIGHT JOIN 查詢實(shí)例 (Example)
現(xiàn)在我們想查詢所有訂單與相應(yīng)的客戶之資料,我們可以作一個(gè) RIGHT JOIN 查詢:
SELECT customers.Name, orders.Order_No
FROM customers
RIGHT JOIN orders
ON customers.C_Id=orders.C_Id;
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
1257
RIGHT JOIN會(huì)返回右側(cè)數(shù)據(jù)表中所有數(shù)據(jù)列,就算是沒(méi)有符合連接條件,而左側(cè)數(shù)據(jù)表中如果沒(méi)有匹配的數(shù)據(jù)值就會(huì)顯示為「NULL」。
FULL JOIN - 全部外部連接
FULL JOIN 即為 LEFT JOIN 與 RIGHT JOIN 的聯(lián)集,它會(huì)返回左右數(shù)據(jù)表中所有的紀(jì)錄,不論是否符合連接條件。
FULL JOIN 語(yǔ)法 (SQL FULL JOIN Syntax)
SELECT table_column1, table_column2···
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
FULL JOIN 查詢實(shí)例 (Example)
我們來(lái)作一個(gè) FULL JOIN 查詢:
SELECT customers.Name, orders.Order_No
FROM customers
FULL JOIN orders
ON customers.C_Id=orders.C_Id;
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
1257
王二
MySQL數(shù)據(jù)庫(kù)中沒(méi)有FULL JOIN,但是您可以用UNION來(lái)模擬。
CROSS JOIN - 交叉連接
交叉連接為兩個(gè)數(shù)據(jù)表間的笛卡兒乘積 (Cartesian product),兩個(gè)數(shù)據(jù)表在結(jié)合時(shí),不指定任何條件,即將兩個(gè)數(shù)據(jù)表中所有的可能排列組合出來(lái),以下例而言 CROSS JOIN 出來(lái)的結(jié)果資料列數(shù)為 3×5=15 筆,因此,當(dāng)有WHERE、ON、USING條件時(shí)不建議使用。
CROSS JOIN 語(yǔ)法 (SQL CROSS JOIN Syntax)
SELECT table_column1, table_column2···
FROM table_name1
CROSS JOIN table_name2;
或
SELECT table_column1, table_column2···
FROM table_name1, table_name2;
或
SELECT table_column1, table_column2···
FROM table_name1
JOIN table_name2;
FULL JOIN 查詢實(shí)例 (Example)
這是一個(gè)客戶數(shù)據(jù)表「customers」:
C_Id
Name
City
Address
Phone
1
張一
臺(tái)北市
XX路100號(hào)
02-12345678
2
王二
新竹縣
YY路200號(hào)
03-12345678
3
李三
高雄縣
ZZ路300號(hào)
07-12345678
而這是產(chǎn)品訂單的數(shù)據(jù)表「orders」:
O_Id
Order_No
C_Id
1
2572
3
2
7375
3
3
7520
1
4
1054
1
5
1257
5
我們來(lái)作一個(gè) CROSS JOIN 查詢:
SELECT customers.Name, orders.Order_No
FROM customers
CROSS JOIN orders;
查詢結(jié)果如下:
Name
Order_No
張一
2572
王二
2572
李三
2572
張一
7375
王二
7375
李三
7375
張一
7520
王二
7520
李三
7520
張一
1054
王二
1054
李三
1054
張一
1257
王二
1257
李三
1257
NATURAL JOIN - 自然連接
自然連接有 NATURAL JOIN、NATURAL LEFT JOIN、NATURAL RIGHT JOIN,兩個(gè)表格在進(jìn)行 JOIN 時(shí),加上 NATURAL 這個(gè)關(guān)鍵詞之后,兩數(shù)據(jù)表之間同名的字段會(huì)被自動(dòng)結(jié)合在一起。
NATURAL JOIN 語(yǔ)法 (SQL NATURAL JOIN Syntax)
SELECT table_column1, table_column2···
FROM table_name1
NATURAL JOIN table_name2;
NATURAL JOIN 查詢實(shí)例 (Example)
這是一個(gè)客戶數(shù)據(jù)表「customers」:
C_Id
Name
City
Address
Phone
1
張一
臺(tái)北市
XX路100號(hào)
02-12345678
2
王二
新竹縣
YY路200號(hào)
03-12345678
3
李三
高雄縣
ZZ路300號(hào)
07-12345678
而這是產(chǎn)品訂單的數(shù)據(jù)表「orders」:
O_Id
Order_No
C_Id
1
2572
3
2
7375
3
3
7520
1
4
1054
1
5
1257
5
現(xiàn)在我們想列出所有客戶的訂單編號(hào)數(shù)據(jù),我們可以作一個(gè) NATURAL JOIN 查詢:
SELECT customers.Name, orders.Order_No
FROM customers
NATURAL JOIN orders;
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
注意到了嗎?返回結(jié)果同等于下面這個(gè)INNER JOIN查詢:
SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;
到此這篇關(guān)于SQL連接查詢的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。
標(biāo)簽:
MsSQL
相關(guān)文章:
1. sql server添加唯一性約束的方法步驟2. MySQL Aborted connection告警日志的分析3. 詳解mysql的備份與恢復(fù)4. MySQL 編碼utf8 與 utf8mb4 utf8mb4_unicode_ci 與 utf8mb4_general_ci5. 深入了解mysql長(zhǎng)事務(wù)6. SQLite教程(十二):鎖和并發(fā)控制詳解7. Centos7 下mysql重新啟動(dòng)MariaDB篇8. MySQL中utf8mb4排序規(guī)則示例9. MySQL日期加減函數(shù)詳解10. MySQL之高可用集群部署及故障切換實(shí)現(xiàn)
Join 連接 (SQL Join)
SQL Join (連接) 是利用不同數(shù)據(jù)表之間字段的關(guān)連性來(lái)結(jié)合多數(shù)據(jù)表之檢索。
SQL Join是結(jié)合多個(gè)數(shù)據(jù)表而組成一抽象的暫時(shí)性數(shù)據(jù)表以供數(shù)據(jù)查詢,在原各數(shù)據(jù)表中之紀(jì)錄及結(jié)構(gòu)皆不會(huì)因此連接查詢而改變。
這是一個(gè)客戶數(shù)據(jù)表「customers」:
C_Id
Name
City
Address
Phone
1
張一
臺(tái)北市
XX路100號(hào)
02-12345678
2
王二
新竹縣
YY路200號(hào)
03-12345678
3
李三
高雄縣
ZZ路300號(hào)
07-12345678
而這是產(chǎn)品訂單的數(shù)據(jù)表「orders」:
O_Id
OrderNo
C_Id
1
2572
3
2
7375
3
3
7520
1
4
1054
1
5
1257
5
其中,C_Id 是客戶數(shù)據(jù)表中的主鍵 (Primary Key) 字段,我們?cè)趺磳⑦@兩張不同的數(shù)據(jù)表依相關(guān)字段來(lái)作個(gè)連接結(jié)合以便查詢呢?這就是接下來(lái)的主題 Join!
SQL 的 Join 查詢有哪幾種類型?
Inner Join : 內(nèi)部連接
LEFT (OUTER) JOIN : 左外部連接
RIGHT (OUTER) JOIN : 右外部連接
FULL (OUTER) JOIN : 全部外部連接
CROSS JOIN : 交叉連接
NATURAL JOIN : 自然連接
INNER JOIN - 內(nèi)部連接
INNER JOIN (內(nèi)部連接) 為等值連接,必需指定等值連接的條件,而查詢結(jié)果只會(huì)返回符合連接條件的數(shù)據(jù)。
INNER JOIN 語(yǔ)法 (SQL INNER JOIN Syntax)
SELECT table_column1, table_column2··· FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
或
SELECT table_column1, table_column2··· FROM table_name1 INNER JOIN table_name2 USING (column_name);
INNER JOIN 查詢實(shí)例 (Example)
現(xiàn)在我們想列出所有客戶的訂單編號(hào)數(shù)據(jù),我們可以作一個(gè) INNER JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers INNER JOIN orders ON customers.C_Id=orders.C_Id;
其中用點(diǎn)號(hào)連接之「XXX.YYY」表示XXX數(shù)據(jù)表中的YYY字段。
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
查詢結(jié)果只會(huì)返回符合連接條件的數(shù)據(jù)!
LEFT JOIN - 左外部連接
LEFT JOIN 可以用來(lái)建立左外部連接,查詢的 SQL 敘述句 LEFT JOIN 左側(cè)數(shù)據(jù)表 (table_name1) 的所有記錄都會(huì)加入到查詢結(jié)果中,即使右側(cè)數(shù)據(jù)表 (table_name2) 中的連接字段沒(méi)有符合的值也一樣。
LEFT JOIN 語(yǔ)法 (SQL LEFT JOIN Syntax)
SELECT table_column1, table_column2··· FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
有些數(shù)據(jù)庫(kù)的語(yǔ)法會(huì)是LEFT OUTER JOIN。
LEFT JOIN 查詢實(shí)例 (Example)
現(xiàn)在我們想查詢所有客戶與其訂單狀況的數(shù)據(jù),我們可以作一個(gè) LEFT JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers LEFT JOIN orders ON customers.C_Id=orders.C_Id;
查詢結(jié)果如下:
Name
Order_No
張一
7520
張一
1054
王二
李三
2572
李三
7375
LEFT JOIN會(huì)返回左側(cè)數(shù)據(jù)表中所有數(shù)據(jù)列,就算沒(méi)有符合連接條件,而右側(cè)數(shù)據(jù)表中如果沒(méi)有匹配的數(shù)據(jù)值就會(huì)顯示為「NULL」。
RIGHT JOIN - 右外部連接
相對(duì)于LEFT JOIN,RIGHT JOIN 可以用來(lái)建立右外部連接,查詢的 SQL 敘述句 RIGHT JOIN 右側(cè)數(shù)據(jù)表 (table_name2) 的所有記錄都會(huì)加入到查詢結(jié)果中,即使左側(cè)數(shù)據(jù)表 (table_name2) 中的連接字段沒(méi)有符合的值也一樣。
RIGHT JOIN 語(yǔ)法 (SQL RIGHT JOIN Syntax)
SELECT table_column1, table_column2··· FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
有些數(shù)據(jù)庫(kù)的語(yǔ)法會(huì)是RIGHT OUTER JOIN。
RIGHT JOIN 查詢實(shí)例 (Example)
現(xiàn)在我們想查詢所有訂單與相應(yīng)的客戶之資料,我們可以作一個(gè) RIGHT JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers RIGHT JOIN orders ON customers.C_Id=orders.C_Id;
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
1257
RIGHT JOIN會(huì)返回右側(cè)數(shù)據(jù)表中所有數(shù)據(jù)列,就算是沒(méi)有符合連接條件,而左側(cè)數(shù)據(jù)表中如果沒(méi)有匹配的數(shù)據(jù)值就會(huì)顯示為「NULL」。
FULL JOIN - 全部外部連接
FULL JOIN 即為 LEFT JOIN 與 RIGHT JOIN 的聯(lián)集,它會(huì)返回左右數(shù)據(jù)表中所有的紀(jì)錄,不論是否符合連接條件。
FULL JOIN 語(yǔ)法 (SQL FULL JOIN Syntax)
SELECT table_column1, table_column2··· FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name;
FULL JOIN 查詢實(shí)例 (Example)
我們來(lái)作一個(gè) FULL JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers FULL JOIN orders ON customers.C_Id=orders.C_Id;
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
1257
王二
MySQL數(shù)據(jù)庫(kù)中沒(méi)有FULL JOIN,但是您可以用UNION來(lái)模擬。
CROSS JOIN - 交叉連接
交叉連接為兩個(gè)數(shù)據(jù)表間的笛卡兒乘積 (Cartesian product),兩個(gè)數(shù)據(jù)表在結(jié)合時(shí),不指定任何條件,即將兩個(gè)數(shù)據(jù)表中所有的可能排列組合出來(lái),以下例而言 CROSS JOIN 出來(lái)的結(jié)果資料列數(shù)為 3×5=15 筆,因此,當(dāng)有WHERE、ON、USING條件時(shí)不建議使用。
CROSS JOIN 語(yǔ)法 (SQL CROSS JOIN Syntax)
SELECT table_column1, table_column2··· FROM table_name1 CROSS JOIN table_name2;
或
SELECT table_column1, table_column2··· FROM table_name1, table_name2;
或
SELECT table_column1, table_column2··· FROM table_name1 JOIN table_name2;
FULL JOIN 查詢實(shí)例 (Example)
這是一個(gè)客戶數(shù)據(jù)表「customers」:
C_Id
Name
City
Address
Phone
1
張一
臺(tái)北市
XX路100號(hào)
02-12345678
2
王二
新竹縣
YY路200號(hào)
03-12345678
3
李三
高雄縣
ZZ路300號(hào)
07-12345678
而這是產(chǎn)品訂單的數(shù)據(jù)表「orders」:
O_Id
Order_No
C_Id
1
2572
3
2
7375
3
3
7520
1
4
1054
1
5
1257
5
我們來(lái)作一個(gè) CROSS JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers CROSS JOIN orders;
查詢結(jié)果如下:
Name
Order_No
張一
2572
王二
2572
李三
2572
張一
7375
王二
7375
李三
7375
張一
7520
王二
7520
李三
7520
張一
1054
王二
1054
李三
1054
張一
1257
王二
1257
李三
1257
NATURAL JOIN - 自然連接
自然連接有 NATURAL JOIN、NATURAL LEFT JOIN、NATURAL RIGHT JOIN,兩個(gè)表格在進(jìn)行 JOIN 時(shí),加上 NATURAL 這個(gè)關(guān)鍵詞之后,兩數(shù)據(jù)表之間同名的字段會(huì)被自動(dòng)結(jié)合在一起。
NATURAL JOIN 語(yǔ)法 (SQL NATURAL JOIN Syntax)
SELECT table_column1, table_column2··· FROM table_name1 NATURAL JOIN table_name2;
NATURAL JOIN 查詢實(shí)例 (Example)
這是一個(gè)客戶數(shù)據(jù)表「customers」:
C_Id
Name
City
Address
Phone
1
張一
臺(tái)北市
XX路100號(hào)
02-12345678
2
王二
新竹縣
YY路200號(hào)
03-12345678
3
李三
高雄縣
ZZ路300號(hào)
07-12345678
而這是產(chǎn)品訂單的數(shù)據(jù)表「orders」:
O_Id
Order_No
C_Id
1
2572
3
2
7375
3
3
7520
1
4
1054
1
5
1257
5
現(xiàn)在我們想列出所有客戶的訂單編號(hào)數(shù)據(jù),我們可以作一個(gè) NATURAL JOIN 查詢:
SELECT customers.Name, orders.Order_No FROM customers NATURAL JOIN orders;
查詢結(jié)果如下:
Name
Order_No
李三
2572
李三
7375
張一
7520
張一
1054
注意到了嗎?返回結(jié)果同等于下面這個(gè)INNER JOIN查詢:
SELECT customers.Name, orders.Order_No FROM customers INNER JOIN orders ON customers.C_Id=orders.C_Id;
到此這篇關(guān)于SQL連接查詢的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。
