----GROUP BY
该函数实现了分组,通常情况,当SELECT 语句后面有 表中数据 和 组函数 时,会用到分组,而且是用表中数据来分的组,
说的有点绕嘴,举个例子就明白了:
SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
当看别人的语句时 只要记住GROUP BY 翻译成 “每个” ,语句就好理解了。
有GROUP BY 时,语句的排序为:
SELECT 4
FROM 1
WHERE 2
GROUP BY 3
ORDER BY 5
----HAVING
针对于上一个GROUP BY 而出现的函数,功能类似于WHERE ,但是WHERE不能出现在组函数中,也就是说,组函数中的条件不能由WHERE指定,
而是用 HAVING 指定的,仅限于关于组函数的限制条件。如果条件不是组函数的限制条件是,要放在where中,提高效率。
----当使用GROUP BY 或者 DISTINCT 时,ORDER BY 中要排序的列必须在SELECT 中出现。
----组函数嵌套
1.组函数嵌套必须用 GROUP BY
2.组函数嵌套时,除了组函数嵌套列,不能出现其他列。
3.组函数嵌套只能直接出现在SELECT语句中。
----FROM 子查询
----伪表:创建表时,oracle自动为表添加的列。
----ROWID:保存数据的地址;
----ROWNUM:行号,查询时,只能从1开始查,否则返回0行数据。
例如: SELECT LAST_NAME,SALARY
FROM ( SECECT LAST_NAME,SALARY FROM EMPLOYEES ORDER BY SALARY ASC )
WHERE ROWNUM<=5;
意思是查询工资最低的前五个人。
----成对子查询
查询每个部门收入最高的员工的last_name,department_id,salary
SELECT LAST_NAME,DEPARTMENT_ID,SALARY
FROM EMPLOYEES
WHERE (DEPARTMENT_ID,SALARY) IN ( SELECT DEPARTMENT_ID,MAX( SALARY ) FROM EMPLOYEES GROUP BY DEPARTMENT_ID );