SQL查詢語句之子查詢2

2、 ANY操作:一共分為三種形式:

◆ =ANY:功能與IN操作一樣

查詢 工資 與經(jīng)理們的工資 相同的 所有雇員信息

SELECT * FROM emp

WHERE sal =ANY(

SELECT sal FROM emp WHERE job='MANAGER' ) ;

◆ >ANY:比 子查詢返回的最小值 要大

查詢工資比經(jīng)理們之中的最低工資 要高的 所有雇員信息

SELECT * FROM emp

WHERE sal >ANY(

SELECT sal FROM emp WHERE job='MANAGER' ) ;

查詢 工資 比經(jīng)理們之中的最高工資 要低的 所有雇員信息

SELECT * FROM emp

WHERE sal

SELECT sal FROM emp WHERE job='MANAGER' ) ;

3磅废、 ALL操作:一共分為兩種形式:

◆ >ALL:比 子查詢返回的最大值 要大

查詢 工資 比經(jīng)理們之中的最高工資 要高的 所有雇員信息

SELECT * FROM emp

WHERE sal >ALL(

SELECT sal FROM emp WHERE job='MANAGER' ) ;

查詢 工資 比經(jīng)理們之中的最低工資 要低的 所有雇員信息

SELECT * FROM emp

WHERE sal

SELECT sal FROM emp WHERE job='MANAGER' ) ;

在實(shí)際的開發(fā)之中映穗,WHERE子句中,出現(xiàn)子查詢的幾率诈胜,是很高的豹障。

【在HAVING子句里面使用子查詢(次重點(diǎn))】

如果子查詢可以在HAVING子句里面出現(xiàn),那么焦匈,只有一種情況血公,子查詢返回的是單行單列數(shù)據(jù),并且需要進(jìn)行統(tǒng)計(jì)函數(shù)計(jì)算的時(shí)候缓熟。

范例:查詢出高于公司平均工資的職位名稱累魔、職位人數(shù)、平均工資

◆ 找出公司的平均工資

SELECT AVG(sal) FROM emp ;

◆ 以上的查詢返回的是單行單列够滑,一般返回單行單列的數(shù)據(jù)垦写,只會(huì)在WHERE或HAVING子句里面出現(xiàn),但依據(jù)此題的要求彰触,應(yīng)該是在HAVING子句里面使用梯投。

SELECT job, COUNT(empno), AVG(sal)

FROM emp

GROUP BY job

HAVING AVG(sal)>(

SELECT AVG(sal) FROM emp ) ;


在進(jìn)行HAVING操作的過程之中,子查詢返回的數(shù)據(jù)况毅,不會(huì)過于的復(fù)雜分蓖。

【在SELECT子句里面使用子查詢(了解)】

子查詢可以出現(xiàn)在SELECT子句里面,只不過尔许,大部分的開發(fā)者么鹤,如果不是萬不得已的時(shí)候,絕對(duì)不會(huì)這么去做的味廊。

范例:查詢每個(gè)雇員的編號(hào)午磁、姓名尝抖、職位、部門名稱

◆ 如果迅皇,按照以前學(xué)習(xí)的多表查詢昧辽,來做此題:

SELECT e.empno, e.ename, e.job, d.dname

FROM emp e, dept d

WHERE e.deptno=d.deptno ;

◆ 如果,在SELECT子句里面使用子查詢登颓,來做此題:

SELECT e.empno, e.ename, e.job,

( SELECT d.dname FROM dept d WHERE d.deptno=e.deptno )

FROM emp e ;

每當(dāng)有一行emp的數(shù)據(jù)出現(xiàn)搅荞,那么,就要查詢一次dept表框咙,等于是你用戶自己發(fā)出了一次的查詢指令咕痛,

但是,卻變?yōu)榱恕?+N”次查詢喇嘱,(如果emp表有100行數(shù)據(jù)茉贡,就會(huì)查詢100次dept表),這種操作者铜,一般不會(huì)有人去使用腔丧。

【在FROM子句里面使用子查詢(重點(diǎn))】

如果子查詢返回的結(jié)構(gòu)是多行多列的數(shù)據(jù),那么作烟,就相當(dāng)于是一張臨時(shí)表的形式愉粤,所以,可以直接在FROM子句里面使用拿撩,下面回顧一個(gè)原始的題目衣厘。

范例:查詢出每個(gè)部門名稱、位置压恒、部門人數(shù)

◆ 之前影暴,可以通過多表查詢,而后探赫,進(jìn)行多字段分組實(shí)現(xiàn):

SELECT d.dname, d.loc, COUNT(e.empno)

FROM emp e, dept d

WHERE e.deptno(+)=d.deptno

GROUP BY d.dname, d.loc ;

但是以上的功能坤检,也可以使用子查詢實(shí)現(xiàn)。

◆ 改善做法期吓,利用子查詢完成早歇。

● 查詢出部門的編號(hào)、名稱讨勤、位置箭跳,此查詢只需要dept一張表就夠了。

SELECT d.deptno, d.dname, d.loc FROM dept d ;

● 統(tǒng)計(jì)出每個(gè)部門的編號(hào)潭千、人數(shù)谱姓,此查詢只需要emp一張表就夠了。

SELECT deptno, COUNT(empno)

FROM emp GROUP BY deptno ;

● 通過以上的兩個(gè)查詢結(jié)果發(fā)現(xiàn)刨晴,可以在部門編號(hào)上屉来,找到聯(lián)系:

子查詢 的列名稱 不使用 別名 ( 會(huì)報(bào)錯(cuò) )

SELECT d.dname, d.loc, temp.COUNT(empno)

FROM dept d, (

SELECT deptno, COUNT(empno)

FROM emp

GROUP BY deptno ) temp

WHERE d.deptno=temp.deptno(+) ;

子查詢 的列名稱 使用 別名

SELECT d.dname, d.loc, temp.count

FROM dept d, (

SELECT deptno, COUNT(empno) count

FROM emp

GROUP BY deptno ) temp

WHERE d.deptno=temp.deptno(+) ;

● 利用NVL( )函數(shù)路翻,將null替換為0

SELECT d.dname, d.loc, NVL( temp.count , 0 )

FROM dept d, (

SELECT deptno, COUNT(empno) count

FROM emp

GROUP BY deptno ) temp

WHERE d.deptno=temp.deptno(+) ;

疑問? 發(fā)現(xiàn)多表查詢也可以實(shí)現(xiàn)統(tǒng)計(jì)茄靠,子查詢也能夠?qū)崿F(xiàn)統(tǒng)計(jì)茂契,那么,哪種方式好呢慨绳?

為了可以更好的解釋這個(gè)問題掉冶,假設(shè)將數(shù)據(jù)表中的數(shù)據(jù)擴(kuò)大100倍,即:此時(shí)假設(shè)emp表有1400條記錄脐雪,而dept表有400條記錄厌小。

◆ 使用多表查詢及分組統(tǒng)計(jì):

● emp表的1400條 × dept表的400條 = 560,000條記錄

◆ 使用子查詢:

● 子查詢的數(shù)據(jù)量:只使用emp的1400條記錄,最多返回400行統(tǒng)計(jì)結(jié)果战秋。

(因?yàn)殍笛牵硬樵儯前凑誩mp表中的部門編號(hào)deptno來進(jìn)行分組統(tǒng)計(jì)的脂信。

子查詢癣蟋,返回的是400個(gè)部門的部門編號(hào),和每個(gè)部門所對(duì)應(yīng)的雇員人數(shù)吉嚣。

所以,子查詢蹬铺,返回的是400行記錄尝哆。)

● 子查詢的返回?cái)?shù)據(jù)量400條 × dept表的400條 = 160,000條記錄

● 兩個(gè)操作,加在一起甜攀,最多只操作了:160,400條記錄秋泄。

在實(shí)際的工作之中,子查詢的主要目的是解決多表查詢所帶來的性能問題规阀,所以恒序,在開發(fā)之中,使用是最多的谁撼。

在編寫代碼的過程之中歧胁,我們很少直接去關(guān)注 多表查詢,但是厉碟,我們都會(huì)關(guān)注 子查詢喊巍,用 子查詢 來改善 多表查詢 所帶來的 笛卡爾積 過多的問題。

在FROM子句出現(xiàn)子查詢箍鼓,一般還有一種情況:

“在整個(gè)查詢語句之中崭参,需要使用到統(tǒng)計(jì)函數(shù),但是款咖,又無法直接去使用統(tǒng)計(jì)函數(shù)的時(shí)候何暮,可以先在FROM子句里面利用子查詢實(shí)現(xiàn)統(tǒng)計(jì)”奄喂。

【總結(jié)】

復(fù)雜查詢 = 簡單查詢 + 限定查詢 + 多表查詢 + 分組統(tǒng)計(jì)查詢 + 子查詢。

如果是子查詢海洼,首先考慮的一定是WHERE或FROM子句里面出現(xiàn)子查詢的操作跨新,像SELECT子句,幾乎是可以忽略掉的贰军,而HAVING子句出現(xiàn)子查詢玻蝌,只有在使用統(tǒng)計(jì)函數(shù)的時(shí)候,才會(huì)使用词疼。

子查詢俯树,最大的作用是: 解決多表查詢所帶來的笛卡爾積影響的性能問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贰盗,一起剝皮案震驚了整個(gè)濱河市许饿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舵盈,老刑警劉巖陋率,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異秽晚,居然都是意外死亡瓦糟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門赴蝇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菩浙,“玉大人,你說我怎么就攤上這事句伶【Ⅱ撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵考余,是天一觀的道長先嬉。 經(jīng)常有香客問我,道長楚堤,這世上最難降的妖魔是什么疫蔓? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮身冬,結(jié)果婚禮上鳄袍,老公的妹妹穿的比我還像新娘。我一直安慰自己吏恭,他們只是感情好拗小,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樱哼,像睡著了一般哀九。 火紅的嫁衣襯著肌膚如雪剿配。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天阅束,我揣著相機(jī)與錄音呼胚,去河邊找鬼。 笑死息裸,一個(gè)胖子當(dāng)著我的面吹牛蝇更,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呼盆,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼年扩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了访圃?” 一聲冷哼從身側(cè)響起厨幻,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腿时,沒想到半個(gè)月后况脆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡批糟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年格了,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徽鼎。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盛末,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纬傲,到底是詐尸還是另有隱情满败,我是刑警寧澤肤频,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布叹括,位于F島的核電站,受9級(jí)特大地震影響宵荒,放射性物質(zhì)發(fā)生泄漏汁雷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一报咳、第九天 我趴在偏房一處隱蔽的房頂上張望侠讯。 院中可真熱鬧,春花似錦暑刃、人聲如沸厢漩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溜嗜。三九已至宵膨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炸宵,已是汗流浹背辟躏。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留土全,地道東北人捎琐。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像裹匙,于是被迫代替她去往敵國和親瑞凑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容