0基础学MySQL数据库—从小白到大牛(8)子查询


一、子查询的使用

  • 子查询指一个查询语句嵌套在另一个查询语句内部的查询
    需求:查询谁的工资比id=2的高?
方式1
mysql> SELECT salary
    -> FROM salary
    -> WHERE userid = '2';
+---------+
| salary  |
+---------+
| 2000.00 |
+---------+
1 row in set (0.00 sec)

mysql> SELECT userid,salary
    -> FROM salary
    -> WHERE salary > 2000;
+--------+---------+
| userid | salary  |
+--------+---------+
|      3 | 3000.00 |
|      4 | 4000.00 |
|      5 | 5000.00 |
+--------+---------+
3 rows in set (0.00 sec)

方式2 自连接
mysql> SELECT s1.userid,s1.salary FROM salary s1 JOIN salary s2 ON s1.userid = '2' AND s2.salary > s1.salary;
+--------+---------+
| userid | salary  |
+--------+---------+
|      2 | 2000.00 |
|      2 | 2000.00 |
|      2 | 2000.00 |
+--------+---------+
3 rows in set (0.00 sec)

方式3 子查询
mysql> SELECT userid,salary
    -> FROM salary
    -> WHERE salary > (
    ->                 SELECT salary
    ->                 FROM salary
    ->                 WHERE userid = '2'
    ->             );
+--------+---------+
| userid | salary  |
+--------+---------+
|      3 | 3000.00 |
|      4 | 4000.00 |
|      5 | 5000.00 |
+--------+---------+
3 rows in set (0.00 sec)

1.2子查询的基本使用

称谓的规范:外查询(或主查询)、内查询(或子查询)

  • 子查询在主查询之前执行完成。
  • 子查询的结果被主查询使用
  • 注意
    • 子查询要在括号内
    • 将子查询放在比较的右侧
    • 单行操作符对应当行子查询,多行操作符对应多行子查询

2.子查询的分类

分类方式1:
我们按内查询的结果返回一条还是多条记录,将子查询分为 单行子查询多行子查询
分类方式2:
我们按内查询是否被执行多次,将子查询划分为相关(或关联)子查询不相关(或非关联)子查询
相关子查询与非相关子查询的区别:

​ 子查询只执行一次,后这个结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询
​ 子查询需要执行多次,再将结果反馈给外部,这种方式就称为相关子查询

2.1单行子查询

单行操作符:

  • =
  • !=、>、>=
  • <
  • <=
    如果子查询返回NULL则主查询也会返回NULL

2.2多行子查询

  • 也称为集合比较子查询
  • 内查询返回多行
  • 使用多行比较操作符
  • 多行子查询的操作符:IN ANY ALL SOME(同ANY)。
操作符含义
IN等于列表中的任意一个
ANY需要和单行比较操作符一起使用,和子查询返回某一个值比较
ALL需要和单行比较操作符一起使用,和子查询返回所有值比较
SOME实际上是ANY的别名,作用相同,一般用ANY
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白努力学数据库

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

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

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

打赏作者

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

抵扣说明:

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

余额充值