大数据学习(108)-子查询

🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


相关子查询会针对外层查询的每一行单独执行,而不是一次性完成所有子查询操作。

这意味着子查询的执行次数等于外层查询表的行数。

SQL语句

SELECT department_name
FROM departments d
WHERE 5 < (
    SELECT COUNT(*)
    FROM employees e
    WHERE d.department_id = e.department_id
);

执行过程

  1. 外层查询逐行处理

    • 外层查询从 departments 表中逐行读取数据,每次处理一个部门。

    • 每次处理时,d.department_id 是当前行的部门ID,d.department_name 是当前行的部门名称。

  2. 子查询针对当前行执行

    • 对于外层查询的每一行(即每个部门),子查询都会被触发并执行。

    • 子查询的作用是统计与当前部门(d.department_id)匹配的员工数量

      SELECT COUNT(*)
      FROM employees e
      WHERE d.department_id = e.department_id
    • 子查询的结果是一个数字,表示当前部门的员工数量。

  3. 条件判断

    • 外层查询的 WHERE 子句会检查子查询返回的员工数量是否大于5

      WHERE 5 < (子查询的结果)
    • 如果条件满足,则将当前部门的 department_name 添加到结果集中。

  4. 重复上述步骤

    • departments 表中的每一行重复上述步骤,直到所有部门都被处理完毕。

关键点:相关子查询

  • 相关子查询是指子查询中引用了外层查询的表(在这个例子中是 d.department_id)。

  • 相关子查询会针对外层查询的每一行单独执行,而不是一次性完成所有子查询操作。

  • 这意味着子查询的执行次数等于外层查询表的行数。

示例执行过程

假设 departments 表中有3个部门,执行过程如下:

  1. 处理第一个部门(department_id = 1

    • 子查询统计部门1的员工数量

      SELECT COUNT(*)
      FROM employees e
      WHERE e.department_id = 1

      假设结果是3。

    • 判断条件 5 < 3 不满足,部门1的名称不会被选中。

  2. 处理第二个部门(department_id = 2

    • 子查询统计部门2的员工数量

      SELECT COUNT(*)
      FROM employees e
      WHERE e.department_id = 2

      假设结果是2。

    • 判断条件 5 < 2 不满足,部门2的名称不会被选中。

  3. 处理第三个部门(department_id = 3

    • 子查询统计部门3的员工数量

      SELECT COUNT(*)
      FROM employees e
      WHERE e.department_id = 3

      假设结果是6。

    • 判断条件 5 < 6 满足,部门3的名称会被选中。

最终结果

最终结果是所有满足条件(员工数量大于5)的部门名称。

总结

  • 子查询的执行时机:子查询是在外层查询的每一行上动态执行的,而不是先独立完成所有子查询操作。

  • 相关子查询的特点:子查询中引用了外层查询的表,因此每次执行时都会根据外层查询的当前行进行计算。

  • 执行顺序:外层查询逐行处理,每行触发一次子查询,然后根据子查询的结果判断是否满足条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值