17 SQL语言——子查询与关键字in

Posted Scorpicat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17 SQL语言——子查询与关键字in相关的知识,希望对你有一定的参考价值。

子查询

单行子查询


--使用时机:筛选条件并不明确需要执行一次查询,并且查询结果只有一个字段并只有一个值
--注意:where子句中允许出现查询语句,该查询语句称为子查询
--例1:查询所有比雇员‘CLARK’工资高的员工信息。
--普通两步:
select sal from emp where ename=‘CLARK‘;--得到2450
select* from emp where sal>2450;
--使用子查询:
select * from emp where sal>(select sal from emp where ename=‘CLARK‘);
--例2:查询工资高于平均工资的员工的名字和工资
select ename,sal from emp where sal>(select avg(sal) from emp);
--例3:查询和scott属于同一部门且工资比他低的员工资料
select * from emp where sal<(select sal from emp where ename=‘SCOTT‘);
--例4:查询工资最高的员工资料
select * from emp where sal=(select max(sal) from emp);
--例5:查询职务和scott相同,雇佣时间早的员工信息
select * from emp where hiredate<(select hiredate from emp where ename=‘SCOTT‘);
--例6:查询工资比scott高或者雇佣时间早的员工编号和姓名
select *
from emp
where hiredate<(select hiredate from emp where ename=‘SCOTT‘)
or (sal>(select sal from emp where ename=‘SCOTT‘));
;

多行子查询

--any任意一个
--all所有
--例7:查询工资高于 任何一个 CLERK的所有员工的员工信息
  --单行子查询方式:

  • select * from emp where sal>(select min(sal) from emp where job=‘CLERK‘) order by empno;

  --多行子查询方式:

  • select * from emp where sal> any(select sal from emp where job=‘CLERK‘)order by empno;

--例8:查询工资高于 所有 SALESMAN的员工信息
  --单行子查询方式

  • select * from emp where sal>(select max(sal) from emp where job=‘SALESMAN‘) order by empno;

  --多行子查询方式

  • select * from emp where sal >all(select sal from emp where job=‘SALESMAN‘) order by empno;

in关键字

in相当于 =any

例如   select * from emp where deptno in(10,20);

以上是关于17 SQL语言——子查询与关键字in的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 子查询转换为包含 IN、DISTINCT 关键字的 LINQ 格式

在 SQL 语句中将“IN”与子查询一起使用

使用EXISTS关键字引入的子查询与IN关键字引入的子查询在语法上都有哪些不同?

MySQL--5子查询与连接小结

SQL之子查询

MySQL-SQL基础-子查询