数据库学习2024/3/17
子查询
1.案例:
方式1:
SELECT e2.last_name,e2.salary
FROM employees e1,employees e2
WHERE e1.last_name = 'Abel'
AND e1.
salary< e2.salary;
方式2:
SELECT last_name,salary
FROM employees
WHERE salary > ( SELECT salary FROM employees WHERE last_name = 'Abel');
2.子查询的基本使用
--子查询(内查询)在主查询之前一次执行完成。
--子查询的结果被主查询(外查询)使用 。
注意事项
--子查询要包含在括号内
--将子查询放在比较条件的右侧
--单行操作符对应单行子查询,多行操作符对应多行子查询
3.子查询的分类
角度一:单行子查询 vs 多行子查询(从查询返回的结果的条目数判断)
角度二:相关子查询 vs 不相关子查询(内查询是否被执行多次)
相关子查询:查询员工工资大于本部门平均工资的员工信息(返回的值不确定)
不相关子查询:查询员工工资大于本公司平均工资的员工信息(返回的值确定)
4.单行子查询
4.1单行操作符:= > >= < <= <>
过于简单看文档自己看题目
4.2子查询的空值:子查询为空,查询结果也为空
5多行子查询
5.1多行子查询的操作符:IN ANY ALL SOME(ANY相同)
IN:等于列表中的任意一个
ANY:需要和单行比较操作符一起使用,和子查询返回的某一个值比较(例子:> ANY)
ALL:需要和单行比较操作符一起使用,和子查询返回的所有值比较(例子:> ALL)
SOME:是ANY的别名,功能一样
5.2空值问题:当子查询中有NULL,整个的查询结果就为空
6相关子查询
6.1主查询提交一个数据给子查询,子查询与主查询的表连接起来,然后生成新的数据给主查询
结论:在select中,除了group by 和 limit之外,其他位置都可以声明子查询!
6.2 EXISTS(存在) 与 NOT EXISTS关键字
如果在子查询中不存在满足条件的行:
--条件返回 FALSE
--继续在子查询中查找
如果在子查询中存在满足条件的行:
--不在子查询中继续查找
--条件返回 TRUE
NOT EXISTS关键字表示如果不存在某种条件,则返回TRUE,否则返回FALSE。