




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫原理與應(yīng)用教程第4章數(shù)據(jù)操作4.1數(shù)據(jù)查詢4.2數(shù)據(jù)更改4.2數(shù)據(jù)查詢擴(kuò)展4.1數(shù)據(jù)查詢功能4.1.1查詢語句的基本結(jié)構(gòu)4.1.2單表查詢4.1.3多表連接查詢4.1.4使用TOP限制結(jié)果集4.1.4子查詢查詢語句基本格式SELECT<目標(biāo)列名序列>--需要哪些列
FROM<數(shù)據(jù)源>--來自于哪些表
[WHERE<檢索條件>]--根據(jù)什么條件
[GROUPBY<分組依據(jù)列>][HAVING<組提取條件>][ORDERBY<排序依據(jù)列>]4.1.2單表查詢1.選擇表中若干列
之1.查詢指定的列查詢表中用戶感興趣的部分屬性列。例1:查詢?nèi)w學(xué)生的學(xué)號與姓名。SELECTSno,SnameFROMStudent例2.查詢?nèi)w學(xué)生的姓名、學(xué)號、所在系SELECTSname,Sno,Sdept FROMStudent2.查詢?nèi)苛?/p>
例3.查詢?nèi)w學(xué)生的記錄SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent等價(jià)于:
SELECT*FROMStudent
3.查詢經(jīng)過計(jì)算的列例4.查詢?nèi)w學(xué)生的姓名及其出生年份。
SELECTSname,2010-Sage
FROMStudent常量列
例5.查詢?nèi)w學(xué)生的姓名和出生年份所在系,并在出生年份列前加入一個(gè)列,此列的每行數(shù)據(jù)均為“出生年份”常量值。SELECTSname,'出生年份:',2010-SageFROMStudent
改變列標(biāo)題
語法:列名|表達(dá)式[AS]列標(biāo)題或:列標(biāo)題=列名|表達(dá)式例:
SELECTSname姓名,'YearofBirth'
出生年份,2010-Sage年份,F(xiàn)ROMStudent
4.1.2單表查詢2.選擇表中若干元組
之1.消除取值相同的行例6.查詢選修了課程的學(xué)生的學(xué)號SELECTSnoFROMSC有重復(fù)行!要去掉結(jié)果表中的重復(fù)行,可用DISTINCTSELECTDISTINCTSnoFROMSC2.查詢滿足條件的元組查詢條件謂詞比較運(yùn)算符=,>,>=,<,<=,<>(或!=)NOT+比較運(yùn)算符確定范圍BETWEEN…AND,NOTBETWEEN…AND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL邏輯謂詞)AND,OR比較大小例7.查詢計(jì)算機(jī)系全體學(xué)生的姓名。
SELECTSnameFROMStudentWHERESdept='計(jì)算機(jī)系'例8.查詢年齡在20歲以下的學(xué)生的姓名及年齡。
SELECTSname,SageFROMStudentWHERESage<20例9.查詢考試成績有不及格的學(xué)生的學(xué)號
SELECTDISTINCTSnoFROMSCWHEREGrade<60確定范圍用BETWEEN…AND和NOTBETWEEN…AND是邏輯運(yùn)算符,可以用來查找屬性值在或不在指定范圍內(nèi)的元組,其中BETWEEN后邊指定范圍的下限,AND后邊指定范圍的上限。BETWEEN…AND…的格式為:
列名|表達(dá)式[NOT]BETWEEN下限值A(chǔ)ND上限值如果列或表達(dá)式的值在[不在]下限值和上限值范圍內(nèi),則結(jié)果為True,表明此記錄符合查詢條件。
示例例10.查詢年齡在20~23歲之間的學(xué)生的姓名、所在系和年齡。SELECTSname,Sdept,SageFROMStudent WHERESageBETWEEN20AND23例11.查詢年齡不在20~23之間的學(xué)生姓名、所在系和年齡。SELECTSname,Sdept,SageFROMStudent WHERESageNOTBETWEEN20AND23確定集合使用IN運(yùn)算符。用來查找屬性值屬于指定集合的元組。格式為:
列名[NOT]IN(常量1,常量2,…常量n)當(dāng)列中的值與IN中的某個(gè)常量值相等時(shí),則結(jié)果為True,表明此記錄為符合查詢條件的記錄;NOTIN:當(dāng)列中的值與某個(gè)常量值相同時(shí),則結(jié)果為False,表明此記錄為不符合查詢條件的記錄示例例12.查詢信息系、數(shù)學(xué)系和計(jì)算機(jī)系學(xué)生的姓名和性別。
SELECTSname,SsexFROMStudent WHERESdeptIN('信息系','數(shù)學(xué)系','計(jì)算機(jī)系')例13.查詢既不是信息系、數(shù)學(xué)系,也不是計(jì)算機(jī)系學(xué)生的姓名和性別。
SELECTSname,SsexFROMStudent WHERESdeptNOTIN('信息系','數(shù)學(xué)系','計(jì)算機(jī)系')字符匹配使用LIKE運(yùn)算符一般形式為:
列名[NOT]LIKE<匹配串>匹配串中可包含如下四種通配符:_:匹配任意一個(gè)字符;%:匹配0個(gè)或多個(gè)字符;[]:匹配[]中的任意一個(gè)字符;對于連續(xù)字母的匹配,例如匹配[abcd],可簡寫為[a-d][^]:不匹配[]中的任意一個(gè)字符
示例例14.查詢姓‘張’的學(xué)生的詳細(xì)信息。
SELECT*FROMStudentWHERESnameLIKE'張%'例15.查詢學(xué)生表中姓‘張’、‘李’和‘劉’的學(xué)生的情況。
SELECT*FROMStudentWHERESnameLIKE'[張李劉]%'例16.查詢名字中第2個(gè)字為‘小’或‘大’的學(xué)生的姓名和學(xué)號。
SELECTSname,SnoFROMStudentWHERESnameLIKE'_[小大]%'示例(續(xù))例17.查詢所有不姓“王”也不姓“張”的學(xué)生姓名
SELECTSnameFROMStudentWHERESnameNOTLIKE
‘[王張]%'或者:
SELECTSnameFROMStudentWHERESnameLIKE'[^王張]%'或者:SELECTSnameFROMStudentWHERESnameNOTLIKE'王%'ANDSnameNOTLIKE'張%'
示例(續(xù))例18.查詢姓“王”且名字是2個(gè)字的學(xué)生姓名。
SELECTSnameFROMStudentWHERESnameLIKE'王_'示例(續(xù))例19.查詢姓王且名字是3個(gè)字的學(xué)生姓名
SELECTSnameFROMStudentWHERESnameLIKE'王__'
注意:尾隨空格的處理。SELECTSnameFROMStudentWHERErtrim(Sname)LIKE'王__'涉及空值的查詢空值(NULL)在數(shù)據(jù)庫中表示不確定的值。例如,學(xué)生選修課程后還沒有考試時(shí),這些學(xué)生有選課記錄,但沒有考試成績,因此考試成績?yōu)榭罩怠E袛嗄硞€(gè)值是否為NULL值,不能使用普通的比較運(yùn)算符。判斷取值為空的語句格式為:列名ISNULL判斷取值不為空的語句格式為:列名ISNOTNULL
示例例20.查詢沒有考試成績的學(xué)生的學(xué)號和相應(yīng)的課程號。
SELECTSno,CnoFROMSCWHEREGradeISNULL例21.查詢所有有考試成績的學(xué)生的學(xué)號和課程號。
SELECTSno,CnoFROMSCWHEREGradeISNOTNULL
多重條件查詢在WHERE子句中可以使用邏輯運(yùn)算符AND和OR來組成多條件查詢。用AND連接的條件表示必須全部滿足所有的條件的結(jié)果才為True;用OR連接的條件表示只要滿足其中一個(gè)條件結(jié)果即為True。例21.查詢計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名。
SELECTSnameFROMStudentWHERESdept=‘計(jì)算機(jī)系'ANDSage<20
示例(續(xù))例23.查詢計(jì)算機(jī)系和信息系年齡大于等于20歲的學(xué)生姓名、所在系和年齡。SELECTSname,Sdept,SageFROMStudentWHERE(Sdept='計(jì)算機(jī)系'ORSdept='信息系')ANDSage>=20或:SELECTSname,Sdept,SageFROMStudentWHERESdeptIN('計(jì)算機(jī)系','信息系')ANDSage>=20
4.1.2單表查詢3.對查詢結(jié)果進(jìn)行排序
之對查詢結(jié)果進(jìn)行排序可對查詢結(jié)果進(jìn)行排序。排序子句為:
ORDERBY<列名>[ASC|DESC][,<列名>…]說明:按<列名>進(jìn)行升序(ASC)或降序(DESC)排序。示例例22.將學(xué)生按年齡的升序排序。
SELECT*FROMStudentORDERBYSage例23.查詢選修了‘c02’號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按成績降序排列。SELECTSno,GradeFROMSC WHERECno='c02'ORDERBYGradeDESC
例24.查詢?nèi)w學(xué)生的信息,查詢結(jié)果按所在系的系名升序排列,同一系的學(xué)生按年齡降序排列。SELECT*FROMStudent
ORDERBYSdept,SageDESC
4.1.2單表查詢4.使用聚合函數(shù)匯總數(shù)據(jù)
之使用聚合函數(shù)匯總數(shù)據(jù)SQL提供的聚合函數(shù)有:COUNT(*):統(tǒng)計(jì)表中元組個(gè)數(shù);COUNT([DISTINCT]<列名>):統(tǒng)計(jì)本列列值個(gè)數(shù)SUM([DISTINCT]<列名>):計(jì)算列值總和;AVG([DISTINCT]<列名>):計(jì)算列值平均值;MAX([DISTINCT]<列名>):求列值最大值;MIN([DISTINCT]<列名>
):求列值最小值。上述函數(shù)中除COUNT(*)外,其他函數(shù)在計(jì)算過程中均忽略NULL值。示例例25.統(tǒng)計(jì)學(xué)生總?cè)藬?shù)。
SELECTCOUNT(*)FROMStudent
例26.統(tǒng)計(jì)選修了課程的學(xué)生的人數(shù)。
SELECTCOUNT(DISTINCTSno)FROMSC例27.計(jì)算9512101號學(xué)生的考試總成績之和。SELECTSUM(Grade)FROMSCWHERESno='9512101'
示例(續(xù))例28.計(jì)算’C01’號課程學(xué)生的考試平均成績。
SELECTAVG(Grade)FROMSCWHERECno='C01'例29.查詢選修了’C01’號課程的學(xué)生的最高分和最低分。
SELECTMAX(Grade),MIN(Grade)FROMSCWHERECno='C01'注意:聚合函數(shù)不能出現(xiàn)在WHERE子句中
4.1.2單表查詢5.對查詢結(jié)果進(jìn)行分組計(jì)算
之對查詢結(jié)果進(jìn)行分組計(jì)算作用:可以控制計(jì)算的級別:對全表還是對一組。目的:細(xì)化計(jì)算函數(shù)的作用對象。分組語句的一般形式: [GROUPBY<分組條件>] [HAVING<組過濾條件>]
1.使用GROUPBY例30.統(tǒng)計(jì)每門課程的選課人數(shù),列出課程號和人數(shù)。SELECTCnoas課程號,COUNT(Sno)as選課人數(shù)FROMSCGROUPBYCno
對查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后再對每一組使用COUNT計(jì)算,求得每組的學(xué)生人數(shù)。SnoCnoGrade951201C0180951201C0278951202C0190952103C0288952103C0185952103C0391952103C0474CnoCount(Sno)C013C022C031C041SnoCnoGrade951201C0180951202C0190952103C0185951201C0278952103C0288952103C0391952103C0474例31.查詢每名學(xué)生的選課門數(shù)和平均成績。SELECTSnoas學(xué)號,COUNT(*)as選課門數(shù),AVG(Grade)as平均成績FROMSCGROUPBYSno2.使用HAVINGHAVING用于對分組自身進(jìn)行限制,它有點(diǎn)象WHERE子句,但它用于組而不是對單個(gè)記錄。例32.查詢修了3門以上課程的學(xué)生的學(xué)號
SELECTSnoFROMSCGROUPBYSno
HAVINGCOUNT(*)>3
示例例33.查詢修課門數(shù)等于或大于4門的學(xué)生的平均成績和選課門數(shù)。
SELECTSno,AVG(Grade)平均成績,COUNT(*)修課門數(shù)
FROMSCGROUPBYSno
HAVINGCOUNT(*)>=4
4.1.3多表連接查詢?nèi)粢粋€(gè)查詢同時(shí)涉及兩個(gè)或兩個(gè)以上的表,則稱之為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢連接查詢包括內(nèi)連接、外連接和交叉連接等。連接基礎(chǔ)知識連接查詢中用于連接兩個(gè)表的條件稱為連接條件或連接謂詞。一般格式為:[<表名1.>][<列名1>]<比較運(yùn)算符>[<表名2.>][<列名2>]必須是可比的內(nèi)連接SQL-92內(nèi)連接語法如下:
SELECT…FROM表名[INNER]JOIN被連接表
ON連接條件執(zhí)行連接操作的過程:首先取表1中的第1個(gè)元組,然后從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第1個(gè)元組與該元組拼接起來,形成結(jié)果表中的一個(gè)元組。表2全部查找完畢后,再取表1中的第2個(gè)元組,然后再從頭開始掃描表2,…重復(fù)這個(gè)過程,直到表1中的全部元組都處理完畢為止。
例36.查詢計(jì)算機(jī)系學(xué)生的修課情況,要求列出學(xué)生的名字、所修課的課程號和成績。
SELECTSname,Cno,GradeFROMStudentJOINSCONStudent.Sno=SC.SnoWHERESdept='計(jì)算機(jī)系'例37.查詢信息系修了Java課程的學(xué)生的修課成績,要求列出學(xué)生姓名、課程名和成績。SELECTSname,Cname,GradeFROMStudentsJOINSCONs.Sno=SC.SnoJOINCoursecONc.Cno=SC.CnoWHERESdept='信息系'ANDCname='Java'示例例38.查詢所有修了Java課程的學(xué)生的修課情況,要求列出學(xué)生姓名和所在的系。SELECTSname,SdeptFROMStudentSJOINSCONS.Sno=SC.Sno
JOINCourseCONC.Cno=SC.cnoWHERECname='Java'示例例46.有分組的多表連接查詢。統(tǒng)計(jì)每個(gè)系的學(xué)生的考試平均成績。SELECTSdept,AVG(grade)asAverageGradeFROMstudentSJOINSCONS.Sno=SC.SnoGROUPBYSdept示例例47.有分組和行選擇條件的多表連接查詢。統(tǒng)計(jì)計(jì)算機(jī)系每門課程的選課人數(shù)、平均成績、最高成績和最低成績。SELECTCno,COUNT(*)ASTotal,
AVG(Grade)AS
AvgGrade,MAX(Grade)ASMaxGrade,MIN(Grade)ASMinGradeFROMStudentSJOINSCONS.Sno=SC.SnoWHERESdept='計(jì)算機(jī)系'GROUPBYCno自連接為特殊的內(nèi)連接相互連接的表物理上為同一張表。必須為兩個(gè)表取別名,使之在邏輯上成為兩個(gè)表。例39.查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生的姓名和所在的系。SELECTS2.Sname,S2.SdeptFROMStudentS1JOINStudentS2ONS1.Sdept=S2.SdeptWHERES1.Sname=‘劉晨’
ANDS2.Sname!=‘劉晨’例49.查詢與“數(shù)據(jù)結(jié)構(gòu)”學(xué)分相同的課程的課程名和學(xué)分。SELECTC1.Cname,C1.CreditFROMCourseC1JOINCourseC2ONC1.Credit=C2.CreditWHEREC2.Cname='數(shù)據(jù)結(jié)構(gòu)'外連接只限制一張表中的數(shù)據(jù)必須滿足連接條件,而另一張表中數(shù)據(jù)可以不滿足連接條件。
ANSI方式的外連接的語法格式為:
FROM表1LEFT|RIGHT[OUTER]JOIN表2ON<連接條件>theta方式的外連接的語法格式為:左外連接:
FROM表1,表2WHERE[表1.]列名(+)=[表2.]列名右外連接:
FROM表1,表2WHERE[表1.]列名=[表2.]列名(+)
內(nèi)連接與外連接示意圖FROM表AJOIN表BON表A.某列=表B.某列
CFROM表ALEFTJOIN表BON表A.某列=表B.某列 A1+CFROM表ARIGHTJOIN表BON表A.某列=表B.某列
B1+C示例例50.查詢沒人選的課程,列出課程名。SELECTCnameFROMCourseC
LEFTJOINSCONC.Cno=SC.Cno
WHERESC.CnoISNULL示例例51.查詢計(jì)算機(jī)系沒選課的學(xué)生,列出學(xué)生姓名和性別。SELECTSname,SsexFROMStudentLEFTJOINSCONStudent.Sno=SC.SnoWHERESC.SnoISNULLANDSdept='計(jì)算機(jī)系'示例例52.統(tǒng)計(jì)第2-4學(xué)期開設(shè)的課程中,每門課程的選課人數(shù),包括沒人選的課程,列出課程號和選課人數(shù)。SELECTC.Cno課程號,COUNT(SC.Cno)選課人數(shù)FROMCourseCLEFTOUTERJOINSCONC.Cno=SC.CnoWHERESemesterIN(2,3,4)GROUPBYC.Cno在使用SELECT語句進(jìn)行查詢時(shí),有時(shí)只希望列出結(jié)果集中的前幾行結(jié)果,而不是全部結(jié)果。例如,競賽時(shí),一般只取成績最高的前三名,這時(shí)就可以使用TOP謂詞來限制輸出的結(jié)果。使用TOP謂詞的格式如下:TOPn[percent][WITHTIES]
n為非負(fù)整數(shù)。TOPn:表示取查詢結(jié)果的前n行數(shù)據(jù);TOPnpercnet:表示取查詢結(jié)果的前n%行數(shù)據(jù);WITHTIES:表示包括并列的結(jié)果。示例例53.查詢年齡最大的三個(gè)學(xué)生的姓名、年齡及所在系。SELECTTOP3Sname,Sage,SdeptFROMStudentORDERBYSageDESC示例例54.查詢Java課程考試成績前三名的學(xué)生的姓名、所在系和成績。SELECTTOP3WITHTIESSname,Sdept,GradeFROMStudentSJOINSConS.Sno=SC.SnoJOINCourseCONC.Cno=SC.CnoWHERECname='Java'ORDERBYGradeDESC示例例55.查詢選課人數(shù)最多的前兩門課程(包括并列情況),列出課程號和選課人數(shù)。SELECTTOP2WITHTIESC.Cno課程號,
COUNT(*)選課人數(shù)FROMCourseCJOINSCONC.Cno=SC.CnoGROUPBYC.CnoORDERBYCOUNT(*)DESC4.1.5子查詢在SQL語言中,一個(gè)SELECT-FROM-WHERE語句稱為一個(gè)查詢塊。子查詢是一個(gè)SELECT查詢,它嵌套在SELECT、INSERT、UPDATE、DELETE語句的WHERE或HAVING子句內(nèi),或其它子查詢中子查詢的SELECT查詢總是使用圓括號括起來。使用子查詢進(jìn)行基于集合的測試使用子查詢進(jìn)行基于集合的測試的語句的一般格式為:列名[NOT]IN(子查詢)示例例56.查詢與劉晨在同一個(gè)系的學(xué)生。
SELECTSno,Sname,SdeptFROMStudent WHERESdeptIN (SELECTSdeptFROMStudent WHERESname=‘劉晨’)
ANDSname!=‘劉晨’②①示例例57查詢成績?yōu)榇笥?0分的學(xué)生的學(xué)號、姓名。
SELECTSno,SnameFROMStudent WHERESnoIN (SELECTSnoFROMSC WHEREGrade>90)①②示例例58.查詢選修了“Java”課程的學(xué)生的學(xué)號和姓名。SELECTSno,SnameFROMStudent WHERESnoIN (SELECTSnoFROMSC WHERECnoIN (SELECTCnoFROMCourse WHERECname='Java'))示例例59.統(tǒng)計(jì)選修了“Java”課程的這些學(xué)生的選課門數(shù)和平均成績。SELECTSno學(xué)號,COUNT(*)選課門數(shù),
AVG(Grade)平均成績FROMSCWHERESnoIN(SELECTSnoFROMSCJOINCourseCONC.Cno=SC.CnoWHERECname='Java')使用子查詢進(jìn)行比較測試帶比較運(yùn)算符的子查詢指父查詢與子查詢之間用比較運(yùn)算符連接,當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),可用>、<、=、>=、<=、<>運(yùn)算符。示例例60.查詢選了“c005”課程且考試成績高于此課程的平均成績的學(xué)生的學(xué)號和成績。SELECTSno,GradeFROMSC WHERECno='c005'andGrade>(SELECTAVG(Grade)fromSCWHERECno='c005')
示例例61.查詢計(jì)算機(jī)系年齡最大的學(xué)生的姓名和年齡。SELECTSname,SageFROMStudentWHERESdept='計(jì)算機(jī)系'ANDSage=(SELECTMAX(Sage)FROMStudentWHERESdept='計(jì)算機(jī)系')示例例62.查詢Java考試成績高于Java平均成績的學(xué)生的姓名、所在系和Java成績。SELECTSname,Sdept,GradeFROMStudentSJOINSCONS.Sno=SC.SnoJOINCourseCONC.Cno=SC.CnoWHERECname='Java'ANDGrade>(SELECTAVG(Grade)FROMSCJOINCourseCONC.Cno=SC.CnoWHERECname='Java')使用子查詢進(jìn)行存在性測試一般使用EXISTS謂詞。帶EXISTS謂詞的子查詢不返回查詢的數(shù)據(jù),只產(chǎn)生邏輯真值(有數(shù)據(jù))和假值(沒有數(shù)據(jù))。
例63.查詢選修了‘c001’號課程的學(xué)生姓名。SELECTSnameFROMStudent WHEREEXISTS (SELECT*FROMSC WHERESno=Student.Sno
ANDCno='c01')
注意注1:處理過程為:先外后內(nèi);由外層的值決定內(nèi)層的結(jié)果;內(nèi)層執(zhí)行次數(shù)由外層結(jié)果數(shù)決定。注2:由于EXISTS的子查詢只能返回真或假值,因此在這里給出列名無意義。所以在有EXISTS的子查詢中,其目標(biāo)列表達(dá)式通常都用*。上句的處理過程1.找外層表Student表的第一行,根據(jù)其Sno值處理內(nèi)層查詢2.由外層的值與內(nèi)層的結(jié)果比較,由此決定外層條件的真、假3.順序處理外層表Student表中的第2、3、
…行。示例例64.查詢沒有選修‘c001’號課程的學(xué)生姓名和所在系。SELECTSname,SdeptFROMStudentWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno='c001')示例例65.查詢計(jì)算機(jī)系沒選“Java”的學(xué)生姓名和性別。SELECTSname,SsexFROMStudentWHERESnoNOTIN(SELECTSnoFROMSCJOINCourseONSC.Cno=Course.CnoWHERECname='Java')
ANDSdept='計(jì)算機(jī)系'4.2數(shù)據(jù)更改功能4.2.1插入數(shù)據(jù)4.2.2更新數(shù)據(jù)4.2.3刪除數(shù)據(jù)4.2.1插入數(shù)據(jù)插入單行記錄的INSERT語句的格式為:
INSERTINTO<表名>[(<列名表>)]VALUES(值表)功能:新增一個(gè)符合表結(jié)構(gòu)的數(shù)據(jù)行,將值表數(shù)據(jù)按表中列定義順序[或列名表順序]賦給對應(yīng)列名。注意值列表中的值與列名表中的列按位置順序?qū)?yīng),它們的數(shù)據(jù)類型必須一致。如果<表名>后邊沒有指明列名,則新插入記錄的值的順序必須與表中列的定義順序一致,且每一個(gè)列均有值(可以為空)。示例例1.將新生記錄(1521104,陳冬,男,信息系,18歲)插入到Student表中。
INSERTINTOStudentVALUES('1521104','陳冬','男',18,'信息系')例2.在SC表中插入一新記錄,成績暫缺。
INSERTINTOSC(Sno,Cno,XKLB)VALUES(‘1521104’,‘c001’,‘必修')實(shí)際插入的值為:(‘9521105’,‘c01’,NULL,‘必修')4.2.2更新數(shù)據(jù)用UPDATE語句實(shí)現(xiàn)。格式:
UPDATE<表名>SET<列名=表達(dá)式>[,…n][WHERE<更新條件>]無條件更新例1.將所有學(xué)生的年齡加1。
UPDATEStudentSETSage=Sage+1有條件更新1.基于本表?xiàng)l件的更新例2.將‘1512101’學(xué)生的年齡改為21歲
UPDATEStudentSETSage=21 WHERESno='1512101'2.基于其他表?xiàng)l件的更新例3:將計(jì)算機(jī)系全體學(xué)生的成績加5分。(1)用子查詢實(shí)現(xiàn)
UPDATESCSETGrade=Grade+5 WHERESnoIN (SELECTSnoFROMStudent WHERESdept='計(jì)算機(jī)系')(2)用多表連接實(shí)現(xiàn)UPDATESCSETGrade=Grade+5FROMSCJOINStudentONSC.Sno=Student.SnoWHERESdept='計(jì)算機(jī)系'4.2.3刪除數(shù)據(jù)用DELETE語句實(shí)現(xiàn)格式:DELETE[FROM]<表名>[WHERE<刪除條件>無條件刪除例1.刪除所有學(xué)生的選課記錄。
DELETEFROMSC
有條件刪除(1)基于本表?xiàng)l件的刪除。例2.刪除所有不及格學(xué)生的修課記錄。DELETEFROMSCWHEREGrade<60
基于其他表?xiàng)l件的刪除例3.刪除計(jì)算機(jī)系不及格學(xué)生的修課記錄。(1)用子查詢實(shí)現(xiàn)
DELETEFROMSCWHEREGrade<60ANDSnoIN(SELECTSnoFROMStudentWHERESdept=‘計(jì)算機(jī)系’)(2)用多表連接實(shí)現(xiàn)
DELETEFROMSC FROMSCJOINStudentONSC.Sno=Student.Sno WHERESdept=‘計(jì)算機(jī)系’ANDGrade<60
4.3數(shù)據(jù)查詢擴(kuò)展4.3.1將查詢結(jié)果保存到新表中4.3.2CASE表達(dá)式4.3.3查詢結(jié)果的并、交、差運(yùn)算4.3.1將查詢結(jié)果保存到新表中如果希望將查詢結(jié)果永久保存,比如保存在一個(gè)表中,可以通過在SELECT語句中使用
INTO子句實(shí)現(xiàn)。SELECT查詢列表序列INTO<新表名>FROM數(shù)據(jù)源… --其他行選擇、分組等語句示例例74.查詢計(jì)算機(jī)系學(xué)生的姓名、選的課程名和成績,并將查詢結(jié)果保存到永久表S_C_G中。SELECTSname,Cname,GradeINTOS_C_GFROMStudentsJOINSCONs.Sno=SC.SnoJOINCoursecONc.Cno=SC.CnoWHERESdept='計(jì)算機(jī)系'示例例75.統(tǒng)計(jì)每個(gè)系的學(xué)生人數(shù),并將結(jié)果保存到永久表dept_cnt中SELECTSdept,COUNT(*)AS人數(shù)INTOdept_cntFROMStudentGROUPBYSdept4.3.2CASE表達(dá)式CASE是一種多分支表達(dá)式,它可以根據(jù)條件列表的值返回多個(gè)可能的結(jié)果表達(dá)式中的一個(gè)。CASE表達(dá)式可用在任何允許使用表達(dá)式的地方,但它不是一個(gè)完整的T-SQL語句,因此不能單獨(dú)執(zhí)行。CASE表達(dá)式分為簡單CASE表達(dá)式和搜索CASE表達(dá)式兩種類型。簡單CASE表達(dá)式CASEinput_expressionWHENwhen_expressionTHENresult_expression[...n][ELSEelse_result_expression]END示例SELECTs.Sno學(xué)號,Sname姓名,CASESdeptWHEN'計(jì)算機(jī)系'THEN'CS'WHEN'信息系'THEN'IM'WHEN'數(shù)學(xué)系'THEN'MA'ENDAS所在系,Grade成績FROMStudentsjoinSCONs.Sno=SC.SnoJOINCoursecONc.Cno=SC.CnoWHERECname='Java'搜索CASE表達(dá)式CASEWHENBoolean_expressionTHENresult_expression[...n][ELSEelse_result_expression]END示例SELECTSno,Grade,CASEWHENGrade>=90THEN'優(yōu)'WHENGradebetween80and89THEN'良'WHENGradebetween70and79THEN'中'WHENGradebetween60and69THEN'及格'WHENGrade<60THEN'不及格'ENDAS等級FROMSCWHERECno='c001'示例SELECTSno學(xué)號,AVG(Grade)平均成績,CASEWHENAVG(Grade)>=90THEN'好'WHENAVG(Grade)BETWEEN80AND89THEN'比較好'WHENAVG(Grade)BETWEEN70AND79THEN'一般'WHENAVG(Grade)BETWEEN60AND69THEN'不太好'WHENAVG(Grade)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年教育培訓(xùn)機(jī)構(gòu)戰(zhàn)略規(guī)劃與創(chuàng)新發(fā)展
- 客服部工作總結(jié)
- 試用期施工員工作總結(jié)
- 頭療專業(yè)知識培訓(xùn)課件
- 尿液分析系統(tǒng)基礎(chǔ)知識課件
- 《珍愛生命 遠(yuǎn)離危險(xiǎn)》課件小學(xué)生假期安全教育
- 生物安全實(shí)驗(yàn)室管理技術(shù)規(guī)范
- 2024年青海省中考一模語文試題
- 跨部門協(xié)作往來文書格式規(guī)范
- 漢字之美-唐詩欣賞中學(xué)語文課本教案
- 消防安全評估消防安全評估方案
- 醫(yī)療行業(yè)的病人隱私保護(hù)培訓(xùn)
- 第1課 精美絕倫的傳統(tǒng)工藝 課件 2023-2024學(xué)年贛美版初中美術(shù)八年級下冊
- 《讓我們的家更美好》教學(xué)設(shè)計(jì)
- 自抗擾控制器及其應(yīng)用
- 熱工與流體力學(xué)基礎(chǔ)課件
- LOI意向書中英文模板
- 《防毒面具的使用》課件
- 《金融風(fēng)險(xiǎn)管理》 課程標(biāo)準(zhǔn)
- 銷售費(fèi)用管理制度
- 高維數(shù)據(jù)分析
評論
0/150
提交評論