SELECT查詢語句-內(nèi)外連接_第1頁
SELECT查詢語句-內(nèi)外連接_第2頁
SELECT查詢語句-內(nèi)外連接_第3頁
SELECT查詢語句-內(nèi)外連接_第4頁
SELECT查詢語句-內(nèi)外連接_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2023/2/4MicrosoftSQLServer20051Lecture5

基本SELECT查詢語句-------------------------------------------------------目標(biāo)要求:掌握使用數(shù)據(jù)定義(DDL)定義數(shù)據(jù)庫、數(shù)據(jù)表等對象。熟練掌握簡單查詢、嵌套查詢、連接查詢、分組與計算查詢、集合的并運算。2023/2/4MicrosoftSQLServer20052結(jié)構(gòu)化查詢語言(SQL)結(jié)構(gòu)化查詢語言:一種數(shù)據(jù)庫查詢和編程語言,廣泛應(yīng)用于訪問、查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)。--------------------------------------------------------------------------------SQL

全名是結(jié)構(gòu)化查詢語言(StructuredQueryLanguage),是用于數(shù)據(jù)庫中的標(biāo)準(zhǔn)數(shù)據(jù)查詢語言,IBM公司最早使用在其開發(fā)的數(shù)據(jù)庫系統(tǒng)中。1986年10月,美國ANSI

對SQL進行規(guī)范后,以此作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言,1987年得到國際標(biāo)準(zhǔn)組織的支持下成為國際標(biāo)準(zhǔn)。--------------------------------------------------------------------------------SQL語言包含3個部分:數(shù)據(jù)定義(DDL)語言(如CREATE,DROP,ALTER等語句)

數(shù)據(jù)操縱(DML)語言(SELECT,INSERT,UPDATE,DELETE語句)

數(shù)據(jù)控制語言(如GRANT,REVOKE,ROLLBACK等語句)2023/2/4MicrosoftSQLServer20053數(shù)據(jù)定義語言數(shù)據(jù)定義語言

(DataDefinitionLanguage,DDL)是SQL語言集中,負責(zé)數(shù)據(jù)結(jié)構(gòu)定義與數(shù)據(jù)庫對象定義的語言,由CREATE、ALTER與DROP三個語法所組成。2023/2/4MicrosoftSQLServer20054CREATE指令CREATE是負責(zé)數(shù)據(jù)庫對象的建立

CREATEDATABASECREATETABLECREATEINDEX:創(chuàng)建數(shù)據(jù)表索引。CREATEPROCEDURE:創(chuàng)建存儲過程。CREATEFUNCTION:創(chuàng)建用戶自定義函數(shù)。CREATEVIEW:創(chuàng)建視圖。CREATETRIGGER:創(chuàng)建觸發(fā)器。2023/2/4MicrosoftSQLServer20055ALTER指令A(yù)LTERALTER是負責(zé)數(shù)據(jù)庫對象修改的指令,例如:ALTER

TABLETb_StudentADDcolumn_bVARCHAR(20)NULL;--在數(shù)據(jù)表Tb_Student中加入一個新的字段,名稱為column_b,字段類型為varchar(20),允許NULL值。

ALTER

TABLETb_StudentDROP

COLUMNcolumn_b;--在數(shù)據(jù)表Tb_Student中移除column_b字段。

2023/2/4MicrosoftSQLServer20056DROP指令DROPDROP則是刪除數(shù)據(jù)庫對象的指令,并且只需要指定要刪除的數(shù)據(jù)庫對象名稱即可,在DDL語法中算是最簡單的。例如:DROP

TABLEMyTable;--刪除MyTable數(shù)據(jù)表。DROP

VIEWMyView;--刪除MyView視圖。

2023/2/4MicrosoftSQLServer20057數(shù)據(jù)操縱語言數(shù)據(jù)操縱語言

(DataManipulationLanguage)是SQL語言中,負責(zé)對數(shù)據(jù)庫對象執(zhí)行數(shù)據(jù)存取工作的指令集,以SELECT、INSERT、UPDATE、DELETE四種指令為核心。DML的主要功能即是存取數(shù)據(jù),因此其語法都是以讀取與寫入數(shù)據(jù)庫為主,除了INSERT以外,其他三種指令都可能需搭配WHERE指令來過濾數(shù)據(jù)范圍,或是不加WHERE指令來存取全部的數(shù)據(jù)。2023/2/4MicrosoftSQLServer20058INSERT指令I(lǐng)NSERT是將數(shù)據(jù)插入到數(shù)據(jù)庫對象中的指令,可以插入數(shù)據(jù)的數(shù)據(jù)庫對象有數(shù)據(jù)表以及可更新視圖兩種。基本格式有:INSERT

INTO[數(shù)據(jù)表或可更新視圖名稱](字段1,字段2,字段3,...)VALUES(值1,值2,值3,...)--只需要根據(jù)對應(yīng)的字段來設(shè)定插入值。INSERT

INTO[數(shù)據(jù)表或可更新視圖名稱]VALUES(值1,值2,值3,...)

--必須要指定所有字段的插入值。

例如:INSERT

INTOMyTable(字段1,字段2,字段3,字段4,字段5)VALUES(1,2,3,'4','5')2023/2/4MicrosoftSQLServer20059UPDATE指令UPDATE指令是依給定條件,將符合條件的數(shù)據(jù)表中的數(shù)據(jù)更新為新的數(shù)值,其基本格式為:UPDATE[數(shù)據(jù)表或可更新視圖名稱]SET字段1=值1,字段2=值2,字段3=值3,...WHERE[指定條件]例如:UPDATEMyTableSET字段1=3,字段2=5,字段4=5WHERE字段3=1982732023/2/4MicrosoftSQLServer200510DELETE指令DELETE指令從數(shù)據(jù)庫對象中刪除數(shù)據(jù)的指令,基本語法為:DELETEFROM[數(shù)據(jù)表或可更新視圖名稱]WHERE[給定條件]例如:DELETE

FROMMyTableWHERE字段3=1918299值為字符時,加西文單引號。2023/2/4MicrosoftSQLServer200511數(shù)據(jù)控制語言數(shù)據(jù)控制語言

(DataControlLanguage)在SQL語言中,是一種可對數(shù)據(jù)存取權(quán)進行控制的指令,它可以控制特定用戶對數(shù)據(jù)表、視圖、存儲過程、用戶自定義函數(shù)等數(shù)據(jù)庫對象的控制權(quán)。由GRANT和REVOKE兩個指令組成。GRANT的語法結(jié)構(gòu)為:GRANT[權(quán)限]ON[要授予權(quán)限的數(shù)據(jù)庫對象]TO[用戶]WITH[授權(quán)選項]DENY的語法結(jié)構(gòu)為:DENY[權(quán)限]ON[要拒絕權(quán)限的數(shù)據(jù)庫對象]TO[用戶]權(quán)限可以是INSERT\UPDATE等,參見教材p2302023/2/4MicrosoftSQLServer200512Select查詢2023/2/4MicrosoftSQLServer200513簡單Select查詢語法:SELECT

字段1,字段2,…FROM

表名SELECT*FROM

表名SELECT

字段1,字段2,…FROM

表名WHERE查詢條件SELECT*FROM

表名WHERE查詢條件

簡單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件等。--------------------------------------------------------------------2023/2/4MicrosoftSQLServer200514簡單Select查詢SELECTStuId,StuName,DeptId,SexFROMTb_StudentSELECT*FROMTb_Student2023/2/4MicrosoftSQLServer200515簡單Select查詢SELECTStuId,StuName,DeptId,SexFROMTb_StudentWHERESex='F'SELECT*FROMTb_TeacherWHERESex='F'andDeptId='08'2023/2/4MicrosoftSQLServer200516WHERE子句使用的運算符類別運算符說明比較運算符=、>、<、>=、<=、<>比較兩個表達式邏輯運算符AND、OR、NOT組合兩個表達式的運算結(jié)果或取反范圍運算符BETWEEN、NOTBETWEEN查詢值是否在范圍內(nèi)列表運算符IN、NOTIN查詢值是否屬于列表值之一字符匹配符LIKE、NOTLIKE字符串是否匹配未知值ISNULL、ISNOTNULL查詢值是否為NULL2023/2/4MicrosoftSQLServer200517比較運算符和表達式運算符含

義=等于>大于<小于>=大于等于<=小于等于<>不等于SELECT*FROMTb_StudentWHEREStuName<>'張三'SELECT*FROMTb_StudentWHERESex='F'2023/2/4MicrosoftSQLServer200518邏輯運算符和表達式運算符含

義AND如果兩個布爾表達式都為TRUE,那么就為TRUEOR如果兩個布爾表達式中的一個為TRUE,那么就為TRUENOT對任何其他布爾運算符的值取反SELECT*FROMTb_StudentWHERESex='M'andSex='F'SELECT*FROMTb_StudentWHEREClassId='S040201101'andSex='F'SELECT*FROMTb_StudentWHERENOTSex='M'2023/2/4MicrosoftSQLServer200519范圍搜索運算符和表達式SELECT*FROMTb_StudentWHEREAgeBETWEEN20TO22---------------------------------------------------------------------------------------SELECT*FROMTb_StudentWHEREAgeNOT

BETWEEN20TO22---------------------------------------------------------------------------------------SELECT*FROMTb_StudentWHEREAgeIN(20,21,22)---------------------------------------------------------------------------------------相當(dāng)于

SELECT*FROMTb_Student

WHERE

Age=20OR

Age=21OR

Age=22類別運算符說明范圍運算符BETWEEN、NOTBETWEEN查詢值在范圍內(nèi)列表運算符IN、NOTIN查詢值屬于列表值之一2023/2/4MicrosoftSQLServer200520模式匹配運算符和表達式SELECT

*

FROMTb_StudentWHEREStuNameLIKE

'張%'通配符說明示例%匹配零個或多個字符的任意字符串。LIKE'%林%'姓名中包含有“林”的信息。_下劃線匹配任何單個字符。一個漢字只使用一個"_"表示LIKE'林_'姓名第一個字為“林”并且名字只有兩個字。[]匹配指定范圍([a-f])或集合([abcdef])中的任何單個字符。LIKE'[張王]%'姓張或姓王的信息。[^]匹配不屬于指定范圍([a-f])或集合([abcdef])中的任何單個字符。LIKE'王[^林]%'姓王且第二個字不是林的信息。SELECT

*

FROMTb_StudentWHEREStuNameNOT

LIKE

'張三'2023/2/4MicrosoftSQLServer200521未知值條件NULL表示未知的,不可用或?qū)⒃谝院筇砑拥臄?shù)據(jù)。NULL值與零、零長度的字符串的含義不同。在WHERE子句中,使用ISNULL或ISNOTNULL條件可以查詢某一數(shù)據(jù)值是否為NULL的數(shù)據(jù)信息。例如:SELECT

*

FROMTb_GradeWHERERetestScoreISNOTNULLSELECT

*

FROMTb_CourseWHERECourseNameISNULL2023/2/4MicrosoftSQLServer200522字符串運算符和表達式字符串表達式是用字符串連接符(+)將字符型常量、變量、字符串函數(shù)連接組成的式子。字符串表達式的計算結(jié)果包括兩個字符串內(nèi)的空格和所有字符,仍然是字符型。如'我愛'+'我家'

表達式的值為:'我愛我家'

-------------------------------------------------------------------

例如:'Beijing'+'Huanying'+'Ning!‘

請寫出結(jié)果!2023/2/4MicrosoftSQLServer200523運算符的優(yōu)先級運算符的優(yōu)先級決定了表達式的計算和比較操作順序。運算符的優(yōu)先級由高到低的順序為:1)括號:()。2)正、負或取反運算:+、-、~。3)乘、除、求模運算:*、/、%。4)加、減、字符連接運算:+、-、+。5)比較運算:=、>、<、>=、<=、<>、!=、!>、!<。6)位運算:^、&、|。7)邏輯非運算:NOT。8)邏輯與運算:AND。9)BETWEEN、IN、LIKE、OR等運算。10)賦值運算:=。2023/2/4MicrosoftSQLServer200524ORDERBY子句

使用SELECT語句進行數(shù)據(jù)查詢,為了按一定順序瀏覽數(shù)據(jù),可以使用ORDERBY子句對生成的查詢結(jié)果進行排序。ORDERBY子句在SELECT語句中的語法格式如下:-------------------------------------------------------------------SELECT

字段1,字段2,…FROM

表名

WHERE查詢條件

ORDERBY排序表達式[ASC|DESC]2023/2/4MicrosoftSQLServer200525ORDERBY子句SELECTStuId,StuName,SexFROMTb_StudentWHEREDeptId=‘08’ORDERBYStuNameSELECTStuId,StuName,SexFROMTb_StudentWHEREDeptId=‘08’ORDERBYStuNameDESC2023/2/4MicrosoftSQLServer200526ORDERBY子句SELECTStuId,StuName,SexFROMTb_StudentWHEREDeptId=‘08’ORDERBYStuName,Sex結(jié)果如何?2023/2/4MicrosoftSQLServer200527ORDERBY子句ORDERBY子句總是位于WHERE子句(如果有的話)后面,可以包含一個或多個列,每個列之間以逗號分隔。這些列可能是表中定義的列,也可能是SELECT子句中定義的計算列。-------------------------------------------------------------------------------在SQLServer2005中,漢字比其它字符值都要大,而漢字之間的大小比較是取決于其拼音首字母的大小。如果沒有特別說明,值是以升序序列進行排序的。當(dāng)然,你也可以選擇使用ASC關(guān)鍵字指定升序排序。-------------------------------------------------------------------------------如果你希望以降序排列,則在ORDERBY后面使用DESC關(guān)鍵字。2023/2/4MicrosoftSQLServer200528GROUPBY子句

使用SELECT語句進行數(shù)據(jù)查詢,為了按特定條件分組瀏覽數(shù)據(jù),可以使用GROUPBY子句對某一列數(shù)據(jù)的值進行分類,形成結(jié)果集。GROUPBY子句在SELECT語句中的語法格式如下:--------------------------------------------------------------------------------SELECT

字段1,字段2,…FROM

表名

WHERE查詢條件

GROUPBY

字段1,字段2,…[WITHROLLUP|CUBE]ORDERBY排序表達式[ASC|DESC]--------------------------------------------------------------------------------CUBE生成的結(jié)果集顯示了所選列中值的所有組合(包括字段1、字段2、字段1+字段2)的分組統(tǒng)計結(jié)果和總的匯總統(tǒng)計的聚合;ROLLUP生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。(包括字段1、字段1+字段2的分組統(tǒng)計結(jié)果和總的匯總統(tǒng)計的聚合)2023/2/4MicrosoftSQLServer200529聚合函數(shù)聚合函數(shù)是SQL語言中一種特殊的函數(shù),比如SUM,COUNT,MAX,MIN,AVG等。這些函數(shù)和其它函數(shù)的根本區(qū)別就是它們一般作用在多條記錄上。換句話說,上面幾個返函數(shù)的值建立在對多條記錄進行統(tǒng)計的基礎(chǔ)上。SUM是求和函數(shù)。SELECTClassId,SUM(Score)FROMTb_Grade

WHEREClassId=‘S0408011’COUNT函數(shù)用來計算記錄的數(shù)量。SelectCOUNT(StuID)FROMTb_GradeWHEREClassId=‘S0408011’MAX,MIN,AVG函數(shù)分別是用來求最大值、最小值和平均值。SELECT

MAX(Score),MIN(Score),AVG(Score)FROMTb_GradeWHEREClassId=‘S0408011’2023/2/4MicrosoftSQLServer200530GROUPBY子句常用統(tǒng)計函數(shù)函數(shù)名功能COUNT求組中項數(shù)SUM求和,返回表達式中所有值的和AVG求均值,返回表達式中所有值的平均值MAX求最大值,返回表達式中所有值的最大值MIN求最小值,返回表達式中所有值的最小值A(chǔ)BS求絕對值,返回表達式的絕對值A(chǔ)SCII求ASCII碼,返回字符型數(shù)據(jù)的ASCIIRAND產(chǎn)生隨機數(shù),返回一個位于0和1之間的隨機數(shù)2023/2/4MicrosoftSQLServer200531GROUPBY子句--顯示每個學(xué)生的班級編碼和成績SELECTClassId,TotalScoreFROMTb_Grade--------------------------------------------------------------------匯總每個班級的平均成績SELECTClassId,AVG(TotalScore)FROMTb_GradeGROUPBYClassId2023/2/4MicrosoftSQLServer200532----------------------------------------------------------------SELECTClassId,ClassName,AVG(TotalScore)FROMTb_Grade,Tb_ClassGROUPBYClassIdGROUPBY子句--匯總每個班級(含班級名稱)的平均成績?SELECTClassId,ClassName,AVG(TotalScore)FROMTb_GradeGROUPBYClassId----------------------------------------------------------------SELECTTb_Grade.ClassId,ClassName,AVG(TotalScore)FROMTb_Grade,Tb_ClassWHERETb_Grade.ClassId=Tb_Class.ClassIdGROUPBYTb_Grade.ClassId2023/2/4MicrosoftSQLServer200533GROUPBY子句--顯示班級名稱的匯總各班平均成績SELECT

Tb_Grade.ClassId,ClassName,AVG(TotalScore)ASAvgScoreFROMTb_Grade,Tb_ClassWHERE

Tb_Grade.ClassId=Tb_Class.ClassIdGROUPBY

Tb_Grade.ClassId,ClassName當(dāng)兩個表中都有ClassId字段時,要加上表前綴,說明是那個表的ClassId字段SELECT列表中出現(xiàn)的字段都必須要在GROUPBY列表中出現(xiàn),聚合函數(shù)字段除外當(dāng)要顯示相關(guān)主鍵表中的其它字段時,如這兒的ClassName字段,則在WHERE子句中通過主外鍵關(guān)系進行連接2023/2/4MicrosoftSQLServer200534GROUPBY子句查詢各個班級的最大成績和最小成績?SELECTTb_Grade.ClassId,ClassName,MAX(TotalScore)ASMaxScore,MIN(TotalScore)ASMinScoreFROMTb_Grade,Tb_ClassWHERETb_Grade.ClassId=Tb_Class.ClassIdGROUPBYTb_Grade.ClassId,ClassName2023/2/4MicrosoftSQLServer200535GROUPBY子句GROUPBY分類匯總,分項統(tǒng)計緊跟在GROUPBY后面的字段就是分組條件。如果在前面選擇列表中出現(xiàn)的非聚合字段未出現(xiàn)在GROUPBY后面,SQL語句就會出錯。思考題:按照不同班級和性別統(tǒng)計學(xué)生平均年齡。2023/2/4MicrosoftSQLServer200536HAVING子句HAVING子句相當(dāng)于一個用于組(分類匯總)的WHERE子句,它指定了組或聚合的查詢條件。HAVING子句通常與GROUPBY子句一起使用。HAVING子句的語法為:-------------------------------------------------------------------SELECT

字段1,字段2,…FROM

表名

WHERE查詢條件

GROUPBY字段1,字段2,…

HAVING

組查詢條件2023/2/4MicrosoftSQLServer200537HAVING子句顯示各班級學(xué)生平均總成績大于73的班級編號。SELECTTb_Grade.ClassId,AVG(TotalScore)ASAvgScoreFROMTb_GradeGROUPBYTb_Grade.ClassIdHAVINGAVG(TotalScore)>732023/2/4MicrosoftSQLServer200538HAVING子句求各個班級的最大成績和最小成績,且最低成績小于50分的?SELECTTb_Grade.ClassId,MAX(TotalScore)ASMaxScore,MIN(TotalScore)ASMinScoreFROMTb_GradeGROUPBYTb_Grade.ClassIdHAVING

MIN(TotalScore)<502023/2/4MicrosoftSQLServer200539HAVING子句HAVING子句用來對分組后的數(shù)據(jù)進行篩選,它后面會跟一個條件表達式。當(dāng)在GROUPBY子句中使用HAVING子句時,查詢結(jié)果中只返回滿足HAVING條件的組。2023/2/4MicrosoftSQLServer200540SELECT語法總結(jié)SELECTselect_listFROMtable_list[WHEREsearch_conditions][GROUPBYgroup_by_list][HAVINGsearch_conditions][ORDERBYorder_list[ASC|DESC]]上述“[]”表示可選項,“|”表示取其中之一。2023/2/4MicrosoftSQLServer200541計算列SELECT后面還可以是計算列。在SELECT后面的計算列,只是位于該SELECT語句中,是臨時性的,它由一個表達式產(chǎn)生。SELECTStuId,StuName+'('+Sex+')'FROMTb_Student上面語句中的StuName+'('+Sex+')'就構(gòu)成了一個計算列,它的值由兩個字符型值和一對括號連接組成。2023/2/4MicrosoftSQLServer200542列別名在上面的結(jié)果集中,列名都是英文。這樣看上去很不直觀,我們希望能夠給列名換上諸如“學(xué)號、姓名”等這樣的名字。只需在SELECT語句中,給列取個別名即可。AS可以省去。SELECTStuIdAS

學(xué)號,StuName+'('+Sex+')'AS

姓名性別FROMTb_StudentSELECTStuId學(xué)號,StuName+'('+Sex+')'姓名性別FROMTb_StudentSELECT

學(xué)號=StuId,姓名性別=StuName+'('+Sex+')'FROMTb_Student2023/2/4MicrosoftSQLServer200543當(dāng)然,我們也可以給表指定列別名,給表取別名和給列取別名類似,但只可以用“原始表名AS別名”和“原始表名別名”這兩種方式。SELECT*FROMTb_StudentST或者SELECT*FROMTb_StudentASST------------------------------------------------------------------字段別名不能放在WHERE子句中,而表別名可以放在WHERE子句中。表別名2023/2/4MicrosoftSQLServer200544多表查詢2023/2/4MicrosoftSQLServer200545查詢?nèi)焊飨挡繐碛邪嗉壍幕厩闆r,顯示系部名稱、班級編碼和班級名稱;多表查詢2023/2/4MicrosoftSQLServer200546USETeaching_SystemGOSELECTd.*,c.*FROMTb_ClassASc,Tb_DeptASd多表查詢2023/2/4MicrosoftSQLServer200547笛卡爾乘積多表查詢2023/2/4MicrosoftSQLServer200548多表查詢2023/2/4MicrosoftSQLServer200549多表查詢2023/2/4MicrosoftSQLServer200550USETeaching_SystemGOSELECTd.*,c.*FROMTb_ClassASc,Tb_DeptASdWHEREc.DeptId=d.DeptId多表查詢2023/2/4MicrosoftSQLServer200551多表查詢SELECTStuId,StuName,DeptId,SpecId,ClassId,SexFROMTb_StudentSELECTStuId學(xué)號,StuName姓名,DeptId系部,SpecId專業(yè),ClassId班級,Sex性別FROMTb_Student2023/2/4MicrosoftSQLServer200552兩表連接SELECTStuId學(xué)號,StuName姓名,DeptName系部,SpecId專業(yè),ClassId班級,Sex性別FROMTb_StudentTS,Tb_DeptTDWHERETS.DeptId=TD.DeptId2023/2/4MicrosoftSQLServer200553多表連接基礎(chǔ)在實際查詢應(yīng)用中,用戶所需要的數(shù)據(jù)并不全部在一個表中,這時就需要多表查詢,從多個表中抽取我們所需要的數(shù)據(jù)信息。多表查詢實際上是通過各個表之間的共同列的相關(guān)性(主外鍵關(guān)系)來查詢數(shù)據(jù)的,這是關(guān)系數(shù)據(jù)庫查詢數(shù)據(jù)的主要特征。多表查詢首先要用WHERE子句在表之間建立連接關(guān)系。在進行多表查詢時,可以遵循以下基本原則:(1)SELECT子句列表中,字段前要加上基表名稱;(2)FROM子句應(yīng)包括所有使用的基表;(3)WHERE子句應(yīng)在表之間建立連接關(guān)系。2023/2/4MicrosoftSQLServer200554兩表連接SELECTStuId學(xué)號,StuName姓名,DeptId系部編碼,DeptName系部,SpecId專業(yè),ClassId班級,Sex性別FROMTb_StudentTS,Tb_DeptTDWHERETS.DeptId=TD.DeptIdSELECTStuId學(xué)號,StuName姓名,TS.DeptId

系部編碼,DeptName系部,SpecId專業(yè),ClassId班級,Sex性別FROMTb_StudentTS,Tb_DeptTDWHERETS.DeptId=TD.DeptId2023/2/4MicrosoftSQLServer200555多表連接SELECTStuId學(xué)號,StuName姓名,DeptName系部,SpecName專業(yè),ClassName班級,Sex性別FROMTb_StudentTS,Tb_DeptTD,Tb_SpecTSP,Tb_ClassTCWHERETS.DeptId=TD.DeptIdANDTS.SpecId=TSP.SpecIdANDTS.ClassId=TC.ClassId要求顯示學(xué)生姓名和所在系名、專業(yè)、班級名稱?2023/2/4MicrosoftSQLServer200556各種連接查詢內(nèi)連接:內(nèi)連接是一種常用的數(shù)據(jù)連接查詢方式。它使用比較運算符進行多個表之間的比較連接操作。內(nèi)連接會消除與另一個表的任何不匹配的數(shù)據(jù)行。外連接:外連接會返回FROM子句中提到的至少一個表的所有符合查詢條件的數(shù)據(jù)行(包括連接中不匹配的數(shù)據(jù)行),外連接分為左外連接、右外連接和完全連接。交叉連接:當(dāng)對兩個表使用交叉連接查詢時,將返回來自這兩個表的各行的所有可能的數(shù)據(jù)行組合。自連接:表自身的鏈接參見教材p119。2023/2/4MicrosoftSQLServer200557兩個樣例表SELECT*FROMTb_DeptSELECTClassId,ClassName,DeptIdFROMTb_Class2023/2/4MicrosoftSQLServer200558內(nèi)連接SELECTDeptName系部名稱,ClassId班級編碼,ClassName班級名稱FROMTb_DeptINNERJOINTb_ClassONTb_Class.DeptId=Tb_Dept.DeptId等同于:SELECTDeptName系部名稱,ClassId班級編碼,ClassName班級名稱FROMTb_Class,Tb_DeptWHERETb_Dept.DeptId=Tb_Class.DeptId2023/2/4MicrosoftSQLServer200559外連接-左外連接SELECTDeptName系部名稱,ClassId班級編碼,ClassName班級名稱FROM

Tb_DeptLEFTOUTERJOINTb_ClassONTb_Dept.DeptId=Tb_Class.DeptId左邊表中列全顯示2023/2/4MicrosoftSQLServer200560外連接-右外連接SELECTDeptName系部名稱,ClassId班級編碼,ClassName班級名稱FROM

Tb_DeptRIGHTOUTERJOINTb_ClassONTb_Dept.DeptId=Tb_Class.DeptId右邊表中列全顯示2023/2/4MicrosoftSQLServer200561外連接-完全連接SELECTDeptName系部名稱,ClassId班級編碼,ClassName班級名稱FROM

Tb_DeptFULLOUTERJOINTb_ClassONTb_Dept.DeptId=Tb_Class.DeptId2023/2/4MicrosoftSQLServer200562交叉連接SELECTDeptName系部名稱,ClassId班級編碼,ClassName班級名稱FROM

Tb_DeptCROSSJOINTb_Class2023/2/4MicrosoftSQLServer200563交叉連接不使用WHERE子句時,返回的結(jié)果是一個基本表中符合條件的行數(shù)乘以另一個基本表中符合條件的行數(shù)。使用WHERE子句時,返回的結(jié)果是被連接的兩個基本表所有行的笛卡爾積中滿足WHERE條件的所有行的行數(shù)。參見教材p1182023/2/4MicrosoftSQLServer200564聯(lián)合查詢(UNION)

如果有多個不同的查詢結(jié)果,但又希望將這些查詢結(jié)果放在一起顯示,組成一組數(shù)據(jù)。在這種情況下,可以使用UNION子句。使用UNION子句的查詢又稱為聯(lián)合查詢,它可以將兩個和多個查詢結(jié)果集組合成為單個結(jié)果集。語法如下:SELECTselect_listFROMtable_list[WHEREsearch_conditions]UNION[ALL]SELECTselect_listFROMtable_list[WHEREsearch_conditions]

其中,ALL關(guān)鍵字為可選的,如果在UNION子句中使用該關(guān)鍵字,則返回全部數(shù)據(jù)行;如果不使用該關(guān)鍵字,則返回結(jié)果中刪除重復(fù)數(shù)據(jù)行。2023/2/4MicrosoftSQLServer200565聯(lián)合查詢(UNION)SELECT*FROMTb_SpecWHERESpecId<>'08'UNIONSELECTStuId,StuName,SexFROMTb_StudentWHEREClassId<>'S0408011'2023/2/4MicrosoftSQLServer200566章節(jié)綜合練習(xí)

每個學(xué)年結(jié)束,班主任都要對班級學(xué)生成績進行分析,然后初定學(xué)年獎學(xué)金獲得者的人選。讓我們運用數(shù)據(jù)庫查詢的知識幫助04網(wǎng)絡(luò)1班的班主任劉老師完成以下兩個任務(wù):①根據(jù)學(xué)院獎學(xué)金評選規(guī)定,初定獲獎學(xué)金學(xué)生名單;(每位同學(xué)的課程平均成績必須高于75分)②對該班級開設(shè)的各門課程分別進行成績分析。顯示課程編號、學(xué)生學(xué)號和成績的明細并分別匯總每門課程的平均成績。2023/2/4MicrosoftSQLServer200567章節(jié)綜合練習(xí)2023/2/4MicrosoftSQLServer200568任務(wù)一USETeaching_Syste

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論