03-DQL-关联子查询

starrylsi
2024-09-07 / 0 评论 / 20 阅读 / 正在检测是否收录...

# 目标

掌握 EXISTS 和 IN关键字的使用
关联子查询中 子查询的每一次结果 都需要主查询传递一个值 供子查询运算

应用场景

使用 EXISTS:
当你只关心子查询是否至少返回一行,而不关心返回了多少行时。
当子查询可能返回大量数据,但只需要确认存在性时。
当你想要优化查询性能,避免不必要的数据加载和处理时。

使用 IN:
当你需要检查外层查询中的值是否在子查询返回的一组值中时。
当你需要确保外层查询的值与子查询返回的值完全匹配时

案例1

  • 了解sql语句的执行顺序,以及理解多行子查询的含义
#查询出谁比自身部门平均工资高

解释多行子查询

案例2

  • 理解EXISTS关键字
  • 由于数据库中多行子查询中频繁出现 = any或者in关键字 会导致查询效率降低
  • 所以数据库提供了一个新的关键字解决该问题 exists
  • exists关键字 为了提高效率 只判断是否存在 是一个布尔值判断 不需要子查询返回列
  • WHERE EXISTS (...)
    这是一个条件表达式,用于检查括号内的子查询是否返回至少一行数据。如果子查询返回至少一行,那么 EXISTS 条件为真,外层查询的相应行将被包括在结果集中。

谁与john同部门

SELECT employee_id,first_name,department_id FROM employees
WHERE department_id IN 
(SELECT department_id FROM employees WHERE first_name = 'John');

SELECT employee_id,first_name,department_id FROM employees e1
WHERE EXISTS 
(SELECT 1 FROM employees e2 
WHERE first_name = 'John' AND e1.`department_id` = e2.`department_id`);
0

评论 (0)

取消