




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫系統(tǒng)概論2018年9月27日1第三章
關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL主要內(nèi)容2018年9月27日2SQL概述學(xué)生-課程數(shù)據(jù)庫數(shù)據(jù)定義數(shù)據(jù)查詢數(shù)據(jù)更新視圖3.4數(shù)據(jù)查詢2018年9月27日3?語句格式SELECT
[ALL|DISTINCT]
<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM[
WHERE<表名或視圖名>[,<表名或視圖名>]…<條件表達(dá)式>][
GROUP
BY
<
列名1>
[
HAVING
<
條件表達(dá)式>
]
][
ORDER
BY
<
列名2>
[
ASC|DESC
]
]
;分類:?jiǎn)伪聿樵冞B接查詢嵌套查詢集合查詢3.4數(shù)據(jù)查詢3.4.3嵌套查詢2018年9月27日4?嵌套查詢概述?一個(gè)SELECT-FROM-WHERE語句稱為一個(gè)查詢塊?
將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE
子句或HAVING
短語的條件中的查詢稱為嵌套查詢引例2018年9月27日5SELECT
Sname外層查詢/父查詢FROM
StudentWHERE
Sno
IN(SELECT
Sno內(nèi)層查詢/子查詢FROM
SCWHERE
Cno=
"
2
"
);?子查詢的限制2018年9月27日6?
不能使用ORDER
BY
子句?
層層嵌套方式反映了
SQL
語言的結(jié)構(gòu)化?有些嵌套查詢可以用連接運(yùn)算替代嵌套查詢分類2018年9月27日7?不相關(guān)子查詢子查詢的查詢條件不依賴于父查詢?相關(guān)子查詢子查詢的查詢條件依賴于父查詢引出子查詢的謂詞2018年9月27日8?
帶有IN謂詞的子查詢?
帶有比較運(yùn)算符的子查詢?
帶有ANY或ALL謂詞的子查詢?
帶有EXISTS謂詞的子查詢一、帶有IN謂詞的子查詢2018年9月27日9[例39]查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。此查詢要求可以分步來完成①確定“劉晨”所在系名
SELECT
SdeptFROM
StudentWHERE
Sname="
劉晨";結(jié)果為[例40]查詢選修了課程名為“信息系統(tǒng)”的學(xué)生學(xué)號(hào)和姓2018年9月27日13名SELECT
Sno
,Sname③最后在Student關(guān)系中取出Sno和SnameFROM
StudentWHERE
Sno
IN(SELECT
Sno②然后在SC關(guān)系中找出選修了3號(hào)課程的學(xué)生學(xué)號(hào)FROM
SCWHERE
Cno
IN(SELECT
Cno①首先在Course關(guān)系中找出“信FROM
Course息系統(tǒng)”的課程號(hào),結(jié)果為3號(hào)WHERE
Cname=
‘信息系統(tǒng)"
));?用連接查詢2018年9月27日14SELECT
Student
.Sno,SnameFROM
Student,SC,CourseWHERE
Student.Sno
=
SC.Sno
ANDSC.Cno=Course.Cno
ANDCourse.Cname="
信息系統(tǒng)";二、帶有比較運(yùn)算符的子查詢2018年9月27日15?當(dāng)理論上內(nèi)層查詢返回單值時(shí),可用比較運(yùn)算符(>
,<
,=
,>=
,<=
,!=或<
>
)。?
與ANY
或ALL
謂詞配合使用例:假設(shè)一個(gè)學(xué)生只可能在一個(gè)系學(xué)習(xí),并且必須屬于一個(gè)系,則在[例39]可以用
=
代替IN
:SELECT
Sno,Sname,SdeptFROM
StudentWHERE
Sdept
=(SELECT
SdeptFROM
Student2018年9月27日16WHERE
Sname=
"劉晨");劉晨"
)
=
Sdept
;2018年9月27日17子查詢一定要跟在比較符之后錯(cuò)誤的例子:SELECT
Sno
,Sname
,SdeptFROM
StudentWHERE
(
SELECT
SdeptFROM
StudentWHERE
Sname=
‘(SQL
Server
2005
支持)三、帶有ANY(SOME)或ALL謂詞的子查詢2018年9月27日18謂詞語義:任意一個(gè)值?
ANY/SOME?ALL:所有值需要配合使用比較運(yùn)算符2018年9月27日19ANYALL<
ANY<
ALL>=
ANY>=
ALL<=
ANY<=
ALL=
ANY=ALL大于子查詢結(jié)果中的某個(gè)值大于子查詢結(jié)果中的所有值小于子查詢結(jié)果中的某個(gè)值小于子查詢結(jié)果中的所有值大于等于子查詢結(jié)果中的某個(gè)值大于等于子查詢結(jié)果中的所有值小于等于子查詢結(jié)果中的某個(gè)值小于等于子查詢結(jié)果中的所有值等于子查詢結(jié)果中的某個(gè)值等于子查詢結(jié)果中的所有值(通常沒有實(shí)際意義)!=(或<>
)ANY!=(或<>
)ALL不等于子查詢結(jié)果中的某個(gè)值(通常沒有實(shí)際意義)不等于子查詢結(jié)果中的任何一個(gè)值[例42]
查詢其他系中比計(jì)算機(jī)系任意一個(gè)(其中某一個(gè))學(xué)生年2018年9月27日20齡小的學(xué)生姓名和年齡SELECTFROMSname,
SageStudentWHERE
Sdept
<>
"CS"AND
Sage
<
ANY(SELECTSageFROM
StudentWHERE
Sdept=
"CS")執(zhí)行過程?1.DBMS
執(zhí)行此查詢時(shí),首先處理子查詢,找出CS系中所有學(xué)生的年齡,構(gòu)成一個(gè)集合(20,19)?2.
處理父查詢,找所有不是CS
系且年齡小于20
或19
的學(xué)生用集函數(shù)實(shí)現(xiàn)[例42]SELECT
Sname,
Sage2018年9月27日21FROM
WHEREStudentSage
<(SELECT
MAX(Sage)FROM
StudentWHERE
Sdept=
"CS")AND
Sdept
<>
"CS";[例43]
查詢其他系中比計(jì)算機(jī)系所有學(xué)生年齡都小
的學(xué)生姓名及年齡。方法一:用ALL謂詞SELECT
Sname,SageFROM
StudentWHERE
Sage
<
ALL(SELECT
SageFROM
StudentWHERE
Sdept=
"CS")AND
Sdept
<>
"CS"2018年9月27日22方法二:用集函數(shù)SELECT
Sname,SageFROM
StudentWHERE
Sage
<
(SELECT2018年9月27日23MIN
(Sage)FROM
StudentWHERE
Sdept=
"IS")AND
Sdept
<>"CS";?
ANY 和ALL謂詞有時(shí)可以用集函數(shù)實(shí)現(xiàn)?
ANY 與ALL與集函數(shù)的對(duì)應(yīng)關(guān)系2018年9月27日24=INANY<>或!=--<<MAX<=<=MAX>>MIN>=>=
MIN>=
MAXALL--NOT
IN<MIN<=
MIN>MAX?
用集函數(shù)實(shí)現(xiàn)子查詢通常比直接用ANY
或ALL
查詢效率要高,因?yàn)榍罢咄ǔD軌驕p少比較次數(shù).找出在1號(hào)課程的考試中,成績(jī)最高的學(xué)生的學(xué)號(hào)和姓名。SELECT
sno,snameFROM
studentWHERE
sno
in(SELECT
snoFROM
scWHERE
cno="01"
and
grade=(
SELECT
max(grade)FROM
scWHERE
cno="01"))2018年9月27日25查詢學(xué)生年齡平均值最大的院系SELECTsdeptFROM
studentGROUP
BY
sdeptHAVING
AVG(sage)>=all(SELECT
avg(sage)FROM
studentGROUP
BY
sdept
)2018年9月27日26四、帶有EXISTS謂詞的子查詢2018年9月27日27EXISTS謂詞NOT
EXISTS
謂詞用EXISTS/NOT
EXISTS實(shí)現(xiàn)全稱量詞4.不同形式的查詢間的替換[例44]
查詢所有選修了1號(hào)課程的學(xué)生姓名。用嵌套查詢SELECT
SnameFROM
StudentWHERE
EXISTS2018年9月27日28(SELECT
*/*相關(guān)子查詢*/FROM
SCWHERESno=Student.Sno
AND
Cno=
"1");1.
EXISTS謂詞–帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”。若內(nèi)層查詢結(jié)果非空,則返回真值若內(nèi)層查詢結(jié)果為空,則返回假值–由EXISTS引出的子查詢,其目標(biāo)列表達(dá)式通常都用*
,因?yàn)閹XISTS的子查詢只返回真值或假值,給出列名無實(shí)際意義2.
NOT
EXISTS謂詞2018年9月27日29?相關(guān)子查詢求解過程?首先取外層查詢中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,然后根據(jù)內(nèi)層查詢結(jié)果集是否空決定WHERE
子句的取值,若WHERE
子句為真,則取外層表的此元組放入結(jié)果表;?然后再取外層表的下一個(gè)元組;?重復(fù)這一過程,直至外層表全部檢查完為止。2018年9月27日30思路分析:2018年9月27日31若SC中存在這樣的元組,其Sno值等于此Student.Sno值,并且其Cno=
‘1"
,則取此Student.Sname送入結(jié)果關(guān)系。本查詢涉及Student和SC關(guān)系。在Student中依次取每個(gè)元組的Sno值,用此值去檢查SC關(guān)系?!駥W(xué)號(hào)
Sno姓名
Sname性別
Ssex年齡
Sage所在系
Sdept200215121李勇男20CS200215122劉晨女19CS200215123王敏女18MA200515125張立男19IS學(xué)號(hào)Sno課程號(hào)Cno成績(jī)Grade200215121192200215121285200215121388200215122290200215122380?
用連接運(yùn)算SELECT
SnameFROM
Student,
SCWHERE
Student.Sno=SC.Sno
AND
SC.Cno=‘1"
;2018年9月27日32[例45]
查詢沒有選修1
號(hào)課程的學(xué)生姓名。SELECT
SnameFROM
Student2018年9月27日33Student.Sno
ANDWHERE
NOT
EXISTS(SELECT
*FROM
SCWHERE
Sno
=Cno=‘1"
);思考:此例能否用連接查詢實(shí)現(xiàn)?[例]找出每個(gè)學(xué)生超過他選修課程平均成績(jī)的課程號(hào)。SELECT
Sno ,
CnoFROM
SC
xWHERE
Grade
>=(SELECT
AVG(Grade)FROM
SC
yWHERE
y.Sno=x.Sno);2018年9月27日34用EXISTS/NOT
EXISTS
實(shí)現(xiàn)全稱量詞(難點(diǎn))2018年9月27日35[例46]查詢選修了全部課程的學(xué)生姓名。
SELECT
SnameFROM
StudentWHERE
NOT
EXISTS(SELECT
*FROM
CourseWHERE
NOT
EXISTS(SELECT
*FROM
SCWHERE
Sno=
Student.SnoAND
Cno=Course.Cno));
[例47]
查詢至少選修了學(xué)生
200215122選修的全部課程的學(xué)生號(hào)碼。用NOT
EXISTS
謂詞表示:SELECT
SnoFROM
StudentWHERE
NOT
EXISTS(SELECT
*FROM
CourseWHERE
cno
in(select
cno
from
scwhere
sno="200215122"
)and
NOT
EXISTS(SELECT
*FROM
SCWHERE
Sno=
Student.SnoAND
Cno=
Course.Cno))2018年9
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題5.2 平面向量基本定理及坐標(biāo)表示(原卷版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 2020-2021深圳市寶安區(qū)鵬暉中英文學(xué)校小學(xué)五年級(jí)數(shù)學(xué)下期中模擬試題及答案
- 肇慶車庫畫線施工方案
- 河北省邢臺(tái)隆堯縣聯(lián)考2025屆畢業(yè)升學(xué)考試模擬卷生物卷含解析
- 加油站車位出租合同范例
- 醫(yī)療專項(xiàng)設(shè)計(jì)合同范本
- 品牌故事的創(chuàng)作與傳播計(jì)劃
- 班級(jí)年度培訓(xùn)計(jì)劃
- 班級(jí)理論知識(shí)競(jìng)賽的組織與實(shí)施計(jì)劃
- 敏捷管理方法在團(tuán)隊(duì)中的實(shí)踐計(jì)劃
- 2024解析:第二十章電與磁-講核心(解析版)
- DB4101T 25.2-2021 物業(yè)服務(wù)規(guī)范 第2部分:住宅
- 六年級(jí)數(shù)學(xué)下冊(cè) 負(fù)數(shù)練習(xí)題(人教版)
- 2024-2030年中國康復(fù)醫(yī)院行業(yè)管理模式分析及發(fā)展規(guī)劃研究報(bào)告
- 斐訊PSG1218路由器的上網(wǎng)設(shè)置教程
- 八年級(jí)下冊(cè)《經(jīng)典常談》-2024年中考語文名著導(dǎo)讀專練
- 亡靈節(jié)課件教學(xué)課件
- 企業(yè)名稱預(yù)先核準(zhǔn)通知書
- 內(nèi)容運(yùn)營崗位招聘筆試題與參考答案(某大型央企)
- 體格檢查:腹部檢查(二)
- 1.3.1-二項(xiàng)式定理-公開課一等獎(jiǎng)?wù)n件
評(píng)論
0/150
提交評(píng)論