多行查询、多列查询、相关查询

2019-04-14  本文已影响0人  骏龙ll

说法拆分为逻辑,一种说法可以变为多种说法

--多行子查询

in

any

all

--多列子查询

查询员工工资为其部门最低工资的员工的编号及员工姓名

select empno,ename

from emp

where(deptno,sal) in (select deptno,min(sal) from emp group by deptno)

--查询可以当表用(需要给查询起表名)

查询比自己部门平均工资高的员工姓名,工资,部门平均工资

select ename,sal,avgsal

from emp e

join (select deptno,avg(sal) avgsal from emp group by deptno) d

on e.deptno=d.deptno

where sal>avgsal

--相关子查询(子查询中用了父查询中的列)

-查询每个部门工资最高的员工姓名,工资

select empno,ename,sal

from emp e

where sal=(select max(sal) from emp where deptno=e.deptno)

-显示部门名称和人数

传统写法

select dname,count(empno)

from emp e

join dept d

on e.deptno=d.deptno

group by dname

相关子查询写法

select dname,(select count(empno) from emp where deptno=d.deptno) renshu

from dept d

--删除学生表中同名的学员,只保留SNO最大的记录(mysql中不能边从一个表中查询边删除,要重命名一个表,如下)

delete from s where sno!=ANY(select * from(select max(sno)

from s

group by sname) m)

上一篇 下一篇

猜你喜欢

热点阅读