子查询(嵌套子查询)
where子句:子查询返回结果为 单行单列,单行多列,多行单列 (往往使用in,any,all)操作符
having子句:子查询返回结果 单行单列 数据,同时为了使用统计函数操作
from子句:子查询返回结果为 多行多列 ,可以按照一张 数据表(临时表) 的形式操作
select子句:了解即可,可以通过别的子句形式完成。
rownum子句:只能执行<=运算,不能执行>或者between and 区间的运算,与order by连用时,要先使用order by排序(建立个临时表)。
范例(where):
1.查询基本工资比ALLEN低的全部雇员信息
a.找到ALLEN的工资,返回一个 单行单列 的数据
b. 在where子句中里面使用子查询
2.查询与雇员7566从事统一工作且领导相同的的全部雇员信息
a.找到7566的工作和领导,返回 单行多列 的数据
b.在where子句中里面使用子查询
3.查询工资与每个部门中最低工资相同的全部雇员信息
a.查出每个部门最低工资是多少,返回 多行单列 的数据。
b.用where子句(in)
c.如果在in中子查询返回值有NULL,那么不会影响,但如果是not in 中子查询有null,那么不会返回任何值,用nvl函数(nvl(mgr,100))
4.空数据判断
在sql中提供了一个exists结构用于判断子查询是否有数据返回,如果子查询中有数据返回,则exists结构返回ture,反之返回false
范例(having)
1.查询每个部门平均工资最高的的部门名称及平均工资(最高的平均工资,肯定是统计函数的嵌套)
a.先求出部门平均工资最高的那个平均工资,返回的是 单行单列 的数据
范例(from)
1.查询薪金比ALLEN或clark多的所有员工的编号,姓名,基本工资,部门名称,领导姓名,部门人数。
a.找出所需要的表
emp:员工的编号,姓名,基本工资
dept:部门名称
emp:领导姓名
emp:统计部门人数
范例(select)
1.查询每个部门的编号,名称,位置,部门人数,平均工资
范例(rownum)
1.查询工作在CHICAGO并且入职日期最早的前2,名员工姓名,入职日期。
分页查询
练习
1.查询工资高于编号7782的员工工资,并且和7396号员工工作相同的员工编号,姓名,工资。
2.查询工资最高的员工姓名,和工资。
3.查询部门工资高于10号部门最低工资的部门编号,部门名称,及部门最低工资。
4.查询员工工资为其部门最低工资的员工编号和姓名及工资。
5.显示经理是KING的员工姓名,工资。
6.显示比员工SMITH参加工作是时间晚的员工姓名,工资,参加工作的时间。
7.使用子查询方式查询那些职员在NEW YORK工作。
8.写一个查询显示和员工SMITH工作在同一个部门的员工的姓名,日期,不包括SMITH。
9.写一个查询显示其工资比全体职员平均工资高的员工编号,姓名。
10.查询显示上级领导是KING的员工,姓名
同第五题
11.显示所有工作在RESEARCH部门的员工姓名,职位。
12.查询每个部门的部门编号,平均工资,要求部门平均工资大于20号部门的平均工资。
13.查询大于自己部门平均工资的员工姓名,工资,所在部门平均工资,高于部门平均工资的额度。
14.列出至少有一个雇员的所有部门。
15.列出薪金比'SMITH'多的所有雇员。
16.列出入职日期早于其直接上级的所有雇员。
17.找员工姓名和直接上级姓名。
18.显示每个部门的最高工资的员工。
19.显示工资最高的员工参加工作时间晚的员工姓名,参加工作时间。
20.显示每位经理管理员工的最低工资,及最低工资者的姓名。
21.显示平均工资最高部门的平均部门名称及平均工资。