1.介绍
不相关子查询:其查询条件不依赖于父查询的子查询称为不相关子查询。
相关子查询:其查询条件取决于外部父查询的属性值的子查询称为相关子查询。Exists子查询是一个相关子查询。
Exists代表存在量词:带有exists的子查询不返回任何记录的数据,只返回逻辑值“真”或“假”。
★相关子查询的执行过程:首先取外层查询中“学生表”的第一行记录,使用该记录的相关属性值(在exists子查询中的where)
子句中使用的列)用于处理内层查询。如果外层的where子句返回“true”,则该记录被放入结果表中。然后记录下一行,
重复上述过程,直到遍历完外部表。
2.存在和不存在
Exists语句不关心子查询返回的具体内容,所以用“exists(select 1 from)”来判断子查询是否返回记录。
Exists (select):如果子查询的结果集不是空,Exists()表达式返回true;当子查询的结果集是空时,exists()表达式返回false。
Note Exists (select):如果子查询的结果集不是空,则Note Exists()表达式返回false;当子查询的结果集是空时,not exists()表达式返回true。
3.案例
表a(主表)
–
id名称
1刘旺
2李涛
3鱼枷
4赵敏
–
表b(来自表)
–
id_b性别
1名女性
2名男子
3名女性
4名妇女
–
测试:得到一个女人的名字。
①exists语句:
select * from a where exists(select 1 from b where a . id = b . id _ b,gender = & # 39女& # 39;);
②不存在声明:
select * from a where not exist(select 1 from b where a . id = b . id _ b and gender & lt;& gt'女& # 39;);
③在声明中:
select * from a where id in(select id _ b from b where gender = & # 39;女& # 39;);
④不在语句中:
select * from a where id not in(select id _ b from b where gender & lt;& gt'女& # 39;);
以上查询结果是:
–
id名称
1刘旺
3鱼枷
4赵敏
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。