exists

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赵敏

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论