版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
要點(diǎn)
?SQL語(yǔ)言簡(jiǎn)介
4SQL語(yǔ)言及其使用方式
■獨(dú)立式SQL
■嵌入式SQL
第2頁(yè)
2009-9-23
3.1SQL概述
?StructuredQueryLanguage,1974年被提出
?關(guān)系數(shù)據(jù)庫(kù)的國(guó)際標(biāo)準(zhǔn)語(yǔ)言:大多數(shù)數(shù)據(jù)庫(kù)
均用SQL作為共同的數(shù)據(jù)存取語(yǔ)言和標(biāo)準(zhǔn)接
口,實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)系統(tǒng)之間的互操作
?目前仍被不斷擴(kuò)充//
?介于關(guān)系代數(shù)和關(guān)系演算之間,三者可相互
轉(zhuǎn)換K\7<
第3頁(yè)
2009-9-23
SQL的特點(diǎn)
?綜合統(tǒng)一:
■集DDL、DML、DCL功能于一體,可獨(dú)立完成數(shù)據(jù)庫(kù)
生命周期中的全部活動(dòng),語(yǔ)言風(fēng)格統(tǒng)一
?高度非過(guò)程化:
-用戶只需提出“做什么”,而無(wú)需指明“怎么做”
?面向集合的操作方式:
-操作對(duì)象、查詢結(jié)果、更新數(shù)據(jù)均可以是元組的集合
?提供兩種使用方式:
■自含式、嵌入式SQL功能關(guān)鍵動(dòng)詞
?語(yǔ)言簡(jiǎn)捷,易學(xué)易用數(shù)據(jù)查詢SELECT
數(shù)據(jù)定義CREATE,DROP,ALTER
數(shù)據(jù)操縱INSERT,UPDATE,
DELETE
第4頁(yè)
數(shù)據(jù)控制GRANT,REVOKE
2009-9-23
SQL語(yǔ)言的基本概念
?SQL支持關(guān)系數(shù)據(jù)庫(kù)的三級(jí)模式結(jié)構(gòu)
-存儲(chǔ)文件:組成關(guān)系數(shù)據(jù)庫(kù)的內(nèi)模式,對(duì)用戶透明
■基表(BaseTable):組成關(guān)系數(shù)據(jù)庫(kù)的模式,一個(gè)關(guān)系對(duì)應(yīng)一個(gè)基表,
――或多個(gè)基表對(duì)應(yīng)一個(gè)存儲(chǔ)文件
■視圖(View):組成關(guān)系數(shù)據(jù)庫(kù)的外模式,從一個(gè)或多個(gè)基表中導(dǎo)出,
不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中
第5頁(yè)存儲(chǔ)文件1存儲(chǔ)文件2
2009-9-23
3.2數(shù)據(jù)定義
?SQL的數(shù)據(jù)定義語(yǔ)言(DDL)
操作方式
操作對(duì)象
創(chuàng)建刪除修改
基表CREATETABLEDROPTABLEALTERTABLE
視圖CREATEVIEWDROPVIEW
索引CREATEINDEXDROPINDEX
第6頁(yè)
2009-9-23
CREATETABLEv表名〉(
v列名,v數(shù)據(jù)類型刁列級(jí)完整性約束]定義基表
[,<列名>v數(shù)據(jù)類型刁列級(jí)完整性約束]]…
[,〈表級(jí)完整性約束>]);
“數(shù)據(jù)類型:
■不同的數(shù)據(jù)庫(kù)系統(tǒng)有自己的數(shù)據(jù)類型規(guī)定,但一般都包
括INTEGER,FLOAT,CHAR(n),VARCHAR(n)等
?完整性約束條件
■列級(jí)完整性約束條件:涉及表的某一列
?如對(duì)數(shù)據(jù)類型的約束,對(duì)數(shù)據(jù)格式的約束,對(duì)取值范圍或集合的
約束,對(duì)空值NULL(空值,不知道或不能用的值)的約束,對(duì)取值
的唯一性UNIQUE約束,對(duì)列的排序說(shuō)明等
■表級(jí)完整性約束條件:涉及表的一個(gè)或多個(gè)列
?如訂貨關(guān)系中規(guī)定發(fā)貨量不得超過(guò)訂貨量,如教授工資不得低于
___1000元等>/
第7頁(yè)/———
2009-9-23
SQL支持的數(shù)據(jù)類型
?SMALLINT半字長(zhǎng)的整數(shù)
?INT全字長(zhǎng)的整數(shù)
?FLOAT浮點(diǎn)數(shù)
?CHAR(n)長(zhǎng)度為。的定長(zhǎng)字符串
?VARCHAR(n)最大長(zhǎng)度為"的變長(zhǎng)字符串
?DEC(p,q)十進(jìn)制數(shù),共p位,小數(shù)點(diǎn)后有q位,
?DATE日期型,格式Y(jié)YYY-MM-DD
?TIME時(shí)間型,格式為HH.MM.SS
?TIMESTAMP日-時(shí)戳(日期加時(shí)間)
第8頁(yè)/Z-——
2009-9-23
完整性約束
?CREATETABLE的完整性約束
■NOTNULL屬性值禁止為空
■UNIQUE取值唯一
■PRIMARYKEY(4,…,AJ主碼--若干屬性列
■CHECK(P)尸為條件表達(dá)式
?SQL-92以后版本中,一個(gè)屬性若有PRIMARYKEY聲明則隱含
有NOTNULL約束\/
第9頁(yè)/Z--------/\
2009-9-23
例:建立學(xué)生管理的相關(guān)基表
CREATETABLEStudent
(SnoCHAR(5)NOTNULLUNIQUE,
SnameCHAR(20)UNIQUE,
SsexCHAR(1),
SageINTEGER,CREATETABLECourse
SdeptCHAR(15));
(CnoCHAR(8)NOTNULLUNIQUE,
CnameCHAR(20),
CpnoINTEGER,
CcreditINTEGER);
CREATETABLESC---------------------
(SnoCHAR(5)NOTNULLUNIQUE,
CnoCHAR(8)NOTNULLUNIQUE,
第10頁(yè)GradeINTEGER);
2009-9-23
例:建立圖書管理的相關(guān)基表
CREATETABLEBorrows
(CardNoINTEGERNOTNULLUNIQUE,
NameCHAR(IO),
DeptCHAR(20));
CREATETABLEBooks
(BookNoINTEGERNOTNULLUNIQUE,
SortNoCHAR(IO),
TitleCHAR(30),
AuthorCHAR(12),CREATETABLELoans
(CardNoINTEGERNOTNULLUNIQUE,
PriceFLOAT,
BookNoINTEGERNOTNULLUNIQUE,
LoanNoINTEGER);TitleCHAR(30),
DateCHAR(10));
第11頁(yè)
2009-9-23
例:完整性約束
CREATETABLEbranch
(branch-namechar(15)notnull,
branch-citychar(30),
assetsinteger);
CREATETABLEbranch
(branch-namechar(15),
branch-citychar(30),
assetsInteger,
PRIMARYKEY(branch-name),
CHECK(assets>=0));
第12頁(yè)
2009-9-23
ALTERTABLEv表名)
[ADDv列名,〈數(shù)據(jù)類型〉修改基表
[列級(jí)完整性約束]]
[DROPv完整性約束名刁
[MODIFYv列名>〈數(shù)據(jù)類型>];
例ALTERTABLELoans
ADDXXINT;
ALTERTABLELoans
MODIFYCardnoSMALLINT;
ALTERTABLELoans
DROPUNIQUE(BookNo);
第13頁(yè)
2009-9-23
刪除基本表
DROPTABLEv表名);
例
DROPTABLELoans;
第14頁(yè)
2009-9-23
CREATE[UNIQUE][CLUSTER]
INDEXv余弓[名,ONv表名)建立索弓
(v列后〉[<ASC|DESC>]
[,v歹!J名>[<ASC|DESC>]]...);
?加快檢索速度
?UNIQUE表示索引的每一個(gè)索引值只對(duì)應(yīng)唯一的數(shù)據(jù)記錄
?CLUSTER:建聚簇索引,即索引項(xiàng)順序與表中記錄的物
理順序一致,一個(gè)基表只能建一個(gè)聚簇索引
?ASC(升序,缺省)、DESC(降序)
?索引建立后由系統(tǒng)使用和維護(hù),不需用戶干預(yù)
例1CREATEUNIQUEINDEXIBONBorrows(CardNo);
CREATEUNIQUEINDEXISONStudent(Sno);
第15頁(yè)CREATEUNIQUEINDEXSCnoONSC(SnoASC,CnoDESC);
2009-9-23
DROPINDEXv索引名〉;刪除索弓
?例
DROPINDEXIB;
DROPINDEXSCno;
第16頁(yè)
2009-9-23
3.3查詢
?數(shù)據(jù)庫(kù)查詢是數(shù)據(jù)庫(kù)的核心操作,SQL提供了
基于集合和關(guān)系的查詢操作,具有豐富的功能
和靈活的使用方式
?一個(gè)SQL查詢的結(jié)果是一個(gè)關(guān)系
?查詢可分為/
■單表查詢:查詢只涉及一個(gè)表
■連接查詢:查詢同時(shí)涉及兩個(gè)以上的表
■嵌套查詢:一個(gè)查詢塊嵌套在另一個(gè)查詢塊中
■視圖查詢:在視圖基礎(chǔ)上的查詢
第17頁(yè)//Z-——X—
2009-9-23
SQL查詢語(yǔ)句的格式
SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式》[,v目標(biāo)列表達(dá)式習(xí)…
FROMv表名或視圖名>[,〈表名或視圖名刁…
[WHEREv條件表達(dá)式刁
[GROUPBYV列名1>[HAVING〈條件表達(dá)式>]]
[ORDERBYv歹!j名2>[ASC|DESC]];
?查詢語(yǔ)句的典型格式
select4,A2,An
fromr2,rm
whereP
在做每個(gè)SQL查詢時(shí)都試著寫出其關(guān)系代數(shù)表達(dá)式
口41,A2,M(O尸HXr2X…X啕)
第18頁(yè)
2009-9-23
3.3,1單表查詢
,、選擇表中若干列
■查詢指定列:在V目標(biāo)列表達(dá)式>中指定預(yù)查屬性
■查詢?nèi)苛校涸凇茨繕?biāo)列表達(dá)式〉中使用*
■查詢經(jīng)計(jì)算的值:在V目標(biāo)列表達(dá)式〉中可使用常
量、表達(dá)式、函數(shù)等
SELECTSno,SnameSELECT*
FROMStudent;FROMStudent;
SELECTSname5'YearofBirthis',2002-Sage
FROMStudent;
第19頁(yè)
2009-9-23
查詢實(shí)例
SELECTSname,'YearofBirthis',2002-Sage,ISLOWER(Sdept)
FROMStudent;
結(jié)果為:
SnameyearofBirth:52002-SageISLOWER(Sdept)
李勇YearofBirht:1982cs
劉晨YearofBirht:1983is
王敏YearofBirht:1984ma
張立YearofBirht:1983is
第20頁(yè)
2009-9-23
定義別名
用戶可以通過(guò)指定別名來(lái)改變查詢結(jié)果的列標(biāo)題,這對(duì)
于含算術(shù)表達(dá)式、常量、函數(shù)名的目標(biāo)列表達(dá)式尤為有
用。例如對(duì)于上例,可以定義如下列別名:
SELECTSnameNAME,'YearofBirth:9BIRTH,
1996-SageYEAR,ISLOWER(Sdept)DEPARTMENT
FROMStudent;
結(jié)果為:
NAMEBIRTHYEARDEPARTMENT
李勇YearofBirth:1982cs
劉晨YearofBirth:1983if
王敏YearofBirth:1984ma
第21頁(yè)_張立YearofBirth:1983if
2009-9-23
ACCESS數(shù)據(jù)庫(kù)中SQL例
別名表示:字段as別名
注:ISLOWER()函數(shù)在access中無(wú)法識(shí)別
SELECTSnameasNAME,YearofBirth;asBIRTH,
1996-SageasYEAR,SdeptasDEPARTMENT
FROMStudent;
第22頁(yè)
2009-9-23
二、選擇表中若干元z
取消取值重復(fù)的列:指定DISTINCT短語(yǔ)
查詢滿足條件的元組:在WHERE子句中指
定條件、-------
對(duì)查詢結(jié)果排序:使用ORDERBY
使用集函數(shù):COUNT,SUM,AVG,MAX,
MIN/Y
對(duì)查詢結(jié)果分組:使用GROUPBY,
HAVING\/
第23頁(yè)
2009-9-23
DISTINCT短語(yǔ)
?SQL允許重復(fù)的元組/行存在,如果需要去掉重復(fù)的元
組/行,必須指定DISTINCT短語(yǔ),缺省為ALL
?例:查詢選修了課程的學(xué)生學(xué)號(hào)
SELECTSnoFROMSC;
SELECTDISTINCTSno
或
FROMSC;
SELECTALLSnoFROMSC;
結(jié)果為:結(jié)果為:
SnoSno
9500195001
9500195002
95001
第24頁(yè)95002
2009-9-2395002
WHERE子句
?查詢滿足條件的元組:在WHERE子句中指定條件
?WHERE子句常用的查詢條件:
查詢條件謂詞
比較=>,<>=<=,!=,<>,!>,!<;NOT+上述比較運(yùn)算符
確定范圍BETWEENAND,NOTBETWEENAND
確定集合IN,NOTIN
字符匹配LIKE,NOTLIKE
空值ISNULL,ISNOTNULL
多重條件AND,OR
2009-9-23
Where子句一比較大小
例查詢計(jì)算機(jī)系全體學(xué)生的名單
SELECTSnameFROMStudentWHERESdept='CS9;
例查詢考試成績(jī)有不及格的學(xué)生的學(xué)號(hào)
SELECTDISTINCTSnoFROMSCWHEREGrade<60;
例查詢所有年齡在20歲以下的學(xué)生姓名及其年齡
SELECTSname,SageSELECTSname,Sage
FROMStudentFROMStudent
WHERESage<20;WHERENOTSage>=20;
第26頁(yè)
2009-9-23
Where子句一確定范圍
例查詢年齡在20?40歲之間的學(xué)生姓名、系別和年齡
SELECTSname,Sdept,Sage
FROMStudent
WHERESageBETWEEN20AND40;
例查詢年齡不在20?23歲之間的學(xué)生姓名、系別和年齡/
SELECTSname,Sdept,Sage
FROMStudent\
WHERESageNOTBETWEEN20AND23;
第27頁(yè)/Z-——NX
2009-9-23
Where子句一確定集合
例查詢信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)系(CS)學(xué)生的姓名和性別
SELECTSname,Ssex
FROMStudent
WHERESdeptIN('IS'JMA'JCS');
例查詢除信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)系(CS)以外其它
系學(xué)生的姓名和性別
SELECTSname,Ssex
FROMStudent
WHERESdeptNOTIN('IS';MA';CS')
第28頁(yè)------------------------------------------------------------------------
2009-9-23
Where子句一字符串匹配
■謂詞LIKE可以用來(lái)進(jìn)行字符串的匹配
■格式:[NOT]LIKE'〈匹配串〉'[ESCAPED換碼字符>']
■匹配串中%代表任意長(zhǎng)度的字符串,如a%b:acb,addgb,ab
■匹配串中—代表任意單個(gè)字符,如a_b:acbafb
例查詢學(xué)號(hào)為SELECT*
95001的學(xué)生FROMStudent
的詳細(xì)情況:WHERESnoLIKE'95001';
SELECT*
相當(dāng)于FROMStudent
WHERESno='95001';
第29頁(yè)
2009-9-23
通配符例子
例查詢所有姓劉的學(xué)生的詳細(xì)信息
SELECT*
FROMStudent
WHERESnameLIKE'劉%’;
例查詢所有全名為三個(gè)字且中間漢字為“明”的學(xué)生的詳細(xì)信
SELECT*\/
FROMStudent\/
WHERESnameLIKE]明―<-----inn
第30頁(yè)
2009-9-23
換碼字符
例查詢DB_Design課程的課程號(hào)和學(xué)分
SELECTCno,Credit
FROMCourse
WHERECnameLIKE€DB\_Design,ESCAPET;
注:ESCAPE'表示'為轉(zhuǎn)義換碼字符,緊跟其后的—轉(zhuǎn)義為普通—字符.
例查詢以“DB_”開頭,且倒數(shù)第3個(gè)字符為i的課程的詳細(xì)情況
SELECT*
FROMCourse
WHERECnameLIKE'DB\%i'ESCAPE;
第31頁(yè)Z—//'
2009-9-23
Where子句一涉及空值的查詢
例:某些學(xué)生選修課程后沒(méi)有參加考試,所以有選修課記錄,
但沒(méi)有考試成績(jī)。查詢?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào):
SELECTSno,Cno
FROMSC注意這里的“IS”不能用等號(hào)代
替
WHEREGradeISNULL;
例查詢所有有成績(jī)的學(xué)生學(xué)號(hào)和課程號(hào)
SELECTSno,Cno
FROMSC
WHEREGradeISNOTNULL;
第32頁(yè)
2009-9-23
Where子句一多重條件查詢
例查詢計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名
SELECTSname
FROMStudent
WHERESdept=CS'ANDSage<20;
例查詢信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)系(CS)學(xué)生的姓名
和性別/
SELECTSname,Ssex
FROMStudent
WHERESdept='IS'ORSdept='MA'ORSdept='CS’;
第33頁(yè)7―//V-
2009-9-23
練習(xí)
?關(guān)系:圖書(書號(hào),書名,作者,出版社,單價(jià))
BOOK(Bno,Bname,Author,Press,Price)
■查詢“數(shù)據(jù)庫(kù)”一書的書號(hào)和單價(jià)
■查詢單價(jià)在20至50元之間的圖書信息
-查詢北京某出版社出版的圖書信息
■查詢作者是張一,王二,劉三的書的信息
-查詢所有圖書的書號(hào),書名和半價(jià)信息
-查詢?nèi)鄙俪霭嫔缧畔⒌膱D書的書號(hào)和書名
第34頁(yè)
2009-9-23
三、對(duì)查詢結(jié)果排序
?ORDERBY子句可對(duì)查詢結(jié)果按照一個(gè)或多個(gè)屬性列的升
序(ASC)或降序(DESC)排列,缺省值為升序
例查詢選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按
分?jǐn)?shù)的降序排列
SELECTSno,GradeFROMSC
WHERECno=3ORDERBYGradeDESC;
例查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號(hào)升序排列,
同一系中的學(xué)生按年齡降序排列(見(jiàn)mdb示例)
SELECT*FROMStudent
ORDERBYSdept,SageDESC;
第35頁(yè)______________________________________________
2009-9-23
四、使用集函數(shù)
COUNT([DISTINCT|ALL]*)統(tǒng)計(jì)元組個(gè)數(shù)
COUNT([DISTINCT|ALL]v列名〉)統(tǒng)一列中值的個(gè)數(shù)
SUM([DISTINCT|ALL卜列名,)計(jì)算一列值的總和
AVG([DISTINCT|ALL]v列名,)計(jì)算一列值的平均值
MAX([DISTINCT|ALL卜列名,)求一列值中的最大值
MIN([DISTINCT|ALL卜列名,)求一列值中的最小值
第36頁(yè)
2009-9-23
例查詢學(xué)生總?cè)藬?shù)實(shí)例
SELECTCOUNT(*)例查詢選修了課程的學(xué)生人數(shù)
FROMStudent;SELECTCOUNT(DISTINCTSno)
FROMSC;
例計(jì)算選修了1號(hào)課程的學(xué)生平均兩―
SELECTAVG(Grade)/
FROMSC/yXl/
WHERECno=T;
例查詢選修1號(hào)課程的學(xué)生最高分?jǐn)?shù)
SELECTMAX(Grade)
FROMSC
iWHERECno-'T;
2009-9-23
五、對(duì)查詢結(jié)果分z
?GROUPBY子句將查詢結(jié)果按某一列或多
列分組,值相等的為一組。
?對(duì)查詢結(jié)果分組的目的是為了細(xì)化集函數(shù)
的作用對(duì)象,分組后每個(gè)組都有一個(gè)函數(shù)
值/XT/
?如果分組后還要求按一定的條件對(duì)這些組
進(jìn)行篩選,最終只輸出滿足指定條件的組,
則可以是使用HAVING短語(yǔ)指定篩選條件
第38頁(yè)
2009-9-23
分組實(shí)例
例求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)
SELECTCno,COUNT(Sno)
FROMSC
GROUPBYCno;
例查詢選修了3門以上課程的學(xué)生學(xué)號(hào)
SELECTSno
FROMSC
GROUPBYSno
HAVINGCOUNT(*)>3;
第39頁(yè)------------------------------------
2009-9-23
練習(xí)
數(shù)據(jù)庫(kù)模式如下:
?倉(cāng)庫(kù)(倉(cāng)庫(kù)號(hào),負(fù)責(zé)人)
?貨物(貨物號(hào),貨物名,貨物描述)
?入庫(kù)記錄(貨物號(hào),倉(cāng)庫(kù)號(hào),數(shù)量,入庫(kù)日期,經(jīng)辦人號(hào))
用SQL實(shí)現(xiàn)以下查詢要求:
?查詢倉(cāng)庫(kù)中有多少種不同的貨物
?查詢每天入庫(kù)數(shù)量的最大值
?統(tǒng)計(jì)2003年3月20日以后每天入庫(kù)的貨物總數(shù)量
?按貨物號(hào)統(tǒng)計(jì)每一種貨物在倉(cāng)庫(kù)中的總數(shù)量
?查詢“A-00代號(hào)經(jīng)辦人當(dāng)日經(jīng)辦的入庫(kù)記錄數(shù)
第40頁(yè)/Z-X—
2009-9-23
SELECTCOUNT(*)
FROM貨物;
或
SELECTCOUNT(DISTINCT貨物號(hào))
FROM入庫(kù)記錄;
SELECT入庫(kù)日期,MAX(數(shù)量)
FROM入庫(kù)記錄
GROUPBY入庫(kù)日期;
SELECT入庫(kù)日期,SUM(數(shù)量)
FROM入庫(kù)記錄
GROUPBY入庫(kù)日期
HAVING入庫(kù)日期》“2003/03/20”;
第41頁(yè)
2009-9-23
SELECT貨物號(hào),SUM(數(shù)量)
FROM入庫(kù)記錄
GROUPBY貨物號(hào);
SELECTCOUNT(*)
FROM入庫(kù)記錄
WHERE入庫(kù)日期二Today。
GROUPBY經(jīng)辦人號(hào)
HAVING經(jīng)辦人號(hào)="A-001”;
第42頁(yè)
2009-9-23
3.3.2連接查詢
6連接(Join)查詢
■查詢涉及兩個(gè)以上的表(在FROM子句中體現(xiàn))
■From子句對(duì)應(yīng)于關(guān)系代數(shù)中笛卡兒乘積運(yùn)算,它
給出待掃描的關(guān)系/表(指定多個(gè)表),給出連接條件
?連接查詢的類型
■等值連接查詢/XI
■非等值連接查詢
■自然連接查詢N\/
■自身連接查詢\
■外連接查詢
■符合條件連接查詢〉Z\/
第43頁(yè)
2009-9-23
一、等值與非等值連接查詢
?連接條件的形式
■卜表名1>.]<列名1><比較運(yùn)算符〉卜表名2>.卜列名2>
?比較運(yùn)算符:=(等值連接)、>、<、>=、<=>!=
?連接字段必須是可比的
■代表名1>卜列名1>BETWEEN卜表名2>.卜歹U名2>AND
[v表名2>.卜列名3>V
?連接查詢的執(zhí)行過(guò)程
■首先在表1中找到第一個(gè)元組,然后從頭開始掃描表2,
逐一查找滿足連接條件的元組,找到后就將表1中的第
一個(gè)元組與該元組拼接起來(lái),形成結(jié)果表中的一個(gè)元組。
表2全部查找完后,再找表1中第二個(gè)元組,然后再?gòu)念^
開始掃描表2。重復(fù)上述操作,直至表1中的全部元組都
處理完畢為止?!?/p>
第44頁(yè)
2009-9-23
例子
0例32查詢每個(gè)學(xué)生及其選修課程的情況
學(xué)生情況存放Student表中,學(xué)生選課情況存放在SC
表中,所以本查詢實(shí)際上涉及Student與SC兩個(gè)表。通
過(guò)公共屬性Sno實(shí)現(xiàn)聯(lián)系
使用表名前綴
為避免混淆,
__________________若屬性名在各
SELECTStudent.*,SC*I翻獷,則
FROMStudent,SC
WHEREStudent.Sno=SC.Sno;
第45頁(yè)U等值連燧
2009-9-23
自然連接和廣義笛卡爾積連接
?自然連接
■等值連接的特例
■在等值連接的基礎(chǔ)上將目標(biāo)列中重復(fù)的屬性去掉
?廣義笛卡爾積連接y
■不帶連接條件的連接
■結(jié)果是兩表中元組的交叉乘積
第46頁(yè)
2009-9-23
例查詢每個(gè)學(xué)生及其選修課程的情況
SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
FROMStudent,SC
WHEREStudent.Sno=SC.Sno;
自然連接
SELECTStudent.*,SC.*
FROMStudent,SC;
廣義笛卡爾積連接
第47頁(yè)
2009-9-23
二、自身連接
叭個(gè)表與其自己進(jìn)行連接
例查詢每一門課的間接先修課
SELECTFIRST.Cno,SECOND.Cpno
FROMCourseFIRST,CourseSECOND
WHEREFIRST.Cpno=SECOND.Cno;
第48頁(yè)見(jiàn)P104表
2009-9-23
實(shí)例
例查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生
SELECTSl.Sname
FROMStudentS1,StudentS2
WHERESl.Sdept=S2.SdeptANDS2.Sname='文U
晨';
第49頁(yè)
2009-9-23
三、外連接
?是連接運(yùn)算的擴(kuò)充
?除了滿足連接條件的元組正常輸出外,所有不滿
足連接條件的元組也進(jìn)行連接,并用空值NULL來(lái)
填充并輸出
?外連接符:*(或+),表示增加一個(gè)萬(wàn)能行
?外連接分類:右外連接、左外連接、全外連接
例查詢每個(gè)學(xué)生及其選修課程削網(wǎng)I.
SELECTStudent.Sno,Sname,Ssex,Sage,Sdept,Cno9Grade
FROMStudent,SC
WHEREStudent.Sno=SC.Sno(*);
第50頁(yè)7~//二
2009-9-23
實(shí)例
例查詢學(xué)校設(shè)置的所有課程及其選修情況
SELECTCno,Cname5Credit,Sno5Grade
FROMCourse,SC
WHERECourse.Cno=SC.Cno(*);
第51頁(yè)
2009-9-23
四、復(fù)合條件連接
?WHERE子句中有多個(gè)連接條件
例查詢選修了2號(hào)課程且成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)和姓名
SELECTStudent.Sno,Sname
FROMStudent,SC
WHEREStudent.Sno=SC.Sno
ANDSC.Cno=2
ANDSC.Grade>90;
第52頁(yè)
2009-9-23
多表連接
?兩個(gè)以上的表的連接
例查詢每個(gè)學(xué)生的學(xué)號(hào)、姓名、選修的課程各及成績(jī)
SELECTStudent.Sno,Sname,Cname
FROMStudent,Course,SC
WHEREStudent.Sno=SC.Sno
ANDSC.Cno=Course.Cno;
第53頁(yè)//Z-——NX
2009-9-23
3.3.3嵌套查詢
?在SQL語(yǔ)言中,一個(gè)SELECT-FROM-WHERE語(yǔ)
Q句稱為一個(gè)杳詢塊。
?一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或
HAVING短語(yǔ)的條件中的查詢。
SELECTSname
FROMStudent
如
WHERESnoIN其等效不嵌套的查詢語(yǔ)句?
(SELECTSno
FROMSC
WHERECno=2);
第54頁(yè)
2009-9-23
?允許多層嵌套,體現(xiàn)了SQL的結(jié)構(gòu)化特色
?術(shù)語(yǔ)
■父查詢&子查詢
■不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢
■相關(guān)子查詢:子查詢的查詢條件依賴于父查詢的某個(gè)屬性值
SELECTSnameSELECTSname
FROMStudentFROMStudent
WHERESnoINWHEREEXISTS
(SELECTSno(SELECT*FROMSC
FROMSCWHERESno=Student.Sno
WHERECno=2);ANDCno=T);
(相關(guān)子查詢)
(不相關(guān)子查詢)
2009-9-23
嵌套查詢
?不相關(guān)子杳詢的求解方法
■由里向外。子查詢只執(zhí)行一次,其結(jié)果用于父查詢。
?相關(guān)子查詢的求解方法
■內(nèi)層查詢與外層查詢反復(fù)求值。首先取外層查詢中表
的第一條元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理
內(nèi)層查詢,如果where子句返[II值為真,則取此元組
放入結(jié)果表中;然后再取外層查詢中表的第二條元組;
重復(fù)這一過(guò)程,直至外層查詢中表的全部元組都被檢
查完為止。K\|7Z
★子查詢中通常不含ORDERBY子句和DISTINCT
短語(yǔ),因?yàn)樗鼈冎粚?duì)最終結(jié)果有意義。
第56頁(yè)
2009-9-23
一、帶有IN謂詞的子查詢
,嵌套杳詢中,子杳詢的結(jié)果往往是?個(gè)
集合,所以經(jīng)常使用謂詞IN
例查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生
(1)SELECTSdeptSELECTSno,Sname,Sdept
FROMstudentFROMStudent
WHERESnamei劉晨,WHERESdeptIN
結(jié)果為
'IS,(SELECTSdept
(2)SELECTSno,Sname,Sdept
FROMStudent
FROMStudent
咧晨');
WHERESdept='IS';WHERESname=
第57頁(yè)(不相關(guān)子查詢)
2009-9-23
例查詢選修了課程名為“信息系統(tǒng)”的學(xué)例子
生學(xué)號(hào)和姓名
SELECTSno,Sname⑶
FROMStudent
■使用嵌套查詢實(shí)現(xiàn)
WHERESnoIN
(SELECTSno⑵
FROMSC
(不相關(guān)子查詢)WHERECnoIN
(SELECTCno(1)
FROMCourse
WHERECname-信息系統(tǒng)’));
■使用連接查詢實(shí)現(xiàn)
SELECTSno,Sname
多種實(shí)現(xiàn)方式,F(xiàn)ROMStudent,SC,Course
嵌套查詢具有結(jié)構(gòu)化WHEREStudent.Sno=SC.SnoAND
程序設(shè)計(jì)特點(diǎn)SC.Cno=Course.CnoAND
第58頁(yè)Course.Cname'信息系統(tǒng)';
2009-9-23
二、帶有比較運(yùn)算符的子查詢
?當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),
可以使用比較運(yùn)算符(>,<,>=,<二,!二等)
4V注意:子查詢一定要跟在比較運(yùn)算符之后
例查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的陳
SELECTSno,Sname,Sdept
FROMStudent
WHERESdept=
(SELECTSdept/\
FROMStudent/、
WHERESname=,劉晨');
第59頁(yè)(不相關(guān)子查詢)
2009-9-23
▲、帶有ANY或ALL謂詞的子查詢
?與比較運(yùn)算符等)配合使用
■>ANY(ALL)大于子查詢結(jié)果中的某個(gè)(所有)值
■〈ANY(ALL)小于子查詢結(jié)果中的某個(gè)(所有)值
■>=ANY(ALL)大于等于子查詢結(jié)果中的某個(gè)(所有)值
■v=ANY(ALL)小于等于子查詢結(jié)果中的某個(gè)(所有)值
■=ANY(ALL)等于子查詢結(jié)果中的某個(gè)(所有)值
■!=ANY(ALL)不等于子查詢結(jié)果中的某個(gè)(任何)值
第60頁(yè)
2009-9-23
例1
例查詢其他系中比信息系某一學(xué)生年齡小的學(xué)
生姓名和年齡
也可以用集函數(shù)來(lái)實(shí)現(xiàn)
SELECTSname,SageSELECTSname,Sage
FROMStudentFROMStudent
WHERESage<ANYWHERESage<
(SELECTSage(SELECTMAX(Sage)
FROMStudentFROMStudent
WHERESdept='S)WHERESdept="S')
ANDSdept<>'IS';ANDSdepto"S';
第61頁(yè)
2009-9-23
例2
例查詢其他系中比信息系所有學(xué)生年齡都小的
學(xué)生姓名和年齡
也可以用集函數(shù)來(lái)實(shí)現(xiàn)
SELECTSname,SageSELECTSname,Sage
FROMStudentFROMStudent
WHERESage<ALLWHERESage<
(SELECTSage(SELECTMIN(Sage)
FROMStudentFROMStudent
WHERESdept='IS')WHERESdept="S')
ANDSd印tv>'IS';ANDSdeptv>"S’;
第62頁(yè)
2009-9-23
轉(zhuǎn)換關(guān)系
,事實(shí)上,用集函數(shù)實(shí)現(xiàn)子查詢通常比直接
用ANY或ALL查詢效率要高
?ANY、ALL與集函數(shù)及IN的等價(jià)轉(zhuǎn)換關(guān)系
!=<<=>>=
ANYIN<MAX<=MAX>MIN>=MIN
ALLNOTIN<MIN<=MIN>MAX>=MAX
第63頁(yè)
2009-9-23
四、帶有EXISTS謂詞的子查詢
?不需要返回具體數(shù)據(jù),而只關(guān)心是否有返回
值,即返回邏輯真或假
例查詢所有選修了一號(hào)課程的學(xué)生姓名
SELECTSname
SELECTSnameFROMStudent,SC
FROMStudentWHERESC.Sno=Student.Sno
WHEREEXISTSANDCno="');
(SELECT*FROMSC
WHERESno=Stiident.Sno(可以用連接查詢來(lái)實(shí)現(xiàn))
ANDCno='1');
第64頁(yè)(相關(guān)子查詢)
2009-9-23
例子
例查詢沒(méi)有選修一號(hào)課程的學(xué)生姓名
SELECTSname
SELECTSnameFROMStudent,SC
FROMStudentWHERESC.Sno=Student.Sno
WHERENOTEXISTSANDCno!="');
(SELECT*/,f7
FROMSC(無(wú)理用簡(jiǎn)單的連
WHERESno=Student.Sno接查詢來(lái)實(shí)現(xiàn))
_________ANDCno=l);\/\
(相關(guān)子查詢)\ZK/
第65頁(yè)/Z-——NX
2009-9-23
替換關(guān)系
?一些帶EXISTS或NOTEXISTS謂詞的子查詢不能
被其他形式的子查詢替換,但所有帶IN謂詞、比
較運(yùn)算符、ANY和ALL謂詞的子查詢都能用
EXISTS謂詞等價(jià)替換
例查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生.
SELECTSnoSname,Sdept
SELECTSnoSnameSdept?
55FROMStudent
FROMStudent
WHEREEXISTS
WHERESdeptIN
(SELECT*
(SELECTSdept
FROMStudent
FROMStudent
見(jiàn)WHERES2.Sdept=SI.Sdept
WHERESname=,劉晨');
-----ANDS2.Sname=
第66頁(yè)'(不相關(guān)子查詢)
2009-9-23(相關(guān)子查詢)
全稱量詞
?SQL語(yǔ)言中沒(méi)有全稱量詞用(forall),但可使用存在量詞
進(jìn)行轉(zhuǎn)換后實(shí)現(xiàn):(Vx)P三-i(3x(^P))
X表示課程,
例、查詢選修了全部課程的學(xué)生姓名P表示謂詞“選
(可理解為:查詢沒(méi)有一門課程不選修的學(xué)生
SELECTSname
FROMStudent
WHERENOTEXISTS
(SELECT*FROMCourse
WHERENOTEXISTS
(SELECT*FROMSC
WHERESno=Student.Sno
ANDCno=Course.Cno));
第67頁(yè)
(相關(guān)子查詢)
2009-9-23
邏輯蘊(yùn)函
?SQL語(yǔ)言中的邏輯運(yùn)算包括非(NOT)、與(AND)、或(OR)
?而常用的邏輯運(yùn)算還包括異或、等價(jià)、蘊(yùn)涵等,SQL語(yǔ)言
中沒(méi)有邏輯蘊(yùn)函(Implication)運(yùn)算,但可利用謂詞演算轉(zhuǎn)換
J一個(gè)邏輯蘊(yùn)函:____________________
PfQ三TPyQ
■在蘊(yùn)涵運(yùn)算P->Q中,只有當(dāng)前提為True并且結(jié)果為
False的情況下邏輯蘊(yùn)涵的結(jié)果為False,其余的情況下
邏輯蘊(yùn)涵的結(jié)果均為True。邏輯蘊(yùn)涵運(yùn)算的條件和結(jié)果:
結(jié)果|
PQ
True[
TrueTrue
TrueFalseFalse
True[
FalseTrue-
FalseFalseTrue
2009-9-23
例子
查詢至少選修了學(xué)生95002號(hào)選修的全部課程的學(xué)生學(xué)號(hào)
該查詢的邏輯蘊(yùn)涵:查詢學(xué)號(hào)為x的學(xué)生,對(duì)所有的課程
7、只要學(xué)生95Q02號(hào)選修了v,則學(xué)生x也選修了V。
該謂詞用該查詢有如下等價(jià)形式:該謂詞
用q表示
(X/y)夕->q
一1(夕一夕))
~'(3^(—1(—vq)))
~^y(pAF)
其語(yǔ)義為:不存在這樣的課程y,學(xué)生95002號(hào)選修了,
而學(xué)生x沒(méi)選
第69頁(yè)
2009-9-23
例查詢至少選修了學(xué)生95002號(hào)選修的全部課
程的學(xué)生學(xué)號(hào)
根據(jù)上述謂詞演算表達(dá)式“不存在這樣的課程y,學(xué)生
95002號(hào)選修了,而學(xué)生x沒(méi)選",易得如下SQL語(yǔ)句:
SELECTDISTINCTSno
FROMSCSCX
WHERENOTEXISTS
(SELECT*FROMSC
WHERESCY.Sno='95002,
ANDNOTEXISTS
(SELECT*FROMSCSCZ"
WHERESCZ.Sno=SCX.Sno-
ANDSCZ.Cno=.Cno));
(相關(guān)子查詢)
第70頁(yè)—002選修的課」一X—
2009-9-23
3.3.4集合查詢
?SELECT語(yǔ)句的查詢結(jié)果是元組的集合,所以多
個(gè)SELECT語(yǔ)句的查詢結(jié)果可進(jìn)行集合操作
?集合操作運(yùn)算符
■并UNION,交INTERSECT,^MINUS(EXCEPf)
例查詢計(jì)算機(jī)科學(xué)系的學(xué)生及年齡不大于19歲的學(xué)生
SELECT*FROMStudent
WHERESdept='CS'
UNION
SELECT*FROMStudent
WHERESagev=19;
第71頁(yè)
2009-9-23
例子
?/查詢有貸款帳戶或有存款帳戶的客戶:
(selectcustomer-namefromdepositor)
union
(selectcustomer-namefromborrower);
?查詢同時(shí)有貸款帳戶和存款帳戶的客弋.
(selectcustomer-namefromdepositor)
intersect
(selectcustomer-namefromborrower);
?查詢有存款帳戶但沒(méi)有貸款帳戶的客戶,<?
(selectcustomer-namefromdepositor)
except
(selectcustomer-namefromborrower);
第72頁(yè)//
2009-9-23
說(shuō)明
?UNION將多個(gè)查詢結(jié)果合并,并自動(dòng)去掉重復(fù)元
組。但系統(tǒng)要求參加UNION操作的各結(jié)果表的列
數(shù)和對(duì)應(yīng)數(shù)據(jù)類型必須相同
?標(biāo)準(zhǔn)SQL中沒(méi)有直接提供INTERSECT和
EXCEPT操作,但可以用其他
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教職工績(jī)效考核結(jié)果公示制度
- 2026廣東深圳理工大學(xué)合成生物學(xué)院胡強(qiáng)教授課題組招聘?jìng)淇碱}庫(kù)及答案詳解(新)
- 罕見(jiàn)腫瘤的個(gè)體化治療綜合治療模式構(gòu)建
- 2026上半年貴州事業(yè)單位聯(lián)考貴州省紅十字會(huì)招聘1人備考題庫(kù)及完整答案詳解一套
- 長(zhǎng)青集團(tuán)2025年獎(jiǎng)金制度
- 罕見(jiàn)腫瘤的個(gè)體化治療治療目標(biāo)設(shè)定
- 2026中國(guó)農(nóng)業(yè)大學(xué)人才招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2026年北京林業(yè)大學(xué)附屬小學(xué)招聘2人備考題庫(kù)參考答案詳解
- 設(shè)計(jì)院設(shè)備所財(cái)務(wù)制度
- 支票領(lǐng)用內(nèi)部財(cái)務(wù)制度
- 煤礦智能化發(fā)展藍(lán)皮書
- 居住證明合同協(xié)議
- 2024-2025閩教版小學(xué)英語(yǔ)五年級(jí)上冊(cè)期末考試測(cè)試卷及參考答案(共3套)
- 組件設(shè)計(jì)文檔-MBOM構(gòu)型管理
- 臨床協(xié)調(diào)員CRC年度總結(jié)
- 編鐘樂(lè)器市場(chǎng)洞察報(bào)告
- 負(fù)壓沖洗式口腔護(hù)理
- 山東省泰安市2024-2025學(xué)年高一物理下學(xué)期期末考試試題含解析
- 凈化車間液氮洗操作規(guī)程
- 《中電聯(lián)標(biāo)準(zhǔn)-抽水蓄能電站鋼筋混凝土襯砌水道設(shè)計(jì)導(dǎo)則》
- 【可行性報(bào)告】2023年硫精砂項(xiàng)目可行性研究分析報(bào)告
評(píng)論
0/150
提交評(píng)論