MySQL子查询

MySQL子查询

什么是子查询

子查询是指一个查询语句嵌套在另一个查询语句的内部,将select语句的结果作为另外一个查询语句的条件。子查询的操作符有any(some)、all、in、exists。子查询可以添加到select、update和delete语句中。子查询的作为条件可以使用比较运算符。

体验子查询

create table tb1 (
  num tinyint not null
);
create table tb2 (
  num tinyint not null
);
insert into tb1 values (1), (3), (5), (6), (7), (8);
insert into tb2 values (2), (4), (5), (6), (7);

 

ANY、SOME子查询

any和some效果是一样的,表示只要满足子条件的任意一条记录即可。

 

查询要求:查询出tb1中大于tb2中任意一个值的记录。

 

select * from tb1 where tb1.num > any(select tb2.num from tb2);

 

解析SQL:tb1.num > any(select tb2.num from tb2) any表示只要tb1的值大于tb2的任意一条记录的num就满足条件。

ALL子查询

all和any以及some不同,any和some只要满足一条记录就可以,all是要和表的所有数据比较,都要满足才可以。

 

查询要求:查询出tb1中大于tb2所有值得记录。

 

select * from tb1 where tb1.num > all(select tb2.num from tb2);

 

解析SQL:tb1.num > all(select tb2.num from tb2) all关键字表示tb1.num的值要大于all中查询出来的tb2的所有记录的值,只有8可以满足条件。

EXISTS子查询

exists关键字后面的参数是一条任意完整的子查询,系统对子查询运算如果返回行,那么就只需外层的运算,如果没有就不执行。

 

查询要求:如果tb2的num有大于10的,就查询tb1的所有记录

 

select * from tb1 where exists (select tb2.num from tb2 where tb2.num = 10);

 

解析SQL:exists后面的sql语句返回空结果,表示没有大于10的记录,结果是false。所有前面的语句就不执行。

 

exists表示子查询返回值就执行,如果是相反就使用not exists。

IN子查询

in子查询的内层值返回一列值,这个数据列的值提供给外层做比较。

 

查询要求:查询在tb1和tb2中都存在的值

 

select * from tb1 where tb1.num in (select tb2.num from tb2);

 

SQL解析:tb2的num数据查询出来后,tb1的num会比较是否在tb2的结果中。

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie
应支付0元
点击重新获取
扫码支付

支付成功即可阅读