子查詢:

創(chuàng)新互聯(lián)專注于平山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供平山營(yíng)銷型網(wǎng)站建設(shè),平山網(wǎng)站制作、平山網(wǎng)頁(yè)設(shè)計(jì)、平山網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造平山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供平山網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
子查詢的話就是 其實(shí)就是嵌套查詢的意思 一個(gè)查詢語(yǔ)句嵌套在另一個(gè)查詢語(yǔ)句 中 那么稱該查詢語(yǔ)句為子查詢
例子如下:
1、如:select * from tab1 where id in (select id form tab2 where ... )
上面括號(hào)中的查詢句子就屬于“子查詢”。
鏈接里是子查詢的一些方法
多表查詢:指從多個(gè)源標(biāo)中檢索數(shù)據(jù)
2、select tab1.*, tab2.* from tab1, tab2 where tab1.[字段]=tab2.[字段]
這里屬于“多表查詢”。
這里比較詳細(xì)的介紹了多表查詢
一、
偽列就像Oracle中的一個(gè)表列,但實(shí)際上它并未存儲(chǔ)在表中。偽列可以從表中查詢,但是不能插入、更新或刪除它們的值。常用的偽列:rowid和rownum。
Rowid:數(shù)據(jù)庫(kù)中的每一行都有一個(gè)行地址,Rowid偽列返回該行地址。可以使用Rowid值來(lái)定位表中的一行。通常情況下,Rowid值可以唯一地標(biāo)識(shí)數(shù)據(jù)庫(kù)中的一行。
Rowid偽列有以下重要用途:
1)能以最快的方式訪問(wèn)表中的一行;
2)能顯示表的行是如何存儲(chǔ)的。
3)可以作為表中行的唯一標(biāo)識(shí)。
如:SQL
select
rowid,ename
from
emp;
Rownum:對(duì)于一個(gè)查詢返回的每一行,Rownum偽列返回一個(gè)數(shù)值代表的次序。返回的第一行的Rownum值為1,第二行的Rownum值為2,依此類推。通過(guò)使用Rownum偽列,用戶可以限制查詢返回的行數(shù)。
如:SQLselect
*
from
emp
where
rownum11;
從EMP表中提取10條記錄
二、
oracle中不支持select
top
n
from
tablename
查詢,但是通過(guò)
order
by
和
rownum
組合可以實(shí)現(xiàn)此功能。例如:SELECT 列名1...列名n FROM
(SELECT 列名1...列名n FROM
表名
ORDER
BY
列名1...列名n)
WHERE
ROWNUM
=
N(抽出記錄數(shù))
ORDER
BY
ROWNUM
ASC
sql允許多次嵌套,子查詢即嵌套其他查詢中得查詢
可把子查詢返回結(jié)果理解成一張表,外層查詢會(huì)把子查詢返回的結(jié)果當(dāng)成一張表
子查詢要用括號(hào)括起來(lái)
將子查詢放在比較運(yùn)算符的右邊,增強(qiáng)可讀性
子查詢的分類:
單行子查詢:子查詢返回一行記錄,可使用單行比較運(yùn)算符
多行子查詢:子查詢返回多行記錄
--有哪些雇員薪水在平均薪水之上
--1、先求平均薪水
select avg(nvl(e.sal,0)) from emp e;
--2.把所有人的薪水和平均薪水作比較,使用的單行比較運(yùn)算符
select * from emp e where e.sal (select avg(nvl(e.sal,0)) from emp e);
-- 查詢雇員表哪些人是經(jīng)理人
-- 1.先查詢所有經(jīng)理人 distinct去重(多行子查詢)
select distinct e.mgr from emp e;
--2.在雇員表中過(guò)濾是經(jīng)理的
select * from emp where empno in (select distinct e.mgr from emp e);
-- 每個(gè)部門的平均薪水等級(jí)
--1.求出每個(gè)部門的平均薪水等級(jí)
select e.deptno,avg(nvl(e.sal,0)) from emp e group by e.deptno;
--2.根據(jù)部門平均薪水?dāng)喑鲂剿燃?jí)
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.求平均薪水最高的部門的部門編號(hào)
-- 求部門平均薪水
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;
-- 求部門編號(hào)(重復(fù)的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.求部門的平均薪水的等級(jí)
--3.求部門平均的薪水等級(jí) (薪水等級(jí)的平均)
--求每個(gè)人的薪水等級(jí)
select e.deptno, sg.grade
from emp e
join salgrade sg
on e.sal between sg.losal and sg.hisal;
--求部門的平均薪水等級(jí)
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中沒有l(wèi)imit子句,rownum只存在于查詢出來(lái)的虛擬表中
select * from (select * from emp e order by e.sal desc) t where rownum =5;
--5.求薪水最高的第6到10名
-- 默認(rèn)對(duì)于基表 rownum,跟插入順序有關(guān)
select rownum rn,t.* from emp t;
-- 對(duì)于子查詢r(jià)ownum跟內(nèi)層查詢的順序有關(guān)
--rn順序是根據(jù)內(nèi)層查詢記錄進(jìn)行分配的
select rownum rn,t.* from (select * from emp e order by e.sal desc) t;
-- 根據(jù)rn順序來(lái)過(guò)濾第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如何查看函數(shù)
當(dāng)前地址:http://chinadenli.net/article45/dsihdhi.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、外貿(mào)建站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)