当前位置:   article > 正文

MySQL子查询_所有的子查询都可以用连接查询代替

所有的子查询都可以用连接查询代替

子查询又称为嵌套查询,它是指在一个select语句中包含另一个或多个完整的select语句。
子查询的语法规则:

  • 子查询需要用圆括号括起来。
  • 子查询最多可以嵌套到32层(个别查询可能会不支持32层嵌套)。
  • 执行顺序由内到外,先执行内部的子查询,再执行外部的主查询。
子查询的分类

按照子查询返回的结果,可分为:

  • 标量子查询:返回的结果是一个数据(单行单列)
  • 行子查询:返回的结果是一行(单行多列)
  • 列子查询:返回的结果是一列(多行单列)
  • 表子查询:返回的结果是一张临时表(多行多列)

子查询出现的位置

  • select子句中:将子查询返回的结果作为主查询的计算字段(标量子查询、列子查询)
  • where或having子句中:将子查询返回的结果作为主查询的筛选条件(标量子查询、行子查询、列子查询)
  • from子句中:将子查询返回的结果作为主查询的一张表(标量子查询、行子查询、列子查询、表子查询)
子查询常用运算符

子查询出现在where或having子句中时,可以使用>、>=、<、<=、=、<>/!=等比较运算符或[not ]in、any/some、all、[not ]exists等操作符进行条件筛选。
在这里插入图片描述

子查询的使用

标量子查询:查询基本工资高于公司平均工资的员工信息

mysql> select *
    -> from emp
    -> where sal > (select avg(sal) from emp);
+-------+-------+-----------+------+------------+------+------+--------+
| empid | ename | job       | mgr  | hiredate   | sal  | comm | deptno |
+-------+-------+-----------+------+------------+------+------+--------+
|  7566 | jones | manager   | 7839 | 1981-04-02 | 2975 | NULL |     20 |
|  7698 | blake | manager   | 7839 | 1981-05-01 | 2850 | NULL |     30 |
|  7782 | clark | manager   | 7839 | 1981-06-09 | 2450 | NULL |     10 |
|  7788 | scott | analyst   | 7566 | 1987-04-19 | 3000 | NULL |     20 |
|  7839 | king  | persident | NULL | 1981-11-17 | 5000 | NULL |     10 |
|  7902 | ford  | analyst   | 7566 | 1981-12-03 | 3000 | NULL |     20 |
+-------+-------+-----------+------+------------+------+------+--------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

行子查询:查询和smith同部门同职位的员工

mysql> select *
    -> from emp
    -> where (deptno,job) = (select deptno,job from emp where ename='smith') 
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/792974
推荐阅读
相关标签
  

闽ICP备14008679号