在Oracle數據庫中,NOT IN
和 IN
是兩種用于過濾查詢結果的子句,它們的使用場景和結果有所不同。
IN
子句:
IN
子句用于篩選出在指定集合中的記錄。它允許你指定一個值列表,然后查詢會返回字段值在這些列表中的所有記錄。例如:
SELECT * FROM employees WHERE department_id IN (10, 20, 30);
這個查詢將返回employees
表中department_id
為10、20或30的所有記錄。
NOT IN
子句:
NOT IN
子句用于篩選出不在指定集合中的記錄。它同樣允許你指定一個值列表,但查詢會返回字段值不在這些列表中的所有記錄。例如:
SELECT * FROM employees WHERE department_id NOT IN (10, 20, 30);
這個查詢將返回employees
表中department_id
不為10、20或30的所有記錄。
查詢結果差異:
IN
子句時,如果某個記錄的department_id
值在指定的列表中(例如10、20、30),那么這條記錄將被包含在查詢結果中。NOT IN
子句時,如果某個記錄的department_id
值在指定的列表中(例如10、20、30),那么這條記錄將不會被包含在查詢結果中。需要注意的是,當使用NOT IN
子句時,如果指定的值列表為空(即沒有值),那么查詢結果可能不會返回任何記錄,因為沒有任何記錄的字段值會等于空值。為了避免這種情況,可以使用NOT IN (SELECT column_name FROM table_name)
的形式,這樣即使值列表為空,查詢也會返回所有記錄。