表 stu_info (學生),表 teacher (導師)。查詢 **不屬於任何導師** 的學生。
SELECT *
FROM stu_info
WHERE teacher_id NOT IN (SELECT id FROM teacher);
若子查詢結果包含 NULL,NOT IN 整體返回 **空集合**(因 value NOT IN (..., NULL) 永為 UNKNOWN)。
-- 1. 子查詢排除 NULL
WHERE teacher_id NOT IN (SELECT id FROM teacher WHERE id IS NOT NULL)
-- 2. 使用 NOT EXISTS (推薦,不受 NULL 影響)
WHERE NOT EXISTS (SELECT 1 FROM teacher WHERE teacher.id = stu_info.teacher_id)
-- 3. LEFT JOIN + IS NULL
FROM stu_info s
LEFT JOIN teacher t ON s.teacher_id = t.id
WHERE t.id IS NULL
NOT EXISTS / LEFT JOIN 通常優於 NOT IN,優化器可轉為 Anti-Semi Join。teacher.id、stu_info.teacher_id 建立索引。