版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4章
數(shù)據(jù)庫查詢和視圖4.2數(shù)據(jù)庫查詢4.3視圖4.2數(shù)據(jù)庫查詢4.2.1選擇列1.選擇所有列使用“*”表示選擇一個表或視圖中的所有列?!纠?.1】
查詢PXSCJ數(shù)據(jù)庫中XSB表的所有數(shù)據(jù)。USEPXSCJGOSELECT*FROMXSBGO4.2.1選擇列2.選擇一個表中指定的列使用SELECT語句選擇一個表中的某些列,各列名之間要以逗號分隔?!纠?.2】查詢PXSCJ數(shù)據(jù)庫的XSB表中各個同學(xué)的姓名、專業(yè)和總學(xué)分。USEPXSCJGOSELECT姓名,專業(yè),總學(xué)分FROMXSBGO4.2.1選擇列【例4.3】
查詢XSB表中計算機專業(yè)同學(xué)的學(xué)號、姓名和總學(xué)分,查詢XSB表中所有列。SELECT學(xué)號,姓名,總學(xué)分 FROMXSB WHERE專業(yè)
='計算機'GOSELECT* FROMXSB執(zhí)行后在結(jié)果窗口中將分別列出兩個查詢語句的結(jié)果,如圖所示。4.2.1選擇列3.定義列別名【例4.4】
查詢XSB表中計算機系同學(xué)的學(xué)號、姓名和總學(xué)分,結(jié)果中各列的標(biāo)題分別指定為number、name和mark。代碼如下,執(zhí)行結(jié)果如圖所示。USEPXSCJGOSELECT學(xué)號
ASnumber,姓名
ASname,總學(xué)分
ASmark FROMXSB WHERE專業(yè)='計算機'4.2.1選擇列更改查詢結(jié)果中的列標(biāo)題也可以使用column_alias=expression的形式。例如,SELECTnumber=學(xué)號,name=姓名,mark=總學(xué)分 FROMXSB WHERE專業(yè)='計算機'該語句的執(zhí)行結(jié)果與上例的結(jié)果完全相同。當(dāng)自定義的列標(biāo)題中含有空格時,必須使用引號將標(biāo)題括起來。例如,SELECT'Studentnumber'=學(xué)號,姓名
AS'Studentname',mark=總學(xué)分 FROMXSB WHERE專業(yè)='計算機'4.2.1選擇列4.替換查詢結(jié)果中的數(shù)據(jù)要替換查詢結(jié)果中的數(shù)據(jù),則要使用查詢中的CASE表達式,格式為CASE WHEN條件1THEN表達式1 WHEN條件2THEN表達式2…… ELSE表達式END4.2.1選擇列【例4.5】
查詢XSB表中計算機系各同學(xué)的學(xué)號、姓名和總學(xué)分,對其總學(xué)分按以下規(guī)則進行替換:若總學(xué)分為空值,則替換為“尚未選課”;若總學(xué)分小于50,則替換為“不及格”;若總學(xué)分在50與52之間,則替換為“合格”;若總學(xué)分大于52,則替換為“優(yōu)秀”。列標(biāo)題更改為“等級”。代碼如下,執(zhí)行結(jié)果如圖所示。USEPXSCJGOSELECT學(xué)號,姓名,等級= CASE WHEN總學(xué)分
ISNULLTHEN'尚未選課' WHEN總學(xué)分
<50THEN'不及格' WHEN總學(xué)分
>=50and總學(xué)分<=52THEN'合格' ELSE'優(yōu)秀' END FROMXSB WHERE專業(yè)='計算機'GO4.2.1選擇列5.計算列值【例4.6-1】按120分計算成績并顯示學(xué)號為081101的學(xué)生的成績情況。代碼如下,執(zhí)行結(jié)果如圖所示。USEPXSCJGOSELECT學(xué)號,課程號,成績120=成績*1.20 FROMCJB WHERE學(xué)號='081101'【例4.6-2】顯示全體學(xué)生的學(xué)號和年齡。SELECT學(xué)號,YEAR(GETDATE())-YEAR(出生時間)AS年齡FROMXSB4.2.1選擇列6.消除結(jié)果集中的重復(fù)行關(guān)鍵字DISTINCT的含義是,對結(jié)果集中的重復(fù)行只選擇一個,保證行的唯一性?!纠?.7】
對PXSCJ數(shù)據(jù)庫的XSB表只選擇專業(yè)和總學(xué)分,消除結(jié)果集中的重復(fù)行。代碼如下,執(zhí)行結(jié)果如圖所示。USEPXSCJGOSELECTDISTINCT專業(yè),總學(xué)分 FROMXSB4.2.1選擇列7.限制結(jié)果集返回行數(shù)如果SELECT語句返回的結(jié)果集的行數(shù)非常多,那么可以使用TOP選項限制其返回的行數(shù)。【例4.8-1】
對PXSCJ數(shù)據(jù)庫的XSB表選擇姓名、專業(yè)和總學(xué)分,返回結(jié)果集的前6行。SELECTTOP6姓名,專業(yè),總學(xué)分 FROMXSB【例4.8-2】
對PXSCJ數(shù)據(jù)庫的XSB表選擇姓名、專業(yè)和總學(xué)分,返回結(jié)果集的前百分之五十。SELECTTOP50PERCENT姓名,專業(yè),總學(xué)分 FROMXSB4.2.1選擇列8.聚合函數(shù)(1)SUM和AVGSUM和AVG分別用于求表達式中所有值項的總和與平均值【例4.9】
求選修101課程的學(xué)生的平均成績。SELECTAVG(成績)AS'課程101平均成績' FROMCJB WHERE課程號
='101'【例4.10】
求學(xué)號為081101的同學(xué)所學(xué)課程的總成績。SELECTSUM(成績)AS'課程總成績' FROMCJB WHERE學(xué)號
='081101';4.2.1選擇列(2)MAX和MINMAX和MIN分別用于求表達式中所有值項的最大值與最小值,【例4.11】求選修101課程的學(xué)生的最高分和最低分。語句如下,執(zhí)行結(jié)果如圖所示。SELECTMAX(成績)AS'課程101的最高分',MIN(成績)AS'課程101的最低分' FROMCJB WHERE課程號
='101'4.2.1選擇列(3)COUNTCOUNT用于統(tǒng)計組中滿足條件的行數(shù)。(忽略null值)【例4.12】
求學(xué)生的總數(shù)。SELECTCOUNT(*)AS'學(xué)生總數(shù)' FROMXSB【例4.13】
統(tǒng)計備注不為空的學(xué)生數(shù)。SELECTCOUNT(備注)AS'備注不為空的學(xué)生數(shù)' FROMXSB;4.2.1選擇列【例4.14】統(tǒng)計總學(xué)分在50分以上的人數(shù)。SELECTCOUNT(總學(xué)分)AS'總學(xué)分在50分以上的人數(shù)' FROMXSB WHERE總學(xué)分>50;【例4.15】
求選修了課程的學(xué)生總數(shù)。SELECTCOUNT(DISTINCT學(xué)號) FROMCJB4.2.2FROM子句1.表名或視圖名From子句后可以指定一個或多個表名或視圖名作為查詢對象?!纠?.16】查找表KCB中101號課程的開課學(xué)期。SELECT開課學(xué)期 FROMKCB WHERE課程號='101'【例4.17】查找081101號學(xué)生計算機基礎(chǔ)課的成績。SELECT成績 FROMCJB,KCB WHERECJB.課程號=KCB.課程號 AND學(xué)號='081101' AND課程名='計算機基礎(chǔ)'4.2.3WHERE子句1.表達式比較比較運算符用于比較兩個表達式值,共有9個,分別是
=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)、!=(不等于)、!<(不小于)、!>(不大于)?!纠?.20】
查詢PXSCJ數(shù)據(jù)庫XSB表中學(xué)號為081101的同學(xué)的情況。代碼如下,執(zhí)行結(jié)果如圖所示。USEPXSCJGO SELECT姓名,學(xué)號,總學(xué)分FROMXSBWHERE學(xué)號='081101';4.2.3WHERE子句【例4.21】
查詢XSB表中總學(xué)分大于50的同學(xué)的情況。代碼如下,執(zhí)行結(jié)果如圖所示。SELECT姓名,學(xué)號,出生時間,總學(xué)分FROMXSBWHERE總學(xué)分>50;【例4.22】
查詢XSB表中通信工程專業(yè)總學(xué)分大于等于42的同學(xué)的情況。USEPXSCJGOSELECT* FROMXSB WHERE專業(yè)='通信工程'AND總學(xué)分
>=424.2.3WHERE子句2.模式匹配LIKE謂詞用于指出一個字符串是否與指定的字符串相匹配,返回邏輯值TRUE或FALSE?!纠?.23】
查詢XSB表中姓“王”且單名的學(xué)生情況。SELECT* FROMXSB WHERE姓名
LIKE'王_'4.2.3WHERE子句【例4.24】
查詢XSB表中學(xué)號倒數(shù)第3個數(shù)字為1,且倒數(shù)第1個數(shù)在1~5之間的學(xué)生學(xué)號、姓名及專業(yè)。SELECT學(xué)號,姓名,專業(yè) FROMXSB WHERE學(xué)號LIKE'%1_[12345]'若倒數(shù)第1個數(shù)不在1~5之間,則SELECT學(xué)號,姓名,專業(yè) FROMXSB WHERE學(xué)號LIKE'%1_[^12345]'如果需要查找一個通配符,則必須使用一個轉(zhuǎn)義字符?!纠?.25】查詢XSB表中學(xué)號包含下劃線的學(xué)生學(xué)號和姓名。SELECT學(xué)號,姓名 FROMXSB WHERE學(xué)號LIKE'%#_%'ESCAPE'#‘思考此題目其他解法。提示:使用[]SELECT學(xué)號,姓名
FROMXSB WHERE學(xué)號LIKE'%[_]%'4.2.3WHERE子句3.范圍比較用于范圍比較的關(guān)鍵字有兩個:BETWEEN和IN。當(dāng)要查詢的條件是某個值的范圍時,可以使用BETWEEN關(guān)鍵字。BETWEEN關(guān)鍵字指出查詢范圍,格式為:expression[NOT]BETWEENexpression1ANDexpression2使用IN關(guān)鍵字可以指定一個值表,值表中列出所有可能的值,當(dāng)與值表中的任一個匹配時,即返回TRUE,否則返回FALSE。使用IN關(guān)鍵字指定值表的格式為:expressionIN(expression[,…n])4.2.3WHERE子句【例4.26】查詢XSB表中不在1989年出生的學(xué)生情況。SELECT學(xué)號,姓名,專業(yè),出生時間 FROMXSB WHERE出生時間
NOTBETWEEN'1989-1-1'and'1989-12-31‘【例4.27】
查詢XSB表中專業(yè)為“計算機”、“通信工程”或“無線電”的學(xué)生情況。SELECT* FROMXSB WHERE專業(yè)
IN('計算機','通信工程','無線電')該語句與下列語句等價:SELECT* FROMXSB WHERE專業(yè)='計算機'or專業(yè)='通信工程'or專業(yè)='無線電'4.2.3WHERE子句4.空值比較當(dāng)需要判定一個表達式的值是否為空值時,使用ISNULL關(guān)鍵字?!纠?.28-1】查詢總學(xué)分尚不定的學(xué)生情況。SELECT* FROMXSB WHERE總學(xué)分
ISNULL【例4.28-2】查詢總學(xué)分確定的學(xué)生情況。SELECT* FROMXSB WHERE總學(xué)分
ISNOTNULL4.2.4GROUPBY子句【例4.29】
將PXSCJ數(shù)據(jù)庫中各專業(yè)輸出。代碼如下,執(zhí)行結(jié)果如圖所示。SELECT專業(yè) FROMXSB GROUPBY專業(yè)【例4.30】
求各專業(yè)的學(xué)生數(shù)。代碼如下,執(zhí)行結(jié)果如圖所示。SELECT專業(yè),COUNT(*)AS'學(xué)生數(shù)' FROMXSB GROUPBY專業(yè)
4.2.4GROUPBY子句【例4.31】
求被選修的各門課程的平均成績和選修該課程的人數(shù)。SELECT課程號,AVG(成績)AS'平均成績',COUNT(學(xué)號)AS'選修人數(shù)' FROMCJB GROUPBY課程號4.2.5HAVING子句例如,查找PXSCJ數(shù)據(jù)庫中平均成績在85分以上的學(xué)生,就是在CJB表上按學(xué)號分組后篩選出符合平均成績大于等于85的學(xué)生。【例4.32】
查找平均成績在85分以上的學(xué)生的學(xué)號和平均成績。執(zhí)行結(jié)果如圖所示。USEPXSCJGOSELECT學(xué)號,AVG(成績)AS'平均成績' FROMCJB GROUPBY學(xué)號 HAVINGAVG(成績)>=854.2.6ORDERBY子句在應(yīng)用中經(jīng)常要對查詢的結(jié)果排序輸出,如將學(xué)生成績由高到低排序。在SELECT語句中,使用ORDERBY子句對查詢結(jié)果進行排序?!纠?.35】
將通信工程專業(yè)的學(xué)生按出生時間先后順序排序。SELECT* FROMXSB WHERE專業(yè)='通信工程' ORDERBY出生時間4.2.6ORDERBY子句【例4.36】
將成績表按學(xué)號升序排列輸出,在學(xué)號相同的情況下按課程號的降序排列。select*fromcjborderby學(xué)號,課程號desc關(guān)于ORDERBY子句,有幾點需要注意:(1)ORDERBY子句與其他子句同時存在時,必須放在后面;(2)對NTEXTTEXTIMAGE類型的字段,不能使用;(3)SQLServer中空值按最低值處理;(4)ORDERBY只影響顯示結(jié)果,不改變物理表中記錄的位置;(5)ASC是ORDERBY默認關(guān)鍵字。4.2.7子查詢1.IN子查詢IN子查詢用于進行一個給定值是否在子查詢結(jié)果集中的判斷?!纠?.39】查找選修了課程號為206的課程的學(xué)生情況。SELECT* FROMXSB WHERE學(xué)號
IN (SELECT學(xué)號 FROMCJB WHERE課程號
='206')4.2.7子查詢2.比較子查詢這種子查詢使表達式的值與子查詢的結(jié)果進行比較運算,格式為expression{<|<=|=|>|>=|!=|<>|!<|!>}{ALL|SOME|ANY}(subquery)其中:ALL當(dāng)且僅當(dāng)s與一元關(guān)系R中的每個值都滿足θ關(guān)系時,sθALLR為真;
θ是上述比較運算符之一。ANY
當(dāng)且僅當(dāng)s與一元關(guān)系R中的至少一個值滿足θ關(guān)系時,sθANYR為真。ALL和ANY運算符都可以通過在整個表達式前面加上NOT來求反,就像其他布爾值的表達式一樣。例如:s<=ALLR與NOTs>ANYR含義相同。4.2.7子查詢【例4.41】查找選修了離散數(shù)學(xué)的學(xué)生學(xué)號。SELECT學(xué)號 FROMCJB WHERE課程號
= ( SELECT課程號 FROMKCB WHERE課程名
='離散數(shù)學(xué)' );4.2.7子查詢【例4.42】
查找比所有計算機系的學(xué)生年齡都大的學(xué)生。SELECT* FROMXSB WHERE 出生時間
<ALL ( SELECT出生時間 FROMXSB WHERE專業(yè)='計算機' )4.2.8連接1.連接謂詞可以在SELECT語句的WHERE子句中使用比較運算符給出連接條件對表進行連接,將這種表示形式稱為連接謂詞表示形式?!纠?.46】查找PXSCJ數(shù)據(jù)庫每個學(xué)生的情況以及選修的課程情況。USEPXSCJGOSELECTXSB.*,CJB.* FROMXSB,CJB WHEREXSB.學(xué)號
=CJB.學(xué)號4.2.8連接【例4.47】自然連接查詢。SELECTXSB.*,CJB.課程號,CJB.成績 FROMXSB,CJB WHEREXSB.學(xué)號=CJB.學(xué)號若選擇的字段名在各個表中是唯一的,則可以省略字段名前的表名。例如,本例的SELECT語句也可寫為:SELECTXSB.*,課程號,成績 FROMXSB,CJB WHEREXSB.學(xué)號
=CJB.學(xué)號4.2.8連接【例4.48】查找選修了206號課程且成績在80分以上的學(xué)生姓名及成績。代碼如下,執(zhí)行結(jié)果如圖所示。SELECT姓名,成績 FROMXSB,CJB WHEREXSB.學(xué)號
=CJB.學(xué)號
AND課程號
='206'AND成績
>=804.2.8連接【例4.49】
查找選修了“計算機基礎(chǔ)”課程且成績在80分以上的學(xué)生學(xué)號、姓名、課程名及成績。代碼如下。SELECTXSB.學(xué)號,姓名,課程名,成績 FROMXSB,KCB,CJB WHEREXSB.學(xué)號
=CJB.學(xué)號 ANDKCB.課程號
=CJB.課程號 AND課程名
='計算機基礎(chǔ)' AND成績
>=80思考:如何用連接方式改寫例4.41?4.2.8連接2.以JOIN關(guān)鍵字指定的連接T-SQL擴展了以JOIN關(guān)鍵字指定連接的表示方式,使表的連接運算能力有了增強。FROM子句的<joined_table>表示將多個表連接起來。格式如下。<joined_table>::={
<table_source><join_type><table_source>ON<search_condition>
|<table_source>CROSSJOIN<table_source>|left_table_source{CROSS|OUTER}APPLYright_table_source
|[()<joined_table>[]]}4.2.8連接(1)內(nèi)連接。指定了INNER關(guān)鍵字的連接是內(nèi)連接,內(nèi)連接按照ON所指定的連接條件合并兩個表,返回滿足條件的行?!纠?.50】
查找PXSCJ數(shù)據(jù)庫每個學(xué)生的情況以及選修的課程情況。SELECT* FROMXSBINNERJOINCJB ONXSB.學(xué)號
=CJB.學(xué)號【例4.51】
用FROM子句的JOIN關(guān)鍵字表達下列查詢:查找選修了206號課程且成績在80分以上的學(xué)生姓名及成績。代碼如下,執(zhí)行結(jié)果如圖。SELECT姓名,成績 FROMXSBJOINCJB ONXSB.學(xué)號
=CJB.學(xué)號
WHERE課程號
='206'AND成績>=804.2.8連接【例4.52】
用FROM子句的JOIN關(guān)鍵字表達下列查詢:查找選修了“計算機基礎(chǔ)”課程且成績在80分以上的學(xué)生學(xué)號、姓名、課程名及成績。SELECT XSB.學(xué)號,姓名,課程名,成績 FROMXSBJOINCJBJOINKCB ONCJB.課程號
=KCB.課程號
ONXSB.學(xué)號
=CJB.學(xué)號
WHERE課程名='計算機基礎(chǔ)'AND成績>=80另一種寫法:SELECT XSB.學(xué)號,姓名,課程名,成績
FROM(XSBJOINCJBONXSB.學(xué)號=CJB.學(xué)號)joinkcb ONCJB.課程號=KCB.課程號4.2.8連接作為一種特例,可以將一個表與它自身進行連接,稱為自連接。使用自連接時需為表指定別名,對列的引用均要用別名限定?!纠?.53】
查找不同課程成績相同的學(xué)生的學(xué)號、課程號和成績。SELECTa.學(xué)號,a.課程號,b.課程號,a.成績 FROMCJBaJOINCJBb ONa.成績=b.成績
ANDa.學(xué)號=b.學(xué)號
ANDa.課程號!=b.課程號4.2.8連接(2)外連接。指定了OUTER關(guān)鍵字的為外連接,外連接的結(jié)果表不但包含滿足連接條件的行,還包括相應(yīng)表中的所有行。外連接包括以下三種。左外連接(LEFTOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括左表的所有行;右外連接(RIGHTOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括右表的所有行;完全外連接(FULLOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括兩個表的所有行。4.2.8連接【例4.54】
查找所有學(xué)生情況,以及他們選修的課程號,若學(xué)生未選修任何課,也要包括其情況。SELECTXSB.*,課程號 FROMXSBLEFTOUTERJOINCJB ONXSB.學(xué)號
=CJB.學(xué)號【例4.55】
查找被選修了的課程的選修情況和所有開設(shè)的課程名。SELECTCJB.*,課程名 FROMCJBRIGHTJOINKCB ONCJB.課程號=KCB.課程號4.2.8連接(3)交叉連接。交叉連接實際上是將兩個表進行笛卡爾積運算,結(jié)果表是由第一個表的每一行與第二個表的每一行拼接后形成的表,因此結(jié)果表的行數(shù)等于兩個表的行數(shù)之積。【例4.56】
列出學(xué)生所有可能的選課情況。SELECT學(xué)號,姓名,課程號,課程名 FROMXSBCROSSJOINKCB4.2.9其他1.INTO使用INTO子句可以將SELECT查詢所得的結(jié)果保存到一個新建的表中。INTO子句的格式為[INTOnew_table]【例4.57】
由XSB表創(chuàng)建“計算機系學(xué)生”表,包括學(xué)號和姓名。SELECT學(xué)號,姓名 INTO計算機系學(xué)生 FROMXSB WHERE專業(yè)='計算機'4.2.9其他2.UNION使用UNION子句可以將兩個或多個SELECT查詢的結(jié)果合并成一個結(jié)果集,其格式為{<queryspecification>|(<queryexpression>)}UNION[ALL]<queryspecification>|(<queryexpression>)[UNION[ALL]<queryspecification>|(<queryexpression>)[…n]]使用UNION組合兩個查詢的結(jié)果集的基本規(guī)則是:
(1)所有查詢中的列數(shù)和列的順序必須相同。(2)數(shù)據(jù)類型必須兼容。
4.2.9其他【例4.58】
查找學(xué)號為081101和學(xué)號為081210的兩位同學(xué)的信息。SELECT* FROMXSB WHERE學(xué)號='081101'UNIONALLSELECT* FROMXSB WHERE學(xué)號='081210'執(zhí)行結(jié)果如圖所示。4.2.9其他3.EXCEPT和
INTERSECTEXCEPT和INTERSECT用于比較兩個查詢的結(jié)果,返回非重復(fù)值。語法格式如下:{<query_specification>|(<query_expression>)}{EXCEPT|INTERSECT}{<query_specification>|(<query_expression>)}4.2.9其他【例4.59】
查找專業(yè)為計算機但性別不為男的學(xué)生信息。USEPXSCJGOSELECT*FROMXSBWHERE專業(yè)='計算機'EXCEPTSELECT*FROMXSBWHERE性別=1執(zhí)行結(jié)果如圖所示。4.2.9其他【例4.60】
查找總學(xué)分大于42且性別為男的學(xué)生信息。SELECT*FROMXSBWHERE總學(xué)分>42INTERSECTSELECT*FROMXSBWHERE性別=14.3視圖4.3.1視圖概念是從一個或幾個基本表導(dǎo)出的虛表數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應(yīng)的數(shù)據(jù)基本表中的數(shù)據(jù)發(fā)生變化,從視圖中查詢出的數(shù)據(jù)也隨之改變用戶可以在視圖上再定義視圖4.3視圖視圖一經(jīng)定義以后,就可以像表一樣被查詢、修改、刪除和更新。使用視圖有下列優(yōu)點:(1)為用戶集中數(shù)據(jù),簡化用戶的數(shù)據(jù)查詢和處理。有時用戶所需要的數(shù)據(jù)分散在多個表中,定義視圖可將它們集中在一起,從而方便用戶進行數(shù)據(jù)查詢和處理。(2)屏蔽數(shù)據(jù)庫的復(fù)雜性。用戶不必了解復(fù)雜的數(shù)據(jù)庫中的表結(jié)構(gòu),并且數(shù)據(jù)庫表的更改也不影響用戶對數(shù)據(jù)庫的使用。(3)簡化用戶權(quán)限的管理。只需授予用戶使用視圖的權(quán)限,而不必指定用戶只能使用表的特定列,也增加了安全性。(4)便于數(shù)據(jù)共享。各用戶不必都定義和存儲自己所需的數(shù)據(jù),而可共享數(shù)據(jù)庫的數(shù)據(jù),這樣,同樣的數(shù)據(jù)只需存儲一次。4.3.2創(chuàng)建視圖1.在SQLServerManagementStudio中創(chuàng)建視圖其主要步驟如下。第1步:啟動SQLServerManagementStudio,在對象資源管理器中展開“數(shù)據(jù)庫→PXSCJ”,選擇其中的“視圖”項,右擊鼠標(biāo),在彈出的快捷菜單上選擇“新建視圖(N)”菜單項。第2步:在隨后出現(xiàn)的“添加表”對話框中,添加所需要關(guān)聯(lián)的基本表、視圖、函數(shù)、同義詞。這里只使用“表”選項卡,選擇表“XSB”,如圖所示,單擊“添加”按鈕。第3步:基表添加完后,在“視圖”選項卡的“關(guān)系圖”區(qū)域中顯示了基表的全部列信息,如圖所示。4.3.2創(chuàng)建視圖2.使用CREATEVIEW語句創(chuàng)建視圖T-SQL中用于創(chuàng)建視圖的語句是CREATEVIEW語句,例如,用該語句創(chuàng)建視圖CS_XS。USEPXSCJGOCREATEVIEWCS_XS AS SELECT* FROMXSB WHERE專業(yè)='計算機‘4.3.2創(chuàng)建視圖【例4.61】
創(chuàng)建CS_KC視圖,包括計算機專業(yè)各學(xué)生的學(xué)號、其選修的課程號及成績。CREATEVIEWCS_KC AS SELECTXSB.學(xué)號,課程號,成績 FROMXSB,CJB WHEREXSB.學(xué)號
=CJB.學(xué)號
AND專業(yè)
='計算機'
4.3.3查詢視圖【例4.62】
使用視圖CS_KC查找計算機專業(yè)的學(xué)生學(xué)號和選修的課程號。SELECT學(xué)號,課程號 FROMCS_KC【例4.63】
查找平均成績在80分以上的學(xué)生的學(xué)號和平均成績。本例首先創(chuàng)建學(xué)生平均成績視圖XS_KC_AVG,包括學(xué)號(在視圖中列名為num)和平均成績(在視圖中列名為score_avg)。CREATEVIEWXS_KC_AVG(num,score_avg) AS SELECT學(xué)號,AVG(成績) FROMCJB GROUPBY學(xué)號4.3.3查詢視圖再對XS_KC_AVG視圖進行查詢。執(zhí)行結(jié)果如圖所示。SELECT* FROMXS_KC_AVG WHEREscore_avg>=804.3.4更新視圖1.可更新視圖(1)滿足以下條件的視圖。創(chuàng)建視圖的SELECT語句中沒有聚合函數(shù),且沒有GROUPBY、HAVING、UNION子句及DISTINCT關(guān)鍵字。創(chuàng)建視圖的SELECT語句中包含所有非空列。創(chuàng)建視圖的SELECT語句的FROM子句中至少要包含一個基本表。(2)在對視圖進行修改(包括UPDATE、INSERT、DELETE)時只能影響到一個基表,不能同時影響多個基表(如果有多個基表的話)。4.3.4更新視圖2.插入數(shù)據(jù)【例4.64】
向CS_XS視圖中插入以下記錄:('081115','劉明儀',1,'1998-3-2','計算機',50,NULL)INSERTINTOCS_XS VALUES('081115','劉明儀',1,'1998-3-2','計算機',50,NULL)使用
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書館工作計劃集錦
- 幼兒園安全教育活動計劃幼兒園教育活動周計劃
- 2025新學(xué)期初三班主任工作計劃范文
- 度林業(yè)法治宣傳教育實施計劃
- 《蝸輪蝸桿傳動設(shè)計》課件
- 工商服務(wù)合同
- 《高壓氧治療中》課件
- 2025年齊齊哈爾道路運輸從業(yè)資格證考哪些項目
- 2025年昆明貨運從業(yè)資格證模擬考試試題題庫答案
- 2025年合肥考取貨運從業(yè)資格證
- 水庫蓄水安全鑒定報告
- 5000立方油罐基礎(chǔ)專項施工方案
- 勞務(wù)中介介紹費合同范本
- 2022年10月2022四川涼山州木里藏族自治縣衛(wèi)生健康局考調(diào)專業(yè)技術(shù)人員13人筆試參考題庫含答案解析
- 小咖啡大世界知到章節(jié)答案智慧樹2023年上海商學(xué)院
- 新版深度學(xué)習(xí)完整整套教學(xué)課件
- 2023學(xué)年四川省成都市九年級(上)期末化學(xué)試卷
- 高等數(shù)理統(tǒng)計知到章節(jié)答案智慧樹2023年浙江大學(xué)
- 機組空冷塔冷卻三角組裝指導(dǎo)書
- 大學(xué)英語I知到章節(jié)答案智慧樹2023年桂林電子科技大學(xué)
- 兒童腦性癱瘓
評論
0/150
提交評論