oracle+如何子查询,oracle如何查看函数

oracle 子查询什么意思?

子查询:

创新互联专注于平山网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供平山营销型网站建设,平山网站制作、平山网页设计、平山网站官网定制、小程序开发服务,打造平山网络公司原创品牌,更为您提供平山网站排名全网营销落地服务。

子查询的话就是 其实就是嵌套查询的意思 一个查询语句嵌套在另一个查询语句 中 那么称该查询语句为子查询

例子如下:

1、如:select * from tab1 where id in (select id form tab2 where ... )

上面括号中的查询句子就属于“子查询”。

链接里是子查询的一些方法

多表查询:指从多个源标中检索数据

2、select tab1.*, tab2.* from tab1, tab2 where tab1.[字段]=tab2.[字段]

这里属于“多表查询”。

这里比较详细的介绍了多表查询

Oracle数据库的子查询关键字该怎么使用?

一、

伪列就像Oracle中的一个表列,但实际上它并未存储在表中。伪列可以从表中查询,但是不能插入、更新或删除它们的值。常用的伪列:rowid和rownum。

Rowid:数据库中的每一行都有一个行地址,Rowid伪列返回该行地址。可以使用Rowid值来定位表中的一行。通常情况下,Rowid值可以唯一地标识数据库中的一行。

Rowid伪列有以下重要用途:

1)能以最快的方式访问表中的一行;

2)能显示表的行是如何存储的。

3)可以作为表中行的唯一标识。

如:SQL

select

rowid,ename

from

emp;

Rownum:对于一个查询返回的每一行,Rownum伪列返回一个数值代表的次序。返回的第一行的Rownum值为1,第二行的Rownum值为2,依此类推。通过使用Rownum伪列,用户可以限制查询返回的行数。

如:SQLselect

*

from

emp

where

rownum11;

从EMP表中提取10条记录

二、

oracle中不支持select

top

n

from

tablename

查询,但是通过

order

by

rownum

组合可以实现此功能。例如:SELECT 列名1...列名n FROM

(SELECT 列名1...列名n FROM

表名

ORDER

BY

列名1...列名n)

WHERE

ROWNUM

=

N(抽出记录数)

ORDER

BY

ROWNUM

ASC

oracle使用(五)_子查询_分页rownum

sql允许多次嵌套,子查询即嵌套其他查询中得查询

可把子查询返回结果理解成一张表,外层查询会把子查询返回的结果当成一张表

子查询要用括号括起来

将子查询放在比较运算符的右边,增强可读性

子查询的分类:

单行子查询:子查询返回一行记录,可使用单行比较运算符

多行子查询:子查询返回多行记录

--有哪些雇员薪水在平均薪水之上

--1、先求平均薪水

select avg(nvl(e.sal,0)) from emp e;

--2.把所有人的薪水和平均薪水作比较,使用的单行比较运算符

select * from emp e where e.sal (select avg(nvl(e.sal,0)) from emp e);

-- 查询雇员表哪些人是经理人

-- 1.先查询所有经理人 distinct去重(多行子查询)

select distinct e.mgr from emp e;

--2.在雇员表中过滤是经理的

select * from emp where empno in (select distinct e.mgr from emp e);

-- 每个部门的平均薪水等级

--1.求出每个部门的平均薪水等级

select e.deptno,avg(nvl(e.sal,0)) from emp e group by e.deptno;

--2.根据部门平均薪水断出薪水等级

select g.deptno,sg.grade from salgrade sg join (select e.deptno,avg(nvl(e.sal,0)) avgsal from emp e group by e.deptno) g on g.avgsal between sg.losal and sg.hisal;

--1.求平均薪水最高的部门的部门编号

-- 求部门平均薪水

select e.deptno,avg(nvl(e.sal,0)) from emp e group by e.deptno;

-- 求最高的薪水

select max(t.vsal) from (select e.deptno,avg(nvl(e.sal,0)) vsal from emp e group by e.deptno) t;

-- 求部门编号(重复的sql可以抽取为视图)

select t.deptno,t.vsal from (select e.deptno,avg(nvl(e.sal,0)) vsal from emp e group by e.deptno) t where t.vsal = (select max(t.vsal) from (select e.deptno,avg(nvl(e.sal,0)) vsal from emp e group by e.deptno) t);

)

--2.求部门的平均薪水的等级

--3.求部门平均的薪水等级 (薪水等级的平均)

--求每个人的薪水等级

select e.deptno, sg.grade

from emp e

join salgrade sg

on e.sal between sg.losal and sg.hisal;

--求部门的平均薪水等级

select t.deptno, avg(t.grade)

from (select e.deptno, sg.grade

from emp e

join salgrade sg

on e.sal between sg.losal and sg.hisal) t

group by t.deptno;

--4.求薪水最高的前5名员工

-- 所有员工薪水降序

select * from emp e order by e.sal desc;

-- oracle中没有limit子句,rownum只存在于查询出来的虚拟表中

select * from (select * from emp e order by e.sal desc) t where rownum =5;

--5.求薪水最高的第6到10名

-- 默认对于基表 rownum,跟插入顺序有关

select rownum rn,t.* from emp t;

-- 对于子查询rownum跟内层查询的顺序有关

--rn顺序是根据内层查询记录进行分配的

select rownum rn,t.* from (select * from emp e order by e.sal desc) t;

-- 根据rn顺序来过滤第6到10条

select * from (select rownum rn,t.* from (select * from emp e order by e.sal desc) t) t1 where t1.rn 5 and t1.rn =10;


网站名称:oracle+如何子查询,oracle如何查看函数
网站地址:http://scyanting.com/article/dsihdhi.html