




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用第4章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言(1)
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL4.1 SQL的基本知識(shí)和特點(diǎn)SQL語(yǔ)言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體1.綜合統(tǒng)一2.高度非過(guò)程化3.用同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方式4.語(yǔ)言簡(jiǎn)潔,易學(xué)易用
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL1.綜合統(tǒng)一SQL語(yǔ)言則集數(shù)據(jù)定義語(yǔ)言(DDL)、數(shù)據(jù)操縱語(yǔ)言(DML)、數(shù)據(jù)控制語(yǔ)言(DCL)的功能于一體,語(yǔ)言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng)
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL2.高度非過(guò)程化非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語(yǔ)言是面向過(guò)程的語(yǔ)言,要完成某項(xiàng)請(qǐng)求,必須指定存取路徑。而用SQL語(yǔ)言進(jìn)行數(shù)據(jù)操作,用戶只需提出“做什么”,而不必指明“怎么做”。
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL3.用同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方式SQL語(yǔ)言既是自含式語(yǔ)言,又是嵌入式語(yǔ)言。作為自含式語(yǔ)言,它能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式,用戶可以在終端鍵盤上直接鍵入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL4.語(yǔ)言簡(jiǎn)潔,易學(xué)易用SQL語(yǔ)言功能極強(qiáng),但由于設(shè)計(jì)巧妙,語(yǔ)言十分簡(jiǎn)潔,完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9個(gè)動(dòng)詞
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQLSQL功能動(dòng)詞數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE,DROP,ALTER數(shù)據(jù)操縱INSERT,UPDATE,DELETE數(shù)據(jù)控制GRANT,REVOKE
使用SQLServer創(chuàng)建數(shù)據(jù)庫(kù)中的表時(shí),要對(duì)表中的每一列定義一種數(shù)據(jù)類型,數(shù)據(jù)類型決定了表中的某一列可以存放什么數(shù)據(jù)。除了定義表需要指定數(shù)據(jù)類型外,使用視圖、存儲(chǔ)過(guò)程、變量、函數(shù)等都需要用到數(shù)據(jù)類型。
SQLServer提供了豐富的系統(tǒng)定義的數(shù)據(jù)類型,用戶還可以在此基礎(chǔ)上自己定義數(shù)據(jù)類型。
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL1整型數(shù)據(jù)類型1.bigint類型存儲(chǔ)大小:8個(gè)字節(jié),取值范圍:-263~263-12.int類型存儲(chǔ)大小:4個(gè)字節(jié),取值范圍:-231~231-13.smallint類型存儲(chǔ)大小:2個(gè)字節(jié),取值范圍:-215~215-14.tinyint類型存儲(chǔ)大小:1個(gè)字節(jié),取值范圍:0~2552定點(diǎn)數(shù)據(jù)類型
定點(diǎn)數(shù)據(jù)類型用于表示定點(diǎn)實(shí)數(shù),包括numeric和decimal類型。Numeric等價(jià)于decimal。格式:
decimal[(p[,s])]numeric[(p[,s])]說(shuō)明:
p:表示精度,指定小數(shù)點(diǎn)左邊和右邊十進(jìn)制數(shù)字的最大位數(shù),取值在1到38之間,缺省值為18;s:指定小數(shù)點(diǎn)右邊十進(jìn)數(shù)的最大位數(shù),取值在0到p之間,缺省值為0。表示范圍:-1038+1~1038-12定點(diǎn)數(shù)據(jù)類型
精度:decimal和numeric類型數(shù)據(jù)的存儲(chǔ)字節(jié)數(shù)與精度p有關(guān)。具體如下表:精度p存儲(chǔ)字節(jié)數(shù)1~9510~19920~281329~38173浮點(diǎn)數(shù)據(jù)類型
浮點(diǎn)數(shù)據(jù)類型采用科學(xué)計(jì)數(shù)法存儲(chǔ)十進(jìn)制小數(shù),包括real和float數(shù)據(jù)類型。尾數(shù)位數(shù)n精度存儲(chǔ)字節(jié)數(shù)1~247位425~53或省15位8
表示范圍:-1.79E+308~1.79E+3081.float類型格式:
float[(n)]說(shuō)明:n:科學(xué)記數(shù)法尾數(shù)的位數(shù),具體如下表:3浮點(diǎn)數(shù)據(jù)類型2.real類型存儲(chǔ)大小:4個(gè)字節(jié)取值范圍:-3.40E+38~3.40E+38
精度:7位在SQLServer中,real的同義詞為float(24)。4字符數(shù)據(jù)類型
分為Unicode字符數(shù)據(jù)類型和非Unicode字符數(shù)據(jù)類型.非Unicode字符數(shù)據(jù)類型:允許使用由特定字符集定義的字符。字符集在安裝SQLServer時(shí)選擇,不能更改。非Unicode字符數(shù)據(jù)類型:char、varchar和text。
Unicode字符數(shù)據(jù)類型:可存儲(chǔ)由Unicode標(biāo)準(zhǔn)定義的任何字符,包含由不同字符集定義的所有字符。需要相當(dāng)于非Unicode數(shù)據(jù)類型兩倍的存儲(chǔ)空間。Unicode字符數(shù)據(jù)數(shù)據(jù)類型包括:nchar、nvarchar和ntext。對(duì)于存儲(chǔ)來(lái)源于多種字符集的字符的列,可采用這些數(shù)據(jù)類型。分為固定長(zhǎng)度和可變長(zhǎng)度字符數(shù)據(jù)類型。4字符數(shù)據(jù)類型1.char類型格式:
char[(n)]功能:
定義長(zhǎng)度為n個(gè)字節(jié)的固定長(zhǎng)度非Unicode字符數(shù)據(jù),每個(gè)字符占一個(gè)字節(jié)。說(shuō)明:n:1~8000
存儲(chǔ)大小:n個(gè)字節(jié)(n個(gè)字符)2.varchar類型格式:
varchar[(n)]功能:定義長(zhǎng)度最多為n個(gè)字節(jié)的可變長(zhǎng)度非Unicode字符數(shù)據(jù),每個(gè)字符占一個(gè)字節(jié)。說(shuō)明:n:1~8000。存儲(chǔ)大小:輸入字符的實(shí)際長(zhǎng)度。長(zhǎng)度可為零4字符數(shù)據(jù)類型3.nchar類型格式:
nchar[(n)]功能:定義包含n個(gè)字符的固定長(zhǎng)度Unicode字符數(shù)據(jù)說(shuō)明:n:1~4000
存儲(chǔ)大小:2n個(gè)字節(jié)4.text類型格式:
text功能:當(dāng)存儲(chǔ)字符型數(shù)據(jù)非常大時(shí),大于8000個(gè)字節(jié),使用text類型說(shuō)明:
最大長(zhǎng)度可達(dá)字符型數(shù)據(jù)舉例例4.1Createtablechars-example(char_1char(5),Vchar_1varchar(5),Text_1text)5
日期和時(shí)間數(shù)據(jù)類型日期和時(shí)間數(shù)據(jù)類型用于存儲(chǔ)日期和時(shí)間的結(jié)合體。包括datetime和smalldatetime兩種類型。1.datetime類型存儲(chǔ)大小:8個(gè)字節(jié)表示范圍:1753年1月1日零時(shí)~9999年12月31日23時(shí)59分59秒。例:01/01/9823:59:592000-5-2912:30:482.smalldatetime
存儲(chǔ)大小:4個(gè)字節(jié)表示范圍:1900年1月1日~2079年6月6日。例:2000/05/0812:352000-05-2912:35
6
圖形(image)數(shù)據(jù)類型image數(shù)據(jù)類型用于存儲(chǔ)可變長(zhǎng)度二進(jìn)制數(shù)據(jù),其長(zhǎng)度界于0到231-1個(gè)字節(jié)之間。7
貨幣數(shù)據(jù)類型
貨幣數(shù)據(jù)類型包括money和smallmoney數(shù)據(jù)類型。貨幣數(shù)據(jù)存儲(chǔ)的精確度為四位小數(shù)。1.money類型存儲(chǔ)大小:8個(gè)字節(jié)表示范圍:-922,337,203,685,477.5808~+922,337,203,685,477.58072.smallmoney類型存儲(chǔ)大小:4個(gè)字節(jié)表示范圍:-214,748.3648~214,748.36478二進(jìn)制數(shù)據(jù)類型
二進(jìn)制數(shù)據(jù)類型又可以分為binary和varbinary類型。1.binary類型格式:
binary[(n)]
功能:
定義固定長(zhǎng)度的n個(gè)字節(jié)二進(jìn)制數(shù)據(jù),當(dāng)輸入的二進(jìn)制數(shù)據(jù)長(zhǎng)度小于n時(shí),余下部分填充0。
說(shuō)明:
n:1~8000
存儲(chǔ)大小:n+4個(gè)字節(jié)8二進(jìn)制數(shù)據(jù)類型2.varbinary類型格式:
varbinary[(n)]功能:定義n個(gè)字節(jié)可變長(zhǎng)度二進(jìn)制數(shù)據(jù)。說(shuō)明:
n:1~8000存儲(chǔ)大小:為實(shí)際輸入數(shù)據(jù)長(zhǎng)度加4個(gè)字節(jié),而不是n個(gè)字節(jié)。輸入的數(shù)據(jù)長(zhǎng)度可能為0字節(jié)。
如果在數(shù)據(jù)定義或變量定義語(yǔ)句中使用時(shí)沒(méi)有指定n,則默認(rèn)長(zhǎng)度n為1。如果在CAST函數(shù)中使用時(shí)沒(méi)有指定n,則默認(rèn)長(zhǎng)度n為30。9其他數(shù)據(jù)類型1.timestamp類型(時(shí)間戳數(shù)據(jù)類型)
存儲(chǔ)大小:8個(gè)字節(jié)。
時(shí)間戳類型的數(shù)據(jù)用于提供數(shù)據(jù)庫(kù)范圍內(nèi)的惟一值,反映數(shù)據(jù)庫(kù)中數(shù)據(jù)修改的相對(duì)順序,相當(dāng)于一個(gè)單調(diào)上升的計(jì)數(shù)器。當(dāng)表中的某列定義為timestamp類型時(shí),在對(duì)表中某行進(jìn)行修改或添加行時(shí),相應(yīng)timestamp類型列的值會(huì)自動(dòng)被更新。9其他數(shù)據(jù)類型2.uniqueidentifier類型
用于存儲(chǔ)一個(gè)16字節(jié)長(zhǎng)的二進(jìn)制數(shù)據(jù),它是SQLServer根據(jù)計(jì)算機(jī)網(wǎng)絡(luò)適配器和CPU時(shí)鐘產(chǎn)生的全局惟一標(biāo)識(shí)符(GloballyUniqueIdentifier,GUID),該數(shù)字可以通過(guò)調(diào)用SQLServer的NEWID函數(shù)獲得。
GUID是一個(gè)唯一的二進(jìn)制數(shù)字,世界上的任何兩臺(tái)計(jì)算機(jī)都不會(huì)生成重復(fù)的GUID值。GUID主要用于在擁有多個(gè)節(jié)點(diǎn)、多臺(tái)計(jì)算機(jī)的網(wǎng)絡(luò)中,分配必須具有唯一性的標(biāo)識(shí)符。9其他數(shù)據(jù)類型3.sql_variant類型
用于存儲(chǔ)除text、ntext、image、timestamp和sql_variant外的其它任何合法的數(shù)據(jù)。4.table類型
用于存儲(chǔ)對(duì)表或者視圖處理后的結(jié)果集。這種新的數(shù)據(jù)類型使得用變量就可以存儲(chǔ)一個(gè)表,從而使函數(shù)或過(guò)程返回查詢結(jié)果更加方便、快捷。5.cursor類型
cursor類型是變量或存儲(chǔ)過(guò)程的OUTPUT參數(shù)的一種數(shù)據(jù)類型,這些參數(shù)包含對(duì)游標(biāo)的引用。10用戶自定義數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型并不是真正的數(shù)據(jù)類型,它只是提供了一種加強(qiáng)數(shù)據(jù)庫(kù)內(nèi)部和基本數(shù)據(jù)類型之間一致性的機(jī)制。可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_addtype來(lái)創(chuàng)建用戶自定義數(shù)據(jù)類型。語(yǔ)法是:sp_addtype[@type_name=]type,[@phystype=]system_dada_type10用戶自定義數(shù)據(jù)類型創(chuàng)建兩個(gè)用戶自定義數(shù)據(jù)類型UseliziExecsp_addtypephonenum,’varchar(24)’,’notnull’Execsp_addtypefax,’varchar(24)’,’null’刪除用戶自定義數(shù)據(jù)類型Sp_droptypefax
第四章關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL4.2.2數(shù)據(jù)定義語(yǔ)句介紹1.建立數(shù)據(jù)庫(kù)CREATEDATABASE<數(shù)據(jù)庫(kù)名>
Createdatabaselizi4.2.2數(shù)據(jù)定義1定義語(yǔ)句格式CREATETABLE<表名>
(<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束條件>]]…[,<表級(jí)完整性約束條件>]);<表名>:所要定義的基本表的名字<列名>:組成該表的各個(gè)屬性(列)<列級(jí)完整性約束條件>:涉及相應(yīng)屬性列的完整性約束條件<表級(jí)完整性約束條件>:涉及一個(gè)或多個(gè)屬性列的完整性約束條件例題[例4.3]建立一個(gè)“學(xué)生”表Student,它由學(xué)號(hào)Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個(gè)屬性組成。其中學(xué)號(hào)不能為空,值是唯一的,并且姓名取值也唯一。
CREATETABLEStudent(SnoCHAR(5)NOTNULL,
SnameCHAR(20)UNIQUE,
SsexCHAR(1),
SageINT,
SdeptCHAR(15));例題[例4.4]建立課程表。
CREATETABLECourse(CnoCHAR(10)NOTNULL,
CnameCHAR(20)notnull,
CcreditTinyintCheck(ccredit>0),
PcnoChar(10),
PrimaryKey(Cno));定義基本表(續(xù))常用完整性約束主碼約束:PRIMARYKEY唯一性約束:UNIQUE非空值約束:NOTNULL參照完整性約束PRIMARYKEY與
UNIQUE的區(qū)別?例題(續(xù))[例4.5]建立一個(gè)“學(xué)生選課”表SC,它由學(xué)號(hào)Sno、課程號(hào)Cno,修課成績(jī)Grade組成,其中(Sno,Cno)為主碼CREATETABLESC(SnoCHAR(5),CnoCHAR(3),GradeTinyintCheck(grade>=10andgrade<=100),Primarykey(Sno,Cno),Foreignkey(sno)referencesstudent(Sno),Foreignkey(cno)referencescourse(cno));三、刪除基本表 DROPTABLE<表名>;
基本表刪除時(shí)數(shù)據(jù)、表上的索引都刪除表上的視圖往往仍然保留,但無(wú)法引用刪除基本表時(shí),系統(tǒng)會(huì)從數(shù)據(jù)字典中刪去有關(guān)該基本表及其索引的描述
例題[例4.6]刪除Student表
DROPTABLE
Student;修改基本表ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROP<完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>];<表名>:要修改的基本表ADD子句:增加新列和新的完整性約束條件DROP子句:刪除指定的完整性約束條件MODIFY子句:用于修改列名和數(shù)據(jù)類型例題[例4.7]向Student表增加“入學(xué)時(shí)間”列,其數(shù)據(jù)類型為日期型。ALTERTABLEStudentADDeDATE;不論基本表中原來(lái)是否已有數(shù)據(jù),新增加的列一律為空值。
例題[例4.8]將姓名字段長(zhǎng)度AlterTableStudentaltercolumnsnamechar(22);修改原有的列定義有可能會(huì)破壞已有數(shù)據(jù)。[例4.9]刪除入學(xué)時(shí)間AlterTableStudentDropColumne;查詢概述4.3.1概述4.3.2單表查詢4.3.3連接查詢4.3.4嵌套查詢4.3.5集合查詢4.3.6小結(jié)4.3.1概述語(yǔ)句格式SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];
語(yǔ)句格式SELECT子句:指定要顯示的屬性列FROM子句:指定查詢對(duì)象(基本表或視圖)WHERE子句:指定查詢條件
GROUPBY子句:對(duì)查詢結(jié)果按指定列的值分組,該屬性列值相等的元組為一個(gè)組。通常會(huì)在每組中作用集函數(shù)。HAVING短語(yǔ):篩選出只有滿足指定條件的組ORDERBY子句:對(duì)查詢結(jié)果表按指定列值的升序或降序排序示例數(shù)據(jù)庫(kù)學(xué)生-課程數(shù)據(jù)庫(kù)學(xué)生表:Student(Sno,Sname,Ssex,Sage,Sdept)課程表:Course(Cno,Cname,Cpno,Ccredit)
學(xué)生選課表:SC(Sno,Cno,Grade)4.3.2單表查詢
查詢僅涉及一個(gè)表,是一種最簡(jiǎn)單的查詢操作一、選擇表中的若干列二、選擇表中的若干元組三、對(duì)查詢結(jié)果排序四、使用集函數(shù)五、對(duì)查詢結(jié)果分組
查詢指定列[例4.10]查詢?nèi)w學(xué)生的學(xué)號(hào)與姓名。SELECTSno,SnameFROMStudent;
[例4.11]查詢?nèi)w學(xué)生的姓名、學(xué)號(hào)、所在系。SELECTSname,Sno,SdeptFROMStudent;查詢?nèi)苛衃例4.12]查詢?nèi)w學(xué)生的詳細(xì)記錄。SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent;
或SELECT*FROMStudent;3.查詢經(jīng)過(guò)計(jì)算的值SELECT子句的<目標(biāo)列表達(dá)式>為表達(dá)式算術(shù)表達(dá)式字符串常量函數(shù)列別名等3.查詢經(jīng)過(guò)計(jì)算的值[例4.13]查全體學(xué)生的姓名及其出生年份。SELECTSname,2008-SageFROMStudent;
輸出結(jié)果:
Sname2008-Sage----------------------
李勇1988
劉晨1989
王名1990
張立19893.選擇表中的若干元組[例4.14]查詢?nèi)w學(xué)生的姓名、出生年份和所有系,要求用小寫(xiě)字母表示所有系名。SELECTSname,‘YearofBirth:’,2008-Sage’出生年份’,ISLOWER(Sdept)FROMStudent;例題(續(xù))輸出結(jié)果:
Sname'YearofBirth:'2000-SageISLOWER(Sdept)----------------------------------------------
李勇YearofBirth:1988cs
劉晨YearofBirth:1989is
王敏YearofBirth:1990ma
張立YearofBirth:1989is[例]使用列別名改變查詢結(jié)果的列標(biāo)題SELECTSnameNAME,'YearofBirth:’
BIRTH,
2000-SageBIRTHDAY,ISLOWER(Sdept)DEPARTMENTFROM
Student;輸出結(jié)果:
NAMEBIRTHBIRTHDAYDEPARTMENT------------------------------------------------------
李勇YearofBirth:1988cs
劉晨YearofBirth:1989is
王名YearofBirth:1990ma
張立YearofBirth:1989is二、選擇表中的若干元組消除取值重復(fù)的行查詢滿足條件的元組1.消除取值重復(fù)的行在SELECT子句中使用DISTINCT短語(yǔ)假設(shè)SC表中有下列數(shù)據(jù)
SnoCnoGrade---------------------9500119295001285950013889500229095002380ALL與
DISTINCT
[例4.15]查詢選修了課程的學(xué)生學(xué)號(hào)。(1)SELECTSnoFROMSC;
或(默認(rèn)ALL)SELECTALLSnoFROMSC;
結(jié)果:Sno-------9500195001950019500295002例題(續(xù))(2)SELECTDISTINCTSnoFROMSC;
結(jié)果:
Sno-------9500195002例題(續(xù))注意DISTINCT短語(yǔ)的作用范圍是所有目標(biāo)列例:查詢選修課程的各種成績(jī)錯(cuò)誤的寫(xiě)法SELECTDISTINCTCno,DISTINCTGradeFROMSC;正確的寫(xiě)法
SELECTDISTINCTCno,GradeFROMSC;
2.查詢滿足條件的元組WHERE子句常用的查詢條件表4.2常用的查詢條件查
詢
條
件謂
詞比
較=,>,<,>=,<=,!=,<>,!>,!<;NOT
+
上述比較運(yùn)算符確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空
值ISNULL,ISNOTNULL多重條件AND,OR(1)比較大小在WHERE子句的<比較條件>中使用比較運(yùn)算符=,>,<,>=,<=,!=或<>,!>,!<,邏輯運(yùn)算符NOT+比較運(yùn)算符[例4.17]查詢所有年齡在20歲以下的學(xué)生姓名及其年齡。
SELECTSname,Sage
FROMStudentWHERESage<20;或SELECTSname,SageFROMStudentWHERENOTSage>=20;
(1)比較大小在WHERE子句的<比較條件>中使用比較運(yùn)算符=,>,<,>=,<=,!=或<>,!>,!<,邏輯運(yùn)算符NOT+比較運(yùn)算符[例4.18]查詢考試成績(jī)有不及格歲的學(xué)生學(xué)號(hào)。
SELECTdistinctSno
FROMCourseWHEREgrade<60;(2)確定范圍使用謂詞BETWEEN…AND…NOTBETWEEN…AND…[例4.19]查詢年齡在20~23歲(包括20歲和23歲)之間的學(xué)生的姓名、系別和年齡。
SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;
例題(續(xù))[例4.20]查詢年齡不在20~23歲之間的學(xué)生姓名、系別和年齡。SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;
(3)確定集合使用謂詞IN<值表>,NOTIN<值表>
<值表>:用逗號(hào)分隔的一組取值[例4.21]查詢信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)科學(xué)系(CS)學(xué)生的姓名和性別。SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS');(3)確定集合[例4.22]查詢既不是信息系、數(shù)學(xué)系,也不是計(jì)算機(jī)科學(xué)系的學(xué)生的姓名和性別。SELECTSname,SsexFROMStudent WHERESdeptNOTIN('IS','MA','CS');(4)字符串匹配[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]<匹配串>:指定匹配模板匹配模板:固定字符串或含通配符的字符串當(dāng)匹配模板為固定字符串時(shí),可以用=運(yùn)算符取代LIKE謂詞用!=或<>運(yùn)算符取代NOTLIKE謂詞通配符%(百分號(hào))代表任意長(zhǎng)度(長(zhǎng)度可以為0)的字符串例:a%b表示以a開(kāi)頭,以b結(jié)尾的任意長(zhǎng)度的字符串。如acb,addgb,ab等都滿足該匹配串_(下橫線)代表任意單個(gè)字符例:a_b表示以a開(kāi)頭,以b結(jié)尾的長(zhǎng)度為3的任意字符串。如acb,afb等都滿足該匹配串ESCAPE短語(yǔ):當(dāng)用戶要查詢的字符串本身就含有%或_時(shí),要使用ESCAPE'<換碼字符>'短語(yǔ)對(duì)通配符進(jìn)行轉(zhuǎn)義。例題1)匹配模板為固定字符串[補(bǔ)充例]查詢學(xué)號(hào)為95001的學(xué)生的詳細(xì)情況。
SELECT*FROMStudentWHERESnoLIKE'95001';等價(jià)于:
SELECT*FROMStudentWHERESno='95001';例題(續(xù))2)匹配模板為含通配符的字符串[例4.23]查詢所有姓劉學(xué)生的姓名、學(xué)號(hào)和性別。
SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE‘劉%’;例題(續(xù))匹配模板為含通配符的字符串(續(xù))[補(bǔ)充例]查詢姓"歐陽(yáng)"且全名為三個(gè)漢字的學(xué)生的姓名。
SELECTSnameFROMStudentWHERESnameLIKE'歐陽(yáng)__';例題(續(xù))匹配模板為含通配符的字符串(續(xù))[例4.24]查詢名字中第2個(gè)字為“大”或”小"字的學(xué)生的姓名和學(xué)號(hào)。
SELECTSname,SnoFROMStudentWHERESnameLIKE‘__[大小]%';例題(續(xù))匹配模板為含通配符的字符串(續(xù))[例4.25]查詢所有不姓劉的學(xué)生姓名。
SELECTSname,Sno,SsexFROMStudentWHERESnameNOTLIKE'劉%';例題(續(xù))3)使用換碼字符將通配符轉(zhuǎn)義為普通字符
[補(bǔ)充例]查詢DB_Design課程的課程號(hào)和學(xué)分。
SELECTCno,CcreditFROMCourseWHERECnameLIKE'DB\_Design'
ESCAPE'\'例題(續(xù))使用換碼字符將通配符轉(zhuǎn)義為普通字符(續(xù))[補(bǔ)充例]查詢以"DB_"開(kāi)頭,且倒數(shù)第3個(gè)字符為i的課程的詳細(xì)情況。
SELECT*FROMCourseWHERECnameLIKE'DB\_%i__'ESCAPE'\';(5)涉及空值的查詢
使用謂詞ISNULL或ISNOTNULL“ISNULL”不能用“=NULL”代替[例4.27]某些學(xué)生選修課程后沒(méi)有參加考試,所以有選課記錄,但沒(méi)有考試成績(jī)。查詢?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)。
SELECTSno,CnoFROMSCWHEREGradeISNULL;例題(續(xù))[例4.28]查所有有成績(jī)的學(xué)生學(xué)號(hào)和課程號(hào)。
SELECTSno,CnoFROMSCWHEREGradeISNOTNULL;(6)多重條件查詢用邏輯運(yùn)算符AND和OR來(lái)聯(lián)結(jié)多個(gè)查詢條件
AND的優(yōu)先級(jí)高于OR
可以用括號(hào)改變優(yōu)先級(jí)可用來(lái)實(shí)現(xiàn)多種其他謂詞
[NOT]IN[NOT]BETWEEN…AND…例題[例4.29]查詢計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名。
SELECTSnameFROMStudentWHERESdept='CS'ANDSage<20;改寫(xiě)[補(bǔ)充例]查詢信息系(IS)、數(shù)學(xué)系(MA)和計(jì)算機(jī)科學(xué)系(CS)學(xué)生的姓名和性別。SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS')可改寫(xiě)為:SELECTSname,SsexFROMStudentWHERESdept='IS'ORSdept='MA'ORSdept='CS';三、對(duì)查詢結(jié)果排序
使用ORDERBY子句可以按一個(gè)或多個(gè)屬性列排序升序:ASC;降序:DESC;缺省值為升序當(dāng)排序列含空值時(shí)ASC:排序列為空值的元組最后顯示DESC:排序列為空值的元組最先顯示對(duì)查詢結(jié)果排序(續(xù))[例4.30]查詢選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按分?jǐn)?shù)降序排列。
SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;對(duì)查詢結(jié)果排序(續(xù))[例4.31]查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號(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áng)頂管施工方案公司
- 雕花蠟燭美術(shù)課件
- 殯葬行業(yè)生命教育
- 吐魯番職業(yè)技術(shù)學(xué)院《鋼琴基礎(chǔ)(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 遼寧現(xiàn)代服務(wù)職業(yè)技術(shù)學(xué)院《傳感器原理及應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 蘇州大學(xué)《化工儀表》2023-2024學(xué)年第二學(xué)期期末試卷
- 農(nóng)田石灰改造方案范本
- 《正宗新疆棉花被》課件
- 債權(quán)訴訟方案范本
- 沈陽(yáng)音樂(lè)學(xué)院《排水工程》2023-2024學(xué)年第一學(xué)期期末試卷
- 人教版七年級(jí)語(yǔ)文下冊(cè)期中檢測(cè)及答案
- 光伏陣列基礎(chǔ)配重計(jì)算
- TGDYLSH 2.2-2022 旅居養(yǎng)老服務(wù) 第2部分:基地設(shè)施建設(shè)和運(yùn)營(yíng)管理指南
- GB 14907-2002鋼結(jié)構(gòu)防火涂料
- 《不刷牙的小巨人》幼兒園PPT
- 十七年散文課件
- 抹灰石膏購(gòu)銷合同
- 港口營(yíng)運(yùn)安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系實(shí)施指南
- 住宅樓工程臨時(shí)用水專項(xiàng)施工方案
- 靜電感應(yīng)現(xiàn)象PPT
- 簽名設(shè)計(jì)課件
評(píng)論
0/150
提交評(píng)論