---
tags: SQL
---
# MySQL JOINS

常見 `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

這是最簡單、最容易理解並且最常見的 `Join`。此查詢將返回在右表(表 B)中具有匹配記錄的左表(表 A)中的所有記錄。以下為 `Join` 範例:
```sql=
SELECT <select_list>
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
```
## LEFT JOIN

此查詢將返回左表(表 A)中的所有記錄,而不管這些記錄中的任何記錄是否在右表(表 B)中具有匹配項。它還將從右表中返回任何匹配的記錄。以下為 `LEFT JOIN` 範例:
```sql=
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
```
## RIGHT JOIN

此查詢將返回右表(表 B)中的所有記錄,無論這些記錄中的任何記錄是否在左表(表 A)中具有匹配項。它還將從左表中返回任何匹配的記錄。以下為 `RIGHT JOIN` 範例:
```sql=
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
```
## OUTER JOIN

這個 `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

這個查詢會返回左表(表 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

這個查詢會返回右表(表 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

這個查詢會返回左表(表 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)