首頁 > 軟體

SQL中的連線查詢詳解

2022-06-18 18:02:11

Join 連線 (SQL Join)

SQL Join (連線) 是利用不同資料表之間欄位的關連性來結合多資料表之檢索。

SQL Join是結合多個資料表而組成一抽象的暫時性資料表以供資料查詢,在原各資料表中之紀錄及結構皆不會因此連線查詢而改變。

這是一個客戶資料表「customers」:

C_Id

Name

City

Address

Phone

1

張一

臺北市

XX路100號

02-12345678

2

王二

新竹縣

YY路200號

03-12345678

3

李三

高雄縣

ZZ路300號

07-12345678

而這是產品訂單的資料表「orders」:

O_Id

OrderNo

C_Id

1

2572

3

2

7375

3

3

7520

1

4

1054

1

5

1257

5

其中,C_Id 是客戶資料表中的主鍵 (Primary Key) 欄位,我們怎麼將這兩張不同的資料表依相關欄位來作個連線結合以便查詢呢?這就是接下來的主題 Join!

SQL 的 Join 查詢有哪幾種型別?

  • Inner Join : 內部連線

  • LEFT (OUTER) JOIN : 左外部連線

  • RIGHT (OUTER) JOIN : 右外部連線

  • FULL (OUTER) JOIN : 全部外部連線

  • CROSS JOIN : 交叉連線

  • NATURAL JOIN : 自然連線

INNER JOIN - 內部連線

INNER JOIN (內部連線) 為等值連線,必需指定等值連線的條件,而查詢結果只會返回符合連線條件的資料。

INNER JOIN 語法 (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 查詢範例 (Example)

現在我們想列出所有客戶的訂單編號資料,我們可以作一個 INNER JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;

其中用點號連線之「XXX.YYY」表示XXX資料表中的YYY欄位。

查詢結果如下:

Name

Order_No

李三

2572

李三

7375

張一

7520

張一

1054

查詢結果只會返回符合連線條件的資料!

LEFT JOIN - 左外部連線

LEFT JOIN 可以用來建立左外部連線,查詢的 SQL 敘述句 LEFT JOIN 左側資料表 (table_name1) 的所有記錄都會加入到查詢結果中,即使右側資料表 (table_name2) 中的連線欄位沒有符合的值也一樣。

LEFT JOIN 語法 (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;

有些資料庫的語法會是LEFT OUTER JOIN。

LEFT JOIN 查詢範例 (Example)

現在我們想查詢所有客戶與其訂單狀況的資料,我們可以作一個 LEFT JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
LEFT JOIN orders
ON customers.C_Id=orders.C_Id;

查詢結果如下:

Name

Order_No

張一

7520

張一

1054

王二

 

李三

2572

李三

7375

LEFT JOIN會返回左側資料表中所有資料列,就算沒有符合連線條件,而右側資料表中如果沒有匹配的資料值就會顯示為「NULL」。

RIGHT JOIN - 右外部連線

相對於LEFT JOIN,RIGHT JOIN 可以用來建立右外部連線,查詢的 SQL 敘述句 RIGHT JOIN 右側資料表 (table_name2) 的所有記錄都會加入到查詢結果中,即使左側資料表 (table_name2) 中的連線欄位沒有符合的值也一樣。

RIGHT JOIN 語法 (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;

有些資料庫的語法會是RIGHT OUTER JOIN。

RIGHT JOIN 查詢範例 (Example)

現在我們想查詢所有訂單與相應的客戶之資料,我們可以作一個 RIGHT JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
RIGHT JOIN orders
ON customers.C_Id=orders.C_Id;

查詢結果如下:

Name

Order_No

李三

2572

李三

7375

張一

7520

張一

1054

 

1257

RIGHT JOIN會返回右側資料表中所有資料列,就算是沒有符合連線條件,而左側資料表中如果沒有匹配的資料值就會顯示為「NULL」。

FULL JOIN - 全部外部連線

FULL JOIN 即為 LEFT JOIN 與 RIGHT JOIN 的聯集,它會返回左右資料表中所有的紀錄,不論是否符合連線條件。

FULL JOIN 語法 (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 查詢範例 (Example)

我們來作一個 FULL JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
FULL JOIN orders
ON customers.C_Id=orders.C_Id;

查詢結果如下:

Name

Order_No

李三

2572

李三

7375

張一

7520

張一

1054

 

1257

王二

 

MySQL資料庫中沒有FULL JOIN,但是您可以用UNION來模擬。

CROSS JOIN - 交叉連線

交叉連線為兩個資料表間的笛卡兒乘積 (Cartesian product),兩個資料表在結合時,不指定任何條件,即將兩個資料表中所有的可能排列組合出來,以下例而言 CROSS JOIN 出來的結果資料列數為 3×5=15 筆,因此,當有WHERE、ON、USING條件時不建議使用。

CROSS JOIN 語法 (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 查詢範例 (Example)

這是一個客戶資料表「customers」:

C_Id

Name

City

Address

Phone

1

張一

臺北市

XX路100號

02-12345678

2

王二

新竹縣

YY路200號

03-12345678

3

李三

高雄縣

ZZ路300號

07-12345678

而這是產品訂單的資料表「orders」:

O_Id

Order_No

C_Id

1

2572

3

2

7375

3

3

7520

1

4

1054

1

5

1257

5

我們來作一個 CROSS JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
CROSS JOIN orders;

查詢結果如下:

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,兩個表格在進行 JOIN 時,加上 NATURAL 這個關鍵詞之後,兩資料表之間同名的欄位會被自動結合在一起。

NATURAL JOIN 語法 (SQL NATURAL JOIN Syntax)

SELECT table_column1, table_column2···
FROM table_name1
NATURAL JOIN table_name2;

NATURAL JOIN 查詢範例 (Example)

這是一個客戶資料表「customers」:

C_Id

Name

City

Address

Phone

1

張一

臺北市

XX路100號

02-12345678

2

王二

新竹縣

YY路200號

03-12345678

3

李三

高雄縣

ZZ路300號

07-12345678

而這是產品訂單的資料表「orders」:

O_Id

Order_No

C_Id

1

2572

3

2

7375

3

3

7520

1

4

1054

1

5

1257

5

現在我們想列出所有客戶的訂單編號資料,我們可以作一個 NATURAL JOIN 查詢:

SELECT customers.Name, orders.Order_No
FROM customers
NATURAL JOIN orders;

查詢結果如下:

Name

Order_No

李三

2572

李三

7375

張一

7520

張一

1054

注意到了嗎?返回結果同等於下面這個INNER JOIN查詢:

SELECT customers.Name, orders.Order_No
FROM customers
INNER JOIN orders
ON customers.C_Id=orders.C_Id;

到此這篇關於SQL連線查詢的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com