数据是Oracle数据库默认的数据
各个字段含义:雇员编号,部门,职位,管理者编号,入职日期,工资,奖金,部门id
-
要求查询工资最高的雇员信息。
-- 要求查询工资最高的雇员信息。 select max(SAL) from emp --查询得到最高工资 select * from emp where SAL=(select max(SAL) from emp) --以最高工资为条件,查询员工
-
要求查询工资高于部门20中所有员工的雇员信息。
-- 要求查询工资高于部门20中所有员工的雇员信息。 select SAL from emp where DEPTNO=20 --查询得到部门20的所有工资信息 select max(SAL) from (select SAL from emp where DEPTNO=20) --使用max()查询得到最高的工资 select * from emp where DEPTNO!=20 --查询得到除部门20外的所有员工信息 --整合 select * from (select * from emp where DEPTNO!=20) where SAL>(select max(SAL) from (select * from emp where DEPTNO=20))
-
查询各部门中工资最低的雇员信息。(关联子查询)
注意:这里直接使用in关键字时存在一个问题,要使用关联子查询!!!这个题很容易想到,先查询各部门最低工资,然后使用in关键字进行匹配得到工资最低的雇员信息。但是也很容易忽视在查询各部门最低工资时得到的数据是不包含部门的,在进行匹配的时候,如果两部门中有多个相同的工资值(条件)就会出现错误,这里默认数据库中不同部门是没有相同的工资值,所以练习的时候很容易忽视。
PS:我就忽视了,不然你以为我会写个例子么,╮(╯▽╰)╭
-- 查询各部门中工资最低的雇员信息。 select min(SAL) from emp group by DEPTNO --使用group by语句得到的是各部门最低工资(注意,数据中不包含部门信息) select * from emp where SAL in (select min(SAL) from emp group by DEPTNO) -- 因为上面查询的只有一个工资字段(包含三条工资数据),所以这里使用in 关键字时存在一个问题(当两部门中有多个相同的工资值时会产生错误的结果) --解决办法,关联子查询 select DEPTNO,min(SAL) from emp group by DEPTNO --这里查询时加了一个DEPTNO字段,可以查询出两个字段(部门和最低工资)的表 select * from emp e,(select DEPTNO,min(SAL) minSAL from emp group by DEPTNO)s -- 换行时记得加空格 where e.DEPTNO=s.DEPTNO and e.SAL=s.minSAL --关联两个表中的部门和工资,注意:min(SAL)不能作为字符进行关联,需要设定别名
-
查询负责管理其他雇员的管理员信息。
--查询负责管理其他雇员的管理员信息。 select MGR from emp group by MGR --得到管理员的员工编号 select * from emp where EMPNO in (select MGR from emp group by MGR) --根据管理员的员工编号进行查询,得到管理员信息