INNER JOIN 僅回傳雙方都匹配的列。若左表有列無右表匹配(或反之),該列會消失。
IS NULL / IS NOT NULL,不可用 = / <>。-- 無領導者的政黨
SELECT code, name FROM party WHERE leader IS NULL;
-- 被開除黨籍的議員(party 為 NULL)
SELECT name FROM msp WHERE party IS NULL;
| 表 | 欄位 |
|---|---|
| party | Code(政黨代碼), Name(政黨名稱), Leader(領袖) |
| msp | Name(議員姓名), Party(所屬政黨代碼), Constituency(選區) |
SELECT msp.name, party.name
FROM msp JOIN party ON msp.party = party.code;
結果缺少:無黨籍議員(Canavan MSP, Dennis),因 msp.party IS NULL 無法與 party.code 匹配。
| 連接類型 | 語法 | 保留哪邊的所有列 | 適用場景 |
|---|---|---|---|
| LEFT JOIN | FROM msp LEFT JOIN party ON ... | 左表 | 主表為主,輔表可能無資料(如:所有議員+其政黨) |
| RIGHT JOIN | FROM msp RIGHT JOIN party ON ... | 右表 | 輔表為主,主表可能無資料(如:所有政黨+其議員) |
| FULL JOIN | FROM msp FULL JOIN party ON ... | 雙邊 | 雙方都要完整保留(如:議員與政黨雙向完整清單) |
SELECT msp.name, party.name
FROM msp LEFT JOIN party ON msp.party = party.code;
SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party = party.code;
SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party = party.code;
LEFT = 保留左邊、RIGHT = 保留右邊、FULL = 兩邊都保留。ON 條件決定如何匹配,不匹配處以 NULL 填補。