




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫系統(tǒng)概論
AnIntroductiontoDatabaseSystem
第三章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語己
SQL
AnIntroductiontoDatabaseSystem1
第三章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL
3.工SQL概述
3.2學(xué)生?課程數(shù)據(jù)庫
3.3數(shù)據(jù)定義
3.4數(shù)據(jù)查詢
3.5數(shù)據(jù)更新
3.6視圖
3.7小結(jié)
AnIntroductiontoDatabaseSystem2
3.L:LSQL的產(chǎn)生和發(fā)展(了解)
■關(guān)系代數(shù)和關(guān)系演算是形式化查詢語言,
商業(yè)DBMS使用SQL(Structured
QueryLanguage)。
■1974年由:IBM的SanJose研究室提出,
最初叫SEQUEL(StructuredEnglish
QueryLanguage)□
■關(guān)系數(shù)據(jù)庫系統(tǒng)通過SQL對數(shù)據(jù)庫進行
查詢和更新。
AnIntroductiontoDatabaseSystem3
3.L2SQL的特點(理解,掌握)
■1.綜合統(tǒng)一
■集DDL、DML、DCL于一體,語言風(fēng)格統(tǒng)
一,可以獨立完成數(shù)據(jù)庫生命周期中的全部
活動,如定義模式,插入數(shù)據(jù),建立數(shù)據(jù)
庫;數(shù)據(jù)查詢和更新;數(shù)據(jù)庫重構(gòu)和維護。
■可根據(jù)需要修改模式,并不影響數(shù)據(jù)庫的運
行,從而使系統(tǒng)具有良好的可擴展性。
■2,高度非過程化
AnIntroductiontoDatabaseSystem4
面向集合的操作方式
■一次一集合
-操作對象、查詢結(jié)果是元組的集合;
-插入、刪除、更新操作的對象也可以是元組的集
合。
■4.以同一種語法結(jié)構(gòu)提供兩種使用方法
-自含式:將SQL作為操作命令獨立使用
-宿主式:將SQL嵌入到高級語言中使用
-在兩種使用方式下,SQL的語法結(jié)構(gòu)基本是是一致
的。
AnIntroductiontoDatabaseSystem5
■5.語言簡潔,易學(xué)易用
表3.1SQL語言的動詞
SQL功能動詞
數(shù)據(jù)定義CREATE,DROP,ALTER
數(shù)據(jù)查詢SELECT
數(shù)據(jù)操縱INSERT,UPDATE
DELETE
數(shù)據(jù)控制GRANT,REVOKE
AnIntroductiontoDatabaseSystem6
3.1.3SQL的基本概念(理解)
■支持SQL的RDBMS同樣支持?jǐn)?shù)據(jù)庫三級模式結(jié)構(gòu)。
AnIntroductiontoDatabaseSystem7
第三章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL
3.工SQL概述
3.2學(xué)生?課程數(shù)據(jù)庫
3.3數(shù)據(jù)定義
3.4數(shù)據(jù)查詢
3.5數(shù)據(jù)更新
3.6視圖
3.7小結(jié)
AnIntroductiontoDatabaseSystem8
3.2學(xué)生■課程數(shù)據(jù)庫
■學(xué)生表:
■Student(SnozSnamezSsexzSagezSdept)
-課程表
■Course(CnozCnamezCcredit)
-學(xué)生選課表
■SC(SnozCnozGrade)
AnIntroductiontoDatabaseSystem9
第三章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL
3.工SQL概述
3.2學(xué)生?課程數(shù)據(jù)庫
3.3數(shù)據(jù)定義
3.4數(shù)據(jù)查詢
3.5數(shù)據(jù)更新
3.6視圖
3.7小結(jié)
AnIntroductiontoDatabaseSystem10
,3?3數(shù)據(jù)定義
表3.2SQL的數(shù)據(jù)定義語句
操作方式
操作對象
創(chuàng)建刪除修改
模式CREATESCHEMADROPSCHEMA
表CREATETABLEDROPTABLEALTERTABLE
視圖CREATEVIEWDROPVIEW
索引CREATEINDEXDROPINDEX
AnIntroductiontoDatabaseSystem11
3?3?工模式的定義和刪除
一、定義模式
CreateSchemav模式名>Authorizationv用戶名〉
■創(chuàng)建者必須具備DBA權(quán)限或被DBA授予CreateSchema
權(quán)限。
.SQLSERVER2000:CREATESCHEMA權(quán)限默認授予所有用
戶,但是他們必須有權(quán)創(chuàng)建加入到架構(gòu)中的對象。
■例1:CreateSchemaAuthorizationWANG
■例2:CreateSchemaAuthorizationWANG
AnIntroductiontoDatabaseSystem12
一■在創(chuàng)建模式的同時,在這個模式中進一步創(chuàng)建基
本表、視圖,定義權(quán)限。
語法
CREATESCHEMAAUTHORIZATIONowner
[<schema.element>[]
<schema.element>::=
{table_definition|view_definition\
grant_statement}
■例3:癰創(chuàng)建對象之前授權(quán)訪問對象
CREATESCHEMAAUTHORIZATIONross
GRANTSELECTonvlTOpublic
CREATEVIEWvl(cl)ASSELECTclfromtl
CREATETABLEtl(clint)
,二、刪除模式
■DROPSchemaV模式名〉VCASCADE|RESTRICT>
■SQLSERVER2000:沒有
■例4:dropschemarosscascade;
AnIntroductiontoDatabaseSystem14
3,3.2基本表的定義、刪除和修改
?(重點掌握)
?查詢分析器
-企業(yè)管理器
AnIntroductiontoDatabaseSystem15
一、定義基本表
CREATETABLEV表名〉
(V列名〉V數(shù)據(jù)類型>[V列級完整性約束條件》]
[,V列名〉V數(shù)據(jù)類型>[V列級完整性約束條件
>]]
[,V表級完整性約束條件>]);
-V表名,:所要定義的基本表的名字
-V列名,:組成該表的各個屬性(列)
-V列級完整性約束條件):涉及相應(yīng)屬性列的完整
性藥榮條件
-V表級完整性約束條件,:涉及一個或多個屬性列
的完整性約束條件
AnIntroductiontoDatabaseSystem16
卜例題_____________________________
[例1]建立一個“學(xué)生”表Student。
CREATETABLEStudent
(SnoCHAR(5)PRIMARYKEY,
SnameCHAR(20)UNIQUE,
SsexCHAR(l),
SageINT,
SdeptCHAR(15)
);
17
AnIntroductiontoDatabaseSystem
,例題(續(xù))
SnoSnameSdept
字符型字符型字符型整數(shù)字符型
長度為5長度為20長度為1長度為15
不能為空值
18
AnIntroductiontoDatabaseSystem
■[:例2]建立一個“課程”表Course。
CREATETABLECoursef
CnoCHAR(4)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4),
CoreditSMALLINT,
FOREIGNKEY(Cpno)REFERENCES
Course(Cno)
);
AnIntroductiontoDatabaseSystem19
[例3]建立一個“學(xué)生選課”表SC,它由學(xué)號Sno、
課程號Cno,修課成績Grade組成,其中(Sno,
Cno)為主碼。
CREATETABLESC(
SnoCHAR(7),
CnoCHAR(4),
GradeSMALLINT,
Primarykey(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno));
AnIntroductiontoDatabaseSystem20
■二、數(shù)據(jù)類型
-域:在SQL中用數(shù)據(jù)類型實現(xiàn)。
■選擇依據(jù):
■取值范圍;
■運算類型。
■數(shù)據(jù)類型
■整數(shù):bigint,int,smaHint,tinYint,
■Decimal(nfm),numeric(nzm)
■money和smallmoney
■近似數(shù)字:floatreal
?時間:datetimesmalldatetime
■字符串:char,varchar,text
■Unicode字符串:nchar,nvaixhnr,ntext
?二進制字符串:binary,varbinary,image
■其它數(shù)據(jù)類型
■cursor,scilvariant,table,timestamD,uniciueiclentifier
三、模式與表
■方法一:createtablev模式名》.表名
■SQLSERVER2000沒有實現(xiàn)
-方法二:在創(chuàng)建模式時同時創(chuàng)建表
■方法三(略)
AnIntroductiontoDatabaseSystem22
四、修改基本表
■■通過更改、添加、除去列和約束,或者通過啟用或禁用
■約束和觸發(fā)器來更改表的定義。
_ALTERTABLEtable
■{[ALTERCOLUMNcolumn_name{new_data_type
[(precision[,scale])]
[COLLATE<collation_name>][NULL|NOTNULL]|
<ADD|DROP}ROWGUIDCOL}]
|ADD{[<column_definition>]
|column_nameAScomputed_column_expression
}[f...n]
|[WITHCHECK|WITHNOCHECK]ADD<<
table_constraint>>[,...n]
|DROP<[CONSTRAINT]constraint_name
|COLUMNcolumn>[,...n]
|<CHECK|NOCHECK}CONSTRAINT{ALL|
constraint_name[,??.n]}
|{ENABLETDISABLE}TRIGGER<ALL|trigger_name
Lf--n]}
}
例題
[例2]向Student表增力□"入學(xué)時間”歹U,其數(shù)
據(jù)類型為日期型。
ALTERTABLEStudentADDS_entranceDATETIME
-不論基本表中原來是否已有數(shù)據(jù),新增加的列一律
為空值。
AnIntroductiontoDatabaseSystem24
」語句格式(續(xù))
:"刪除屬性列
直接/間接刪除
-把表中要保留的列及其內(nèi)容復(fù)制到一個新表中
■刪除原表
■再將新表重命名為原表名
直接刪除屬性列:(新)
例:ALTERTABLEStudentDropScome;
AnIntroductiontoDatabaseSystem25
[例3]將年齡的數(shù)據(jù)類型改為整數(shù)。
ALTERTABLEStudentALTERCOLUMNSageint
■注:修改原有的列定義有可能會破壞已有數(shù)據(jù)
AnIntroductiontoDatabaseSystem26
■例題
[例4]增加/刪除學(xué)生姓名必須取唯一值的約束。
■ALTERTABLEStudentADDnui_nameUNIQUE(Sname);
■ALTERTABLEStudentDROPUNIQUE(Sname);
AnIntroductiontoDatabaseSystem27
1五、刪除基本表
■DROPTABLEV表名>[RESTRICT|
CASCADE]
-RESTRICT或CASCADE決定了在基本表被其他表約
束(如Check或ForeignKey)引用、有視圖、有融發(fā)
器、有存儲過程或函數(shù)與之相關(guān)的情況下的處理方式。
-SQLServer2000:刪除表定義及該表的所有數(shù)據(jù)、
索引、觸發(fā)器、約束和權(quán)限規(guī)范。任何引用已除去表
的視圖或存儲過程必須通過DROPVIEW或DROP
PROCEDURE語句顯式除去。(沒有此選項。)
AnIntroductiontoDatabaseSystem28
例題
[例5]刪除Student表
DROPTABLEStudent;
AnIntroductiontoDatabaseSystem29
3.3?3建立與刪除索引(理解,掌握)
■建立索引是加快查詢速度的有效手段
■建立索引
-DBA或表的屬主(即建立表的人)根據(jù)需要建立
■有些DBMS自動建立以下列上的索引
■PRIMARYKEY
■UNIQUE
■維護索引
-DBMS自動完成
■使用索引
-DBMS自動選擇是否使用索引以及使用哪些索引
30
AnIntroductiontoDatabaseSystem
查詢示例-使用非聚集索引進行查詢
sysindexesidindid=2root
Non
Clustered
MartinIndex
rtin
SELECT
lastname,
firstname
FROMmember
Matey4:70WHERE
Ota
Phualastname
BETWEEN
'Masters'
Heap
AND'Rudd'
Page704Page705Page70)Page707
01Conn01...Iikhtar...SriithEH...Martin
02Funk02...White021..二unk02Phua
03White03...Barr03...Smith0303...Jones
.........04...Matey......04...Smith
.........1:.................
o
AnIntroductiontoDatabaseSystem31
建立索引
-只有表或視圖的所有者才能為表創(chuàng)建索弓I。
■語法
CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]
INDEXindexname
ON{table\view}(column[ASC|DESC][])
[WITH<indexoption>[,..?〃]]
AnIntroductiontoDatabaseSystem33
例題
[例6]為學(xué)生■課程數(shù)據(jù)庫中的Student,Course,
SC三個表建立索引。其中Student表按學(xué)號升序建唯
一索引,Course表按課程號升序建唯一索引,SC表
按學(xué)號升序和課程號降序建唯一索引。
CREATEUNIQUEINDEXStusnoONStudent(Sno);
CREATEUNIQUEINDEXCoucnoONCourse(Cno);
CREATEUNIQUEINDEXSCnoONSC(SnoASC,Cno
DESC);
AnIntroductiontoDatabaseSystem34
建立索引(續(xù))
■唯一值索引
■對于已含重復(fù)值的屬性列不能建UNIQUE索引
■對某個列建立UNIQUE索引后,插入新記錄時
DBMS會自動檢查新記錄在該列上是否取了重復(fù)
值。這相當(dāng)于增加了一個UNIQUE約束。
AnIntroductiontoDatabaseSystem35
建立索引(續(xù))
-聚簇索引
?建立聚簇索引后,基表中數(shù)據(jù)也需要按指
定的聚簇屬性值的升序或降序存放。也即
聚簇索引的索引項順序與表中記錄的物理
順序一致。
例:CREATECLUSTEREDINDEX
StusnameONStudent(Sname)
AnIntroductiontoDatabaseSystem36
建立索引(續(xù))
■在一個基本表上最多只能建立一個聚簇索引
■聚簇索引的用途:對于某些類型的查詢,可
以提高查詢效率
■聚集索引選擇指南
-有幾個重復(fù)值要經(jīng)常查找的列
■通常在數(shù)值范圍中查詢的列
■經(jīng)常在orderby子句中指定的列
-連接子句中經(jīng)常使用的非主鍵列
AnIntroductiontoDatabaseSystem37
[二、刪除索引
DROPINDEXV索引名〉;
■刪除索引時,系統(tǒng)會從數(shù)據(jù)字典中刪去有關(guān)
該索引的描述。
[例7]冊||除Student表的Stusname索弓I。
DROPINDEXStusname;
AnIntroductiontoDatabaseSystem38
第三章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL
3.工SQL概述
3.2學(xué)生?課程數(shù)據(jù)庫
3.3數(shù)據(jù)定義
3.4數(shù)據(jù)查詢
3.5數(shù)據(jù)更新
3.6視圖
3.7小結(jié)
AnIntroductiontoDatabaseSystem39
34數(shù)據(jù)查詢(重點、難點,熟練應(yīng)用)
3-4-1概述
-語句格式
SELECT[ALL|DISTINCT]V目標(biāo)列表達式〉
[,V目標(biāo)列表達式
>]...
FROMV表名或視圖名>[,V表名或視圖名>]…
[WHEREV條件表達式》]
[GROUPBYV列名工>[HAVINGV條件表達式
>]]
[ORDERBYV列名2>[ASC|DESC]];
AnIntroductiontoDatabaseSystem40
語句格式
-SELECT子句:指定要顯示的屬性列
-FROM子句:指定查詢對象(基本表或視圖)
-WHERE子句:指定查詢條件
-GROUPBY子句:對查詢結(jié)果按指定列的值分組,
該屬性列值相等的元組為一個組。通常會在每組中
作用集函數(shù)。
-HAVINGN短語:篩選出只有滿足指定條件的組
-ORDERBY子句:對查詢結(jié)果表按指定列值的升序
或降序排序
AnIntroductiontoDatabaseSystem41
示例數(shù)據(jù)庫
學(xué)生■課程數(shù)據(jù)庫
■學(xué)生表:StudentfSno,Sname,Ssex,Sage,
Sdept)
■課程表:Course(Cno,Cname,Cpno,Ccredit)
■學(xué)生選課表:SC(Sno,Cno,Grade)
AnIntroductiontoDatabaseSystem42
3.4,2單表查詢
查詢僅涉及一個表,是一種最簡單的查詢操作
一、選擇表中的若干列
二、選擇表中的若干元組
三、對查詢結(jié)果排序
四、使用聚集函數(shù)
五、對查詢結(jié)果分組
AnIntroductiontoDatabaseSystem43
一、選擇表中的若干列
|1查詢指定列
[例]]查詢?nèi)w學(xué)生的學(xué)號與姓名。
[例2]查詢?nèi)w學(xué)生的姓名、學(xué)號、所在系。
AnIntroductiontoDatabaseSystem44
2查詢?nèi)苛?/p>
[例3]查詢?nèi)w學(xué)生的詳細記錄。
AnIntroductiontoDatabaseSystem45
3■查詢經(jīng)過計算的值
SELECT子句的V目標(biāo)列表達式>為表達式
?算術(shù)表達式
-字符串常量
?函數(shù)
?列別名等
AnIntroductiontoDatabaseSystem46
3.查詢經(jīng)過計算的值
[例4]查全體學(xué)生的姓名及其出生年份。
AnIntroductiontoDatabaseSystem47
3■查詢經(jīng)過計算的值
[例5]查詢?nèi)w學(xué)生的姓名、出生年份和
所有系,要求用小寫字母表示所有系名。
AnIntroductiontoDatabaseSystem48
,[例5,1]使用列別名改變查詢結(jié)果的列標(biāo)題
SELECTSnameNAME,'YearofBirth:BIRTH,
2000-SageBIRTHDAY,ISLOWER(Sdept)
DEPARTMENT
FROMStudent;
AnIntroductiontoDatabaseSystem49
二、選擇表中的若干元組
-消除取值重復(fù)的行
-查詢滿足條件的元組
AnIntroductiontoDatabaseSystem50
1.消除取值重復(fù)的行
■在SELECT子句中使用DISTINCT短語
■ALL與DISTINCT
■注意DISTINCT短語的作用范圍是所有目
標(biāo)列
例:查詢選修課程的各種成績
錯誤的寫法
SELECTDISTINCTCno,DISTINCTGrade
FROMSC
AnIntroductiontoDatabaseSystem51
2.查詢滿足條件的元組
IERE子句常用的查詢條件
表3.3常用的查詢條件
查詢條件謂詞
=,>,5Hv彳!之!<;
比較
確定范圍BETWEENAND,NOTBETWEENAND
確定集合IN,NOTIN
字符匹配LIKE,NOTLIKE
空值ISNULL,ISNOTNULL
多重條件AND,OR
AnIntroductiontoDatabaseSystem52
(1)比較大小
在WHERE子句的V比較條件》中使用比較運算符
■二,>,<,>=,<=,!=或<>,!>,!<,
-邏輯運算符NOT+比較表達式
[例8]查詢所有年齡在20歲以下的學(xué)生姓名及其年齡。
SELECTSname,Sage
FROMStudent
WHERESage<20;或
SELECTSname,Sage
FROMStudent
WHERENOTSage>=20;
AnIntroductiontoDatabaseSystem
(2)確定范圍
7使用謂詞BETWEENAND
NOTBETWEENAND
[例工0]查詢年齡在20~23歲(包括20歲和23歲)之間
的學(xué)生的姓名、系別和年齡。
SELECTSname,Sdept,Sage
FROMStudent
WHERESageBETWEEN20AND23;
AnIntroductiontoDatabaseSystem54
,例題(續(xù))
[例11]查詢年齡不在20~23歲之間的學(xué)生姓名、
系別和年齡。
SELECTSname,Sdept,Sage
FROMStudent
WHERESageNOTBETWEEN20AND23
AnIntroductiontoDatabaseSystem55
(3)確定集合
!1用謂詞~~INV值表>,NOTINV值表,
〈值表,:用逗號分隔的一組取值
[例12]查詢信息系(IS)、數(shù)學(xué)系(MA)和計
算機科學(xué)系(CS)學(xué)生的姓名和性別。
SELECTSname,Ssex
FROMStudent
WHERESdeptIN(VIS\1MAI8)
AnIntroductiontoDatabaseSystem56
(3)確定集合
[例13]查詢既不是信息系、數(shù)學(xué)系,也不是計算
機科學(xué)系的學(xué)生的姓名和性別。
SELECTSname,Ssex
FROMStudent
WHERESdeptNOTIN(IS1,VMA',
XS1);
AnIntroductiontoDatabaseSystem57
?(4)字符串匹配
[[NOT]LIKE6V匹配串〉,[ESCAPE,V換碼字符
■V匹配串〉:指定匹配模板
.匹配模板:固定字符串或含通配符的字符串
?當(dāng)匹配模板為固定字符串時,可以用=運算符取代
LIKE謂詞;用!=或v>運算符取代NOTLIKE謂
TR]O
AnIntroductiontoDatabaseSystem58
通配符
%(百分號)代表任意長度(長度可以為0)的字符串
?例:a%b表示以a開頭,以b結(jié)尾的任意長度的字
符串。如acb,addgb,ab等都滿足該匹配串
令_(下橫線)代表任意單個字符
-例:a_b表示以a開頭,以b結(jié)尾的長度為3的任意
字符串。如acb,afb等都滿足該匹配串
AnIntroductiontoDatabaseSystem59
J■口
-指定范圍([a-f])或集合([abcdef])中的任何單個字
符。
-WHEREaujnameLIKEIC?P]arseM將查找以
arsen結(jié)尾百以介于C與P之間的任何單個字符開始
的作者姓氏,例如,Carsen>Larsen、Karsen等。
-不屬于指定范圍([a-f])或集合([abcdef])的任何單
個字符。
■WHEREaujnameLIKE'de[人口%/將查找以de開
始且其后的字母不為I的所有作者的姓氏。
mi±11L±uuuuLionLUuaoyLUHI
ESCAPE短語:
■ESCAPErescape_character1
■允許在字符串中搜索通配符而不是將其作為
通配符使用。esc即已〃舊zcEer是放在通配
符前表示此特殊用途前字符。
SELECT*
FROMfinances
WHEREdescriptionLIKE'gsjESCAPE'S'
AnIntroductiontoDatabaseSystem61
■例題
1)匹配模板為固定字符串
[例14]查詢學(xué)號為95001的學(xué)生的詳細情況。
SELECT*
FROMStudent
WHERESnoLIKE'95001,;
等價于:
SELECT*
FROMStudent
WHERESno='95001,;
AnIntroductiontoDatabaseSystem62
,例題(續(xù))
2)匹配模板為含通配符的字符串
[例[5]查詢所有姓劉學(xué)生的姓名、學(xué)號和性別。
SELECTSname,Sno,Ssex
FROMStudent
WHERESnameLIKE'劉%;
AnIntroductiontoDatabaseSystem63
,例題(續(xù))
匹配模板為含通配符的字符串(續(xù))
[例]查詢姓“歐陽”且全名為三個漢字的學(xué)生的姓名
SELECTSname
FROMStudent
WHERESnameLIKE'歐陽";
AnIntroductiontoDatabaseSystem64
例題(續(xù))
匹配模板為含通配符的字符串(續(xù))
[例17]查詢名字中第2個字為“陽”字的學(xué)生的
姓名和學(xué)號。
SELECTSname,Sno
FROMStudent
WHERESnameLIKE'陽%)';
AnIntroductiontoDatabaseSystem65
例題(續(xù))
匹配模板為含通配符的字符串(續(xù))
[例18]查詢所有不姓劉的學(xué)生姓名。
SELECTSname,Sno,Ssex
FROMStudent
WHERESnameNOTLIKE'劉%
AnIntroductiontoDatabaseSystem66
例題(續(xù))
3)使用換碼字符將通配符轉(zhuǎn)義為普通字符
[例19]查詢DB_Design課程的課程號和學(xué)分。
SELECTCno,Ccredit
FROMCourse
WHERECnameLIKEvDB\_Designv
ESCAPEfV
AnIntroductiontoDatabaseSystem67
,例題(續(xù))
使用換碼字符將通配符轉(zhuǎn)義為普通字符(續(xù))
[例20]查詢以,,DB_“開頭,且倒數(shù)第3個字符為i的
課程的詳細情況。
SELECT*
FROMCourse
WHERECnameLIKEESCAPE、;
AnIntroductiontoDatabaseSystem68
(5)涉及空值的查詢
■使用謂詞ISNULL或ISNOTNULL
■“ISNULL”不能用“=NULL”代替
[例2]]某些學(xué)生選修課程后沒有參加考試,所以有選課
記錄,但沒有考試成績。查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號
和相應(yīng)的課程號。
SELECTSno,Cno
FROMSC
WHEREGradeISNULL;
AnintroductiontoDatabaseSystem69
,例題(續(xù))
[例22]查所有有成績的學(xué)生學(xué)號和課程號。
SELECTSno,Cno
FROMSC
WHEREGradeISNOTNULL;
AnIntroductiontoDatabaseSystem70
(6)多重條件查詢
用邏輯運算符AND和OR來聯(lián)結(jié)多個查詢條件
■AND的優(yōu)先級高于OR
-可以用括號改變優(yōu)先級
可用來實現(xiàn)多種其他謂詞
■[NOT]IN
■[NOT]BETWEEN...AND...
AnIntroductiontoDatabaseSystem71
例題
[例23]查詢計算機系年齡在20歲以下的學(xué)生姓
名。
SELECTSname
FROMStudent
WHERESdept="CS'ANDSage<20;
AnIntroductiontoDatabaseSystem72
[改寫[例12]
[^J12]查詢信息系(IS)、數(shù)學(xué)系(MA)和計
算機科學(xué)系(CS)學(xué)生的姓名和性別。
SELECTSname,Ssex
FROMStudent
WHERESdeptIN('IS,MA,CS)
可改寫為:
WHERESdept=1IS1ORSdept=1MA'OR
Sdept=1CS;
AnIntroductiontoDatabaseSystem73
改寫[例10]
[例10]查詢年齡在20~23歲(包括20歲
和23歲)之間的學(xué)生的姓名、系別和年
齡。
SELECTSname,Sdept,Sage
FROMStudent
WHERESageBETWEEN20AND23;
可改寫為:
WHERESage>=20ANDSage<=23;
AnIntroductiontoDatabaseSystem74
三、對查詢結(jié)果排序
使用ORDERBY子句
-可以按一個或多個屬性列排序
■升序:ASC;降序:DESC;缺省值為升序
當(dāng)排序列含空值時
■ASC:排序列為空值的元組最后顯示
-DESC:排序列為空值的元組最先顯示
AnIntroductiontoDatabaseSystem75
對查詢結(jié)果排序(續(xù))
[例24]查詢選修了3號課程的學(xué)生的學(xué)號
及其成績,查詢結(jié)果按分?jǐn)?shù)降序排列。
SELECTSno,Grade
FROMSC
WHERECno='3'
ORDERBYGradeDESC;
AnIntroductiontoDatabaseSystem76
對查詢結(jié)果排序(續(xù))
[例25]查詢?nèi)w學(xué)生情況,查詢結(jié)果按
所在系的系號升序排列,同一系中的學(xué)
生按年齡降序排列。
SELECT*
FROMStudent
ORDERBYSdept,SageDESC;
AnIntroductiontoDatabaseSystem77
四、使用聚集函數(shù)
5類主要集函數(shù)
-計數(shù)
COUNT([DISTINCTIALL]*)
COUNT([DISTINCTIALL]〈列名〉)
-計算總和
SUM([DISTINCTIALL]〈列名〉)
-計算平均值
AVG([DISTINCTIALL]〈列名〉)
AnIntroductiontoDatabaseSystem78
使用集函數(shù)(續(xù))
求最大值
MAX([DISTINCT]ALL]<列名〉)
求最小值
MIN([DISTINCT|ALL]〈列名〉)
-DISTINCT短語:在計算時要取消指定列中
的重復(fù)值
-ALL短語:不取消重復(fù)值
-ALL為缺省值
AnIntroductiontoDatabaseSystem79
使用集函數(shù)(續(xù))
[例26]查詢學(xué)生總?cè)藬?shù)。
SELECTCOUNT(*)
FROMStudent;
[例27]查詢選修了課程的學(xué)生人數(shù)。
SELECTCOUNT(DISTINCTSno)
FROMSC;
注:用DISTINCT以避免重復(fù)計算學(xué)生人數(shù)
AnIntroductiontoDatabaseSystem80
使用集函數(shù)(續(xù))
[例28]計算1號課程的學(xué)生平均成績。
SELECTAVG(Grade)
FROMSC
WHERECno="1';
[例29]查詢選修1號課程的學(xué)生最高分?jǐn)?shù)。
SELECTMAX(Grade)
FROMSC
WHERCno="1';
AnIntroductiontoDatabaseSystem81
五、對查詢結(jié)果分組
■使用GROUPBY子句分組
-細化聚集函數(shù)的作用對象
-未對查詢結(jié)果分組,聚集函數(shù)將作用于整個
查詢結(jié)果
-對查詢結(jié)果分組后,聚集函數(shù)將分別作用于
每個組
AnIntroductiontoDatabaseSystem82
使用GROUPBY子句分組
:例30]求各個課程號及相應(yīng)的選課人數(shù)。
SELECTCno,COUNT(Sno)
FROMSC
GROUPBYCno;
AnIntroductiontoDatabaseSystem83
,對查詢結(jié)果分組(續(xù))
■GROUPBY子句的作用對象是查詢的中間結(jié)果表
-分組方法:按指定的一列或多列值分組,值相等的
為一組
■使用GROUPBY子句后,SELECT子句的歹U名歹U表
中只能出現(xiàn)分組屬性和聚集函數(shù)
AnIntroductiontoDatabaseSystem84
使用HAVING短語篩選最終輸出結(jié)果
[例31]查詢選修了3門以上課程的學(xué)生學(xué)號。
SELECTSno
FROMSC
GROUPBYSno
HAVINGCOUNT(*)>3;
AnIntroductiontoDatabaseSystem85
例題
[例32]查詢有3門以上課程是90分以上的
學(xué)生的學(xué)號及(90分以上的)課程數(shù)
SELECTSno,COUNT(*)
FROMSC
WHEREGrade>=90
GROUPBYSno
HAVINGCOUNT(*)>=3;
AnIntroductiontoDatabaseSystem86
使用HAVING短語篩選最終輸出結(jié)果
只有滿足HAVING短語指定條件的組才輸出
HAVING短語與WHERE子句的區(qū)另U:作用對
象不同
■WHERE子句作用于基表或視圖,從中選擇
滿足條件的元組。
■HAVING短語作用于組,從中選擇滿足條件
的組。
AnIntroductiontoDatabaseSystem87
3.4.3連接查詢
■同時涉及多個表的查詢稱為連接查詢-
-用來連接兩個表的條件稱為連接條件或連接謂詞
■一般格式:
-[V表名l>.]v列名v比較運算符》[V表名2>?]v列名2>
■比較運算符:=、>、V、>=><=>!=
■[V表名]>.]V列名工>BETWEEN[V表名2>?]V列名
2>AND[V表名2>,]V列名3>
AnIntroductiontoDatabaseSystem88
連接查詢(續(xù))
-連接字段
■連接謂詞中的列名稱為連接字段
?連接條件中的各連接字段類型必須是可比
的,但不必是相同的
AnIntroductiontoDatabaseSystem89
上連接操作的執(zhí)行過程
?嵌套循環(huán)法(NESTED-LOOP)
-首先在表工中找到第一個元組,然后從頭開始掃描表2,
逐一查找滿足連接件的元組,找到后就將表工中的第
一個元組與該元組拼接起來,形成結(jié)果表中一個元組。
-表2全部查找完后,再找表工中第二個元組,然后再從
頭開始掃描表2,逐一查找滿足連接條件的元組,找
到后就將表工中的第二個元組與該元組拼接起來,形
成結(jié)果表中一個元組。
-重復(fù)上述操作,直到表工中的全部元組都處理完畢
AnIntroductiontoDatabaseSystem90
■排序合并法(SORT-MERGE)
■常用于二連接
-首先按連接屬性對表1和表2排序
-對表工的第一個元組,從頭開始掃描表2,順序查找
滿足連接條件的元組,找到后就將表工中的第一個
元組與該元組拼接起來,形成結(jié)果表中一個元組。
當(dāng)遇到表2中第一條大于表工連接字段值的元組時,
對表2的查詢不再繼續(xù)
AnIntroductiontoDatabaseSystem91
-找到表工的第二條元組,然后從剛才的中斷點處繼
續(xù)順序掃描表2,查找滿足連接條件的元組,找到
后就將表工中的第一個元組與該元組拼接起來,形
成結(jié)果表中一個元組。直接遇到表2中大于表工連接
字段值的元組時,對表2的查詢不再繼續(xù)
-重復(fù)上述操作,直到表工或表2中的全部元組都處理
完畢為止
AnIntroductiontoDatabaseSystem92
■索引連接(INDEXTOIN)
■對表2按連接字段建立索引
■對表工中的每個元組,依次根據(jù)其連接字段
值杳詢表2的索引,從中找到滿足條件的元
組,找到后就將表工中的第一個元組與該元
組拼接起來,形成結(jié)果表中一個元組
AnIntroductiontoDatabaseSystem93
SQL中連接查詢的主要類型
-廣義笛卡爾積
?等值連接(含自然連接)
?非等值連接查詢
?自身連接查詢
.外連接查詢
?復(fù)合條件連接查詢
AnIntroductiontoDatabaseSystem94
一、廣義笛卡爾積
-不帶連接謂詞的連接
-很少使用
例:
SELECTStudent*,SC.*
FROMStudent,SC
AnIntroductiontoDatabaseSystem95
二、等值與非等值連接查詢
等值連接、自然連接、非等值連接
[例33]查詢每個學(xué)生及其選修課程的情況。
SELECTStudent.*,SC.*
FROMStudent,SC
WHEREStudent.Sno=SC.Sno;
AnIntroductiontoDatabaseSystem96
等值連接
■連接運算符為=的連接操作
-[V表名]>,]V列名]>=[V表名2>,]v列名2>
■任何子句中引用表工和表2中同名屬性時,都必須
加表名前綴。引用唯一屬性名時可以加也可以省略
表名前綴。
AnIntroductiontoDatabaseSystem97
等值連接
假設(shè)S:ude?表、SC表分別有下列數(shù)據(jù)立表
Student表
SnoCnoGrade
SnoSnameSsexSageSdept
95001李勇男20CS95001192
95002劉晨女19IS95001285
95003王敏女18MA
95001388
95004張立男19IS95002290
95002380
AnintroductiontoDatabaseSystem98
然連接
■等值連接的一種特殊情況,把目標(biāo)列中
重復(fù)的屬性列去掉。
[例34]對[例33]用自然連接完成。
SELECTStudent.Sno,Sname,Ssex,
Sage,Sdept,Cno,Grade
FROMStudent,SC
WHEREStudentSno=SC.Sno;
■“INNERJOIN”
AnIntroductiontoDatabaseSystem99
非等值連接查詢
[V表名]>?]<列名]>v比較運算符,[V表名
2>?]V歹I]名2>
比較運算符:>、<、>=、<=>!=
[V表名]>.]<列名]>BETWEEN[V表名
2>」V列名2>AND[V表名2>?]V列名3>
AnIntroductiontoDatabaseSystem100
、自身連接
■一個表與其自己進行連接,稱為表的自身連接
■需要給表起別名以示區(qū)別
■由于所有屬性名都是同名屬性,因此必須使用
別名前綴
AnIntroductiontoDatabaseSystem101
自身連接(續(xù))
[例35]查詢每一門課的間接先修課(即
先修課的先修課)
SELECTFIRST.Cno,SECOND.Cpno
FROMCourseFIRST,Course
SECOND
WHEREFIRST.Cpno=SECOND.Cno;
102
AnIntroductiontoDatabaseSystem
自身連接(續(xù))
FIRST表(Course表)
CnoCnameCpnoCcredit
1數(shù)據(jù)庫54
2數(shù)學(xué)2
3信息^統(tǒng)14
4操作系統(tǒng)63
5數(shù)據(jù)結(jié)構(gòu)74
6數(shù)據(jù)處理2
7PASCAL語言64
AnIntroductiontoDatabaseSystem103
自身連接(續(xù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆職業(yè)大學(xué)《中學(xué)語文模擬教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 甘肅省蘭州市天慶實驗中學(xué)2024屆中考數(shù)學(xué)適應(yīng)性模擬試題含解析
- 廣東省佛山市禪城區(qū)2024屆中考數(shù)學(xué)考前最后一卷含解析
- 2025年廠級職工安全培訓(xùn)考試試題附答案【完整版】
- 2025年承包商入廠安全培訓(xùn)考試試題答案完整
- 2025班組三級安全培訓(xùn)考試試題帶答案(A卷)
- 2025安全管理人員安全培訓(xùn)考試試題及完整答案【奪冠】
- 2024-2025公司項目部負責(zé)人安全培訓(xùn)考試試題及答案參考
- 2025新工人入場安全培訓(xùn)考試試題及參考答案(滿分必刷)
- 2025年中國自動操舵儀行業(yè)市場規(guī)模及未來投資方向研究報告
- 體育賽事運營方案投標(biāo)文件(技術(shù)方案)
- 海綿城市施工質(zhì)量保證措施
- 新華書店集團招聘筆試沖刺題2025
- 《凝結(jié)水精處理》課件
- 大學(xué)答題紙模板
- 福建省寧德福鼎市2024-2025學(xué)年七年級上學(xué)期期中考試語文試題
- 福建省普通高中6月學(xué)業(yè)水平合格性考試英語試題(含答案解析)
- 【MOOC】Office高級應(yīng)用-成都信息工程大學(xué) 中國大學(xué)慕課MOOC答案
- 《化工新材料生產(chǎn)技術(shù)》課件-知識點1 聚酰胺概述
- 醫(yī)院患者信息保密管理制度
- 心肺復(fù)蘇完整版本
評論
0/150
提交評論