Oracle系列七 子查询
2024-10-19 10:30:41
子查询语法
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
- 子查询 (内查询) 在主查询之前一次执行完成。
- 子查询的结果被主查询(外查询)使用 。
示例:
SELECT
last_name
FROM
employees
WHERE
salary > (
SELECT
salary
FROM
employees
WHERE
last_name = 'Abel'
);
注意事项
- 子查询要包含在括号内。
- 将子查询放在比较条件的右侧。
- 单行操作符对应单行子查询,多行操作符对应多行子查询。
子查询类型
单行子查询
- 只返回一行。
- 使用单行比较操作符。
示例:
- 返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
job_id = (
SELECT
job_id
FROM
employees
WHERE
employee_id = 141
)
AND salary > (
SELECT
salary
FROM
employees
WHERE
employee_id = 143
);
在子查询中使用组函数
- 返回公司工资最少的员工的last_name,job_id和salary
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
salary = (
SELECT
MIN(salary)
FROM
employees
);
子查询中的 HAVING 子句
- 首先执行子查询。
- 向主查询中的HAVING 子句返回结果。
- 题目:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT
department_id,
MIN(salary)
FROM
employees
GROUP BY
department_id
HAVING
MIN(salary) > (
SELECT
MIN(salary)
FROM
employees
WHERE
department_id = 50
);
非法使用子查询
子查询中的空值问题
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = (
SELECT
job_id
FROM
employees
WHERE
last_name = 'Haas'
);
多行子查询
- 返回多行。
- 使用多行比较操作符。
在多行子查询中使用 ANY 操作符
示例:返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员
工号、姓名、job_id 以及salary
SELECT
employee_id,
last_name,
job_id,
salary
FROM
employees
WHERE
salary < ANY (
SELECT
salary
FROM
employees
WHERE
job_id = 'IT_PROG'
)
AND job_id <> 'IT_PROG';
在多行子查询中使用 ALL 操作符
示例:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工
的员工号、姓名、job_id 以及salary
SELECT
employee_id,
last_name,
job_id,
salary
FROM
employees
WHERE
salary < ALL (
SELECT
salary
FROM
employees
WHERE
job_id = 'IT_PROG'
)
AND job_id <> 'IT_PROG';
子查询中的空值问题
SELECT
emp.last_name
FROM
employees emp
WHERE
emp.employee_id NOT IN (
SELECT
mgr.manager_id
FROM
employees mgr
);
最新文章
- mysql中boolean类型
- sublime 3 快捷键
- POJ2699 The Maximum Number of Strong Kings
- eclipse安装JS插件
- C# 两行代码实现 延迟加载的单例模式(线程安全)
- JDK环境变量的配置方法
- DIV设置了固定宽高出现文字(文本)的不能自动换行
- Visual Studio 2013 各版本注册码
- mysql数据库文件默认保存目录(windows)
- Android 百度地图 SDK v3.0.0 (一)
- OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现
- 老李案例分享:Weblogic性能优化案例
- Subscription wildcards(MQTT)
- Java反射-修改字段值, 反射修改static final修饰的字段
- JavaScript简单了解
- vue跳转到外部链接
- CallContext,ThreadStatic,AsyncLocal<;T>;,ThreadLocal<;T>;,学习笔记
- Microsoft Office软件自定义安装目录
- / | \ # $ ^ &; *这些符号怎么读
- [LOJ#2878]. 「JOISC 2014 Day2」邮戳拉力赛[括号序列dp]