现在位置:
首页 > SQL Server > 正文
NULL对IN查询的影响
- --1. NULL 对 IN(NOT IN) 查询的影响
- --测试数据
- DECLARE @1 TABLE(col1 int)
- INSERT @1 SELECT 1
- UNION ALL SELECT NULL
- UNION ALL SELECT 2
- DECLARE @2 TABLE(col1 int)
- INSERT @2 SELECT 1
- --查询
- SELECT [@1总记录数]=COUNT(*) FROM @1
- --结果: 3
- SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
- WHERE col1 IN(SELECT col1 FROM @2)
- --结果: 1
- SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
- WHERE col1 NOT IN(SELECT col1 FROM @2)
- --结果: 1
- --在@2中插入一条NULL值
- INSERT @2 SELECT NULL
- SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
- WHERE col1 IN(SELECT col1 FROM @2)
- --结果: 1
- SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
- WHERE col1 NOT IN(SELECT col1 FROM @2)
- --结果: 0
- GO
- --2. 使用 EXISTS 代替IN
- --测试数据
- DECLARE @1 TABLE(col1 int)
- INSERT @1 SELECT 1
- UNION ALL SELECT NULL
- UNION ALL SELECT 2
- DECLARE @2 TABLE(col1 int)
- INSERT @2 SELECT 1
- UNION ALL SELECT NULL
- SELECT [@1在@2表中存在的记录数]=COUNT(*)
- FROM @1 a
- WHERE EXISTS(SELECT * FROM @2 WHERE col1=a.col1)
- --结果: 1
- SELECT [@1在@2表中存在的记录数]=COUNT(*)
- FROM @1 a
- WHERE NOT EXISTS(SELECT * FROM @2 WHERE col1=a.col1)
- --结果: 2