最基本的多表查詢:FROM 列出多表,WHERE 指定聯結條件。
SELECT t1.col1, t2.col2
FROM table1 t1, table2 t2
WHERE t1.col1 = t2.col1;
SELECT 清單中。AND 延伸至多表:WHERE t1.c = t2.c AND t1.c = t3.c。WHERE 變成笛卡兒積;某些優化器處理方式不同;OUTER JOIN 支援有限 (舊版 Oracle/SQL Server 需 `(+)` / `*=` 非標準語法)。優勢:結果集控制更精確、多表時效能更穩定、支援完整外部聯結類型。
| 類型 | 關鍵字 | 語意 |
|---|---|---|
| INNER JOIN | INNER JOIN ... ON | 雙方皆有匹配的列 |
| LEFT OUTER JOIN | LEFT JOIN ... ON | 左表所有列 + 右表匹配 (無則 NULL) |
| RIGHT OUTER JOIN | RIGHT JOIN ... ON | 右表所有列 + 左表匹配 |
| FULL OUTER JOIN | FULL JOIN ... ON | 雙方所有列 (無匹配則 NULL) |
| CROSS JOIN | CROSS JOIN | 笛卡兒積 (無 ON 子句) |
SELECT t1.col1, t2.col2
FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 = t2.col1;
在查詢中使用另一查詢結果作為資源,常用於 WHERE、FROM、SELECT 子句。
SELECT col1 FROM table1 t1
WHERE EXISTS (
SELECT col1 FROM table2 t2
WHERE t1.col1 = t2.col1
);
JOIN 通常延遲更低。INNER JOIN 皆可。FROM 子查詢);大量資料關聯優先改寫為 JOIN。