现有EMP表;
SELECT * FROM EMP ;
查询结果如下:
现有需求: 查询不是老板的员工 (注:字段MGR表示上级/老板)。
该需求很简单:只要员工编号,不出现在字段MGR中。即为老板的员工。
于是就有了以下查询语句: 使用 NOT IN
SELECT * FROM EMP T1 WHERE T1.EMPNO NOT IN (SELECT T2.MGR FROM EMP T2 );
查询结果如下:
可以发现,查询结果为空。
这个时候,就需要研究 NOT IN 和 IN 的查询逻辑:
假设:x 为外部查询结果; (a1,a2,a3,...an, null) 是子查询中结果.
IN 可以理解为
x IN (a1,a2,a3,...an, null) 等价于
WHERE(x=a1 OR x=a2 OR x=a3 OR .. OR x=an OR x=NULL)
注:*任何值和NULL比较结果仍为NULL
NOT IN 可以理解为
x NOT IN (a1,a2,a3,...an, null) 等价于
NOT IN 可以理解为 where( x<>a1 AND x<>a2 AND x<>a3