




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
演示文稿數(shù)據(jù)庫的查詢和視圖當(dāng)前第1頁\共有85頁\編于星期五\4點(diǎn)(優(yōu)選)數(shù)據(jù)庫的查詢和視圖當(dāng)前第2頁\共有85頁\編于星期五\4點(diǎn)4.1數(shù)據(jù)庫的查詢下面介紹SELECT語句,它是T-SQL的核心。語法主體格式如下:SELECT<輸出列> /*指定查詢結(jié)果輸出列*/ [INTO新表] /*指定查詢結(jié)果存入新表*/ [FROM{<表源>}[,...]] /*指定查詢?cè)矗罕砘蛞晥D*/ [WHERE<條件>] /*指定查詢條件*/ [GROUPBY<分組條件>] /*指定查詢結(jié)果分組條件*/ [HAVING<分組統(tǒng)計(jì)條件>] /*指定查詢結(jié)果分組統(tǒng)計(jì)條件*/ [ORDERBY<排序順序>] /*指定查詢結(jié)果排序順序*/當(dāng)前第3頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列1.選擇所有列使用“*”表示選擇一個(gè)表或視圖中的所有列。【例4.1】查詢pxscj數(shù)據(jù)庫中xsb表的所有記錄。T-SQL命令如下:USEpxscjSELECT*FROMxsb當(dāng)前第4頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列執(zhí)行結(jié)果如圖4.1所示。當(dāng)前第5頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列2.選擇一個(gè)表中指定的列可選擇一個(gè)表中的部分列,各列名之間要以逗號(hào)分隔?!纠?.2】查詢xsb表中計(jì)算機(jī)專業(yè)學(xué)生的學(xué)號(hào)、姓名和總學(xué)分。T-SQL命令如下:SELECT學(xué)號(hào),姓名,總學(xué)分 FROMxsb WHERE專業(yè)='計(jì)算機(jī)'當(dāng)前第6頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列3.定義列別名當(dāng)希望查詢結(jié)果中的列使用自己選擇的列標(biāo)題時(shí),可以AS更改列標(biāo)題名,該列標(biāo)題稱為該列的別名?!纠?.3】
查詢xsb表中計(jì)算機(jī)系同學(xué)的學(xué)號(hào)、姓名和總學(xué)分,查詢結(jié)果中各列的標(biāo)題分別指定為number、name和mark。T-SQL命令如下:SELECT學(xué)號(hào)ASnumber,姓名ASname,總學(xué)分ASmark FROMxsb WHERE專業(yè)='計(jì)算機(jī)'執(zhí)行結(jié)果如圖4.2所示。當(dāng)前第7頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列也可以使用“列別名=表達(dá)式”更改列標(biāo)題。例如:SELECTnumber=學(xué)號(hào),name=姓名,mark=總學(xué)分 FROMxsb WHERE專業(yè)='計(jì)算機(jī)'當(dāng)自定義的列標(biāo)題中含有空格時(shí),必須使用引號(hào)將標(biāo)題括起來。例如:SELECT'Studentnumber'=學(xué)號(hào),姓名AS'Studentname',mark=總學(xué)分 FROMxsb WHERE專業(yè)='計(jì)算機(jī)'當(dāng)前第8頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列4.替換查詢結(jié)果中的數(shù)據(jù)在對(duì)表進(jìn)行查詢時(shí),有時(shí)希望對(duì)所查詢的某些列得到的數(shù)據(jù)進(jìn)行變換。要替換查詢結(jié)果中的數(shù)據(jù),則可使用CASE表達(dá)式,格式為:CASE WHEN條件1THEN表達(dá)式1 WHEN條件2THEN表達(dá)式2…… ELSE表達(dá)式END當(dāng)前第9頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列【例4.4】
查詢xsb表中計(jì)算機(jī)系各同學(xué)的學(xué)號(hào)、姓名和總學(xué)分,對(duì)其總學(xué)分按以下規(guī)則進(jìn)行替換,列標(biāo)題更改為“等級(jí)”。若總學(xué)分為空值,則替換為“尚未選課”;若總學(xué)分小于50,則替換為“不及格”;若總學(xué)分在50與52之間,則替換為“合格”;若總學(xué)分大于52,則替換為“優(yōu)秀”。T-SQL命令如下:SELECT學(xué)號(hào),姓名,等級(jí)= CASE WHEN總學(xué)分ISNULLTHEN'尚未選課' WHEN總學(xué)分<50THEN'不及格' WHEN總學(xué)分>=50and總學(xué)分<=52THEN'合格' ELSE'優(yōu)秀' END FROMxsb WHERE專業(yè)='計(jì)算機(jī)'當(dāng)前第10頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列執(zhí)行結(jié)果如圖4.3所示。當(dāng)前第11頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列5.計(jì)算列值使用SELECT對(duì)列進(jìn)行查詢時(shí),在結(jié)果中除了輸出列值,也可以輸出表達(dá)式值。格式為:SELECT表達(dá)式[,表達(dá)式]【例4.5】查詢通信工程專業(yè)學(xué)生的年齡。T-SQL命令如下,執(zhí)行結(jié)果如圖4.4所示。SELECT學(xué)號(hào),姓名,出生時(shí)間,year(getdate())-year(出生時(shí)間)AS年齡
FROMxsb WHERE專業(yè)='通信工程'計(jì)算列值使用算術(shù)運(yùn)算符:+(加)、(減)、*(乘)、/(除)和%(取余),其中,算術(shù)運(yùn)算符(+、、*、/)可以用于任何數(shù)字類型的列,包括int、smallint、tinyint、decimal、numeric、float、real、money和smallmoney;%可以用于上述除money和smallmoney以外的數(shù)字類型。當(dāng)前第12頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列圖4.4執(zhí)行結(jié)果當(dāng)前第13頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列6.消除結(jié)果集中的重復(fù)行對(duì)表只選擇其某些列時(shí),可能會(huì)出現(xiàn)重復(fù)行。可以使用DISTINCT關(guān)鍵字消除結(jié)果集中的重復(fù)行,格式為:SELECTDISTINCT|ALL列名[,列名…]【例4.6】
對(duì)pxscj數(shù)據(jù)庫的xsb表只選擇專業(yè),消除結(jié)果集中的重復(fù)行。代碼如下,執(zhí)行結(jié)果如圖4.5所示。SELECTDISTINCT專業(yè)FROMxsb與DISTINCT相反,當(dāng)使用關(guān)鍵字ALL(默認(rèn)值)時(shí),將保留結(jié)果集的所有行。當(dāng)前第14頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列7.限制結(jié)果集返回行數(shù)如果查詢結(jié)果集的行數(shù)非常多,那么可以使用TOP選項(xiàng)限制其返回的行數(shù)。格式為:[TOP表達(dá)式[PERCENT][WITHTIES]]其中,“表達(dá)式”可以是指定數(shù)目或百分比數(shù)目的行。若帶PERCENT關(guān)鍵字,則以表達(dá)式值作為返回結(jié)果集百分?jǐn)?shù)。【例4.7】對(duì)pxscj數(shù)據(jù)庫的xsb表選擇姓名、專業(yè)和總學(xué)分,返回結(jié)果集的前6行。T-SQL命令如下:SELECTTOP6姓名,專業(yè),總學(xué)分 FROMxsb當(dāng)前第15頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列8.聚合函數(shù)聚合函數(shù)常常用于對(duì)一組值進(jìn)行計(jì)算,然后返回單個(gè)值。通常與GROUPBY子句一起使用。如果一個(gè)SELECT語句中有一個(gè)GROUPBY子句,則這個(gè)聚合函數(shù)對(duì)所有列起作用;如果沒有,則SELECT語句只產(chǎn)生一行作為結(jié)果。SQLServer所提供的聚合函數(shù)列于表4.1中。函
數(shù)
名說
明AVG求組中值的平均值BINARY_CHECKSUM返回對(duì)表中的行或表達(dá)式列表計(jì)算的二進(jìn)制校驗(yàn)值,可用于檢測(cè)表中行的更改CHECKSUM返回在表的行上或在表達(dá)式列表上計(jì)算的校驗(yàn)值,用于生成哈希索引CHECKSUM_AGG返回組中值的校驗(yàn)值COUNT求組中項(xiàng)數(shù),返回int類型整數(shù)COUNT_BIG求組中項(xiàng)數(shù),返回bigint類型整數(shù)GROUPING產(chǎn)生一個(gè)附加的列GROUPING_ID為聚合列列表中的每一行創(chuàng)建一個(gè)值以標(biāo)識(shí)聚合級(jí)別MAX求最大值MIN求最小值SUM返回表達(dá)式中所有值的和STDEV返回給定表達(dá)式中所有值的統(tǒng)計(jì)標(biāo)準(zhǔn)偏差STDEVP返回給定表達(dá)式中所有值的填充統(tǒng)計(jì)標(biāo)準(zhǔn)偏差VAR返回給定表達(dá)式中所有值的統(tǒng)計(jì)方差VARP返回給定表達(dá)式中所有值的填充的統(tǒng)計(jì)方差當(dāng)前第16頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列(1)SUM和AVG。SUM和AVG分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值,格式為:SUM/AVG([ALL|DISTINCT]表達(dá)式)其中,“表達(dá)式”可以是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型只能是int、smallint、tinyint、bigint、decimal、numeric、float、real、money和smallmoney。【例4.8】求所有課程的總學(xué)分和選修101課程的學(xué)生的平均成績(jī)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.6所示。SELECTSUM(學(xué)分)AS'總學(xué)分' FROMkcbSELECTAVG(成績(jī))AS'計(jì)算機(jī)基礎(chǔ)平均成績(jī)' FROMcjb WHERE課程號(hào)='101'當(dāng)前第17頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列圖4.6執(zhí)行結(jié)果
當(dāng)前第18頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列(2)MAX和MIN。MAX和MIN分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值,語法格式為:MAX/MIN([ALL|DISTINCT]表達(dá)式)其中,“表達(dá)式”可以是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是數(shù)字、字符和時(shí)間日期類型?!纠?.9】求選修101課程的學(xué)生的最高分和最低分。T-SQL命令如下,執(zhí)行結(jié)果如圖4.7所示。SELECTMAX(成績(jī))AS'計(jì)算機(jī)基礎(chǔ)最高分',MIN(成績(jī))AS'計(jì)算機(jī)基礎(chǔ)最低分' FROMcjb WHERE課程號(hào)='101'當(dāng)前第19頁\共有85頁\編于星期五\4點(diǎn)4.1.1選擇查詢結(jié)果輸出列(3)COUNT。COUNT用于統(tǒng)計(jì)組中滿足條件的行數(shù)或總行數(shù),格式為:COUNT({[ALL|DISTINCT]表達(dá)式}|*)其中,“表達(dá)式”的數(shù)據(jù)類型是除text、image或ntext之外的任何類型?!纠?.10】求學(xué)生的總數(shù)、專業(yè)個(gè)數(shù)和總學(xué)分在50分以上的人數(shù)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.8所示。SELECTCOUNT(*)AS'學(xué)生總數(shù)',COUNT(DISTINCT專業(yè))AS'專業(yè)個(gè)數(shù)' FROMxsb;GOSELECTCOUNT(總學(xué)分)AS'總學(xué)分>50分人數(shù)' FROMxsb WHERE總學(xué)分>50;GO當(dāng)前第20頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句1.表達(dá)式比較比較運(yùn)算符用于比較兩個(gè)表達(dá)式值,共有9個(gè),分別是=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)、!=(不等于)、!<(不小于)、!>(不大于)。比較運(yùn)算的格式為:表達(dá)式1{比較運(yùn)算符}表達(dá)式2其中,“表達(dá)式”是除text、ntext和image以外類型的表達(dá)式?!纠?.11】查詢xsb表中通信工程專業(yè)總學(xué)分大于等于42的同學(xué)的情況。T-SQL命令如下:SELECT* FROMxsb WHERE專業(yè)='通信工程'AND總學(xué)分>=42當(dāng)前第21頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句2.模式匹配LIKE謂詞用于指出字符串是否與指定的字符串相匹配,返回邏輯值TRUE或FALSE。格式為:表達(dá)式[NOT]LIKE模式串[ESCAPE轉(zhuǎn)義符]說明:(1)表達(dá)式:一般為字符串表達(dá)式,在查詢語句中可以是列名。(2)模式串:可以使用通配符,表4.2列出了LIKE謂詞可以使用的通配符及其說明。(3)轉(zhuǎn)義符:應(yīng)為有效的SQLServer字符,沒有默認(rèn)值,且必須為單個(gè)字符。當(dāng)模式串中含有與通配符相同的字符時(shí),應(yīng)通過該字符前的轉(zhuǎn)義符指明其為模式串中的一個(gè)匹配字符。使用ESCAPE可指定轉(zhuǎn)義符。(4)NOTLIKE:使用NOTLIKE與LIKE的作用相反。通配符說明%代表倒數(shù)_(下畫線)代表單個(gè)字符[]指定范圍(如[a-f]、[0-9])或集合(如[abcdef])中的任何單個(gè)字符[^]指定不屬于范圍(如
[^a-f]、[^0-9])或集合(如[^abcdef])的任何單個(gè)字符當(dāng)前第22頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句【例4.12】查詢xsb表中姓“王”且單名的學(xué)生情況。T-SQL命令如下,執(zhí)行結(jié)果如圖4.9所示。SELECT* FROMxsb WHERE姓名LIKE'王_'當(dāng)前第23頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句【例4.13】查詢xsb表中學(xué)號(hào)倒數(shù)第5個(gè)數(shù)字為9,且倒數(shù)第1個(gè)數(shù)在1~5之間的學(xué)生學(xué)號(hào)、姓名及專業(yè)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.10所示。SELECT學(xué)號(hào),姓名,專業(yè) FROMxsb WHERE學(xué)號(hào)LIKE'%9___[1-5]'當(dāng)前第24頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句【例4.13】查詢xsb表姓名中倒數(shù)第2個(gè)字為’玉’的學(xué)生學(xué)號(hào)、姓名及專業(yè)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.10所示。SELECT學(xué)號(hào),姓名,專業(yè) FROMxsb WHERE學(xué)號(hào)LIKE‘%玉_’當(dāng)前第25頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句3.范圍比較(1)當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用BETWEEN關(guān)鍵字。BETWEEN關(guān)鍵字指出查詢范圍,格式為:表達(dá)式[NOT]BETWEEN表達(dá)式1AND表達(dá)式2當(dāng)不使用NOT時(shí),若“表達(dá)式”的值在“表達(dá)式1”與“表達(dá)式2”之間(包括這兩個(gè)值),則返回TRUE,否則返回FALSE;當(dāng)使用NOT時(shí),返回值剛好相反?!纠?.14】查詢xsb表中不在1995年出生的學(xué)生情況。T-SQL命令如下,執(zhí)行結(jié)果如圖4.11所示。SELECT學(xué)號(hào),姓名,專業(yè),出生時(shí)間 FROMxsb WHERE出生時(shí)間NOTBETWEEN'1995-1-1'and'1995-12-31'也可使用下列命令:SELECT學(xué)號(hào),姓名,專業(yè),出生時(shí)間 FROMxsb WHEREWHEREyear(出生時(shí)間)!=1995當(dāng)前第26頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句圖4.11執(zhí)行結(jié)果當(dāng)前第27頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句(2)使用IN關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)與值表中的任一個(gè)匹配時(shí),即返回TRUE,否則返回FALSE。格式為:表達(dá)式IN(表達(dá)式[,…])【例4.15】
查詢xsb表中專業(yè)為“軟件工程”或“通信工程”學(xué)生情況。T-SQL命令如下:SELECT* FROMxsb WHERE專業(yè)IN('軟件工程','通信工程')下列T-SQL命令等價(jià):SELECT* FROMxsb WHERE專業(yè)='計(jì)算機(jī)'OR專業(yè)='通信工程'當(dāng)前第28頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句4.空值比較當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值時(shí),使用ISNULL關(guān)鍵字,格式為:表達(dá)式IS[NOT]NULL當(dāng)不使用NOT時(shí),若表達(dá)式的值為空值,則返回TRUE,否則返回FALSE;當(dāng)使用NOT時(shí),結(jié)果剛好相反?!纠?.16】查詢總學(xué)分尚不定的學(xué)生情況。SELECT* FROMxsb WHERE備注ISNULL當(dāng)前第29頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句5.子查詢1)IN子查詢IN子查詢用于進(jìn)行一個(gè)給定值是否在子查詢結(jié)果集中的判斷,格式為:表達(dá)式[NOT]IN(子查詢)當(dāng)表達(dá)式與子查詢的結(jié)果表中的某個(gè)值相等時(shí),IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反?!纠?.17】查詢選修了課程號(hào)為206的課程的學(xué)生情況。T-SQL命令如下:SELECT* FROMxsb WHERE學(xué)號(hào)IN(SELECT學(xué)號(hào)FROMcjbWHERE課程號(hào)='206')本例中,先執(zhí)行子查詢:SELECT學(xué)號(hào)FROMcjbWHERE課程名='206'當(dāng)前第30頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句【例4.18】查詢未選修離散數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。T-SQL命令如下:SELECT學(xué)號(hào),姓名 FROMxsb WHERE學(xué)號(hào)NOTIN (SELECT學(xué)號(hào)
FROMcjbWHERE課程號(hào)
IN(SELECT課程號(hào)
FROMkcbWHERE課程名='離散數(shù)學(xué)'))當(dāng)前第31頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句2)比較子查詢這種子查詢可以認(rèn)為是IN子查詢的擴(kuò)展,它使表達(dá)式的值與子查詢的結(jié)果進(jìn)行比較運(yùn)算,格式為:表達(dá)式{比較運(yùn)算符}{ALL|SOME|ANY}(子查詢)其中,ALL、SOME和ANY說明對(duì)比較運(yùn)算的限制。【例4.19】查詢選修了離散數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。T-SQL命令如下:SELECT學(xué)號(hào) FROMcjb WHERE課程號(hào)= ( SELECT課程號(hào) FROMkcb WHERE課程名='離散數(shù)學(xué)' );當(dāng)前第32頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句【例4.20】查詢比所有計(jì)算機(jī)系的學(xué)生年齡都大的學(xué)生。T-SQL命令如下:SELECT* FROMxsb WHERE 出生時(shí)間<ALL ( SELECT出生時(shí)間 FROMxsb WHERE專業(yè)='計(jì)算機(jī)' )【例4.21】查詢206課程號(hào)成績(jī)不低于101課程號(hào)最低成績(jī)的學(xué)生學(xué)號(hào)。T-SQL命令如下:SELECT學(xué)號(hào)
FROMcjb WHERE 課程號(hào)='206'AND成績(jī)!<ANY ( SELECT成績(jī) FROMcjb WHERE課程號(hào)='101' )當(dāng)前第33頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句3)EXISTS子查詢EXISTS謂詞用于測(cè)試子查詢的結(jié)果是否為空表,若子查詢的結(jié)果集不為空,則EXISTS返回TRUE,否則返回FALSE。EXISTS還可與NOT結(jié)合使用,即NOTEXISTS,其返回值與EXISTS剛好相反。格式為:[NOT]EXISTS(子查詢)【例4.22】查詢選修206課程的學(xué)生姓名。T-SQL命令如下:SELECT姓名 FROMxsb WHERE EXISTS ( SELECT* FROMcjb WHERE學(xué)號(hào)=xsb.學(xué)號(hào)AND課程號(hào)='206' )當(dāng)前第34頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句【例4.23】查詢選修了全部課程的同學(xué)的姓名。SELECT姓名 FROMxsb WHERENOTEXISTS ( SELECT* FROMkcb WHERENOTEXISTS ( SELECT* FROMcjb WHERE學(xué)號(hào)=xsb.學(xué)號(hào)AND課程號(hào)=kcb.課程號(hào) ) )當(dāng)前第35頁\共有85頁\編于星期五\4點(diǎn)4.1.2選擇查詢條件:WHERE子句另外,子查詢還可以用在SELECT語句的其他子句中,如FROM子句。SELECT關(guān)鍵字后面也可以定義子查詢?!纠?.24】從xsb表中查詢所有女學(xué)生的姓名、學(xué)號(hào)及其與“191301”號(hào)學(xué)生的年齡差距。T-SQL命令如下,執(zhí)行結(jié)果如圖4.12所示。SELECT學(xué)號(hào),姓名,YEAR(出生時(shí)間)- YEAR((SELECT出生時(shí)間 FROMxsb WHERE學(xué)號(hào)='191301' ) )AS年齡差距 FROMxsb WHERE性別=0當(dāng)前第36頁\共有85頁\編于星期五\4點(diǎn)4.1.3指定查詢對(duì)象:FROM子句1.表或視圖名SELECT語句可查詢的表或視圖,表和視圖可以是一個(gè)或多個(gè),有關(guān)視圖的內(nèi)容將在下一節(jié)中介紹。【例4.25】查詢“191301”號(hào)學(xué)生的計(jì)算機(jī)基礎(chǔ)課的成績(jī)。T-SQL命令如下:SELECT成績(jī) FROMcjb,kcb WHEREcjb.課程號(hào)=kcb.課程號(hào) AND學(xué)號(hào)='191301' AND課程名='計(jì)算機(jī)基礎(chǔ)'當(dāng)前第37頁\共有85頁\編于星期五\4點(diǎn)4.1.3指定查詢對(duì)象:FROM子句【例4.26】查詢選修了與學(xué)號(hào)為191302的同學(xué)所選修的全部課程的同學(xué)的學(xué)號(hào)。分析:本例即要查找這樣的學(xué)號(hào)y,對(duì)所有的課程號(hào)x,若191302號(hào)同學(xué)選修了該課,那么y也選修了該課。T-SQL命令如下:SELECTDISTINCT學(xué)號(hào) FROMcjbASCJ1 WHERENOTEXISTS ( SELECT* FROMcjbASCJ2 WHERECJ2.學(xué)號(hào)='191302'ANDNOTEXISTS ( SELECT* FROMcjbASCJ3 WHERECJ3.學(xué)號(hào)=CJ1.學(xué)號(hào)ANDCJ3.課程號(hào)=CJ2.課程號(hào) ) )當(dāng)前第38頁\共有85頁\編于星期五\4點(diǎn)4.1.3指定查詢對(duì)象:FROM子句2.導(dǎo)出表導(dǎo)出表表示由子查詢中SELECT語句的執(zhí)行而返回的表,但必須使用AS關(guān)鍵字為子查詢產(chǎn)生的中間表定義一個(gè)別名?!纠?.27】從xsb表中查詢總學(xué)分大于50的男同學(xué)的姓名和學(xué)號(hào)。T-SQL命令如下:SELECT姓名,學(xué)號(hào),總學(xué)分FROM(SELECT姓名,學(xué)號(hào),性別,總學(xué)分FROMxsb WHERE總學(xué)分>=50 )ASstudentWHERE性別=1執(zhí)行結(jié)果如圖4.13所示。當(dāng)前第39頁\共有85頁\編于星期五\4點(diǎn)4.1.3指定查詢對(duì)象:FROM子句【例4.28】在xsb表中查詢?cè)?995年1月1日以前出生的學(xué)生的姓名和專業(yè)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.14所示。SELECT,student.speciality FROM(SELECT*FROMxsbWHERE出生時(shí)間<'19950101') ASstudent(num,name,sex,birthday,speciality,score,mem)當(dāng)前第40頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接1.連接謂詞在SELECT語句的WHERE子句中使用比較運(yùn)算符給出連接條件對(duì)表進(jìn)行連接,稱為連接謂詞表示形式?!纠?.29】查詢pxscj數(shù)據(jù)庫每個(gè)學(xué)生的情況以及選修的課程情況。USEpxscjGOSELECTxsb.*,cjb.* FROMxsb,cjb WHERExsb.學(xué)號(hào)=cjb.學(xué)號(hào)當(dāng)前第41頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接(1)自然連接。它在目標(biāo)列中去除相同的字段名。【例4.30】自然連接查詢。T-SQL命令如下:SELECTxsb.*,cjb.課程號(hào),cjb.成績(jī) FROMxsb,cjb WHERExsb.學(xué)號(hào)=cjb.學(xué)號(hào)本例所得的結(jié)果表包含xsb的使用字段、課程號(hào)、成績(jī)。若選擇的字段名在各個(gè)表中是唯一的,則可以省略字段名前的表名。如本例的SELECT語句也可寫為:SELECTxsb.*,課程號(hào),成績(jī) FROMxsb,cjb WHERExsb.學(xué)號(hào)=cjb.學(xué)號(hào)當(dāng)前第42頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接【例4.31】
查詢選修了206課程且成績(jī)?cè)?0分以上的學(xué)生姓名及成績(jī)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.15所示。SELECT姓名,成績(jī) FROMxsb,cjb WHERExsb.學(xué)號(hào)=cjb.學(xué)號(hào)AND課程號(hào)='206'AND成績(jī)>=80當(dāng)前第43頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接(2)多表連接。有時(shí),用戶所需要的字段來自兩個(gè)以上的表,那么就要對(duì)兩個(gè)以上的表進(jìn)行連接,稱之為多表連接?!纠?.32】
查詢選修了“計(jì)算機(jī)基礎(chǔ)”課程且成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)、姓名、課程名及成績(jī)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.16所示。SELECTxsb.學(xué)號(hào),姓名,課程名,成績(jī) FROMxsb,kcb,cjb WHERExsb.學(xué)號(hào)=cjb.學(xué)號(hào) ANDkcb.課程號(hào)=cjb.課程號(hào) AND課程名='計(jì)算機(jī)基礎(chǔ)' AND成績(jī)>=80當(dāng)前第44頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接2.以JOIN關(guān)鍵字指定的連接T-SQL擴(kuò)展了以JOIN關(guān)鍵字指定連接的表示方式,使表的連接運(yùn)算能力有所增強(qiáng)。FROM子句的<連接表>表示將多個(gè)表連接起來。格式如下:<連接表>::={ <表源><類型><表源>ON<查詢條件> |<表源>CROSSJOIN<表源> |左表源{CROSS|OUTER}APPLY右表源 |[()<連接表>[]]}當(dāng)前第45頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接說明:(1)<表源>:準(zhǔn)備要連接的表。(2)<類型>:表示連接類型。格式為:<類型>::= [{INNER|{{LEFT|RIGHT|FULL}[OUTER]}}[<連接提示>]]
JOIN其中,INNER表示內(nèi)連接,OUTER表示外連接。(3)ON:用于指定連接條件,<查詢條件>為連接的條件。(4)APPLY運(yùn)算符:使用APPLY運(yùn)算符可以為實(shí)現(xiàn)查詢操作的外部表表達(dá)式返回的每個(gè)行調(diào)用表值函數(shù)。(5)CROSSJOIN:表示交叉連接。當(dāng)前第46頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接因此,以JOIN關(guān)鍵字指定的連接有三種類型:內(nèi)連接、外連接、交叉連接。①內(nèi)連接。指定了INNER關(guān)鍵字的連接是內(nèi)連接,內(nèi)連接按照ON所指定的連接條件合并兩個(gè)表,返回滿足條件的行?!纠?.33】
查詢每個(gè)學(xué)生的情況以及選修的課程情況。T-SQL命令如下:SELECT* FROMxsbINNERJOINcjb ONxsb.學(xué)號(hào)=cjb.學(xué)號(hào)執(zhí)行的結(jié)果將包含xsb表和cjb表的所有字段(不去除重復(fù)字段——學(xué)號(hào))?!纠?.34】查詢選修了206課程且成績(jī)?cè)?0分以上的學(xué)生姓名及成績(jī)。T-SQL命令如下:SELECT姓名,成績(jī) FROMxsbJOINcjb ONxsb.學(xué)號(hào)=cjb.學(xué)號(hào)
WHERE課程號(hào)='206'AND成績(jī)>=80當(dāng)前第47頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接【例4.35】查詢選修了“計(jì)算機(jī)基礎(chǔ)”課程且成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)、姓名、課程名及成績(jī)。T-SQL命令如下:SELECTxsb.學(xué)號(hào),姓名,課程名,成績(jī) FROMxsbJOINcjbJOINkcb ONcjb.課程號(hào)=kcb.課程號(hào)
ONxsb.學(xué)號(hào)=cjb.學(xué)號(hào)
WHERE課程名='計(jì)算機(jī)基礎(chǔ)'AND成績(jī)>=80作為一種特例,可以將一個(gè)表與它自身進(jìn)行連接,稱為自連接。【例4.36】
查詢不同課程成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。T-SQL命令如下:SELECTa.學(xué)號(hào),a.課程號(hào),b.課程號(hào),a.成績(jī) FROMcjbaJOINcjbb ONa.成績(jī)=b.成績(jī)ANDa.學(xué)號(hào)=b.學(xué)號(hào)ANDa.課程號(hào)!=b.課程號(hào)執(zhí)行結(jié)果如圖4.17所示。當(dāng)前第48頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接②外連接。指定了OUTER關(guān)鍵字的為外連接,外連接的結(jié)果表不但包含滿足連接條件的行,還包括相應(yīng)表中的所有行。外連接包括以下三種:LEFTOUTERJOIN(左外連接):結(jié)果表中除了包括滿足連接條件的行外,還包括左表的所有行。RIGHTOUTERJOIN(右外連接):結(jié)果表中除了包括滿足連接條件的行外,還包括右表的所有行。FULLOUTERJOIN(完全外連接):結(jié)果表中除了包括滿足連接條件的行外,還包括兩個(gè)表的所有行。當(dāng)前第49頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接【例4.37】
查詢所有學(xué)生情況,以及他們選修的課程號(hào)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.18所示。SELECTxsb.*,課程號(hào) FROMxsbLEFTOUTERJOINcjb ONxsb.學(xué)號(hào)=cjb.學(xué)號(hào)當(dāng)前第50頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接【例4.38】
查詢被選修了的課程的選修情況和所有開設(shè)的課程名。SELECTcjb.*,課程名 FROMcjbRIGHTJOINkcb ONcjb.課程號(hào)=kcb.課程號(hào)當(dāng)前第51頁\共有85頁\編于星期五\4點(diǎn)4.1.4連接③交叉連接。交叉連接實(shí)際上是將兩個(gè)表進(jìn)行笛卡兒積運(yùn)算,結(jié)果表是由第一個(gè)表的每一行與第二個(gè)表的每一行拼接后形成的表,因此結(jié)果表的行數(shù)等于兩個(gè)表的行數(shù)之積?!纠?.39】列出學(xué)生所有可能的選課情況。T-SQL命令如下,執(zhí)行結(jié)果如圖4.19所示。SELECT學(xué)號(hào),姓名,課程號(hào),課程名 FROMxsbCROSSJOINkcb當(dāng)前第52頁\共有85頁\編于星期五\4點(diǎn)4.1.5指定查詢結(jié)果分組方法:GROUPBY子句這里介紹ISO標(biāo)準(zhǔn)的GROUPBY子句。語法格式如下:GROUPBY{ <列表達(dá)式> |ROLLUP(<復(fù)合元素列表>) |CUBE(<復(fù)合元素列表>) |GROUPINGSETS(<分組集合項(xiàng)列表>)}當(dāng)前第53頁\共有85頁\編于星期五\4點(diǎn)4.1.5指定查詢結(jié)果分組方法:GROUPBY子句【例4.40】
在pxscj數(shù)據(jù)庫xsb表中分別用GROUPBYROLLUP、GROUPBYCUBE和GROUPBYGROUPINGSETS對(duì)(專業(yè),性別)產(chǎn)生一個(gè)結(jié)果集。(1)采用GROUPBYROLLUP。SELECT專業(yè),性別,COUNT(*)AS'人數(shù)' FROMxsb GROUPBYROLLUP(專業(yè),性別)(2)采用GROUPBYCUBE。SELECT專業(yè),性別,COUNT(*)AS'人數(shù)' FROMxsb GROUPBYCUBE(專業(yè),性別)當(dāng)前第54頁\共有85頁\編于星期五\4點(diǎn)4.1.5指定查詢結(jié)果分組方法:GROUPBY子句(3)采用GROUPBYGROUPINGSETS。執(zhí)行結(jié)果如圖4.20所示。SELECT專業(yè),性別,COUNT(*)AS'人數(shù)' FROMxsb GROUPBYGROUPINGSETS(專業(yè),性別)
(a)(b)(c)
圖4.20執(zhí)行結(jié)果
當(dāng)前第55頁\共有85頁\編于星期五\4點(diǎn)4.1.6指定查詢結(jié)果分組后篩選條件:HAVING子句使用GROUPBY子句和聚合函數(shù)對(duì)數(shù)據(jù)進(jìn)行分組后,還可以使用HAVING子句對(duì)分組數(shù)據(jù)做進(jìn)一步的篩選。格式為:[HAVING<查詢條件>]其中,<查詢條件>與WHERE子句的查詢條件類似,不過HAVING子句中可以使用聚合函數(shù),而WHERE子句中不可以?!纠?.41】
查詢平均成績(jī)?cè)?5分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.21所示。SELECT學(xué)號(hào),AVG(成績(jī))AS'平均成績(jī)' FROMcjb GROUPBY學(xué)號(hào) HAVINGAVG(成績(jī))>=85當(dāng)前第56頁\共有85頁\編于星期五\4點(diǎn)4.1.6指定查詢結(jié)果分組后篩選條件:HAVING子句【例4.42】
查詢選修課程超過2門且成績(jī)都在80分以上的學(xué)生的學(xué)號(hào)。T-SQL命令如下:SELECT學(xué)號(hào)
FROMcjb WHERE成績(jī)>=80 GROUPBY學(xué)號(hào)
HAVINGCOUNT(*)>2當(dāng)前第57頁\共有85頁\編于星期五\4點(diǎn)4.1.6指定查詢結(jié)果分組后篩選條件:HAVING子句【例4.43】
查詢通信工程專業(yè)平均成績(jī)?cè)?5分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。T-SQL命令如下,執(zhí)行結(jié)果如圖4.22所示。SELECT學(xué)號(hào),AVG(成績(jī))AS'平均成績(jī)' FROMcjb WHERE學(xué)號(hào)IN ( SELECT學(xué)號(hào) FROMxsb WHERE專業(yè)='通信工程' ) GROUPBY學(xué)號(hào)
HAVINGAVG(成績(jī))>=85當(dāng)前第58頁\共有85頁\編于星期五\4點(diǎn)4.1.7指定查詢結(jié)果排序順序:ORDERBY子句在應(yīng)用中經(jīng)常要對(duì)查詢的結(jié)果排序輸出,如將學(xué)生成績(jī)由高到低排序。在SELECT語句中,使用ORDERBY子句對(duì)查詢結(jié)果進(jìn)行排序。格式為:[ORDERBY{ 排序表達(dá)式 [COLLATE排序名] [ASC|DESC]}]當(dāng)前第59頁\共有85頁\編于星期五\4點(diǎn)4.1.7指定查詢結(jié)果排序順序:ORDERBY子句【例4.44】
將通信工程專業(yè)的學(xué)生按出生時(shí)間先后順序排序。T-SQL命令如下,執(zhí)行結(jié)果如圖4.23所示。SELECT* FROMxsb WHERE專業(yè)='通信工程' ORDERBY出生時(shí)間當(dāng)前第60頁\共有85頁\編于星期五\4點(diǎn)4.1.7指定查詢結(jié)果排序順序:ORDERBY子句【例4.45】
將計(jì)算機(jī)專業(yè)學(xué)生的“計(jì)算機(jī)基礎(chǔ)”課程成績(jī)按降序排列。T-SQL命令如下,執(zhí)行結(jié)果如圖4.24所示。SELECT姓名,課程名,成績(jī) FROMxsb,kcb,cjb WHERExsb.學(xué)號(hào)=cjb.學(xué)號(hào)
ANDcjb.課程號(hào)=kcb.課程號(hào)
AND課程名='計(jì)算機(jī)基礎(chǔ)' AND專業(yè)='計(jì)算機(jī)'當(dāng)前第61頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法1.INTO使用INTO子句可以將SELECT查詢所得的結(jié)果保存到一個(gè)新建的表中。INTO子句的格式為:[INTO新表]其中,“新表”是要?jiǎng)?chuàng)建的新表名。【例4.46】
由xsb表創(chuàng)建“計(jì)算機(jī)學(xué)生”表,包括學(xué)號(hào)和姓名。T-SQL命令如下:SELECT學(xué)號(hào),姓名 INTO計(jì)算機(jī)學(xué)生 FROMxsb WHERE專業(yè)='計(jì)算機(jī)'當(dāng)前第62頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法同樣再創(chuàng)建一個(gè)“通信工程學(xué)生”表。完成后,刷新表后的對(duì)象資源管理器如圖4.25所示。當(dāng)前第63頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法2.UNION使用UNION子句可以將兩個(gè)或多個(gè)SELECT查詢的結(jié)果合并成一個(gè)結(jié)果集,其格式為:{<查詢規(guī)范>|(<查詢表達(dá)式>)} UNION[ALL]<查詢規(guī)范>|(<查詢表達(dá)式>) [UNION[ALL]<查詢規(guī)范>|(<查詢表達(dá)式>)[…]]其中,<查詢規(guī)范>和<查詢表達(dá)式>都是SELECT查詢語句。使用UNION組合兩個(gè)查詢的結(jié)果集的基本規(guī)則是:(1)所有查詢中的列數(shù)和列的順序必須相同。(2)數(shù)據(jù)類型必須兼容。當(dāng)前第64頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法【例4.47】
在“計(jì)算機(jī)學(xué)生”表和“通信工程學(xué)生”表中查詢學(xué)號(hào)為191301和學(xué)號(hào)為221301的兩位同學(xué)的姓名。T-SQL命令如下:SELECT* FROM計(jì)算機(jī)學(xué)生 WHERE學(xué)號(hào)='191301'UNIONALLSELECT* FROM通信工程學(xué)生 WHERE學(xué)號(hào)='221301'執(zhí)行結(jié)果如圖4.26所示。當(dāng)前第65頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法3.EXCEPT和INTERSECTEXCEPT和INTERSECT用于比較兩個(gè)查詢的結(jié)果,返回非重復(fù)值。語法格式如下:{<查詢規(guī)范>|(<查詢表達(dá)式>)}{EXCEPT|INTERSECT}{<查詢規(guī)范>|(<查詢表達(dá)式>)}其中,<查詢規(guī)范>和<查詢表達(dá)式>都是SELECT查詢語句。【例4.48】查詢計(jì)算機(jī)專業(yè)女學(xué)生的信息。T-SQL命令如下:SELECT*FROMxsbWHERE專業(yè)='計(jì)算機(jī)'EXCEPTSELECT*FROMxsbWHERE性別=1執(zhí)行結(jié)果如圖4.27所示。當(dāng)前第66頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法【例4.49】
查詢總學(xué)分大于42的男學(xué)生信息。T-SQL命令如下:SELECT*FROMxsbWHERE總學(xué)分>42INTERSECTSELECT*FROMxsbWHERE性別=1當(dāng)前第67頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法4.CTE在SELECT語句的最前面可以使用一條WITH子句來指定臨時(shí)結(jié)果集,語法格式如下:[WITH<公用表表達(dá)式>[,...]]SELECT......其中:<公用表表達(dá)式>::=
表達(dá)式名
[(列名[,...])] AS
(CTE查詢定義)當(dāng)前第68頁\共有85頁\編于星期五\4點(diǎn)4.1.8SELECT語句的其他語法【例4.50】
使用CTE從cjb表中查詢選了101課程的學(xué)生學(xué)號(hào)、成績(jī),并定義新的列名為number、point。再使用SELECT語句從CTE和xsb中查詢姓名為“王林”的學(xué)生學(xué)號(hào)和成績(jī)情況。T-SQL命令如下,執(zhí)行結(jié)果如圖4.28所示。USEpxscjGOWITHcte_stu(number,point)AS(SELECT學(xué)號(hào),成績(jī)FROMcjbWHERE課程號(hào)='101')SELECTnumber,point FROMcte_stu,xsb WHERExsb.姓名='王林' ANDxsb.學(xué)號(hào)=cte_stu.number當(dāng)前第69頁\共有85頁\編于星期五\4點(diǎn)4.2視
圖4.2.1視圖概念視圖一經(jīng)定義以后,就可以像表一樣被查詢、修改、刪除和更新。使用視圖有下列優(yōu)點(diǎn):(1)為用戶集中數(shù)據(jù),簡(jiǎn)化用戶的數(shù)據(jù)查詢和處理。有時(shí),用戶所需要的數(shù)據(jù)分散在多個(gè)表中,定義視圖可將它們集中在一起,從而方便用戶進(jìn)行數(shù)據(jù)查詢和處理。(2)屏蔽數(shù)據(jù)庫的復(fù)雜性。用戶不必了解復(fù)雜的數(shù)據(jù)庫中的表結(jié)構(gòu),并且數(shù)據(jù)庫表的更改也不影響用戶對(duì)數(shù)據(jù)庫的使用。(3)簡(jiǎn)化用戶權(quán)限的管理。只需授予用戶使用視圖的權(quán)限,而不必指定用戶只能使用表的特定列,也增加了安全性。(4)便于數(shù)據(jù)共享。各用戶不必都定義和存儲(chǔ)自己所需的數(shù)據(jù),而可共享數(shù)據(jù)庫的數(shù)據(jù),這樣,同樣的數(shù)據(jù)只需存儲(chǔ)一次。(5)可以重新組織數(shù)據(jù)以便輸出到其他應(yīng)用程序中。當(dāng)前第70頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖1.通過界面創(chuàng)建視圖下面以在一個(gè)數(shù)據(jù)庫中創(chuàng)建視圖為例說明在“SSMS”中創(chuàng)建視圖的過程。【例4.51】
在pxscj數(shù)據(jù)庫學(xué)生表(xsb)中創(chuàng)建名為cxs視圖,視圖中僅僅包含計(jì)算機(jī)專業(yè)學(xué)生。1)創(chuàng)建名cxs視圖步驟如下:(1)在“對(duì)象資源管理器”中展開“數(shù)據(jù)庫”→“pxscj”,選擇其中的“視圖”項(xiàng),右擊鼠標(biāo),在彈出的快捷菜單上選擇“新建視圖”菜單項(xiàng)。(2)在隨后出現(xiàn)的“添加表”對(duì)話框中,添加視圖所需要關(guān)聯(lián)的對(duì)象。這里在“表”選項(xiàng)卡中選擇“xsb”表,單擊“添加”按鈕,單擊“關(guān)閉”按鈕。當(dāng)前第71頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖(3)在窗口下部“輸出”欄中去除創(chuàng)建的視圖中不所需的字段,在“排序類型”欄中指定列的排序方式,在“篩選器”欄中指定創(chuàng)建視圖的規(guī)則。本例在“專業(yè)”字段的“篩選器”欄中填寫“計(jì)算機(jī)”,如圖4.29所示。(4)完成后,單擊面板上的“保存”按鈕,在“保存視圖”對(duì)話框中輸入視圖名“cxs”,并單擊“確定”按鈕,便完成了視圖的創(chuàng)建。當(dāng)前第72頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖2)顯示cxs視圖刷新pxscj數(shù)據(jù)庫下的視圖,展開“數(shù)據(jù)庫”→“pxscj”→“視圖”,選擇“dbo.cxs”,右擊鼠標(biāo),在彈出的快捷菜單中選擇“設(shè)計(jì)”菜單項(xiàng),可以查看并修改視圖結(jié)構(gòu),選擇“編輯前200行”菜單項(xiàng),將可查看視圖數(shù)據(jù),如圖4.30所示。當(dāng)前第73頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖3)視圖的好處創(chuàng)建視圖可以向最終用戶隱藏復(fù)雜的表連接,簡(jiǎn)化了用戶的SQL程序設(shè)計(jì)。通過在創(chuàng)建視圖時(shí)指定限制條件和指定列來限制用戶對(duì)基本表的訪問。例如,若限定某用戶只能查詢視圖cxs,實(shí)際上就是限制了它只能訪問xsb表的專業(yè)字段值為“計(jì)算機(jī)”的行。當(dāng)前第74頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖2.通過命令創(chuàng)建視圖T-SQL中用于創(chuàng)建視圖的語句是CREATEVIEW語句,其格式為:CREATEVIEW視圖名[WITH<視圖屬性>[,...]] ASSELECT語句[;][WITHCHECKOPTION]1)語句主體主體結(jié)構(gòu)說明如下。(1)架構(gòu)名:數(shù)據(jù)庫架構(gòu)名。(2)列名:視圖中包含的列,可以有多個(gè)列名。若使用與源表或視圖相同的列名,則不必給出列名。(3)WITH<視圖屬性>:指出視圖的屬性。(4)SELECT語句:用來創(chuàng)建視圖的語句,源表可以是基本表,也可以是視圖。(5)WITHCHECKOPTION:指出在視圖上所進(jìn)行的修改都要符合SELECT語句所指定的限制條件,這樣可以確保數(shù)據(jù)修改后,仍可通過視圖看到修改的數(shù)據(jù)。當(dāng)前第75頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖2)<視圖屬性>定義<視圖屬性>定義的具體格式如下:<視圖屬性>::={ [ENCRYPTION] [SCHEMABINDING] [VIEW_METADATA]}(1)ENCRYPTION:在系統(tǒng)表syscomments中存儲(chǔ)CREATEVIEW語句時(shí)進(jìn)行加密。(2)SCHEMABINDING:將視圖與其所依賴的表或視圖結(jié)構(gòu)相關(guān)聯(lián)。(3)VIEW_METADATA:當(dāng)引用視圖的瀏覽模式的元數(shù)據(jù)時(shí),向DBLIB、ODBC或OLEDBAPI返回有關(guān)視圖的元數(shù)據(jù)信息,而不返回基表的元數(shù)據(jù)信息。當(dāng)前第76頁\共有85頁\編于星期五\4點(diǎn)4.2.2創(chuàng)建視圖【例4.52】
創(chuàng)建ccj視圖,包括計(jì)算機(jī)專業(yè)各學(xué)生的學(xué)號(hào)、其選修的課程號(hào)及成績(jī)。要保證對(duì)該視圖的修改都符合專業(yè)為計(jì)算機(jī)的這個(gè)條件。T-SQL命令如下:CREATEVIEWccjWITHENCRYPTION AS SELECTxsb.學(xué)號(hào),課程號(hào),成績(jī) FROMxsb,cjb WHERExsb.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年砌筑工(中級(jí))職業(yè)技能鑒定參考試題(附答案)
- 馬工學(xué)在移動(dòng)互聯(lián)網(wǎng)中的應(yīng)用研究試題及答案
- 二零二四年份10月份裝修合同石膏板接縫開裂預(yù)防措施條款
- 員工試用期個(gè)人總結(jié)
- 2025大連市住宅商品房購買合同(標(biāo)準(zhǔn)版本)
- 2025合同約束下的店面轉(zhuǎn)讓(注意事項(xiàng)、風(fēng)險(xiǎn)、程序、合同)
- 2025混凝土單項(xiàng)工程承包施工合同
- 2025年北海貨運(yùn)考試
- 公積金合同標(biāo)準(zhǔn)文本有些
- 社會(huì)工作倫理教案
- 反訴狀(業(yè)主反訴物業(yè))(供參考)
- 現(xiàn)代外彈道學(xué)閱讀筆記
- 10S505 柔性接口給水管道支墩
- DL∕T 802.1-2023 電力電纜導(dǎo)管技術(shù)條件 第1部分:總則
- 江蘇南通2022年中考地理生物試卷
- 沼氣項(xiàng)目合同范本
- 《教育向美而生-》讀書分享課件
- 熱電聯(lián)產(chǎn)事項(xiàng)可行性研究計(jì)算方法
- 網(wǎng)課智慧樹知道《老年醫(yī)學(xué)概論(浙江大學(xué))》章節(jié)測(cè)試答案
- 【水滸傳中林沖的性格特點(diǎn)探析6700字(論文)】
- DZ∕T 0227-2010 地質(zhì)巖心鉆探規(guī)程(正式版)
評(píng)論
0/150
提交評(píng)論