跳到主要內容

【SQL】利用JOIN精簡或擴大


🎯INNER JOIN:精簡出共有的資料。
🎯LEFT JOIN & RIGHT JOIN:以左邊/右邊的表為主結合出共有的資料。
🎯FULL JOIN:列出所有表的全部資料。

假設我們有的表:NAME
NUMBER
NAME
10
王大明
15
李小花
24
陳小兵

假設我們有的表:POINTS
NUMBER
POINTS
24
80
17
90
10
60

INNER JOIN
SELECT A.[NUMBER],A.[NAME],B.[POINTS]
FROM [NAME] AS A,[POINTS] AS B
---將NAME另命名為A,POINTS另命名為B,方便呼叫表
---其命名的AS可省略,用空格替代
WHERE A.[NUMBER] = B.[NUMBER]
---要將兩表的共通欄位列出來
Rusult
NUMBER
NAME
POINTS
10
王大明
60
24
陳小兵
80

LEFT / RIGHT JOIN
NOTE:LEFT JOIN就是以寫在JOIN左邊(前)的表為主表;RIGHT JOIN就是以寫在JOIN右邊(後)的表為主表
---以LEFT為例
SELECT A.[NUMBER],A.[NAME],B.[POINTS]
FROM [dbo].[NAME] AS A
LEFT JOIN [dbo].[POINTS] AS B ON A.[NUMBER] = B.[NUMBER]
---將NAME另命名為A,POINTS另命名為B,方便呼叫表
---其命名的AS可省略,用空格替代
---不需要寫WHERE條件,直接用ON連接兩張表的共同欄位
---LEFT JOIN會將A表的所有欄位列出,即使B配對不到;RIGHT JOIN則相反
Rusult
NUMBER
NAME
POINTS
10
王大明
60
15
李小花
NULL
24
陳小兵
80

FULL JOIN
SELECT *
---*代表選取全部欄位
FROM [dbo].[NAME] AS A
FULL JOIN [dbo].[POINTS] AS B ON A.[NUMBER] = B.[NUMBER]
---將NAME另命名為A,POINTS另命名為B,方便呼叫表
---其命名的AS可省略,用空格替代
Rusult
NUMBER
NAME
NUMBER
POINTS
10
王大明
10
60
15
李小花
NULL
NULL
24
陳小兵
24
80
NULL
NULL
17
90

留言

這個網誌中的熱門文章

【TABLEAU】INTRO

🎯 TABLEAU:商業視覺化智慧分析軟體

【SQL】不同來源也無關連可利用UNION

🎯 UNION / UNION ALL:合併多張表的欄位內容。 NOTE: UNION合併但會排除重復筆數;UNION ALL合併且不會排除重複筆數 NOTE2: 不論是哪一種合併,要確定表單的欄位數是一樣的,若欄位數不相同,則要特別指定需要挑選哪幾欄 (挑選後欄位數需一樣)