SQL中EXCEPT和Not in的区别?
来源:互联网 发布:遭遇网络诈骗如何报案 编辑:程序博客网 时间:2024/05/15 16:52
初始化两张表:
CREATE TABLE tb1(ID int)
INSERT tb1 SELECT NULL
UNION ALL SELECT NULL
UNION ALL SELECT NULL
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 2
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 4
CREATE TABLE tb2(ID int)
INSERT tb2 SELECT NULL
UNION ALL SELECT 1
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 4
A:
SELECT * FROM tb1
SELECT * FROM tb2
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值
结果:
B、我先删除表tb1的是NULL值的行
--DELETE FROM tb1 where id is null
B、
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值
结果:同上A
C、把表tb2的是NULL值的行也删除
--DELETE FROM tb2 where id is null
C、
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);
结果:
这是两张表中都没有NULL值时,得到的结果;
D、在tb1表中插入一条NULL值
D、
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);
结果:
以上例子说明:
except会去重复, not in 不会(除非你在select中显式指定)
except用于比较的列是所有列, 除非写子查询限制列, not in 没有这种情况
表tb2中如果有null值的话,not in查询得不到值(如:A、B)
表tb1中如果有null值,not in不会查询出这个null值(如:D),而except可以查询到
当然通过对子查询指定不为NULL的话,NOT IN自然会得到值,如:
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2 WHERE ID IS NOT NULL);
CREATE TABLE tb1(ID int)
INSERT tb1 SELECT NULL
UNION ALL SELECT NULL
UNION ALL SELECT NULL
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 2
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 4
CREATE TABLE tb2(ID int)
INSERT tb2 SELECT NULL
UNION ALL SELECT 1
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 4
A:
SELECT * FROM tb1
SELECT * FROM tb2
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值
结果:
B、我先删除表tb1的是NULL值的行
--DELETE FROM tb1 where id is null
B、
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值
结果:同上A
C、把表tb2的是NULL值的行也删除
--DELETE FROM tb2 where id is null
C、
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);
结果:
这是两张表中都没有NULL值时,得到的结果;
D、在tb1表中插入一条NULL值
D、
SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);
结果:
以上例子说明:
except会去重复, not in 不会(除非你在select中显式指定)
except用于比较的列是所有列, 除非写子查询限制列, not in 没有这种情况
表tb2中如果有null值的话,not in查询得不到值(如:A、B)
表tb1中如果有null值,not in不会查询出这个null值(如:D),而except可以查询到
当然通过对子查询指定不为NULL的话,NOT IN自然会得到值,如:
SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2 WHERE ID IS NOT NULL);
0 0
- SQL中EXCEPT和Not in的区别?
- SQL中EXCEPT和Not in的区别?
- SQL中EXCEPT和Not in的区别
- SQL中EXCEPT和Not IN的区别
- SQL中EXCEPT和Not in的区别?
- SQL中EXCEPT和Not in的区别?
- SQL中EXCEPT和Notin的区别
- SQL关键字 except和except all的含义和区别
- sql中in/not in 和exists/not exists的用法区别
- SQL中Union,Intersect,Except的区别
- SQL中IN和EXISTS用法的区别,sql中exists,not exists的用法
- SQL中IN和EXISTS用法的区别,sql中exists,not exists的用法
- Note:except和except for的区别
- sql中exists,not exists的用法 和in()的区别
- 关于SQL中IN 和NOT IN的用法注意事项
- SQL中exists和in的区别
- SQL中exists和in的区别
- SQL中exists和in的区别
- STL 分配器
- 2014年3月31日,早上,整理和评注何新90年北大演讲
- 开发者养生
- 曝WP8.1 Wi-Fi Sense智能连接功能演示视频
- STL 函数适配器
- SQL中EXCEPT和Not in的区别?
- 每天都泡在网络里
- </br>与<p>区别
- ZJU-PAT 1077. Kuchiguse (20) 浙大2014年上机复试第一题
- 女大学生因睡觉关灯与室友起冲突 被刺8刀已毁容
- 随机洗牌算法
- Ubuntn 操作系统学习笔记之日志介绍
- JavaScript跨域总结与解决办法
- 应该有新的编程起点