上章:Oracle入门(十三B)之高级查询(上)
四、常见组函数
SUM、AVG、COUNT、MIN、MAX
分组函数忽略null 值。
不能在WHERE 子句中使用组函数。
MIN 和MAX 可用于任何数据类型;
SUM、AVG只能用于数字数据类型
五、子查询
子 查 询 是 一 个 SELECT语句,它嵌入到另一个SELECT 语句的子句中。子查询在主查询之前执行一次。主查询(也称外部查询)使用子查询的结果。
有两种类型的子查询
- 单行子查询,该查询使用单行运算符(>、=、>=、<、<>、<=)并仅从内部查询返回一行
- 多行子查询,该查询使用多行运算符(IN、ANY、ALL)并从内部查询返回多行
(1)单行的子查询
A.想查找最迟入职的员工信息Select *
From employees
Where hire_date = (select max(hire_date)from employees);
B.想查找有多少位员工在多伦多工作?
子查询:
select count(*)
from employees
where department_id =
(
select department_id
from departments D,locations L
where D.location_id = L.location_id
and L.city = 'Toronto'
)
连接:
select count(*)
from employees E, departments
D,locations L
where E.department_id = D.department_id
and D.location_id = L.location_id
and L.city = 'Toronto'
(2)多行的子查询
查找所有的程序员和会计的基本信息
select *
from employees
where job_id in(select job_idfrom jobswhere job_title='Programmer'or job_title='Accountant');
六、Top-N-Analysis
Top-N-Analysis 是一种SQL 运算,用于对结果进行排序。如果您希望从查询返回的结果集中检索前n 个记录,Top-N-Analysis 会很有用。
语法:
select 列名1...列名n
from (select 列名1...列名n
from 表名
order by 列名1 ... 列名n )
where rownum <= n ( 抽 出 记 录 数 )
order by rownum asc
查找出雇员表里面前三条记录
select *
from ( select *
from employees
order by last_name)
Where rownum <=3
Order by rownum asc
七、集合查询
有时候,您希望将多个表合并到一个输出结果中。如果对表进行联接,则只会获得返回的匹配行,但如果不希望联接这些表,或因联接将导致错误结果而不能进行联接时,应如何处理
(1)并集
(2)并集 重复
(3)交集
(4)差集
使用集合运算符时的规则
- 列的个数及列的数据类型在查询使用的所有SELECT 语句中必须相同。
- 可以用null和常量来填充缺失的列
- 列名不必相同。
- 输出中的列名取自第一个SELECT 语句中的列名。因此,若要在最终报表中显示某个列别名,应在第一个语句中输入该列别名。