MySQL基础-标量子查询

963 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天点击查看活动详情

子查询

概述

概念

  • SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
  • SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );
  • 子查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个。

分类

  • 根据子查询结果不同,分为:
  1. 标量子查询(子查询结果为单个值)
  2. 列子查询(子查询结果为一列)
  3. 行子查询(子查询结果为一行)
  4. 表子查询(子查询结果为多行多列)
  • 根据子查询位置,分为:
  1. WHERE之后
  2. FROM之后
  3. SELECT之后

标量子查询

  • 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。常用的操作符:= <> > >= < <=

案例:

查询 "销售部" 的所有员工信息完成这个需求时,我们可以将需求分解为两步:

  1. 查询 "销售部" 部门ID
  • select id from dept where name = '销售部';
  1. 根据 "销售部" 部门ID, 查询员工信息
  • select * from emp where dept_id = (select id from dept where name = '销售部');

查询在 "方东白" 入职之后的员工信息完成这个需求时,我们可以将需求分解为两步:

  1. 查询 方东白 的入职日期
  • select entrydate from emp where name = '方东白';
  1. 查询指定入职日期之后入职的员工信息
  • select * from emp where entrydate > (select entrydate from emp where name = '方东白');

列子查询

  • 子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
  • 常用的操作符:IN 、NOT IN 、 ANY 、SOME 、 ALL
操作符描述
IN在指定的集合范围之内,多选一
NOT IN不在指定的集合范围之内
ANY子查询返回列表中,有任意一个满足即可
SOME与ANY等同,使用SOME的地方都可以使用ANY
ALL子查询返回列表的所有值都必须满足