SQL JOIN 是結合多個資料表而組成一抽象的暫時性資料表以供資料查詢,在原各資料表中之紀錄及結構皆不會因此連接查詢而改變。
一般引用兩個表
SELECT ATable.Clumn1, ATable.Clumn2, BTable.Clumn3
FROM ATable, BTable
WHERE ATable.Id = BTable.Id
一般引用表格連結方式 預設為 交叉連接(笛卡兒乘積連接)
SQL join的方式
基本語法
SELECT <list3> FROM (SELECT <list1> FROM T) AS t1 <LEFT / RIGHT> JOIN (SELECT <list2> FROM C) AS c1 ON t1.id = c1.id AND t1.name = c1.name
ON 為兩個表的連接點。
邏輯圖示
JOIN種類與邏輯說明
連接方式 | 邏輯說明 |
JOIN(連接) | 預設即INNER JOIN 或 CROSS JOIN 。 |
INNER JOIN(內部連接) | 將兩個表公共都有的部分組成新表。 |
FULL JOIN(全部外部連接) | 包含左右兩表的所有行, 對應左右表沒有的都為Null。 |
LEFT (OUTER) JOIN(左外連接 ) | 左表的全集及右表有的值,無值則為Null。 |
RIGHT (OUTER) JOIN (右外連接 ) | 與LEFT JOIN 相反。 |
CROSS JOIN(交叉連接 或 笛卡兒連接) | 為兩個資料表間的笛卡兒乘積 (Cartesian product),兩個資料表在結合時,不指定任何條件,即將兩個資料表中所有的可能排列組合出來,因此,當有 WHERE、ON、USING 條件時不建議使用。 |
NATURAL JOIN(自然連接) | 自然連接有 NATURAL JOIN、NATURAL LEFT JOIN、NATURAL RIGHT JOIN,兩個表格在進行 JOIN 時,加上 NATURAL 這個關鍵字之後,兩資料表之間同名的欄位會被自動結合在一起。 |
JOIN種類與基本語法範例
JOIN(連接)
SELECT table_column1, table_column2... FROM table_name1 JOIN table_name2;
INNER JOIN(內部連接)
SELECT table_column1, table_column2...
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
OR
SELECT table_column1, table_column2...
FROM table_name1
INNER JOIN table_name2
USING (column_name);
FULL JOIN(全部外部連接)
SELECT table_column1, table_column2...
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
LEFT (OUTER) JOIN(左外連接 )
SELECT table_column1, table_column2...
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
RIGHT (OUTER) JOIN (右外連接 )
SELECT table_column1, table_column2···
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
CROSS JOIN(交叉連接 或 笛卡兒連接)
SELECT table_column1, table_column2...
FROM table_name1
CROSS JOIN table_name2;
OR
SELECT table_column1, table_column2...
FROM table_name1, table_name2;
OR
SELECT table_column1, table_column2...
FROM table_name1
JOIN table_name2;
NATURAL JOIN(自然連接)
SELECT table_column1, table_column2...
FROM table_name1
NATURAL JOIN table_name2;
JOIN組合用法圖示
參考資料:
SQL JOIN:https://www.w3school.com.cn/sql/sql_join.asp
SQL JOIN 逻辑: https://www.gairuo.com/p/sql-join-sheet
JOIN 連接 (SQL JOIN): https://www.fooish.com/sql/join.html