前言

           本章将学习sql语句的子查询,首先回顾sql的使用时机:

--单表查询:
  --当需要的数据在一张表中,考虑使用单表查询
--多表联合查询:
  --当需要查询的数据分布在多张表中,考虑使用多表联合
--子查询学习:
  --使用时机:当查询的筛选条件不明确时,考虑使用子查询。

范例

1.单行子查询

--使用时机:筛选条件不明确需要执行一次查询,并且查询结果一个字段并值只有一个
--注意:where子句中允许出现查询语句,该查询语句称为子查询
--使用:select 内容 from 表名 where 字段名 比较运算符 子查询语句

sql server 查询结果多行转多列 sql多行子查询_表名

2.多行子查询

--使用:子查询的结果只有一个字段但是字段有n个值,考虑使用多行子查询,其实就是使用关键字
       --关键字1:any 任意
            --select 内容 from 表名 where 字段名 比较运算符 any 子查询语句
       --关键字2:all 所有
            --select 内容 from 表名 where 字段名 比较运算符 all 子查询语句
       --关键字3:in 表示任意存在,相当于 = any  
            --select 内容 from 表名 where 字段名 in 子查询语句   
            --select 内容 from 表名 where 字段名 not in 子查询语句 

sql server 查询结果多行转多列 sql多行子查询_子查询_02

附录:子查询示例

--查询emp表
select * from emp;
--回顾
--单表查询——当我们需要的数据在一张表中,考虑使用单表查询
--多表联合查询——当我们需要的数据在多张表中,考虑使用多表联合查询
--子查询——当筛选条件不明确时,考虑使用子查询

--单行子查询
--查询平均工资
select avg(sal) from emp;
--单行子查询语法
--select 内容 from 表名 where 字段 比较运算符 (子查询)
--查询工资高于平均工资的人员信息
select * from emp where sal > (select avg(sal) from emp);

--多行子查询
--子查询的结果不只是一个
--职位为CLERK的所有员工工资
select sal from emp where job = 'CLERK';
--关键字 any 任意
--查询工资高于任意一个职位为CLERK的员工信息
select * from emp where sal > any (select sal from emp where job = 'CLERK');

--关键字 all 所有
--查询工资高于所有职位为CLERK的员工信息
select * from emp where sal > all (select sal from emp where job = 'CLERK');

--查询部门20中和部门10中工作一样的员工信息
select job from emp where deptno=10;
--关键字 in 包含
select * from emp where job in (select job from emp where deptno=10) and deptno=20;

附录:操作视频


SQL语法之子查询