在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)
的形式,这样即使值列表为空,查询也会返回所有记录。