關係型數據庫通過主鍵與外鍵建立表間關係,JOIN 在單條查詢中組合多表數據。理解內連接(INNER JOIN)與外連接(LEFT/RIGHT JOIN)的語義差異是寫出正確 SQL 的前提。
vendors 表:vend_id(主鍵)、vend_name...products 表:prod_id(主鍵)、vend_id(外鍵引用 vendors)...
等值連接寫法(舊語法):
SELECT vend_name, prod_name, prod_price FROM vendors, products WHERE vendors.vend_id = products.vend_id;
標準 INNER JOIN 寫法(推薦):
SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;

需求:查詢訂單 20005 包含的產品名、價格、廠商名。
三表關係:orders → orderitems(外鍵 order_num) → products(外鍵 prod_id) → vendors(外鍵 vend_id)。
SELECT prod_name, vend_name, prod_price, quantity FROM orderitems INNER JOIN products ON orderitems.prod_id = products.prod_id INNER JOIN vendors ON products.vend_id = vendors.vend_id WHERE orderitems.order_num = 20005;

理解技巧:WHERE 條件可視為過濾器,JOIN ... ON 確定連接鍵,先在腦中畫出 ER 圖再寫 SQL。
LEFT JOIN:保留左表所有行,右表無匹配填 NULL。RIGHT JOIN:保留右表所有行。例:列出所有廠商及其產品(無產品廠商也顯示):
SELECT vend_name, prod_name FROM vendors LEFT JOIN products ON vendors.vend_id = products.vend_id;
STRAIGHT_JOIN 強制順序。SELECT *,僅選取必要列,減少網路傳輸與緩存壓力。ON 子句,而非 WHERE,否則退化為內連接。