mysql子查询_MySQL子查询

MySQL子查询

什么是子查询

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

体验子查询

create tabletb1 (

numtinyint not null

);

create tabletb2 (

numtinyint not null

);

insert intotb1values(1), (3), (5), (6), (7), (8);

insert intotb2values(2), (4), (5), (6), (7);

ANY、SOME子查询

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

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

select*fromtb1wheretb1.num>any(selecttb2.numfromtb2);

2998b7778090150a7a39a06f73828a47.png

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

ALL子查询

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

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

select*fromtb1wheretb1.num>all(selecttb2.numfromtb2);

8e7ee9436471806201e95a6dfddc368c.png

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

EXISTS子查询

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

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

select*fromtb1whereexists(selecttb2.numfromtb2wheretb2.num=10);

3b02b5f944a4f151cc512f36502453ea.png

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

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

IN子查询

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

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

select*fromtb1wheretb1.numin(selecttb2.numfromtb2);

123c01b3533f477d2eaef5f2821c4598.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值