数据库学习

108 阅读2分钟

数据库学习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。