Oracle学习笔记(三)

本学习笔记包括组函数,分组查询,嵌套查询的内容
一、组函数(统计函数)
分组函数作用于一组数据,并对一组数据返回一个值。常见的分组函数如下:
Count():查询表中的数据记录
Avg():求出平均值
Sum():求和
Max():求最大值
Min():求最小值
注意:Count()返回的永远都是一个具体的数字,当为空是会返回0。组函数中无法使用NVL(……)
二、分组查询
一般情况下,当数据重复的时候分组才有意义,即使一个人也可以一组(没什么意义)
基本格式:Select[Distinct] *|Column_1 …… | 组函数
From tabel1 tab1, ……
Where 条件(s)
Group by Column_1 ……
Having 分组后的过滤条件(s1)
Order By Column_x Asc | Desc, Column_x Asc | Desc
注意:在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。
Where:是在执行GROUP BY操作之前进行的过滤,表示从全部数据之中筛选,在WHERE之中不能使用统计函数;
Having:是在GROUP BY分组之后的再次过滤,可以在HAVING子句中使用统计函数;
eg:Select worker_id, Max(worker_salary) Max_Salary
From employees
Where worker_id > 100
Group by worker_id
Having Max(worker_salary) > 10000
Order By Max(worker_salary) Desc
三、嵌套查询(子查询)
嵌套查询 = 简单查询 + 限定查询 + 多表查询 + 统计查询的综合体。
子查询 (内查询) 在主查询之前一次执行完成。子查询的结果被主查询(外查询)使用 。
子查询要包含在括号内。将子查询放在比较条件的右侧。
单行操作符对应单行子查询,多行操作符对应多行子查询。
1)单行子查询
子查询结果只返回一行。使用单行比较操作符(>, <, >=, <=, <>)。
eg:Select last_name, job_id, salary
From employees
Where job_id =
(Select job_id
From employees
Where employ_id = 114)
And salary >
(Select salary
From employees
Where employee_id = 115)
2)多行子查询
子查询结果返回多行。使用多行比较操作符(In, Any, All)。
其中:In 等于列表中的任意一个;Any 和子查询返回的某一个值比较;All 和子查询返回的所有值比较
eg1: 返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
Select employee_id, employee_name, job_id, salary
From empoyees
Where salary < Any
(Select salary
From employees
Where job_id = ‘IT_PROG’)
And job_id <> ‘IT_PROG’
eg2:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id 以及salary
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = ‘IT_PROG’)
AND job_id <> ‘IT_PROG’;
注意事项:=ANY:功能与IN操作符是完全一样的;

ANY:比子查询中返回记录最小的还要大的数据;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章