MYSQL8子查询

子查询:sql里面嵌套sql

通常情况下,SQL多表查询(Join)子查询效率高。
这是因为在使用子查询时,需要执行多个查询语句,而在使用关联查询时只需要执行单个查询语句。

当使用子查询时,子查询语句将被执行一次,并返回一个结果集,这个结果集将用于主查询中的条件判断。如果主查询中有多个条件需要使用子查询返回的结果集进行比较,那么就需要执行多个子查询语句,这会大大降低查询效率。

相比之下,使用关联查询时,所有的查询条件都包含在单个查询语句中。这样可以减少查询的次数,提高查询效率。此外,关联查询还可以利用索引来加速查询,进一步提高查询效率。

尽管关联查询通常比子查询效率更高,但在某些特定情况下,子查询可能会更加适合。例如,当需要在查询结果中动态计算数据或者需要使用聚合函数来汇总数据时,使用子查询会更加方便和灵活。
image.png


语法格式

-- 子查询---根据学生ID查询学生姓名
-- 子句是查询 年级=70 且是计算机系的学生id
SELECT id,
    name
FROM student
WHERE id =(
        SELECT stu_id
        FROM score
        WHERE c_name = '计算机'
            AND grade = 70
    );

示例:


查询年龄最大的员工信息

image.png


查询哪个员工的部门编号时1001或1002

image.png


查询研发部和销售部的员工信息

image.png


子查询关键字

image.png


ALL

ALL 本质用and 取最大值
在这里插入图片描述

  1. ALL子句中 > ALL代表大于最大值
  2. ALL子句中 < ALL代表小于最小值

image.png
image.png


ANY/SOME

ANY 本质用OR 取最小值

  1. ANY子句 表示父查询只需要任意匹配一条子查询结果就可执行
  2. ANY子句中 = ANY(子查询) 与IN同意
  3. ANY子句中 > ANY代表大于最小值
  4. ANY子句中 < ANY代表小于最大值

image.png
image.png


IN

image.png
image.png
image.png
image.png


EXISTS

image.png


CTE通用表表达式(Common Table Expressions)

https://www.qycn.com/xzx/article/582.html

复杂的查询会使用嵌入式表,例如:

SELECT t1.*, t2.* FROM
	 (SELECT col1 FROM table1) t1,
	 (SELECT col2 FROM table2) t2;

而有了 CTE,我们可以这样写:

WITH
 t1 AS (SELECT col1 FROM table1),
 t2 AS (SELECT col2 FROM table2)
SELECT t1.*, t2.* 
FROM t1, t2;

这样看上去层次区域都更加分明,改起来也更清晰的知道要改哪一部分。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

识途老码

赞赏是第一生产力

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

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

打赏作者

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

抵扣说明:

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

余额充值