网站建设资讯

NEWS

网站建设资讯

vb.net循环引用,vbs 循环语句

ORACLE中的 多表查询 子查询如何写啊?求详解 亿分感谢....

你这问题也问得太笼统了吧?

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的忠县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

多表查询:select a.* from tb_a a,tb_b b

where a.aid=b.bid

and ...;

子查询:select * from (select * from tb);

select a.* from tb_a a

where a.aid in(select b.bid from tb_b);

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子查询怎么使用呀

SELECT B.DEPTNO,COUNT(B.ENAME) FROM EMP B,(Select DEPTNO,AVG(SAL) SAL_A FROM EMP GROUP BY DEPTNO) A WHERE B.SAL A.SAL_A AND A.DEPTNO = B.DEPTNO

试一下,看看是否好用。

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


分享名称:vb.net循环引用,vbs 循环语句
网页网址:http://cdweb.net/article/hsghgg.html