版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL第五章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL1一、SQL概述結(jié)構(gòu)化查詢語(yǔ)言全稱:StructuredQueryLanguage內(nèi)容:數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)查詢和數(shù)據(jù)控制。特點(diǎn):簡(jiǎn)結(jié)一體化語(yǔ)言高度非過(guò)程化命令交互使用一、SQL概述結(jié)構(gòu)化查詢語(yǔ)言全稱:StructuredQu2SQL命令動(dòng)詞表SQL功能命令動(dòng)詞數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOKESQL命令動(dòng)詞表SQL功能命令動(dòng)詞數(shù)據(jù)查詢SELECT數(shù)3查詢技巧首先讀題義,從中抽出關(guān)鍵字打開(kāi)查詢的表、先瀏覽,從中找線索從題目中提取所要信息,作為條件對(duì)所得的條件進(jìn)行有效的組合完善查詢查詢技巧首先讀題義,從中抽出關(guān)鍵字4SQL中的數(shù)據(jù)查詢語(yǔ)句數(shù)據(jù)庫(kù)中的數(shù)據(jù)很多時(shí)侯是為了查詢的,因此,數(shù)據(jù)查是數(shù)據(jù)庫(kù)的核心操作。而在SQL語(yǔ)言中,查詢語(yǔ)言中有一條查詢命令,即SELECT語(yǔ)句。4.5.1基本查詢語(yǔ)句【格式】SELECT[ALL|DISTINCT]<字段列表>FROM<表>【功能】無(wú)條件查詢?!菊f(shuō)明】ALL:表示顯示全部查詢記錄,包括重復(fù)記錄。
DISTINCT:表示顯示無(wú)重復(fù)結(jié)果的記錄。SQL中的數(shù)據(jù)查詢語(yǔ)句數(shù)據(jù)庫(kù)中的數(shù)據(jù)很多時(shí)侯是為了查詢的,因5簡(jiǎn)單查詢例5.1從職工關(guān)系中檢索所有工資值分析:關(guān)系指二維表,工資是要顯示的結(jié)果字段,沒(méi)有條件。方法:把信息插入SQL語(yǔ)句。結(jié)果表示:SELE工資FROM職工語(yǔ)句說(shuō)明:SELECT:字段名(或查詢的結(jié)果)FROM:來(lái)源于哪張表。DISTINCT:是否要去掉等值的字段。簡(jiǎn)單查詢例5.1從職工關(guān)系中檢索所有工資值6例5.1檢索倉(cāng)庫(kù)關(guān)系中的所有元組
SELE*FROM倉(cāng)庫(kù)*:是通配符,表示所倉(cāng)庫(kù)表的中字段.此題中可以:SELE倉(cāng)庫(kù)號(hào),城市,面積FROM倉(cāng)庫(kù)例5.2:檢索工資多于1230元的職工號(hào)條件:工資多于1230等價(jià)于工資>1230
顯示字段:職工號(hào)
來(lái)源表:職工表
SELE職工號(hào)FROM職工WHERE工資>1230例5.1檢索倉(cāng)庫(kù)關(guān)系中的所有元組7例:檢索哪些倉(cāng)庫(kù)有工資多于1210元的職工分析:工資多于1210元等價(jià)于工資>1210
倉(cāng)庫(kù):是要顯示的字段信息,用倉(cāng)庫(kù)號(hào)來(lái)表示.
SELEDIST倉(cāng)庫(kù)號(hào)FORM職工WHERE工資>1210
例:5.5給出在倉(cāng)庫(kù)“WH1”或“WH2”工作,并且工資少于1250元的職工號(hào)條件:(倉(cāng)庫(kù)號(hào)=“WH1”O(jiān)R倉(cāng)庫(kù)號(hào)=“WH2”)AND工資<1250
語(yǔ)句:SELE職工號(hào)FROM職工WHERE(倉(cāng)庫(kù)號(hào)=“WH1”O(jiān)R倉(cāng)庫(kù)號(hào)=“WH2”)AND工資<1250
例:檢索哪些倉(cāng)庫(kù)有工資多于1210元的職工8二、連接查詢【說(shuō)明】在一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表之間一般都存在著某些聯(lián)系,在一個(gè)查詢語(yǔ)句中同時(shí)涉及到兩個(gè)或兩個(gè)以上的表時(shí),這種查詢稱之為連接查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連接關(guān)系。SELECT[ALL|DISTINCT]<字段列表>FROM<表1>[,表2…..]WHERE<條件表達(dá)式>二、連接查詢【說(shuō)明】在一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表之間一般都存在著某9簡(jiǎn)單的聯(lián)接查詢針對(duì)多張表,一張表的結(jié)果要依靠另一張表為條件,才能查出.把兩張表聯(lián)接起來(lái),形成邏輯上的一張表.技巧:找兩張表之間的公共字段及聯(lián)接條件結(jié)構(gòu):
SELE<字段>FROM表1,表2WHER<一般查條件>AND聯(lián)接條件(或者兩張表的公共字段)聯(lián)接條件:表名.字段名(或者表的別名.字段名)簡(jiǎn)單的聯(lián)接查詢針對(duì)多張表,一張表的結(jié)果要依靠另一張表為條件,10例5.6找出工資多于1230元的職工號(hào)和他們所在城市.注意:一張表查出不能完成,結(jié)果需要兩張表,職工表只有職工號(hào),而倉(cāng)庫(kù)表有中只有城市.他們的公共字段為倉(cāng)庫(kù)號(hào).
聯(lián)接條件:職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)
一般條件:工資>1230
兩張表:職工,倉(cāng)庫(kù)
顯示字段:職工號(hào),城市
語(yǔ)句:SELE職工號(hào),城市FROM職工,倉(cāng)庫(kù)
WHERE(工資>1230)AND(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))例5.6找出工資多于1230元的職工號(hào)和他們所在城市.11例:找出工作在面積大于400的倉(cāng)庫(kù)的職工號(hào)以及這些職工工作所在的城市.分析條件:面積>400聯(lián)接條件:(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))查詢涉及表:倉(cāng)庫(kù),職工
查詢結(jié)果字段:職工號(hào),城市
SELE
職工號(hào),城市
FROM
倉(cāng)庫(kù),職工
WHERE
(面積>400)
AND
(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))例:找出工作在面積大于400的倉(cāng)庫(kù)的職工號(hào)以及這些職工工作所12嵌套查詢外查詢的條件來(lái)自內(nèi)查詢的結(jié)果在SQL語(yǔ)句中,一個(gè)SELECT-FROM-WHERE語(yǔ)句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語(yǔ)的條件中的查詢稱為嵌套查詢或子查詢。IN:屬于關(guān)系,返回多個(gè)值NOTIN:不屬于關(guān)系聯(lián)接條件:公共字段名IN(SELE公共字段名
相當(dāng)于聯(lián)接中條件表1.公共字段名=表2.公共字段名嵌套查詢外查詢的條件來(lái)自內(nèi)查詢的結(jié)果13例題:哪些城市至少有一個(gè)倉(cāng)庫(kù)的職工工資1250元?SELE城市FROM倉(cāng)庫(kù)表WHERE倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM職工WHERE工資=1250)IN:屬于關(guān)系,返回多個(gè)值注意:倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)相當(dāng)于連接的條件:倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)例題:哪些城市至少有一個(gè)倉(cāng)庫(kù)的職工工資1250元?14例:查詢所有職工的工資都于1210元的倉(cāng)庫(kù)的信息.SELE*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTIN(SELE倉(cāng)庫(kù)號(hào)FROM工資<=1210)分析沒(méi)有錯(cuò),但實(shí)際錯(cuò)了。應(yīng)該為SELE*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTIN(SELE倉(cāng)庫(kù)號(hào)FROM工資WHERE工資<=1210)AND倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM職工)例:查詢所有職工的工資都于1210元的倉(cāng)庫(kù)的信息.15例:5.10找出和職工E4掙同樣工資的所有職工.SELE職工號(hào)FROM職工WHERE工資=(SELE工資FROM職工WHERE職工號(hào)=“E4”)注意:=與IN之間的關(guān)系,等號(hào)可以用IN來(lái)替換,而IN不能用=替換
=:返回的值是一個(gè)具體的值IN:返回的是多個(gè)值例:5.10找出和職工E4掙同樣工資的所有職工.16四幾個(gè)特殊運(yùn)算符BETWEEN…AND…兩者之間LIKE:匹配或者含有!=:不等于注意:通配符(%和-)%代表多個(gè)字符,-單代表單個(gè)字符.而在我們的第三章用*代表多個(gè),?代表單個(gè),不能用(*和?)使用.SQL與VF的區(qū)別.四幾個(gè)特殊運(yùn)算符BETWEEN…AND…兩者之間17例:檢索出工資在1220元到1240元范圍的職工信息.SELE*FROM職工WHERE工資BETWEEN1220AND1240或者SELE*FROM職工WHERE(工資>=1210)AND(工資<=1240)例:從供應(yīng)商關(guān)系中檢索出全部公司的信息,不工廠或其它供應(yīng)商的信息.SELE*FROM供應(yīng)商WHERELIKE”%公司”例:檢索出工資在1220元到1240元范圍的職工信息.18例:找出不在北京的全部供應(yīng)商信息.SELECT*FROM供應(yīng)商WHERE地址!=“北京”或者SELE*FROM供應(yīng)商WHERENOT(地址=“北京”)注:地址!=“北京”與NOT(地址=“北京”)等價(jià)只是兩種不同的表達(dá)方式例:找出不在北京的全部供應(yīng)商信息.19五、排序ORDERBY<排序的字段名>ASC/DESCASC升序,可以不用.DESC降序例:按職工的工資值升序索出全部職工信息.SELE*FROM職工ORDERBY工資ASC五、排序ORDERBY<排序的字段名>ASC/DES20例、先按倉(cāng)庫(kù)號(hào)排序,再按工資排序并輸出全部職工信息。注:這句話可這樣敘述,對(duì)職工表的倉(cāng)庫(kù)號(hào)進(jìn)行排序,如果倉(cāng)庫(kù)號(hào)相同再按工資排序。SELE*FROM職工ORDERBY倉(cāng)庫(kù)號(hào)DESC,工資注:ORDEBY不能用在子查詢中例、先按倉(cāng)庫(kù)號(hào)排序,再按工資排序并輸出全部職工信息。21例:按職工的工資值升序檢索出全部職工信息。SELE*FROM職工ORDERBY工資
降序:在所面加DESC例:先按倉(cāng)庫(kù)號(hào)排序,再按工資排序并輸出全部職工信息。
對(duì)多個(gè)字段進(jìn)行排序:SELE*FROM職工ORDERBY倉(cāng)庫(kù)號(hào),工資例:按職工的工資值升序檢索出全部職工信息。22簡(jiǎn)單的計(jì)算查詢COUNT()---計(jì)數(shù)SUM()---求和AVG()---求平均值MAX()---求最大值MIN()---求最小值簡(jiǎn)單的計(jì)算查詢COUNT()---計(jì)數(shù)23查詢產(chǎn)生新字段查詢中新字段:在查詢的結(jié)果中多一個(gè)統(tǒng)計(jì)或計(jì)算的字段。定義格式:SELESUM(工資)AS
總工資
FROM職工例1:SELECTAVG(工資)AS平均工資例2:SELECTCOUNT(職工號(hào))AS職工個(gè)數(shù)查詢產(chǎn)生新字段查詢中新字段:在查詢的結(jié)果中多一個(gè)統(tǒng)計(jì)或計(jì)算的24例:找出供應(yīng)商所在地址的數(shù)目SELECOUNT(DIST地址)FROM供應(yīng)商DIST相同的地址例:求支付的工資總數(shù)SELESUM(工資)FROM職工例:求北京和上海的倉(cāng)庫(kù)職工的工資總和SELE
SUM(工資)FROM職工,倉(cāng)庫(kù)WHERE(城市=“北京”O(jiān)R城市=“上?!保〢ND(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))SELESUM(工資)
FROM職工WHERE倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM倉(cāng)庫(kù)WHERE
城市=“北京”O(jiān)R城市=“上?!?例:找出供應(yīng)商所在地址的數(shù)目25例:求所有職工的工資都多于1210元的倉(cāng)庫(kù)的平均面積.SELEAVG(面積)AS平均面積FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)notIN(SELE倉(cāng)庫(kù)號(hào)FROM職工WHERE工資<=1210)and倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM職工)例:求在WH2倉(cāng)庫(kù)工作的職工的最高工資值.SELEMAX(工資)FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH2”例:求所有職工的工資都多于1210元的倉(cāng)庫(kù)的平均面積.26分組與計(jì)算查詢結(jié)構(gòu):GROUPBY<分組字段>HAVING<限定條件>什么時(shí)候使用分組:需要統(tǒng)計(jì)、計(jì)算每個(gè)倉(cāng)庫(kù)每個(gè)職工,每個(gè)學(xué)生等含有“每個(gè)”提示信息需用。分組字段:如每個(gè)職工就是職工號(hào),每個(gè)學(xué)生就是學(xué)生的學(xué)號(hào)限定條件:至少選修兩門以課,至少兩個(gè)職工分組與計(jì)算查詢結(jié)構(gòu):27例:求每個(gè)倉(cāng)庫(kù)的職工的平均工資GROUPBY一般跟在WHERE后,如果沒(méi)有就跟在FROM之后SELE倉(cāng)庫(kù)號(hào),AVG(工資)FROM職工GROUPBY倉(cāng)庫(kù)號(hào)例:求至少有兩個(gè)職工的每個(gè)倉(cāng)庫(kù)的平均工資。SELE倉(cāng)庫(kù)號(hào),COUNT(*),AVG(工資)FROM職工GROUPBY倉(cāng)庫(kù)號(hào)HAVINGCOUNT(*)>=2例:求每個(gè)倉(cāng)庫(kù)的職工的平均工資28八、利用空值查詢空值:指不確定的值判斷為不為空:ISNULL(空)ISNOTNULL例:找出尚未確定供應(yīng)商的訂購(gòu)單。SELE*FROM訂購(gòu)單WHERE供應(yīng)商號(hào)ISNULL不能用=NULL例:列出已經(jīng)確定了供應(yīng)商的訂購(gòu)單信息。SELE*FROM訂購(gòu)單WHERE訂購(gòu)信息ISNOTNULL八、利用空值查詢空值:指不確定的值29九、別名和自聯(lián)接查詢別名:別名不是必須的,但是在關(guān)系的自聯(lián)接操作中,別名必不可少作用:一般用在多表查詢或多字段查詢上公共的字段:作為聯(lián)接條件:別名1.字段名=別名2.字段名自聯(lián)接:指同一關(guān)系中與其自身聯(lián)接一張表使用兩次時(shí),區(qū)分兩次的使用情況九、別名和自聯(lián)接查詢別名:別名不是必須的,但是在關(guān)系的自聯(lián)接30例:根據(jù)雇員關(guān)系列出上一級(jí)經(jīng)理及所領(lǐng)導(dǎo)的職工清單。SELES.雇員名,“領(lǐng)導(dǎo)”,E.雇員姓名FROM雇員S,雇員EWHERES.雇員號(hào)=E.經(jīng)理常量:領(lǐng)導(dǎo)“雇員號(hào)雇員姓名經(jīng)理E3趙涌E4錢潮E3E6孫潔E3E8李淥E6例:根據(jù)雇員關(guān)系列出上一級(jí)經(jīng)理及所領(lǐng)導(dǎo)的職工清單。雇員號(hào)雇員31十、內(nèi)外層相關(guān)嵌套查詢十、內(nèi)外層相關(guān)嵌套查詢32十、內(nèi)外層相關(guān)嵌套查詢這張表查詢的結(jié)果要依靠這張表的另一個(gè)查詢條件而取得,采用自我嵌套的方法來(lái)實(shí)現(xiàn)。方法:嵌套條件為別名1.公共字段=別名2.公共字段員工號(hào)相同進(jìn)行比較。自嵌套和自聯(lián)接的區(qū)別:自聯(lián)接通過(guò)公共的記錄來(lái)聯(lián)接,自嵌套通過(guò)公共字段來(lái)聯(lián)接十、內(nèi)外層相關(guān)嵌套查詢這張表查詢的結(jié)果要依靠這張表的另一個(gè)查33例:列出每個(gè)職工經(jīng)手的具有最高總金額的訂購(gòu)單信息。SELEOUT.職工號(hào),OUT.供應(yīng)商號(hào),OUT.訂購(gòu)日期,OUT.總金額FROM訂購(gòu)單OUTWHERE總金額=(SELEMAX(總金額)FROM訂購(gòu)單INNER1WHEREOUT.職工號(hào)=INNER1.職工號(hào))例:列出每個(gè)職工經(jīng)手的具有最高總金額的訂購(gòu)單信息。34十一、使用量詞查詢ANY、SOME:查詢的結(jié)果一行為真則結(jié)果為真。ALL:子查詢中所有行為為真查詢的結(jié)果就為真NOTEXISTS:檢查子查詢中是否有結(jié)果返回。NOTEXISTS與NOTIN之間聯(lián)系:可以相互轉(zhuǎn)換,WHERE
NOTEXISTS(SELECT*WHEREA.倉(cāng)庫(kù)號(hào)=B.倉(cāng)庫(kù)號(hào)等價(jià)于倉(cāng)庫(kù)號(hào)NOTIN(SELECT倉(cāng)庫(kù)號(hào)
區(qū)別:NOTEXISTS指是否存在一個(gè)返回結(jié)果,NOTIN指具體的返回值。十一、使用量詞查詢ANY、SOME:查詢的結(jié)果一行為真則結(jié)果35檢索那些倉(cāng)庫(kù)中還沒(méi)有職工的倉(cāng)庫(kù)的信息。這里的查詢是沒(méi)有職工或不存在職工,所以可以使用謂詞NOTEXISTS:SELECT*FROM倉(cāng)庫(kù)WHERENOTEXISTS;(SELECT*FROM職工WHERE倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))注意:這里的內(nèi)層查詢引用了外層查詢的表,只有這樣使用謂詞EXISTS或NOTEXISTS才有意義。所以這類查詢也都是內(nèi)、外層互相關(guān)嵌套查詢。以上的查詢等價(jià)于:
SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTIN;(SELECT倉(cāng)庫(kù)號(hào)FROM職工)檢索那些倉(cāng)庫(kù)中還沒(méi)有職工的倉(cāng)庫(kù)的信息。36檢索那些倉(cāng)庫(kù)中至少已經(jīng)有一個(gè)職工的倉(cāng)庫(kù)的信息。SELECT*FROM倉(cāng)庫(kù)WHEREEXISTS;
(SELECT*FROM職工WHERE倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))它等價(jià)于:SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)IN(SELECT倉(cāng)庫(kù)號(hào)FROM職工)
注意:[NOT]EXISTS只是判斷子查詢中是否有或沒(méi)有結(jié)果返回,它本身并沒(méi)有任何運(yùn)算或比較。檢索那些倉(cāng)庫(kù)中至少已經(jīng)有一個(gè)職工的倉(cāng)庫(kù)的信息。37檢索有職工的工資大于等于WH1倉(cāng)庫(kù)中任何一名職工工資的倉(cāng)庫(kù)號(hào)。
這個(gè)查詢可以使用ANY或SOME量詞。SELECTDISTINCT倉(cāng)庫(kù)號(hào)FROM職工WHERE工資>=ANY;
(SELECT工資FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH1”)
它等價(jià)于:SELECTDISTINCT倉(cāng)庫(kù)號(hào)FROM職工WHERE工資>=
;
(SELECTMIN(工資)FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH1”)
檢索有職工的工資大于等于WH1倉(cāng)庫(kù)中任何一名職工工資的倉(cāng)庫(kù)號(hào)38檢索有職工的工資大于或等于WH1倉(cāng)庫(kù)中所有職工工資的倉(cāng)庫(kù)號(hào)。
這個(gè)查詢使用ALL量詞。SELECTDISTINCT倉(cāng)庫(kù)號(hào)FROM職工WHERE工資>=ALL
(SELECT工資FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH1”)它等價(jià)于:SELECTDISTINCT倉(cāng)庫(kù)號(hào)FROM職工WHERE工資>=;
(SELECTMAX(工資)FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH1”)
檢索有職工的工資大于或等于WH1倉(cāng)庫(kù)中所有職工工資的倉(cāng)庫(kù)號(hào)。39十二、超聯(lián)接查詢內(nèi)聯(lián)接格式:表1INNERJOIN表2on聯(lián)接條件滿足條件:兩張表都有的聯(lián)接記錄。左聯(lián)接格式:表1LEFTJOIN表2ON聯(lián)接條件滿足條件:兩張表都有的聯(lián)接記錄,且滿足左表中(表1)的記錄十二、超聯(lián)接查詢內(nèi)聯(lián)接40右聯(lián)接格式:表1RIGHTJOIN表2ON聯(lián)接條件滿足條件:兩張表都有的聯(lián)接記錄,且滿足右表中(表2)的記錄全聯(lián)接格式:表1FULLJOIN表2ON聯(lián)接條件滿足條件:兩張表都有的聯(lián)接記錄,且滿足右表中(表1)和表2所有的記錄第四章數(shù)據(jù)查詢課件41內(nèi)部聯(lián)接,即只有滿足聯(lián)接條件的記錄才出現(xiàn)在查詢結(jié)果中。SELECT倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào),城市,面積,職工號(hào),工資;FROM倉(cāng)庫(kù)(INNER)JOIN職工;ON倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)
等價(jià):SELECT倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào),城市,面積,職工號(hào),工資;FROM倉(cāng)庫(kù),職工
WHERE倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)內(nèi)部聯(lián)接,即只有滿足聯(lián)接條件的記錄才出現(xiàn)在查詢結(jié)果中。42左聯(lián)接:即除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果中外,第一個(gè)表中不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。SELECT倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào),城市,面積,職工號(hào),工資;FROM倉(cāng)庫(kù)LEFTJOIN職工ON倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)右聯(lián)接:即除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果中外,第二個(gè)表中不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。SELECT倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào),城市,面積,職工號(hào),工資;FROM倉(cāng)庫(kù)LEFTJOIN職工ON倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)左聯(lián)接:即除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果中外,第一個(gè)表中43全聯(lián)接:即除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果中外,兩個(gè)表中不滿足聯(lián)接條件的記錄也出現(xiàn)在查詢結(jié)果中。SELECT倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào),城市,面積,職工號(hào),工資;FROM倉(cāng)庫(kù)LEFTJOIN職工ON倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)注:JION的位置和ON聯(lián)接條件相反
SELECT倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào),城市,面積,職工號(hào),工資FROM供應(yīng)商JION訂購(gòu)單JION職工JION倉(cāng)庫(kù)ON倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)ON訂購(gòu)單.職工號(hào)=職工.職工號(hào)ON供應(yīng)商號(hào).供應(yīng)商號(hào)=訂購(gòu)單.供應(yīng)商號(hào).全聯(lián)接:即除滿足聯(lián)接條件的記錄出現(xiàn)在查詢結(jié)果中外,兩個(gè)表中不44十三、集合的并運(yùn)算將兩個(gè)SELE的查詢結(jié)果合并成一個(gè)查詢結(jié)果,要求:相同的字段,值域,數(shù)據(jù)類型,取值范圍.例:顯示結(jié)果為北京和上的倉(cāng)庫(kù)信息:SELE*FROM倉(cāng)庫(kù)WHERE城市=“北京”;UNIONSELE*FROM倉(cāng)庫(kù)WHERE城市=“上?!钡葍r(jià)于:SELE*FROM倉(cāng)庫(kù)WHERE城市=“北京”O(jiān)R城市=“上?!笔?、集合的并運(yùn)算將兩個(gè)SELE的查詢結(jié)果合并成一個(gè)查詢結(jié)45十四查詢?nèi)ハ驗(yàn)g覽方式顯示記錄(一般就是瀏覽)將查詢結(jié)果存放到數(shù)組中(INTOARRA數(shù)組名)將查詢結(jié)果存放在臨時(shí)文件中(INTOCURSORTMP)將查詢結(jié)果存放在永久的表中(INTOTABLE/DBF表名)將查詢結(jié)果存放在文本文件中(TOFILE文本.TXT)將查詢結(jié)果直接輸出打印機(jī)中(TOPRINTER)十四查詢?nèi)ハ驗(yàn)g覽方式顯示記錄(一般就是瀏覽)46第五章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL第五章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL47一、SQL概述結(jié)構(gòu)化查詢語(yǔ)言全稱:StructuredQueryLanguage內(nèi)容:數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)查詢和數(shù)據(jù)控制。特點(diǎn):簡(jiǎn)結(jié)一體化語(yǔ)言高度非過(guò)程化命令交互使用一、SQL概述結(jié)構(gòu)化查詢語(yǔ)言全稱:StructuredQu48SQL命令動(dòng)詞表SQL功能命令動(dòng)詞數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE、DROP、ALTER數(shù)據(jù)操縱INSERT、UPDATE、DELETE數(shù)據(jù)控制GRANT、REVOKESQL命令動(dòng)詞表SQL功能命令動(dòng)詞數(shù)據(jù)查詢SELECT數(shù)49查詢技巧首先讀題義,從中抽出關(guān)鍵字打開(kāi)查詢的表、先瀏覽,從中找線索從題目中提取所要信息,作為條件對(duì)所得的條件進(jìn)行有效的組合完善查詢查詢技巧首先讀題義,從中抽出關(guān)鍵字50SQL中的數(shù)據(jù)查詢語(yǔ)句數(shù)據(jù)庫(kù)中的數(shù)據(jù)很多時(shí)侯是為了查詢的,因此,數(shù)據(jù)查是數(shù)據(jù)庫(kù)的核心操作。而在SQL語(yǔ)言中,查詢語(yǔ)言中有一條查詢命令,即SELECT語(yǔ)句。4.5.1基本查詢語(yǔ)句【格式】SELECT[ALL|DISTINCT]<字段列表>FROM<表>【功能】無(wú)條件查詢。【說(shuō)明】ALL:表示顯示全部查詢記錄,包括重復(fù)記錄。
DISTINCT:表示顯示無(wú)重復(fù)結(jié)果的記錄。SQL中的數(shù)據(jù)查詢語(yǔ)句數(shù)據(jù)庫(kù)中的數(shù)據(jù)很多時(shí)侯是為了查詢的,因51簡(jiǎn)單查詢例5.1從職工關(guān)系中檢索所有工資值分析:關(guān)系指二維表,工資是要顯示的結(jié)果字段,沒(méi)有條件。方法:把信息插入SQL語(yǔ)句。結(jié)果表示:SELE工資FROM職工語(yǔ)句說(shuō)明:SELECT:字段名(或查詢的結(jié)果)FROM:來(lái)源于哪張表。DISTINCT:是否要去掉等值的字段。簡(jiǎn)單查詢例5.1從職工關(guān)系中檢索所有工資值52例5.1檢索倉(cāng)庫(kù)關(guān)系中的所有元組
SELE*FROM倉(cāng)庫(kù)*:是通配符,表示所倉(cāng)庫(kù)表的中字段.此題中可以:SELE倉(cāng)庫(kù)號(hào),城市,面積FROM倉(cāng)庫(kù)例5.2:檢索工資多于1230元的職工號(hào)條件:工資多于1230等價(jià)于工資>1230
顯示字段:職工號(hào)
來(lái)源表:職工表
SELE職工號(hào)FROM職工WHERE工資>1230例5.1檢索倉(cāng)庫(kù)關(guān)系中的所有元組53例:檢索哪些倉(cāng)庫(kù)有工資多于1210元的職工分析:工資多于1210元等價(jià)于工資>1210
倉(cāng)庫(kù):是要顯示的字段信息,用倉(cāng)庫(kù)號(hào)來(lái)表示.
SELEDIST倉(cāng)庫(kù)號(hào)FORM職工WHERE工資>1210
例:5.5給出在倉(cāng)庫(kù)“WH1”或“WH2”工作,并且工資少于1250元的職工號(hào)條件:(倉(cāng)庫(kù)號(hào)=“WH1”O(jiān)R倉(cāng)庫(kù)號(hào)=“WH2”)AND工資<1250
語(yǔ)句:SELE職工號(hào)FROM職工WHERE(倉(cāng)庫(kù)號(hào)=“WH1”O(jiān)R倉(cāng)庫(kù)號(hào)=“WH2”)AND工資<1250
例:檢索哪些倉(cāng)庫(kù)有工資多于1210元的職工54二、連接查詢【說(shuō)明】在一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表之間一般都存在著某些聯(lián)系,在一個(gè)查詢語(yǔ)句中同時(shí)涉及到兩個(gè)或兩個(gè)以上的表時(shí),這種查詢稱之為連接查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連接關(guān)系。SELECT[ALL|DISTINCT]<字段列表>FROM<表1>[,表2…..]WHERE<條件表達(dá)式>二、連接查詢【說(shuō)明】在一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表之間一般都存在著某55簡(jiǎn)單的聯(lián)接查詢針對(duì)多張表,一張表的結(jié)果要依靠另一張表為條件,才能查出.把兩張表聯(lián)接起來(lái),形成邏輯上的一張表.技巧:找兩張表之間的公共字段及聯(lián)接條件結(jié)構(gòu):
SELE<字段>FROM表1,表2WHER<一般查條件>AND聯(lián)接條件(或者兩張表的公共字段)聯(lián)接條件:表名.字段名(或者表的別名.字段名)簡(jiǎn)單的聯(lián)接查詢針對(duì)多張表,一張表的結(jié)果要依靠另一張表為條件,56例5.6找出工資多于1230元的職工號(hào)和他們所在城市.注意:一張表查出不能完成,結(jié)果需要兩張表,職工表只有職工號(hào),而倉(cāng)庫(kù)表有中只有城市.他們的公共字段為倉(cāng)庫(kù)號(hào).
聯(lián)接條件:職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)
一般條件:工資>1230
兩張表:職工,倉(cāng)庫(kù)
顯示字段:職工號(hào),城市
語(yǔ)句:SELE職工號(hào),城市FROM職工,倉(cāng)庫(kù)
WHERE(工資>1230)AND(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))例5.6找出工資多于1230元的職工號(hào)和他們所在城市.57例:找出工作在面積大于400的倉(cāng)庫(kù)的職工號(hào)以及這些職工工作所在的城市.分析條件:面積>400聯(lián)接條件:(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))查詢涉及表:倉(cāng)庫(kù),職工
查詢結(jié)果字段:職工號(hào),城市
SELE
職工號(hào),城市
FROM
倉(cāng)庫(kù),職工
WHERE
(面積>400)
AND
(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))例:找出工作在面積大于400的倉(cāng)庫(kù)的職工號(hào)以及這些職工工作所58嵌套查詢外查詢的條件來(lái)自內(nèi)查詢的結(jié)果在SQL語(yǔ)句中,一個(gè)SELECT-FROM-WHERE語(yǔ)句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語(yǔ)的條件中的查詢稱為嵌套查詢或子查詢。IN:屬于關(guān)系,返回多個(gè)值NOTIN:不屬于關(guān)系聯(lián)接條件:公共字段名IN(SELE公共字段名
相當(dāng)于聯(lián)接中條件表1.公共字段名=表2.公共字段名嵌套查詢外查詢的條件來(lái)自內(nèi)查詢的結(jié)果59例題:哪些城市至少有一個(gè)倉(cāng)庫(kù)的職工工資1250元?SELE城市FROM倉(cāng)庫(kù)表WHERE倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM職工WHERE工資=1250)IN:屬于關(guān)系,返回多個(gè)值注意:倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)相當(dāng)于連接的條件:倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào)=職工.倉(cāng)庫(kù)號(hào)例題:哪些城市至少有一個(gè)倉(cāng)庫(kù)的職工工資1250元?60例:查詢所有職工的工資都于1210元的倉(cāng)庫(kù)的信息.SELE*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTIN(SELE倉(cāng)庫(kù)號(hào)FROM工資<=1210)分析沒(méi)有錯(cuò),但實(shí)際錯(cuò)了。應(yīng)該為SELE*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTIN(SELE倉(cāng)庫(kù)號(hào)FROM工資WHERE工資<=1210)AND倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM職工)例:查詢所有職工的工資都于1210元的倉(cāng)庫(kù)的信息.61例:5.10找出和職工E4掙同樣工資的所有職工.SELE職工號(hào)FROM職工WHERE工資=(SELE工資FROM職工WHERE職工號(hào)=“E4”)注意:=與IN之間的關(guān)系,等號(hào)可以用IN來(lái)替換,而IN不能用=替換
=:返回的值是一個(gè)具體的值IN:返回的是多個(gè)值例:5.10找出和職工E4掙同樣工資的所有職工.62四幾個(gè)特殊運(yùn)算符BETWEEN…AND…兩者之間LIKE:匹配或者含有!=:不等于注意:通配符(%和-)%代表多個(gè)字符,-單代表單個(gè)字符.而在我們的第三章用*代表多個(gè),?代表單個(gè),不能用(*和?)使用.SQL與VF的區(qū)別.四幾個(gè)特殊運(yùn)算符BETWEEN…AND…兩者之間63例:檢索出工資在1220元到1240元范圍的職工信息.SELE*FROM職工WHERE工資BETWEEN1220AND1240或者SELE*FROM職工WHERE(工資>=1210)AND(工資<=1240)例:從供應(yīng)商關(guān)系中檢索出全部公司的信息,不工廠或其它供應(yīng)商的信息.SELE*FROM供應(yīng)商WHERELIKE”%公司”例:檢索出工資在1220元到1240元范圍的職工信息.64例:找出不在北京的全部供應(yīng)商信息.SELECT*FROM供應(yīng)商WHERE地址!=“北京”或者SELE*FROM供應(yīng)商WHERENOT(地址=“北京”)注:地址!=“北京”與NOT(地址=“北京”)等價(jià)只是兩種不同的表達(dá)方式例:找出不在北京的全部供應(yīng)商信息.65五、排序ORDERBY<排序的字段名>ASC/DESCASC升序,可以不用.DESC降序例:按職工的工資值升序索出全部職工信息.SELE*FROM職工ORDERBY工資ASC五、排序ORDERBY<排序的字段名>ASC/DES66例、先按倉(cāng)庫(kù)號(hào)排序,再按工資排序并輸出全部職工信息。注:這句話可這樣敘述,對(duì)職工表的倉(cāng)庫(kù)號(hào)進(jìn)行排序,如果倉(cāng)庫(kù)號(hào)相同再按工資排序。SELE*FROM職工ORDERBY倉(cāng)庫(kù)號(hào)DESC,工資注:ORDEBY不能用在子查詢中例、先按倉(cāng)庫(kù)號(hào)排序,再按工資排序并輸出全部職工信息。67例:按職工的工資值升序檢索出全部職工信息。SELE*FROM職工ORDERBY工資
降序:在所面加DESC例:先按倉(cāng)庫(kù)號(hào)排序,再按工資排序并輸出全部職工信息。
對(duì)多個(gè)字段進(jìn)行排序:SELE*FROM職工ORDERBY倉(cāng)庫(kù)號(hào),工資例:按職工的工資值升序檢索出全部職工信息。68簡(jiǎn)單的計(jì)算查詢COUNT()---計(jì)數(shù)SUM()---求和AVG()---求平均值MAX()---求最大值MIN()---求最小值簡(jiǎn)單的計(jì)算查詢COUNT()---計(jì)數(shù)69查詢產(chǎn)生新字段查詢中新字段:在查詢的結(jié)果中多一個(gè)統(tǒng)計(jì)或計(jì)算的字段。定義格式:SELESUM(工資)AS
總工資
FROM職工例1:SELECTAVG(工資)AS平均工資例2:SELECTCOUNT(職工號(hào))AS職工個(gè)數(shù)查詢產(chǎn)生新字段查詢中新字段:在查詢的結(jié)果中多一個(gè)統(tǒng)計(jì)或計(jì)算的70例:找出供應(yīng)商所在地址的數(shù)目SELECOUNT(DIST地址)FROM供應(yīng)商DIST相同的地址例:求支付的工資總數(shù)SELESUM(工資)FROM職工例:求北京和上海的倉(cāng)庫(kù)職工的工資總和SELE
SUM(工資)FROM職工,倉(cāng)庫(kù)WHERE(城市=“北京”O(jiān)R城市=“上海”)AND(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))SELESUM(工資)
FROM職工WHERE倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM倉(cāng)庫(kù)WHERE
城市=“北京”O(jiān)R城市=“上?!?例:找出供應(yīng)商所在地址的數(shù)目71例:求所有職工的工資都多于1210元的倉(cāng)庫(kù)的平均面積.SELEAVG(面積)AS平均面積FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)notIN(SELE倉(cāng)庫(kù)號(hào)FROM職工WHERE工資<=1210)and倉(cāng)庫(kù)號(hào)IN(SELE倉(cāng)庫(kù)號(hào)FROM職工)例:求在WH2倉(cāng)庫(kù)工作的職工的最高工資值.SELEMAX(工資)FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH2”例:求所有職工的工資都多于1210元的倉(cāng)庫(kù)的平均面積.72分組與計(jì)算查詢結(jié)構(gòu):GROUPBY<分組字段>HAVING<限定條件>什么時(shí)候使用分組:需要統(tǒng)計(jì)、計(jì)算每個(gè)倉(cāng)庫(kù)每個(gè)職工,每個(gè)學(xué)生等含有“每個(gè)”提示信息需用。分組字段:如每個(gè)職工就是職工號(hào),每個(gè)學(xué)生就是學(xué)生的學(xué)號(hào)限定條件:至少選修兩門以課,至少兩個(gè)職工分組與計(jì)算查詢結(jié)構(gòu):73例:求每個(gè)倉(cāng)庫(kù)的職工的平均工資GROUPBY一般跟在WHERE后,如果沒(méi)有就跟在FROM之后SELE倉(cāng)庫(kù)號(hào),AVG(工資)FROM職工GROUPBY倉(cāng)庫(kù)號(hào)例:求至少有兩個(gè)職工的每個(gè)倉(cāng)庫(kù)的平均工資。SELE倉(cāng)庫(kù)號(hào),COUNT(*),AVG(工資)FROM職工GROUPBY倉(cāng)庫(kù)號(hào)HAVINGCOUNT(*)>=2例:求每個(gè)倉(cāng)庫(kù)的職工的平均工資74八、利用空值查詢空值:指不確定的值判斷為不為空:ISNULL(空)ISNOTNULL例:找出尚未確定供應(yīng)商的訂購(gòu)單。SELE*FROM訂購(gòu)單WHERE供應(yīng)商號(hào)ISNULL不能用=NULL例:列出已經(jīng)確定了供應(yīng)商的訂購(gòu)單信息。SELE*FROM訂購(gòu)單WHERE訂購(gòu)信息ISNOTNULL八、利用空值查詢空值:指不確定的值75九、別名和自聯(lián)接查詢別名:別名不是必須的,但是在關(guān)系的自聯(lián)接操作中,別名必不可少作用:一般用在多表查詢或多字段查詢上公共的字段:作為聯(lián)接條件:別名1.字段名=別名2.字段名自聯(lián)接:指同一關(guān)系中與其自身聯(lián)接一張表使用兩次時(shí),區(qū)分兩次的使用情況九、別名和自聯(lián)接查詢別名:別名不是必須的,但是在關(guān)系的自聯(lián)接76例:根據(jù)雇員關(guān)系列出上一級(jí)經(jīng)理及所領(lǐng)導(dǎo)的職工清單。SELES.雇員名,“領(lǐng)導(dǎo)”,E.雇員姓名FROM雇員S,雇員EWHERES.雇員號(hào)=E.經(jīng)理常量:領(lǐng)導(dǎo)“雇員號(hào)雇員姓名經(jīng)理E3趙涌E4錢潮E3E6孫潔E3E8李淥E6例:根據(jù)雇員關(guān)系列出上一級(jí)經(jīng)理及所領(lǐng)導(dǎo)的職工清單。雇員號(hào)雇員77十、內(nèi)外層相關(guān)嵌套查詢十、內(nèi)外層相關(guān)嵌套查詢78十、內(nèi)外層相關(guān)嵌套查詢這張表查詢的結(jié)果要依靠這張表的另一個(gè)查詢條件而取得,采用自我嵌套的方法來(lái)實(shí)現(xiàn)。方法:嵌套條件為別名1.公共字段=別名2.公共字段員工號(hào)相同進(jìn)行比較。自嵌套和自聯(lián)接的區(qū)別:自聯(lián)接通過(guò)公共的記錄來(lái)聯(lián)接,自嵌套通過(guò)公共字段來(lái)聯(lián)接十、內(nèi)外層相關(guān)嵌套查詢這張表查詢的結(jié)果要依靠這張表的另一個(gè)查79例:列出每個(gè)職工經(jīng)手的具有最高總金額的訂購(gòu)單信息。SELEOUT.職工號(hào),OUT.供應(yīng)商號(hào),OUT.訂購(gòu)日期,OUT.總金額FROM訂購(gòu)單OUTWHERE總金額=(SELEMAX(總金額)FROM訂購(gòu)單INNER1WHEREOUT.職工號(hào)=INNER1.職工號(hào))例:列出每個(gè)職工經(jīng)手的具有最高總金額的訂購(gòu)單信息。80十一、使用量詞查詢ANY、SOME:查詢的結(jié)果一行為真則結(jié)果為真。ALL:子查詢中所有行為為真查詢的結(jié)果就為真NOTEXISTS:檢查子查詢中是否有結(jié)果返回。NOTEXISTS與NOTIN之間聯(lián)系:可以相互轉(zhuǎn)換,WHERE
NOTEXISTS(SELECT*WHEREA.倉(cāng)庫(kù)號(hào)=B.倉(cāng)庫(kù)號(hào)等價(jià)于倉(cāng)庫(kù)號(hào)NOTIN(SELECT倉(cāng)庫(kù)號(hào)
區(qū)別:NOTEXISTS指是否存在一個(gè)返回結(jié)果,NOTIN指具體的返回值。十一、使用量詞查詢ANY、SOME:查詢的結(jié)果一行為真則結(jié)果81檢索那些倉(cāng)庫(kù)中還沒(méi)有職工的倉(cāng)庫(kù)的信息。這里的查詢是沒(méi)有職工或不存在職工,所以可以使用謂詞NOTEXISTS:SELECT*FROM倉(cāng)庫(kù)WHERENOTEXISTS;(SELECT*FROM職工WHERE倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))注意:這里的內(nèi)層查詢引用了外層查詢的表,只有這樣使用謂詞EXISTS或NOTEXISTS才有意義。所以這類查詢也都是內(nèi)、外層互相關(guān)嵌套查詢。以上的查詢等價(jià)于:
SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTIN;(SELECT倉(cāng)庫(kù)號(hào)FROM職工)檢索那些倉(cāng)庫(kù)中還沒(méi)有職工的倉(cāng)庫(kù)的信息。82檢索那些倉(cāng)庫(kù)中至少已經(jīng)有一個(gè)職工的倉(cāng)庫(kù)的信息。SELECT*FROM倉(cāng)庫(kù)WHEREEXISTS;
(SELECT*FROM職工WHERE倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))它等價(jià)于:SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)IN(SELECT倉(cāng)庫(kù)號(hào)FROM職工)
注意:[NOT]EXISTS只是判斷子查詢中是否有或沒(méi)有結(jié)果返回,它本身并沒(méi)有任何運(yùn)算或比較。檢索那些倉(cāng)庫(kù)中至少已經(jīng)有一個(gè)職工的倉(cāng)庫(kù)的信息。83檢索有職工的工資大于等于WH1倉(cāng)庫(kù)中任何一名職工工資的倉(cāng)庫(kù)號(hào)。
這個(gè)查詢可以使用ANY或SOME量詞。SELECTDISTINCT倉(cāng)庫(kù)號(hào)FROM職工WHERE工資>=ANY;
(SELECT工資FROM職工WHERE倉(cāng)庫(kù)號(hào)=“WH1”)
它等價(jià)于:SELECTDISTINCT倉(cāng)庫(kù)號(hào)FROM職工WHERE工資>=
;
(SELECTMIN(工資)FROM職工WHERE倉(cāng)庫(kù)號(hào)=“
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)藥分公司藥品研發(fā)管理規(guī)范
- 校車的應(yīng)急預(yù)案
- 建筑工程工法管理辦法
- IT行業(yè)外包安全管理辦法
- 《Excel數(shù)據(jù)獲取與處理實(shí)戰(zhàn)》 課件 第8章 宏和VBA
- 2022年大學(xué)心理學(xué)專業(yè)大學(xué)物理二期中考試試卷-附解析
- 2022年大學(xué)法醫(yī)學(xué)專業(yè)大學(xué)物理下冊(cè)期中考試試題-含答案
- 2022年大學(xué)能源動(dòng)力專業(yè)大學(xué)物理下冊(cè)開(kāi)學(xué)考試試卷D卷-附解析
- 2022年大學(xué)動(dòng)物醫(yī)學(xué)專業(yè)大學(xué)物理下冊(cè)期中考試試卷D卷-含答案
- 腦血管病介入診療護(hù)理
- 中藥項(xiàng)目投資合同范例
- 2024-2025學(xué)年上海市普陀區(qū)八年級(jí)(上)期中數(shù)學(xué)試卷
- 假期補(bǔ)課協(xié)議書
- 電子商務(wù)支付結(jié)算系統(tǒng)開(kāi)發(fā)合同
- 服務(wù)質(zhì)量、保證措施
- (必練)廣東省軍隊(duì)文職(經(jīng)濟(jì)學(xué))近年考試真題試題庫(kù)(含答案)
- 含羞草天氣課件
- 2024年安全生產(chǎn)知識(shí)競(jìng)賽考試題庫(kù)及答案(共五套)
- 22《鳥的天堂》課件
- 農(nóng)業(yè)灌溉裝置市場(chǎng)環(huán)境與對(duì)策分析
- 新疆烏魯木齊市第十一中學(xué)2024-2025學(xué)年八年級(jí)上學(xué)期期中道德與法治試卷
評(píng)論
0/150
提交評(píng)論