MySql之子查询

之前在学SQL Server时没有对sql子查询有个详细的了解,现对子查询有了进一步学习,总结如下:

根据第二个子语句的返回值分类,MySql一共可以分为4种(单一值、一列、一行、表(即多行多列))

1、子查询返回单一值

示例表的结构如下(下面都是同一张表):


查询条件为:查询上课days最多的教师的姓名、性别。SQL语句即结果如下:


2、子查询返回一列

查询条件为:查询教过php0228班的教师的信息。SQL语句即结果如下:


其中与in类似的,还有any、all、some,any代表任何一个,all代表所有,some和any同义词

=any (集合)等于集合中任何一个即可,等同于in


!=all (集合)不等于集合中的所有元素,等同于not in


注:!=any没有啥意义(不等同于not in


3、子查询返回一行

查询条件为:查询与李白教过php0115班的性别和班级相同的教师的信息(有点绕,直接看代码吧~~意思明白就行了~~)。SQL语句即结果如下:


4、子查询返回一个表

通常用在from形子查询中使用

select * from (table) where cond;


外部查询所使用的列名,是由子查询指定。

5、Exists

Exists(subquery)

判断依据:

如果子查询的可以返回数据,则认为Exists表达式返回真,否则,返回假。

示例:

两个表:



(1)子查询:


(2)其实该查询也可以这样:select * from teacher_class where id in(select t_id from teacher)  (稍微可以理解)


比较:

Exists:先获得每一条teacher_class的数据,然后获得id字段,去teacher表内查找对应值,找到,说明符合条件的

in:先获得所有的id的可能性。再在检索teacher_class数据时,判断当前的id是否在id集合内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_Jing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值