A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wendyYao 中级黑马   /  2017-9-28 17:18  /  1655 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wendyYao 于 2017-9-28 17:19 编辑

exists:强调的是是否返回结果集,exists引导的子句有结果集返回,只有有结果集返回,那么exists这个条件算成立了。
not exists:和exists相似,但是exists是当sql返回结果集的时候为真,而not exists 是sql不返回结果集的时候为真;
下面详细描述一下exists的过程:
首先创建两个表,分别是t1和t2,如下:
create table t1(
id int;
name varchar(20)
)charset=utf8;
create table t2(
id int;
aid int,
name varchar(20)
)charset=utf8;

插入数据:
insert into t1 values(1,'A1'),(2,'A2'),(3,'A3'),(5,'A4');
insert into t1 values(1,1,'A1'),(2,,2'A2'),(3,3,'A3'),(6,6,'A6');
查看两张表:
表A和表B是1对多的关系 A.ID => B.AID

SELECT ID,NAME FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.ID=t2.AID)
执行结果为

原因可以按照如下分析
SELECT ID,NAME FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t2.AID=1)
--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据

SELECT ID,NAME FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE t2.AID=2)
--->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据

SELECT ID,NAME FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t2.AID=3)
--->SELECT * FROM t2 WHERE t2.AID=3有值返回真所以有数据

SELECT ID,NAME FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t2.AID=5)
--->SELECT * FROM t2 WHERE t2.AID=5没有值返回假所以没有数据

NOT EXISTS 就是反过来
SELECT ID,NAME FROM t1 WHERE NOT EXISTS (SELECT * FROM t2 WHERE t1.ID=t2.AID)
执行结果为

1.jpeg (74.94 KB, 下载次数: 27)

1.jpeg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马