【Oracle数据库】表查询(三)

来源:互联网 发布:新东方背单词软件 编辑:程序博客网 时间:2024/06/06 21:03

Oracle的复杂查询

5.子查询

嵌套在其他sql语句中的查询语句,也叫嵌套查询

a.单行子查询

只查询一行数据的子查询语句

如何显示与SMITH同一部门员工的信息?

子查询(SMITH所在的部门)

select department from emp where empname='SMITH';

将子查询的结果添加到sql语句

执行,看下结果:

b.多行子查询

返回多行数据的子查询

如何查询做10号部门所包含的工作的员工信息?

我们先看10号部门都含有哪些岗位


然后我们找到做这些工作的员工,没错,都是做这三个岗位的。


c.在多行子查询中使用 all/any 操作符

如何显示工资比30号部门所有员工的工资都高的员工信息


当然,我们还可以使用Max函数,而且该方法的执行速度比使用all要来的快

如何显示工资比30号部门的任意一个员工的工资高(高于最低)的员工信息


当然也可以使用min函数而且执行速度更快

d.多列子查询

如何查询岗位与部门和SMITH完全相同的所有雇员,注意列的顺序必须前后对应。


e.在from语句中使用子查询

如何查询比自己所在部门的平均工资高的员工信息?

整理一下思路先:

首先,得到自己所在部门的平均工资,这样,我们得到了一张表


然后将这张表当做一张子表,进行多表查询


请揣摩理解一下。

from语句中使用子查询时,该子查询会被当做一个视图来对待,因此叫做“内嵌视图”,当在from语句中使用子查询时 ,必须给子查询制定别名。

6.分页查询

Oracle的分页查询有三种方式,这里介绍其中的一种,rownum方式,该方法的查询速度低于rowid方式,但比rowid方式少一层select嵌套。

以查询emp表的第6~10行数据为例

第一步:将要查询的表表示为内嵌视图

from (select * from emp) a1

第二步:取1~10行的数据

注意这里rownum列的别名rn不可省,方便后续的操作。

可不可以直接在后面加条件 and rownum>=6 进行分页呢?不可以,between也不好使,这就是Oracle机制决定的,没办法。

第三步:将第二步获得的表表示为内嵌视图,再按rownum进行分页


思考,如果我只想查询指定列呢?如果我要按照指定列排序呢?如何修改sql语句?

如果想改变查询的行数范围,修改两个限定参数就可以了



执行,看下结果:
0 0
原创粉丝点击