mysql使用--子查询

1.标量子查询
将一个查询结果集中只含一行,行中只有一列的结果集称为标量结果集。
标量结果集可以作为数值参与到另一个查询中。
如:SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '狗哥');

2.列子查询
将一个查询结果集中包含多行,但行只有一列的结果集称为列子查询。
如:SELECT * FROM student_score WHERE number IN (SELECT number FROM student_info WHERE major = '计算机科学与工程');

3.行子查询
将一个查询结果集中包含一行,但行包含多列的结果集称为行子查询。
如:SELECT * FROM student_score WHERE (number, subject) = (SELECT number, 'MySQL是怎样运行的' FROM student_info LIMIT 1);

4.表子查询
将一个查询结果集中包含多行,行中包含多列的结果集称为表子查询。
如:SELECT * FROM student_score WHERE (number, subject) IN (SELECT number, 'MySQL是怎样运行的' FROM student_info WHERE major = '计算机科学与工程');

5.EXISTSNOT EXISTS子查询

运算符示例描述
EXISTSEXISTS (SELECT …)当子查询结果集不是空集时表达式为真
NOT EXISTSNOT EXISTS (SELECT …)当子查询结果集是空集时表达式为真

6.不相关子查询,相关子查询
若子查询可以独立运行并产生结果,则之后再拿结果参与外层查询,这种子查询称为不相关子查询。
如:SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '狗哥');

有时我们需要在子查询的语句中引用外层查询的列,这样的话,这种子查询称为相关子查询。
如:SELECT number, name, id_number, major FROM student_info WHERE EXISTS (SELECT * FROM student_score WHERE student_score.number = student_info.number);
针对上述相关子查询的运作规律为:
1.基于FROM得到结果集1
2.对结果集1中每一行执行WHERE过滤,过滤通过时,行加入结果集2。这里的过滤是在行确定下,针对其执行EXISTS语句。
3.对结果集2中每一行执行SELECT语句,得到最终结果集。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

raindayinrain

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

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

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

打赏作者

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

抵扣说明:

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

余额充值