Oracle表的常用查询实验(六)
1.问题描述:
为什么第一个SQL有数据,第二个SQL没有数据?
SQL1:
SELECT t.*
FROM alx_material_types_intf_v t
WHERE t.material_level = 3
AND t.material_type NOT IN
(SELECT a.parent_type FROM alx_material_types_intf_v a); --无数据
SQL2:
SELECT t.*
FROM alx_material_types_intf_v t
WHERE t.material_level = 3
AND t.material_type NOT IN
(SELECT a.parent_type FROM alx_material_types_intf_v a WHERE a.parent_type = t.material_type); --有数据
2.需求分析:
对比两个SQL语句,区别在于第二个SQL语句多出了‘WHERE a.parent_type = t.material_type’。
3.解答过程:
第一句SQL的子查询SELECT a.parent_type FROM alx_material_types_intf_v a 中parent_type有空值的话,not in (null) 的结果是null,不是true。所以没有数据、
第二个SQL里面,因为多了个“= ”的条件,导致无论如何结果集内不会出现空值。
本文深入解析了Oracle表查询中两个SQL语句的区别,通过具体实例展示了如何利用子查询来筛选数据,并重点阐述了在SQL条件中加入额外约束的重要性。通过对比SQL1和SQL2,揭示了SQL子查询中的NULL值处理方式,帮助读者理解查询结果的产生机制。
2225

被折叠的 条评论
为什么被折叠?



