Oracle查询技巧:ROWNUM分页与多表查询解析
3星 · 超过75%的资源 需积分: 3 45 浏览量
更新于2024-07-27
收藏 653KB PPTX 举报
"韩顺平oracle笔记"
在Oracle数据库中,`ROWNUM`是一个非常重要的概念,它是Oracle为查询结果的每一行分配的行号。在描述的示例中,我们看到如何利用`ROWNUM`来实现分页查询。例如,如果我们要获取雇员表中的第6到第10行记录,可以通过以下两种方式实现:
1. `select * from (select e.*,rownum rn from emp e where rownum<=10) where rn >5;`
2. `select * from (select e.*,rownum rn from (select * from emp) e where rownum<=10) where rn >5;`
这两种方法都是通过先筛选出前10行数据,然后进一步过滤出第6到第10行。其中,外层查询用于过滤行号,内层查询用于获取原始数据。这种方式被称为基于`ROWNUM`的分页,是最快速的方法之一。
Oracle提供了多种分页方式,但`ROWNUM`通常被认为是效率较高的。不过需要注意的是,`ROWNUM`在选择时是按数据读取顺序分配的,因此如果查询中包含排序,可能会导致预期之外的结果。为了避免这种情况,排序应放在内层查询中。
多表查询是数据库操作中的常见操作,它允许从多个表中获取信息。例如,如果我们需要显示雇员名、工资以及他们所在的部门名字,可以使用如下的SQL语句:
```sql
select a1.ename, a1.sal, a2.dname
from emp a1, dept a2
where a1.deptno = a2.deptno;
```
这里,`emp`表和`dept`表通过`deptno`字段关联,形成了一个内连接查询,返回了雇员名、工资和部门名的组合。
如果需要对特定部门(例如部门编号为10)的员工信息进行查询,可以添加额外的条件:
```sql
select a1.ename, a1.sal, a2.dname
from emp a1, dept a2
where a1.deptno = a2.deptno and a1.deptno = 10;
```
在查询中,我们还可以结合其他表,比如`salgrade`表,来获取员工的工资级别:
```sql
select a1.ename, a1.sal, a2.grade
from emp a1, salgrade a2
where a1.sal between a2.losal and a2.hisal;
```
在查询结果中进行排序也很简单,例如按照部门名称降序排列:
```sql
select a.ename 雇员姓名, a.sal 雇员工资, b.dname 部门名称
from emp a, dept b
where a.deptno = b.deptno
order by b.dname desc;
```
此外,自连接是一种特殊的查询方式,它允许在一个表上执行连接操作。例如,要显示某个员工的上级领导的姓名,我们可以这样写:
```sql
select worker.ename, boss.ename
from emp worker, emp boss
where worker.mgr = boss.empno;
```
如果要查找特定员工(如FORD)的上级领导,可以在查询中添加额外的条件:
```sql
select worker.ename, boss.ename
from emp worker, emp boss
where worker.mgr = boss.empno AND worker.ename = 'FORD';
```
最后,子查询(单行查询)是将一个`SELECT`语句嵌套在另一个`SELECT`语句中,以获取所需的数据。这种技术在复杂查询中非常有用,可以用来过滤、计算或比较数据。例如,如果我们想知道工资高于平均工资的员工,可以使用单行子查询来获取平均工资,然后与主查询比较:
```sql
select * from emp
where sal > (select avg(sal) from emp);
```
以上就是关于Oracle数据库中`ROWNUM`的使用,多表查询、自连接以及子查询的一些基本知识。这些技巧对于处理复杂的数据库操作至关重要。
117 浏览量
2011-09-13 上传
2011-08-25 上传
2011-08-25 上传
2011-08-26 上传
2011-08-25 上传
2011-09-13 上传
2011-09-13 上传
2011-09-13 上传
fay625
- 粉丝: 16
- 资源: 6
最新资源
- BeatTheBotChallenge:来挑战这个玩摩托赛车电话游戏的机器人,看看它是如何制造的,并帮助改进它!
- GetHtmlTool:Qt初步获取网页原始码
- StudentClass,java怎么看源码,javap2p网贷源码下载
- 宠物播种机
- zeromq-4.2.0.tar.zip
- nginx-http-concat:WordPress插件可将单个脚本文件CSS和Javascript连接成一个资源请求
- 高级JSON表单规范第2章:输入小部件
- angularjs-studies
- city-generator:C ++ City Generator
- SocketProject:SocketProject
- crawl_html:python网络爬虫-爬网页原始码
- 手写 Volley 网络访问框架
- living-with-django:关于容忍最臃肿的python web框架的博客
- RestaurantsAppWithCollectionViews
- SkeSubDomain:利用递归归,通过匹配网页源码里的子域内容收集所有的子域信息,可收集四级五级等多级子域名
- portfolio:我的投资组合网站,其中包含我的所有工作