GreatSQL社区

搜索

KAiTO

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

KAiTO 已有 409 次阅读2022-10-9 16:40 |个人分类:零基础学习数据库|系统分类:其他

一、子查询的使用

  • 子查询指一个查询语句嵌套在另一个查询语句内部的查询 需求:查询谁的工资比id=2的高?
方式1mysql> 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 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-12-21 21:40 , Processed in 0.016405 second(s), 10 queries , Redis On.
返回顶部