跨多表查詢時,可用隱含 JOIN、顯式 JOIN 或子查詢三大方式,依資料庫優化器與可讀性選擇。
SELECT t1.col1, t2.col2 FROM table1 t1, table2 t2
WHERE t1.col1 = t2.col1;
以逗號分隔表名,WHERE 指定關聯條件。可擴充多表與 AND,但易產生笛卡兒積且難以維護。
INNER JOIN:僅回傳雙方符合條件的列。LEFT/RIGHT/FULL OUTER JOIN:保留單/雙方所有列,無對應處為 NULL。CROSS JOIN:笛卡兒積。SELECT t1.col1, t2.col2 FROM table1 t1
INNER JOIN table2 t2 ON t1.col1 = t2.col1;
優點:控制結果集更精確,多表查詢效能通常優於隱含 JOIN。
將一個查詢結果作為另一個查詢的資源,用於限定結果而非回傳資料。
SELECT col1 FROM table1
WHERE EXISTS (SELECT col1 FROM table2 WHERE table1.col1 = table2.col1);
注意:子查詢會完整獨立執行,複雜情況下效能不如 JOIN,建議優先考慮 JOIN 重寫。