子查询语法

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
);

最新文章

  1. mysql中boolean类型
  2. sublime 3 快捷键
  3. POJ2699 The Maximum Number of Strong Kings
  4. eclipse安装JS插件
  5. C# 两行代码实现 延迟加载的单例模式(线程安全)
  6. JDK环境变量的配置方法
  7. DIV设置了固定宽高出现文字(文本)的不能自动换行
  8. Visual Studio 2013 各版本注册码
  9. mysql数据库文件默认保存目录(windows)
  10. Android 百度地图 SDK v3.0.0 (一)
  11. OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现
  12. 老李案例分享:Weblogic性能优化案例
  13. Subscription wildcards(MQTT)
  14. Java反射-修改字段值, 反射修改static final修饰的字段
  15. JavaScript简单了解
  16. vue跳转到外部链接
  17. CallContext,ThreadStatic,AsyncLocal&lt;T&gt;,ThreadLocal&lt;T&gt;,学习笔记
  18. Microsoft Office软件自定义安装目录
  19. / | \ # $ ^ &amp; *这些符号怎么读
  20. [LOJ#2878]. 「JOISC 2014 Day2」邮戳拉力赛[括号序列dp]

热门文章

  1. JS正则表达式提取数字
  2. Order by 默认排序方式
  3. 【linux-command】Chrome安装linux-command插件
  4. node基础学习——http基础知识-01-客户单请求
  5. Django项目中使用qq第三方登录。
  6. jmeter脚本中请求参数获取的几种方式
  7. Python练习——约瑟夫环问题、用类方法描述一个数字时钟
  8. 读取yaml文件小方法
  9. 浏览器 Web Storage - sessionStorage &amp; localStorage
  10. 如何调试 Windows 服务