數(shù)據(jù)透視表之SQL高級(jí)查詢(下).xls_第1頁(yè)
數(shù)據(jù)透視表之SQL高級(jí)查詢(下).xls_第2頁(yè)
數(shù)據(jù)透視表之SQL高級(jí)查詢(下).xls_第3頁(yè)
數(shù)據(jù)透視表之SQL高級(jí)查詢(下).xls_第4頁(yè)
數(shù)據(jù)透視表之SQL高級(jí)查詢(下).xls_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一一 子子查查詢?cè)冊(cè)斣斨v講 子查詢的一些特別要注意的地方 1 子查詢必須放在括號(hào)內(nèi) 2 子查詢也必須放在比較操作符號(hào)的右邊 3 子查詢最多可以嵌套到255級(jí) 4 子查詢中不能使用ORDER BY子句 即ORDER BY必須位于查詢的最外層 一 單行子查詢 單行子查詢并不是最后輸出的結(jié)果只能返回一行 而是指子查詢只能返回一行 有一條規(guī)則我們必須記住 當(dāng)我們用 等于 比較操作符把子查詢和父查詢嵌套在一起時(shí) 父查詢期望從子查詢那里只得到一行返回值 例例1 1 查查詢?cè)兯谠诓坎块T門為為 研研究究B B部部 的的職職工工在在職職工工表表中中的的記記錄錄 select from 職工表 where 部門編號(hào) select 部門編號(hào) from 部門表 where 部門 研究B部 其它一些表明是單行子查詢的比較操作符有 二 多行子查詢 多行子查詢 意味著子查詢返回的結(jié)果子集可以是多行 因此 我們通常用集合比較操作符 如 IN NOT IN 把父查詢和子查詢連接起來(lái) 例例2 2 查查詢?cè)兯谠诳乜毓晒煞椒揭砸訟 A開開頭頭的的職職工工在在職職工工表表中中的的記記錄錄 select from 職工表 where 部門編號(hào) in select 部門編號(hào) from 部門表 where 控股方 like A 三 多重嵌套子查詢 例1和例2中 主查詢的WHERE子句中都只有一列 然而 有時(shí)需要主查詢處理多重關(guān)系 例例3 3 查查詢?cè)兠棵總€(gè)個(gè)部部門門工工資資最最高高的的職職工工信信息息 select from 職工表 where 部門編號(hào) 工資 in select 部門編號(hào) 工資 from select 部門編號(hào) max 工資 as 工資 from 職工表 group by 部門編號(hào) 注意 多重嵌套查詢 一般是自內(nèi)向外 這樣寫好內(nèi)層的SQL語(yǔ)句 再慢慢地嵌套好外層的語(yǔ)句 對(duì)自己的思維發(fā)散有好處 建議學(xué)員們學(xué)多重嵌套的時(shí)候 先把內(nèi)部的語(yǔ)句復(fù)制出來(lái)測(cè)試一下 看看結(jié)果是怎么樣的 一般在oracle和MS SQL中會(huì)出現(xiàn)多列子查詢 但在excel中 只能通過嵌套和增加新的連接字段來(lái)實(shí)現(xiàn)多列子查詢 四 帶有any some 或 all 謂詞的子查詢 使用any 或all 謂詞時(shí)必須同時(shí)使用比較運(yùn)算符 主要見 any大于子查詢結(jié)果中的某個(gè)值 all大于子查詢結(jié)果中的所有值 any小于子查詢結(jié)果中的某個(gè)值 any大于或等于子查詢結(jié)果中的某個(gè)值 all大于或等于子查詢結(jié)果中的所有值 any小于或等于子查詢結(jié)果中的某個(gè)值 all小于或等于子查詢結(jié)果中的所有值 any等于子查詢結(jié)果中的某個(gè)值 all等于子查詢結(jié)果中的所有值 或 any 不等于子查詢結(jié)果中的某個(gè)值 或 all 不等于子查詢結(jié)果中的任何一個(gè)值 例例4 4 查查詢?cè)兤淦渌坎块T門編編號(hào)號(hào)中中比比部部門門編編號(hào)號(hào)為為A0003A0003的的某某一一職職工工的的工工資資還還要要少少的的所所有有記記錄錄 select from 職工表 where 工資 any select 工資 from 職工表 where 部門編號(hào) A0003 and 部門編號(hào) A0003 子查詢工資集 首先子查詢 找出部門編號(hào)為A0003 中所有職工的工資 構(gòu)成一個(gè)集 合 然后進(jìn)行父查詢 找出所有部門編 號(hào)不是A0003且工資少于6500或其 以下的職工記錄 注意 該查詢結(jié)果也可以用聚集函數(shù)來(lái)實(shí)現(xiàn) 首先用子查詢找出部門編號(hào)為A0003中最高工資為6500 然后在父查詢中查出所有部門編號(hào)不是A0003且工資小于6500的職工記錄 SQL語(yǔ)句如下 select from 職工表 where 工資 select max 工資 from 職工表 where 部門編號(hào) A0003 and 部門編號(hào) A0003 例例5 5 查查詢?cè)兤淦渌坎块T門編編號(hào)號(hào)中中比比部部門門編編號(hào)號(hào)為為A0001A0001的的所所有有職職工工的的工工資資還還要要少少的的所所有有記記錄錄 select from 職工表 where 工資 all select 工資 from 職工表 where 部門編號(hào) A0001 and 部門編號(hào) A0001 注意 該查詢結(jié)果也可以用聚集函數(shù)來(lái)實(shí)現(xiàn) 首先用子查詢找出部門編號(hào)為A0001中最低工資為1300 然后在父查詢中查出所有部門編號(hào)不是A0001且工資小于1300的職工記錄 SQL語(yǔ)句如下 select from 職工表 where 工資 select min 工資 from 職工表 where 部門編號(hào) A0001 and 部門編號(hào) A0001 注意 用聚集函數(shù)查詢通常要比any 和 all查詢的效率要高 特別是大數(shù)據(jù)量的時(shí)候就比較明顯的 any 或 some all 謂詞與聚集函數(shù) in謂詞的等價(jià)轉(zhuǎn)換關(guān)系 或 anyin max min min all not in min max max 五五 自自連連接接 比比較較難難理理解解 給給有有基基礎(chǔ)礎(chǔ)的的學(xué)學(xué)員員去去研研究究 課課上上不不講講 一個(gè)表與自身進(jìn)行連接 稱為自連接 例例子子6 6 查查詢?cè)児すべY資表表中中員員工工的的姓姓名名和和基基本本工工資資 其其中中每每行行包包含含兩兩組組員員工工的的姓姓名名和和基基本本工工資資 且且左左邊邊的的員員工工工工資資要要大大于于右右邊邊員員工工的的工工資資 select a 員工姓名 a 基本工資 b 員工姓名 b 基本工資 from 工資表 a inner join 工資表 b on a 基本工資 b 基本工資 結(jié)果表 有一個(gè)成績(jī)表 里面有學(xué)號(hào) 功課編號(hào) 學(xué)生成績(jī)?nèi)齻€(gè)字段 例例7 7 用用一一個(gè)個(gè)SQLSQL查查詢?cè)冋Z(yǔ)語(yǔ)句句得得出出每每門門功功課課成成績(jī)績(jī)最最好好的的前前兩兩名名 select distinct a from 成績(jī)表 a where a 學(xué)號(hào) in select top 2 成績(jī)表 學(xué)號(hào) from 成績(jī)表 where 成績(jī)表 功課編號(hào) a 功課編號(hào) order by 學(xué)生成績(jī) desc 注意 成績(jī)表 a 這里的a起到中轉(zhuǎn)站的作用 可以簡(jiǎn)化新表的縮寫 結(jié)果表 內(nèi)部的子連接 首先對(duì)學(xué)生成績(jī)進(jìn)行降序排列 然后提取最好成績(jī)的前2名 select top 2 成績(jī)表 學(xué)號(hào) from 成績(jī)表 where 成績(jī)表 功課編號(hào) a 功課編號(hào) order by 學(xué)生成績(jī) desc 值得注意的是 因?yàn)槭且樵兠块T功課 故外部一層與內(nèi)層的聯(lián)系是功課編號(hào)要相等 便出現(xiàn)了 成績(jī)表 功課編號(hào) a 功課編號(hào) 而外面一層主要是為了提取其記錄 需要不重復(fù)的 定義了一個(gè)新的虛構(gòu)表 成績(jī)表 a 而功課編號(hào)為連接條件進(jìn)行連接 當(dāng)我們用 等于 比較操作符把子查詢和父查詢嵌套在一起時(shí) 父查詢期望從子查詢那里只得到一行返回值 select from 職工表 where 部門編號(hào) select 部門編號(hào) from 部門表 where 部門 研究B部 多行子查詢 意味著子查詢返回的結(jié)果子集可以是多行 因此 我們通常用集合比較操作符 如 IN NOT IN 把父查詢和子查詢連接起來(lái) select from 職工表 where 部門編號(hào) in select 部門編號(hào) from 部門表 where 控股方 like A select from 職工表 where 部門編號(hào) 工資 in select 部門編號(hào) 工資 from select 部門編號(hào) max 工資 as 工資 from 職工表 group by 部門編號(hào) 注意 多重嵌套查詢 一般是自內(nèi)向外 這樣寫好內(nèi)層的SQL語(yǔ)句 再慢慢地嵌套好外層的語(yǔ)句 對(duì)自己的思維發(fā)散有好處 一般在oracle和MS SQL中會(huì)出現(xiàn)多列子查詢 但在excel中 只能通過嵌套和增加新的連接字段來(lái)實(shí)現(xiàn)多列子查詢 select from 職工表 where 工資 any select 工資 from 職工表 where 部門編號(hào) A0003 and 部門編號(hào) A0003 首先用子查詢找出部門編號(hào)為A0003中最高工資為6500 然后在父查詢中查出所有部門編號(hào)不是A0003且工資小于6500的職工記錄 select from 職工表 where 工資 select max 工資 from 職工表 where 部門編號(hào) A0003 and 部門編號(hào) A0003 select from 職工表 where 工資 all select 工資 from 職工表 where 部門編號(hào) A0001 and 部門編號(hào) A0001 首先用子查詢找出部門編號(hào)為A0001中最低工資為1300 然后在父查詢中查出所有部門編號(hào)不是A0001且工資小于1300的職工記錄 select from 職工表 where 工資 select min 工資 from 職工表 where 部門編號(hào) A0001 and 部門編號(hào) A0001 例例子子6 6 查查詢?cè)児すべY資表表中中員員工工的的姓姓名名和和基基本本工工資資 其其中中每每行行包包含含兩兩組組員員工工的的姓姓名名和和基基本本工工資資 且且左左邊邊的的員員工工工工資資要要大大于于右右邊邊員員工工的的工工資資 select a 員工姓名 a 基本工資 b 員工姓名 b 基本工資 from 工資表 a inner join 工資表 b on a 基本工資 b 基本工資 select distinct a from 成績(jī)表 a where a 學(xué)號(hào) in select top 2 成績(jī)表 學(xué)號(hào) from 成績(jī)表 where 成績(jī)表 功課編號(hào) a 功課編號(hào) order by 學(xué)生成績(jī) desc select top 2 成績(jī)表 學(xué)號(hào) from 成績(jī)表 where 成績(jī)表 功課編號(hào) a 功課編號(hào) order by 學(xué)生成績(jī) desc 員工部門編號(hào)職位工資 ChrisA0001研究經(jīng)理20000 RitaA0002研究員3500 IreneA0003研究員3800 CalvinA0004研究員3700 SteveA0005助理研究員2000 KevinA0002高級(jí)研究員9600 AmyA0003助理研究員1500 BruceA0002高級(jí)研究員5500 MaggieA0003高級(jí)研究員6500 UraniaA0004助理研究員1200 BenA0005助理研究員2300 VickyA0003研究員3300 JohnA0004助理研究員1100 SnoopyA0005研究員3300 VincentA0002研究經(jīng)理19000 PonyA0003研究員3000 GingerA0002助理研究員1000 EllaA0001助理研究員1300 BlindaA0002助理研究員1000 KenA0003高級(jí)研究員5500 AliceA0004研究員2400 EricA0005研究員3300 JackyA0002研究員3400 MaryA0003助理研究員1000 CooperA0004助理研究員1000 JonnaA0005研究員3000 BillA0002研究總監(jiān)100000 WiseA0003高級(jí)研究員6000 JoheA0002研究經(jīng)理18000 CandyA0002高級(jí)研究員8000 LuolaA0004高級(jí)研究員9000

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論