oracle 数据库4——高级查询
2017-04-11 14:08
288 查看
1. 常见高级查询有哪些?
高级查询 | 细分 | |
---|---|---|
子查询 | 子查询在 where 子句 | |
子查询在 having 子句 | ||
子查询在 from 子句 | ||
子查询在 select 子句 | ||
分页查询 | ROWNUM | |
使用子查询进行分页 | ||
分页与 order by | ||
DECODE 函数 | DECODE 函数基本语法 | |
DECODE 函数在分组查询中的应用 | ||
排序函数 | ROW_NUMBER /RANK /DENSE_RANK | |
高级分组函数 | ROLLUP/ CUBE/ GROUPING SETS | |
集合操作 | UNION | 取并集,不会有重复 |
UNIONALL | 取并集,重复的会出现 | |
INTERSECT | 取交集 | |
MINUS | 取差集 |
2.常用的高级查询详解
子查询子查询中如果某个字段是表达式,则该字段必须给别名,否则会报错。
子查询在 where 子句中
--查看谁的工资高于 CLARK? select sal,name from emp where sal>(select sal from emp where name='CLARK'); --查看与 CLARK 职位相同的员工 slect name,job from emp where job=(select job from emp where name='CLARK') and name <>'CLARK';
子查询在 having 中
--查看部门的平均工资,前提是该部门的平均工资要高于或等于20部门的平均工资 select AVG(sal),deptno from emp group by deptno having AVG(sal)>=(select AVG(sal) from emp where deptno=20);
子查询在 from子句 中
如果要在一个子查询的结果中继续查询,则子查询出现在 from 子句中,这个子查询页称作行内视图或者匿名视图。
--查询出薪水比本部门平均薪水高的员工信息 select * from emp e,(select AVG(sal) avg_sal,deptno from emp group by deptno)t where e.deptno = t.deptno and e.sal>t.avg_sal order by e.deptno DESC;
子查询在 select 子句中
可以认为是外连接的另一种表现形式,使用更灵活
SELECT e.ename,e.sal,(SELECT d.dname FROM dept_qhj d WHERE d.deptno=e.deptno) dname FROM emp_qhj e
分页查询
当查询数据量过大时,会导致响应速度慢,资源消耗大等问题,所以常常采用分页查询的方式分段将数据查询出来。
分页查询不同的数据库可能完全不同,是方言
ROWNUM,伪列,不存在于任何一张表中,但所有表都可以查询该字段,该字段的值是可以动态生成的,是在查询表生成结果集的过程中动态产生值的。原则上从 1 开始,逐次递增,在查询过程中,只要能从表中查询出一条记录,ROWNUM 的值就是该记录的行号。
在使用 ROWNUM为结果集编行号的查询过程中,不要做 ROWNUM>1 的过滤判断,否则将得不到任何结果。
select rownum ,name,sal from emp where rownum <3; select * from (select rownum rn,name,sal from emp) where rn between 5 and 10; --??????效率低 SELECT * FROM (SELECT ROWNUM rn ,t.* FROM (SELECT ename,sal,job FROM emp_qhj ORDER BY sal DESC) t) WHERE rn BETWEEN 6 AND 10 --效率高 SELECT * FROM (SELECT ROWNUM rn,t.* FROM (SELECT ename,sal,job FROM emp_qhj ORDER BY sal DESC) t WHERE ROWNUM<=10) WHERE rn>=6 --分页查询(page:表示显示第几页 size:每页显示多少条数据) start : (page - 1)*size + 1 end:page*size
DECODE 函数
1. DECODE 函数可以实现简单的分支效果
2. DECODE函数可以在SELECT 子句,GROUP BY 子句,ORDER BY 子句中使用
3. 注意DECODE在SELECT子句中作为参数
SELECT ename,job,sal, DECODE(job, 'MANAGER',sal*1.2, 'ANALYST',sal*1.1, 'SALESMAN',sal*1.05, sal )bonus --别名 FROM emp_qhj
相关文章推荐
- Laravel 数据库实例教程 —— 使用查询构建器实现对数据库的高级查询
- 源码-Oracle数据库管理-第十七章-动态SQL语句-Part 3(多行查询语句)
- oracle 数据库的常用查询对象
- Oracle sqlserver MySQL三种数据库查询分页语句
- Oracle高级查询之分组统计
- 源码-Oracle数据库管理-第九章-SQL查询-Part 1(基本查询)
- 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
- 常用oracle 数据库查询 重要!!
- oracle 数据库随机返回查询纪录
- Oracle学习—数据库分页查询
- Oracle高级查询
- oracle高级查询
- sqlserver、oracle 查询当前数据库有多少张用户表
- oracle 查询当前数据库database,初始新建用户system用户名无法连接db,没开锁;新建用户和密码--授权
- Oracle - 数据库字符集的查询
- oracle查询练习(高级)
- Oracle 11g学习笔记--高级查询
- 查询oracle数据库的数据库名、实例名、ORACLE_SID
- ORACLE创建数据库链接时,查询时出现无法无法解析指定的连接标示符
- oracle查询数据库名、实例名等