---
# System prepended metadata

title: MySQL JOINS
tags: [SQL]

---

---
tags: SQL
---

# MySQL JOINS

![](https://i.imgur.com/V5Hzbiw.png)

常見 `Join` 語法為下，將個別說明:

1. INNER JOIN
1. LEFT JOIN
1. RIGHT JOIN
1. OUTER JOIN
1. LEFT JOIN EXCLUDING INNER JOIN
1. RIGHT JOIN EXCLUDING INNER JOIN
1. OUTER JOIN EXCLUDING INNER JOIN

## Inner Join

![](https://i.imgur.com/nOrGzpQ.png)

這是最簡單、最容易理解並且最常見的 `Join`。此查詢將返回在右表（表 B）中具有匹配記錄的左表（表 A）中的所有記錄。以下為 `Join` 範例：

```sql=
SELECT <select_list> 
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
```

## LEFT JOIN

![](https://i.imgur.com/JdBQvbN.png)

此查詢將返回左表（表 A）中的所有記錄，而不管這些記錄中的任何記錄是否在右表（表 B）中具有匹配項。它還將從右表中返回任何匹配的記錄。以下為 `LEFT JOIN` 範例:

```sql=
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
```

## RIGHT JOIN

![](https://i.imgur.com/JGbfjaW.png)

此查詢將返回右表（表 B）中的所有記錄，無論這些記錄中的任何記錄是否在左表（表 A）中具有匹配項。它還將從左表中返回任何匹配的記錄。以下為 `RIGHT JOIN` 範例:

```sql=
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
```

## OUTER JOIN

![](https://i.imgur.com/42ISwTr.png)

這個 `JOIN` 可以被稱為 `FULL OUTER JOIN` 或 `FULL JOIN`。這個查詢會返回兩個表中的所有記錄，將左表（表 A）中的記錄與右表（表 B）中的記錄相匹配。這個 `JOIN` 的語法如下:

```sql=
SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
```

## LEFT JOIN EXCLUDING INNER JOIN

![](https://i.imgur.com/fx45JZp.png)

這個查詢會返回左表（表 A）中與右表（表 B）中的任何記錄都不匹配的所有記錄。換句話說，它將返回左表中沒有與右表匹配的記錄。

```sql=
SELECT <select_list> 
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
```

## RIGHT JOIN EXCLUDING INNER JOIN

![](https://i.imgur.com/h1UDtED.png)

這個查詢會返回右表（表 B）中與左表（表 A）中的任何記錄都不匹配的所有記錄。換句話說，它將返回右表中沒有與左表匹配的記錄。這個 `JOIN` 的語法可以這樣寫：

```sql=
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL
```

## OUTER JOIN EXCLUDING INNER JOIN

![](https://i.imgur.com/bai9k0x.png)

這個查詢會返回左表（表 A）中所有不匹配的記錄和右表（表 B）中的所有記錄。換句話說，它將返回左表中沒有與右表匹配的記錄，以及右表中所有的記錄。雖然您目前沒有使用這種類型的 `JOIN`，但您經常使用其他類型的 `JOIN`。這個 `JOIN` 的語法可以這樣寫：

```sql=
SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL
```

## 原文來源

本文作者：[C.L. Moffatt](https://www.codeproject.com/Members/Christopher-Moffatt)
原文網址：[Visual Representation of SQL Joins](https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins)