關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL知識(shí)介紹_第1頁(yè)
關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL知識(shí)介紹_第2頁(yè)
關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL知識(shí)介紹_第3頁(yè)
關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL知識(shí)介紹_第4頁(yè)
關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL知識(shí)介紹_第5頁(yè)
已閱讀5頁(yè),還剩118頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2024/1/71四關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言SQL

4.1查詢語(yǔ)句

4.2數(shù)據(jù)更新

4.3數(shù)據(jù)定義學(xué)習(xí)目標(biāo):能夠熟練掌握SQL語(yǔ)言并能夠在實(shí)際工作中進(jìn)行靈活的應(yīng)用。2024/1/72SQL是結(jié)構(gòu)化查詢語(yǔ)言〔StructuredQueryLanguage〕的縮寫(xiě),美國(guó)國(guó)家標(biāo)準(zhǔn)局ANSI在1986年將SQL作為關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言,后被國(guó)際標(biāo)準(zhǔn)化組織〔ISO〕采納為國(guó)際標(biāo)準(zhǔn)?,F(xiàn)在很多大型數(shù)據(jù)庫(kù)都實(shí)現(xiàn)了SQL語(yǔ)言。SQL概述2024/1/73SQL和SQLSERVER的區(qū)別SQL〔structuredquerylanguage)結(jié)構(gòu)化查詢語(yǔ)言。它是一種標(biāo)準(zhǔn),不是一種軟件SQLSERVER是數(shù)據(jù)庫(kù)管理系統(tǒng)的一種它是一種軟件,這種軟件在遵循SQL這種標(biāo)準(zhǔn),很多數(shù)據(jù)庫(kù)管理軟件及開(kāi)發(fā)工具都支持SQL這種標(biāo)準(zhǔn)。2024/1/74SQL語(yǔ)言的特點(diǎn)SQL語(yǔ)言的特點(diǎn)1.綜合統(tǒng)一2.高度非過(guò)程化3.面向集合的操作方式4.以同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方法5.語(yǔ)言簡(jiǎn)潔,易學(xué)易用2024/1/752024/1/76SQL語(yǔ)句的書(shū)寫(xiě)準(zhǔn)那么對(duì)大小寫(xiě)不敏感一條語(yǔ)句可以寫(xiě)成一行或多行關(guān)鍵字不能在行與行之間分開(kāi)數(shù)據(jù)項(xiàng)例如屬性項(xiàng)、表、視圖項(xiàng)等同時(shí)列出時(shí),分隔符用逗號(hào);字符或字符串常量要用單引號(hào)定界。2024/1/77根本操作對(duì)象根本表:本身獨(dú)立存在的表,SQL中一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)表;一個(gè)表對(duì)應(yīng)一個(gè)存儲(chǔ)文件;一個(gè)表可以帶假設(shè)干索引。視圖:從一個(gè)或幾個(gè)根本表中導(dǎo)出的表,本身不獨(dú)立存放在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)只存儲(chǔ)視圖的定義,視圖相當(dāng)于一個(gè)虛表,用戶可以在視圖上在定義視圖。索引:為快速訪問(wèn)數(shù)據(jù),而在包含數(shù)據(jù)的表中增加的一種組織,分為聚簇索引和非聚簇索引。

指索引項(xiàng)的順序與表中記錄的物理順序一致的索引組織例如:人事檔案〔員工姓名、地址、電話號(hào)碼、社會(huì)平安號(hào)、工資〕其中只有姓名、地址、電話號(hào)碼是公開(kāi)信息??梢陨刹话鐣?huì)平安號(hào)和工資的視圖,對(duì)表和視圖設(shè)置不同的權(quán)限2024/1/784.1查詢語(yǔ)句

4.1.1根本查詢4.1.2使用列表達(dá)式4.1.3WHERE從句的進(jìn)一步使用4.1.4數(shù)據(jù)匯總4.1.5連接查詢4.1.6嵌套查詢4.1.7聯(lián)合查詢4.1.8使用系統(tǒng)內(nèi)置函數(shù)的查詢2024/1/79SQL的核心是數(shù)據(jù)查詢。對(duì)于數(shù)據(jù)庫(kù)的查詢操作是通過(guò)SELECT查詢命令實(shí)現(xiàn)的,它的根本形式由SELECT-FROM-WHERE查詢塊組成,多個(gè)查詢塊可以嵌套執(zhí)行。2024/1/710語(yǔ)句格式SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM

<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];

指定要顯示的屬性列指定查詢對(duì)象指定查詢條件查詢結(jié)果按指定列的值分組篩選出只有滿足指定條件的組對(duì)查詢結(jié)果表按指列值的升序或降序排序

2024/1/7114.1.1根本查詢1、簡(jiǎn)單的無(wú)條件查詢例:Select*fromstu_info

把stu_info表中的所有記錄的所有屬性查詢出來(lái)2024/1/712SELECT*FROMSTU_INFOWHEREXSH=’06’4.1.1根本查詢2、簡(jiǎn)單的條件查詢例4.2:從edu_d的數(shù)據(jù)庫(kù)表stu_info中查找包含所有列的土建學(xué)院〔學(xué)院代號(hào)xsh為06〕的學(xué)生名單?!?”表示查詢所有列字符或字符串用單引號(hào)引起來(lái)相當(dāng)于選擇運(yùn)算2024/1/713例4.3:從數(shù)據(jù)庫(kù)EDU_INFO中查詢土建學(xué)院〔XSH=’06’〕的學(xué)生的學(xué)號(hào)、姓名、性別、學(xué)院代號(hào)信息。SELECTXH,XM,XBM,XSHFROMSTU_INFOWHEREXSH=’06’屬性名用逗號(hào)隔開(kāi)

3、查詢語(yǔ)句中投影運(yùn)算的實(shí)現(xiàn)2024/1/7144.1.2使用列表達(dá)式查詢指定的列,除了可以使用*或者屬性列表以外,還可以使用列表達(dá)式。1、計(jì)算列值例4.4:在成績(jī)表XK中按滿分150分計(jì)算學(xué)生成績(jī)并顯示學(xué)號(hào)、課程號(hào)、教師號(hào)

SELECTXH,KCH,JSH,’150成績(jī)’=KSCJ*1.50FROMXK利用列表達(dá)式實(shí)現(xiàn)不同列的連接例4.5SELECT'學(xué)號(hào)',XH,XM+XSH,BHFROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC在SQLServer2000系統(tǒng)的企業(yè)管理器中運(yùn)行后系統(tǒng)自動(dòng)將語(yǔ)句的寫(xiě)法改成了:SELECT'學(xué)號(hào)'ASEXPR1,XH,XM+XSHASEXPR2,BHFROMSTU_INFOWHERE(XBM=‘男’)ORDERBYXHDESC2024/1/716注意:更改的是查詢結(jié)果顯示的列標(biāo)題,這是列的別名,而不是更改了數(shù)據(jù)庫(kù)表或視圖的列標(biāo)題。2、修改查詢結(jié)果的列標(biāo)題例如:改寫(xiě)例4.5SELECTXHAS學(xué)號(hào),XM+XSHAS姓名和學(xué)院代碼,BHAS班級(jí)FROMSTU_INFOWHEREXBM=‘男’ORDERBYXHDESC2024/1/717另一種形式:SELECT學(xué)號(hào)=XH,姓名和學(xué)院代碼=XM+XSH,班級(jí)=BHFROMSTU_INFOWHEREXBM=‘男’

ORDERBYXHDESC

注意:當(dāng)自定義的列標(biāo)題中含有空格時(shí),必須用引號(hào)將標(biāo)題括起來(lái)。

2024/1/718采用別名的目的:

數(shù)據(jù)庫(kù)表中的列名用英文字母表示更方便,但是為了在查詢時(shí),讓用戶看到的結(jié)果更直觀,所以可以采用中文別名。2024/1/719查詢工作的關(guān)鍵就在通過(guò)分析怎樣把實(shí)際問(wèn)題中的自然語(yǔ)言描述轉(zhuǎn)化為1〕從哪個(gè)表中查詢即:from后的一項(xiàng)2〕要查詢哪些列即:select后的一項(xiàng)3)要查詢的條件即:where后的一項(xiàng)完成查詢工作的三個(gè)關(guān)鍵步驟

第3步最復(fù)雜4.1.3WHERE從句的進(jìn)一步使用WHERE從句中,可以使用一個(gè)或者多個(gè)邏輯表達(dá)式限制查詢數(shù)據(jù)的范圍。表4-1常用查詢條件一覽表查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運(yùn)算符確定范圍Betweenand,notbetweenand確定集合In,notin字符匹配Like,notlike空值Isnull,isnotnull多重條件And,or2024/1/7211、表達(dá)式比較例如:SELECT*FROMXKWHEREKSCJ>602、確定范圍例4.6:查詢數(shù)據(jù)庫(kù)表XK中考試成績(jī)?cè)?0-70之間的學(xué)號(hào)、課程號(hào)、成績(jī)

SELECTXH學(xué)號(hào),KCH課程號(hào),KSCJ成績(jī)FROMXKWHEREKSCJBETWEEN60AND70

2024/1/7223、確定集合例4.7:查詢應(yīng)電0601、機(jī)專0601班的學(xué)生的信息

SELECT學(xué)號(hào),姓名,班級(jí)FROMmingdanWHERE班級(jí)

IN(’應(yīng)電0601’,’機(jī)專0601’)當(dāng)與指定的值表中的任何一個(gè)匹配時(shí),返回TRUE,否那么返回FALSE2024/1/7234、字符匹配用NOTLIKE

和LIKE與通配符%和_搭配,其運(yùn)算對(duì)象可以是CHAR,VARCHAR,TEXT,NTEXT,DATETIME和SMALLDATETIME類型的數(shù)據(jù)。

表示任意長(zhǎng)度的字符串表示人一單個(gè)字符例如:1、SELECT*FROMmingdanWHERE班級(jí)LIKE‘應(yīng)%’2、SELECT*FROMmingdanWHERE姓名LIKE‘__紅’

2024/1/7245、涉及空值的查詢例如:SELECT*FROMmingdanWHERE班級(jí)ISNULL6、多重條件查詢例如:SELECT*FROMmingdanWHERE班級(jí)LIKE‘應(yīng)%’

AND

姓名LIKE‘%紅’

2024/1/725一般格式:SELECT列名1,列名2,…FROM表名WHERE條件表達(dá)式ORDERBY

列名1[ASC|DESC][,列名2[ASC|DESC]…]升序〔默認(rèn)〕降序4.1.4、設(shè)定排序條件2024/1/726例4.4:從數(shù)據(jù)庫(kù)EDU_D的表STU_INFO中查詢建9809班學(xué)生情況并按學(xué)號(hào)排序。SELECT*FROMSTU_INFOWHEREBH=‘建9809’ORDERBYXHSELECT*FROMSTU_INFOWHEREBH=‘建9809’ORDERBYZYH,XHDESC按多列排序:先按專業(yè)升序排列,然后同一專業(yè)的記錄按學(xué)號(hào)進(jìn)行降序排列

注意:〔1〕ORDERBY子句不改變根本表中行或者列的順序,只改變查詢結(jié)果的排列順序。〔2〕ORDERBY子句制定排序的列必須出現(xiàn)在SELECT子句的列表達(dá)式中?!?〕排序是查詢語(yǔ)句的最后一步工作,所以要把ORDERBY子句一般放在查詢語(yǔ)句的最后。2024/1/728在要查詢的屬性名前加DISTINCT,以去掉結(jié)果中重復(fù)的值。例:SELECTDISTINCT

班級(jí)

FROMmingdan注意:在一個(gè)SELECT語(yǔ)句中,DISTINCT只能出現(xiàn)一次,并且DISTINCT必須寫(xiě)在所有列名之前。5、限定重復(fù)記錄2024/1/7294.1.4數(shù)據(jù)匯總1、聚合函數(shù)表4-2聚合函數(shù)一覽表

聚合函數(shù)含義Count([distinct|all]*)統(tǒng)計(jì)元組(記錄)個(gè)數(shù)Count([distinct|all]<列名>)統(tǒng)計(jì)一列中不為NULL值的個(gè)數(shù)Sum([distinct|all]<列名>)求一列值的總合(必須為數(shù)值型)Avg([distinct|all]<列名>)求一列值的平均數(shù)(必須為數(shù)值型)Max([distinct|all]<列名>)求一列值中的最大值Min([distinct|all]<列名>)求一列值中的最小值表示去掉結(jié)果中的重復(fù)行

指定ALL選項(xiàng)或不指定那么表示保存重復(fù)行2024/1/730例4.8:查詢學(xué)生總數(shù)SELECTCOUNT(*)AS學(xué)生數(shù)FROMmingdan或者SELECTCOUNT(XH)FROMmingdan例4.9:XK中高等數(shù)學(xué)的代號(hào)是090101,查詢學(xué)生選修高等數(shù)學(xué)的平均成績(jī)SELECTAVG(KSCJ)AS‘高等數(shù)學(xué)平均成績(jī)’FROMXKWHEREKCH=‘090101’因?yàn)閄H是該表的主鍵,不允許有空值

查詢每個(gè)班的學(xué)生人數(shù)?2024/1/731例4.10:查詢學(xué)生選修高等數(shù)學(xué)的最高分和最低分SELECTMAX(KSCJ)AS‘高等數(shù)學(xué)最高分’,MIN(KSCJ)AS‘高等數(shù)學(xué)最低分’

FROMXKWHEREKCH=‘090101’

注意:在查詢中,除COUNT〔*〕外,所有的聚合函數(shù)都不包括取值為空的行。2024/1/7322、GROUPBY子句GROUPBY子句用于對(duì)表或視圖中數(shù)據(jù)的查詢結(jié)果按某一列或多列值分組,值相等的分為一組

2、GROUPBY子句例4.11:在表mingdan中查詢各班的學(xué)生人數(shù)

SELECT班級(jí),COUNT(XH)AS人數(shù)FROMmingdanGROUPBY班級(jí)

注意:SELECT子句的列表中只能包含在GROUPBY中指出的列或在聚合函數(shù)中指定的列。GROUPBY子句用于對(duì)表或視圖中數(shù)據(jù)的查詢結(jié)果按某一列或多列值分組,值相等的分為一組

GROUPBY子句常與聚合函數(shù)聯(lián)合使用,用于針對(duì)分組的統(tǒng)計(jì)匯總

2024/1/7332、GROUPBY子句舉例:從表stu中統(tǒng)計(jì)xsh=‘0015’中男生和女生的人數(shù)Selectcount(*)fromstuwherexsh=‘0015’groupbyxb還可以按多個(gè)字段分組思考:統(tǒng)計(jì)每個(gè)學(xué)院的男生和女生的人數(shù)?2024/1/734例4.12:在表STU_INFO上產(chǎn)生一個(gè)結(jié)果集,包括每個(gè)專業(yè)的男生、女生人數(shù)。SELECTZYH,XBM,COUNT(*)AS人數(shù)FROMSTU_INFOGROUPBYZYH,XBM

2024/1/7353、HAVING短語(yǔ)HAVING短語(yǔ)指定組或聚合的條件。只有滿足條件的組才被選出來(lái),HAVING通常與GROUPBY子句一起使用。〔注意與WHERE子句區(qū)分〕SELECTXH,COUNT(*);FROMXK;GROUPBYXH;HAVINGCOUNT(*)>3例4.15查詢選修了3門(mén)以上課程的學(xué)生及選課數(shù):2024/1/736例4.16:只查詢選修了3門(mén)以上課程的學(xué)號(hào)前四位是20011的學(xué)生學(xué)號(hào)及選課數(shù):

SELECTXH,COUNT(*)FROMXKWHEREXHLIKE‘2001%’GROUPBYXHHAVINGCOUNT(*)>32024/1/737Having短語(yǔ)指定選擇組的條件,只有滿足條件的組才被選出來(lái)。Where子句從根本表中選擇滿足條件的元組,having選擇滿足條件的組2024/1/738假設(shè)一個(gè)查詢同時(shí)涉及兩個(gè)或兩個(gè)以上的表,那么稱為連接查詢。連接查詢中用來(lái)連接兩個(gè)關(guān)系的條件稱為連接條件或連接謂詞,一般格式為:[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>連接謂詞中的列名稱為連接字段

4.2.5連接查詢例如:xk.xh=stu_info.xh連接查詢的from后面跟多個(gè)表2024/1/739連接查詢中用來(lái)連接兩個(gè)關(guān)系的條件稱為連接條件或連接謂詞,格式:[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>其中比較運(yùn)算符主要有:=、>、<、>=、<=、!=當(dāng)連接運(yùn)算符為=時(shí),叫等值連接。使用其它運(yùn)算符稱為非等值連接。連接謂詞中的列名稱為連接字段。在SELECT中連接條件放在where后面2024/1/740例:查詢每個(gè)學(xué)生及其選課情況Selectstu_info.*,xk.*Fromstu_info,xkWherestu_info.xh=xk.xh2024/1/741例:查詢物理012班每個(gè)學(xué)生及其選修課程的情況SELECTstu_info.*,xk.*FROMstu_info,xkWHEREstu_info.xh=xk.xhandbh=‘物理012’/*復(fù)合條件連接*/2024/1/742例4.18:查詢選修了有機(jī)化學(xué)這門(mén)課程的學(xué)生的姓名

SELECTXMFROMSTU_INFO,XK,GCOURSEWHEREGCOURSE.KM=‘有機(jī)化學(xué)’

ANDGCOURSE.KCH=XK.KCHANDXK.XH=STU_INFO.XH說(shuō)明:〔1〕連接查詢涉及的所有表名都放在FROM子句后面?!?〕連接條件放在WHERE子句中?!?〕如果屬性列名在參加連接的各表中是唯一的,可以省略表名前綴;如果屬性列名是兩個(gè)表共同的屬性,那么一定要加表名前綴。2024/1/743〔4〕在書(shū)寫(xiě)連接查詢時(shí),為了簡(jiǎn)化,可以為表名取別名,別名應(yīng)該簡(jiǎn)單。別名只在本次查詢有效。例:〔4.18〕SELECTXMFROMSTU_INFOS,XKX,GCOURSECWHEREC.KM=‘有機(jī)化學(xué)’ANDC.KCH=X.KCHANDX.XH=S.XH2024/1/7444.1.6嵌套查詢例4.19:在STU_info表中查詢選修了課程編號(hào)為090201的學(xué)生姓名分析:查詢所要求的結(jié)果出自一個(gè)關(guān)系〔STU_info〕,但相關(guān)的條件卻涉及多個(gè)關(guān)系〔STU_info和XK〕。SELECTXMFROMSTU_INFOWHERE(XHIN(SELECT

XH

FROMXK

WHEREKCH=‘090201’))一個(gè)SELECT-FROM-WHERE語(yǔ)句稱為一個(gè)查詢塊,將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語(yǔ)的條件中的查詢稱為嵌套查詢。

子查詢2024/1/745說(shuō)明:〔1〕這個(gè)查詢首先執(zhí)行小括號(hào)里的內(nèi)部查詢,得到一個(gè)結(jié)果集,再判斷外部查詢的列是否屬于這個(gè)集合;〔2〕關(guān)鍵字IN的前面只能有一個(gè)列,這個(gè)列必須與內(nèi)部查詢結(jié)果集里的各個(gè)值含義相同,數(shù)據(jù)類型兼容。SELECTXMFROMSTU_INFOWHERE(XHIN(SELECT

XH

FROMXK

WHEREKCH=‘090201’))結(jié)果集2024/1/746例4.20查詢與劉玉濤在同一個(gè)班學(xué)習(xí)的學(xué)生SELECTXH,XM,BHFROMSTU_INFOWHERE(BHIN())1、帶有in謂詞的子查詢同一個(gè)學(xué)校的劉玉濤可能重名,而且可能不同班SELECTBHFROMSTU_INFOWHEREXM=‘劉玉濤’2024/1/7472、帶有比較運(yùn)算符的子查詢例4.21查詢與學(xué)號(hào)2000029001的學(xué)生在同一個(gè)班學(xué)習(xí)的學(xué)生,按學(xué)號(hào)排序。SELECTXH,XM,BHFROMSTU_INFOWHERE(BH=())ORDERBYXH明確內(nèi)查詢結(jié)果是唯一值時(shí)可以使用=SELECTBHFROMSTU_INFOWHEREXH=‘2000029001’2024/1/748帶有比較運(yùn)算符的子查詢舉例:從mingdan表中查詢成績(jī)最高的同學(xué)的學(xué)號(hào),姓名和成績(jī)Select學(xué)號(hào),姓名,成績(jī)frommingdanWhere成績(jī)=(selectmax(成績(jī))frommingdan)Select學(xué)號(hào),max(成績(jī))frommingdanSelect學(xué)號(hào),max(成績(jī))frommingdangroupby學(xué)號(hào)2024/1/7493、帶有ANY、SOME、ALL的比較子查詢例4.22查詢其他班級(jí)中比材物2k01班某個(gè)學(xué)生年齡小的學(xué)生的姓名和年齡。SELECTXM,NLFROMSTU_INFOWHERENL<ANY(

)ANDBH<>’材物2k01’同義字SELECTNLFROMSTU_INFOWHEREBH=‘材物2k01’2024/1/7504、帶有EXISTS謂詞的子查詢EXISTS是測(cè)試子查詢是否有數(shù)據(jù)行返回,如果有那么返回TRUE,否那么返回FALSE。NOTEXISTS那么相反,當(dāng)結(jié)果表為空時(shí),才返回TRUE。例4.23查詢選修了高等數(shù)學(xué)〔KCH=090101〕的學(xué)生的姓名等信息SELECTXM,XBM,BHFROMSTU_INFOWHEREEXISTS(SELECT*FROMXKWHEREXH=STU_INFO.XHANDKCH=‘090101’不需要明確指定列名,這個(gè)子查詢不一定會(huì)執(zhí)行完,只要發(fā)現(xiàn)匹配條件成立,就退出子查詢2024/1/751例4.24查詢沒(méi)有選修高等數(shù)學(xué)的學(xué)生的姓名等信息

SELECTXM,XBM,BHFROMSTU_INFOWHERENOTEXISTS(SELECT*FROMK2001WHEREXH=STU_INFO.XHANDKM='高等數(shù)學(xué)')2024/1/752例:在stu_info表中查詢選修了090101號(hào)課程的學(xué)生姓名SELECTxmFROMstu_infoWHERE(XHIN(SELECTXHFROMxkWHERE(kch=‘090101')))當(dāng)查詢的信息涉及一個(gè)關(guān)系時(shí),嵌套查詢和連接查詢可互換Selectxmfromstu_info,xkWherestu_info.xh=xk.xhandkch=‘090101’2024/1/7534.1.7聯(lián)合查詢多個(gè)SELECT語(yǔ)句的結(jié)果可進(jìn)行集合操作,SQLServer的Transact-SQL語(yǔ)言只提供UNION〔并〕運(yùn)算符實(shí)現(xiàn)并操作。語(yǔ)法格式:SELECT_1UNION[ALL]SELECT_2{[UNION[ALL]SELECT_3]}…進(jìn)行并運(yùn)算的子查詢2024/1/754例4.25:有兩個(gè)數(shù)據(jù)庫(kù)表STUFR和STUIS,其結(jié)構(gòu)完全一樣,分別存放外語(yǔ)學(xué)院和信息學(xué)院的學(xué)生根本信息,現(xiàn)在要查詢兩個(gè)學(xué)院女生的學(xué)號(hào)、姓名。SELECTXH,XMFROMSTUFRWHEREXB='女'UNIONSELECTXH,XMFROMSTUISWHEREXB='女'

2024/1/755說(shuō)明:

〔1〕使用UNION運(yùn)算符進(jìn)行聯(lián)合查詢時(shí),要保證各個(gè)SELECT語(yǔ)句的目標(biāo)列表達(dá)式數(shù)量相等、排列順序相互一一對(duì)應(yīng)、數(shù)據(jù)類型必須兼容?!?〕UNION之后如果使用了ALL選項(xiàng),那么顯示所有的包括重復(fù)的行,如果沒(méi)有使用ALL選項(xiàng),那么重復(fù)行只顯示一行。〔3〕UNION操作常用于歸檔數(shù)據(jù),例如歸檔各個(gè)基層部門(mén)的數(shù)據(jù)等,運(yùn)行時(shí)將查詢的數(shù)據(jù)合并到第一個(gè)表中?!?〕也可以對(duì)結(jié)果進(jìn)行排序或者分組匯總,這是必須把ORDERBY子句或GROUPBY子句放在最后一個(gè)SELECT語(yǔ)句的后面,并且必須是針對(duì)第一個(gè)SELECT語(yǔ)句的列進(jìn)行的排序或分組?!?〕使用UNION連接的所有SELECT語(yǔ)句也可以使用同一張表,此時(shí)UNION運(yùn)算符可以用OR運(yùn)算符來(lái)代替。2024/1/756例4.26:將上個(gè)例子中的兩個(gè)數(shù)據(jù)庫(kù)表STUFR和STUIS的數(shù)據(jù)合并到結(jié)構(gòu)相同的全校的學(xué)生數(shù)據(jù)表STU中去。SELECT*FROMSTUUNIONALLSELECT*FROMSTUFRUNIONALLSELECT*FROMSTUIS如何將查詢的結(jié)果保存在當(dāng)前數(shù)據(jù)庫(kù)新建的表NEWSTU中?SELECT*INTONEWSTUFROMSTUFRUNIONALLSELECT*FROMSTUIS2024/1/757例4.27:查詢01學(xué)院的學(xué)生及所有的本科生

SELECT*FROMSTU_INFOWHEREXSH=‘01’

UNIONSELECT*FROMSTU_INFOWHEREPYCCM=‘本科’

改寫(xiě)

SELECT*FROMSTU_INFOWHEREXSH=’01’

ORPYCCM=‘本科’

2024/1/7584.1.8使用系統(tǒng)內(nèi)置函數(shù)的查詢T-SQL提供了三種系統(tǒng)內(nèi)置函數(shù):行集函數(shù)、聚合函數(shù)和標(biāo)量函數(shù)。其中聚合函數(shù)在4.1.4節(jié)進(jìn)行了介紹。

1、數(shù)學(xué)函數(shù):對(duì)SQLServer提供的數(shù)字?jǐn)?shù)據(jù)〔decimal,integer,float,real,money,smallmoney,smallint和tinyint〕進(jìn)行數(shù)學(xué)運(yùn)算并返回運(yùn)算結(jié)果。2024/1/759〔2〕RAND函數(shù)語(yǔ)法格式:RAND([seed])功能:返回0~1之間的一個(gè)隨機(jī)值?!?〕ABS函數(shù)語(yǔ)法格式:ABS(數(shù)值型表達(dá)式)功能:返回給定數(shù)值表達(dá)式的絕對(duì)值參數(shù)seed〔種子〕為整型表達(dá)式2024/1/760〔1〕ASCⅡ函數(shù)語(yǔ)法格式:ASCⅡ(字符型表達(dá)式)功能:返回字符表達(dá)式最左端字符的ASCⅡ值?!?〕CHAR函數(shù)語(yǔ)法格式:CHAR(0~255之間的整數(shù))功能:將ASCⅡ轉(zhuǎn)換為字符。2024/1/761〔3〕LEFT函數(shù)語(yǔ)法格式:LEFT(字符型表達(dá)式,整型表達(dá)式)功能:返回從字符串左邊開(kāi)始指定個(gè)數(shù)的字符例4.28:查詢學(xué)號(hào)最左邊的4個(gè)字符。SELECTLEFT(XH,4)FROMSTU_INFO2、字符串處理函數(shù)2024/1/762〔4〕LTRIM函數(shù)語(yǔ)法格式:LTRIM(字符型表達(dá)式)功能:刪除字符型表達(dá)式字符串最左邊的空格,并返回字符串?!?〕REPLACE函數(shù)語(yǔ)法格式:REPLACE(‘字符表達(dá)式1’,’字符表達(dá)式2’,’字符表達(dá)式3’)功能:用字符表達(dá)式3替換字符表達(dá)式1中包含的字符表達(dá)式2,并返回替換后的表達(dá)式。2024/1/763例4.29某學(xué)校學(xué)號(hào)〔XH,char〕的前4位是入學(xué)年,第5位是性別代碼,后5位是流水號(hào),如某女生的學(xué)號(hào):2024030101。在學(xué)生根本情況數(shù)據(jù)庫(kù)表STU_INFO中查詢所有學(xué)生的學(xué)號(hào)、姓名、入學(xué)年、性別信息。〔6〕SUBSTRING函數(shù)語(yǔ)法格式:SUBSTRING(expression,整型,整型)功能:返回expression中指定的局部數(shù)據(jù)??梢允亲址?、二進(jìn)制串、text、image字段或表達(dá)式

指定從expression的第幾個(gè)字節(jié)開(kāi)始

length指定要返回的字節(jié)數(shù)

SELECTXH,XM,LEFT(XH,4)AS入學(xué)年,

SUBSTRING(XH,5,1)AS性別碼FROMSTU_INFOORDERBYXH2024/1/764〔7〕STR函數(shù)語(yǔ)法格式:STR〔FLOATL類型的表達(dá)式[,length[,decimal]]〕功能:將數(shù)字?jǐn)?shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)。返回值的總長(zhǎng)度〔包括小數(shù)點(diǎn)〕制定小數(shù)點(diǎn)右邊的位數(shù)整數(shù)2024/1/7653、系統(tǒng)函數(shù)系統(tǒng)函數(shù)用于對(duì)SQLServer中的值、對(duì)象和設(shè)置進(jìn)行操作并返回有關(guān)信息?!?〕CASE函數(shù)①簡(jiǎn)單的CASE函數(shù)語(yǔ)法格式:CASE輸入表達(dá)式WHEN比較表達(dá)式THEN結(jié)果表達(dá)式……ELSE表達(dá)式END功能:計(jì)算輸入表達(dá)式的值,與每一個(gè)WHEN的比較表達(dá)式的值比較,如果相等,那么返回對(duì)應(yīng)的結(jié)果表達(dá)式的值;否那么,返回ELSE之后的表達(dá)式的值,如果省略了ELSE,那么返回NULL值。2024/1/766例4.30:在STU_INFO中查詢03學(xué)院學(xué)生的學(xué)號(hào)、姓名、性別,并將性別分別轉(zhuǎn)換成“男生〞、“女生〞。SELECTXH,XM,XBM,XBM=

CASE'男'

WHENXBMTHEN'男生'

ELSE'女生'

ENDFROMSTU_INFOWHEREXSH='03'2024/1/767②CASE搜索函數(shù)語(yǔ)法格式:CASEWHEN條件1THEN表達(dá)式1WHEN條件2THEN表達(dá)式2……ELSE表達(dá)式END功能:系統(tǒng)將查詢出的結(jié)果進(jìn)行判斷,當(dāng)滿足WHEN的某個(gè)條件時(shí),那么將該結(jié)果顯示為T(mén)HEN之后的表達(dá)式的值,如果沒(méi)有滿足的條件,那么顯示ELSE之后的表達(dá)式的值,如果沒(méi)有指定ELSE子句時(shí),返回NULL值。2024/1/768例4.31:查詢成績(jī)表XK中選修了“090101〞課程的學(xué)生的學(xué)號(hào)、5分制成績(jī)SELECTXH,'5分制成績(jī)'=

CASEWHENKSCJ<60THEN'不及格'

WHENKSCJ>=60ANDKSCJ<70THEN'及格'

WHENKSCJ>=70ANDKSCJ<80THEN'中等'

WHENKSCJ>=80ANDKSCJ<90THEN'良好'

WHENKSCJ>=90THEN'優(yōu)秀'

ENDFROMXKWHEREKCH='090101'注意:這個(gè)查詢改變的僅僅是查詢出的結(jié)果,而根底表中的數(shù)據(jù)并沒(méi)有發(fā)生轉(zhuǎn)換。2024/1/769〔2〕CAST函數(shù)語(yǔ)法格式:CAST(表達(dá)式AS數(shù)據(jù)類型)功能:將表達(dá)式的值轉(zhuǎn)換為數(shù)據(jù)類型參數(shù)所指定的類型。例4.32:查詢成績(jī)表K2024,其中考試成績(jī)〔KSCJ〕、XH、XM等數(shù)據(jù)類型都是CHAR,現(xiàn)要查詢考試成績(jī)?cè)?0分到60之間的學(xué)生及成績(jī),并將成績(jī)加10分顯示。SELECTXH,XM,KSCJ,CAST(KSCJASFLOAT)+10AS加分后成績(jī)FROMK2024WHEREKSCJLIKE'5_'2024/1/770〔3〕日期時(shí)間函數(shù)GETDATE語(yǔ)法格式:GETDATE〔〕功能:按照SQLServer標(biāo)準(zhǔn)內(nèi)部格式返回當(dāng)前的系統(tǒng)日期和時(shí)間。返回值數(shù)據(jù)類型為datetime型?!?〕年、月、日函數(shù)語(yǔ)法格式:YEAR(date)MONTH(date)DAY(date)其中參數(shù)date是數(shù)據(jù)類型為datetime或smalldatetime的表達(dá)式。返回值的數(shù)據(jù)類型為int型。

2024/1/7714.2數(shù)據(jù)更新主要包括對(duì)數(shù)據(jù)庫(kù)表的數(shù)據(jù)進(jìn)行插入、修改、刪除操作。INSERTUPDATEDELETE2024/1/7724.2.1插入數(shù)據(jù)

插入數(shù)據(jù)的操作有兩種形式:〔1〕使用VALUES子句向數(shù)據(jù)庫(kù)的根本表表一次插入一個(gè)元組;〔2〕插入SELECT子查詢的結(jié)果,一次插入一批數(shù)據(jù)記錄。2024/1/7731、插入單個(gè)元組語(yǔ)法格式:INSERTINTO<表名>[(<屬性列1>[,<屬性列2>..)]VALUES(<常量1>[,<常量2>]…)

說(shuō)明:〔1〕屬性列與常量必須一一對(duì)應(yīng),數(shù)據(jù)類型要一致;〔2〕在根本表結(jié)構(gòu)定義中未說(shuō)明為NOTNULL的屬性列,如果沒(méi)有出現(xiàn)在INTO子句后,這些列將取空值。已經(jīng)說(shuō)明為NOTNULL的屬性列,那么必須出現(xiàn)在INTO子句后面;〔3〕如果INTO子句后面沒(méi)有指定任何列,那么VALUES子句后面的常量個(gè)數(shù)必須與根本表中列的個(gè)數(shù)相等,且類型、順序一致。2024/1/774例〔在STU_COU數(shù)據(jù)庫(kù)中〕INSERTINTOSTU(XH,XM,XB,XSH,NL)VALUES(‘20240902090’,’王東方’,‘男’,‘0019’,22)等價(jià)于:INSERTINTOSTUVALUES(‘20240902090’,’王東方’,‘男’,‘0019’,22)(XH,XM,XB,XSH,NL)表中所有的列2024/1/7752、插入子查詢結(jié)果語(yǔ)法格式:INSERT[INTO]表名[(列名1,……,列名N)]SELECT

兼容列名1,……,兼容列名NFROM

兼容表名WHERE

邏輯表達(dá)式一一對(duì)應(yīng)結(jié)構(gòu)一致2024/1/776例:4.33在STU表中查詢出女生的學(xué)生信息存放在STUIS表中。INSERT

INTOSTUISSELECTXH,XM,XB,XSH,NLFROMSTUWHEREXB=‘女’INSERTintoSTUISSELECT*FROMSTUWHEREXB=‘女’或者2024/1/7774.2.2修改數(shù)據(jù)修改數(shù)據(jù)主要是對(duì)數(shù)據(jù)庫(kù)表中一個(gè)或多個(gè)元組某個(gè)或某些屬性的值進(jìn)行更改。語(yǔ)法格式:UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名>=<表達(dá)式>,…][WHERE<條件>]2024/1/7781、修改一個(gè)元組的值

例如:UPDATESTUSETXSH=‘機(jī)械’,NL=NL+1WHEREXH='20000501022'

2、修改多個(gè)元組的值例:將所有課程的學(xué)分改為2分

UPDATECOURSESETCCREDIT=2例:將女生年齡增加1歲UPDATESTUSETNL=NL+1WHEREXB=‘女’2024/1/7793、帶子查詢的修改語(yǔ)句4.34:將選修了高等數(shù)學(xué)的90分以下的學(xué)生的成績(jī)加10分〔從edu_d庫(kù)中的xk數(shù)據(jù)表中修改〕UPDATEXKSETKSCJ=KSCJ+10WHEREKCH=(SELECTKCHFROMGCOURSEWHEREKM='高等數(shù)學(xué)')ANDKSCJ<=90建議:使用UPDATE對(duì)批量數(shù)據(jù)進(jìn)行修改前,先用SELECT語(yǔ)句將要修改的記錄查詢出來(lái),仔細(xì)檢查無(wú)誤后,再進(jìn)行修改。2024/1/7804.2.3刪除數(shù)據(jù)語(yǔ)法格式:DELETEFROM<表名>[WHERE<條件>]注意:DELETE命令刪除的是一個(gè)或多個(gè)元組〔記錄、行〕,而不是某個(gè)行中個(gè)別列的值。不需要的某個(gè)行的個(gè)別列的值,只能用UPDATE命令修改成NULL值或空格符,不能被刪除。2024/1/7811、刪除一個(gè)元組例如:DELETEFROMSTU_INFOWHEREXH='2024050601'2、刪除多個(gè)元組例如:DELETEFROMSTU_INFOWHEREBH='應(yīng)0203'

2024/1/7823、帶子查詢的刪除語(yǔ)句

例4.35:將信息學(xué)院學(xué)生的選課信息全部刪除

注意:為防止誤操作,在日常工作中,通常操作刪除語(yǔ)句時(shí),要先查詢要?jiǎng)h除的數(shù)據(jù),確認(rèn)無(wú)誤后,再將SELECT*局部改成DELETE進(jìn)行刪除操作。DELETEFROMXK,STU_INFOWHERESTU_INFO.XSH=’12’ANDSTU_INFO.XH=XK.XHSELECTXK.*FROMXK,STU_INFOWHERESTU_INFO.XSH=’12’ANDSTU_INFO.XH=XK.XHSELECT*FROMXKWHERE‘12'=(SELECTXSHFROMSTU_INFOWHERESTU_INFO.XH=XK.XH)DELETEFROMXKWHERE‘12'=(SELECTXSHFROMSTU_INFOWHERESTU_INFO.XH=XK.XH)2024/1/7834.3數(shù)據(jù)定義SQL的數(shù)據(jù)定義語(yǔ)句是對(duì)數(shù)據(jù)庫(kù)表、視圖、索引等的結(jié)構(gòu)和屬性進(jìn)行定義。常見(jiàn)的操作方式如下表:表4_3數(shù)據(jù)操作方式一覽表DROPINDEXCREATEINDEX索引DROPVIEWCREATEVIEW視圖ALTERTABLEDROPTABLECREATETABLE表修改刪除創(chuàng)建操作方法操作對(duì)象2024/1/7844.3.1定義根本表一、語(yǔ)法格式:CREATETABLE[數(shù)據(jù)庫(kù)名]<表名>〔<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束條件>]]…[,<表級(jí)完整性約束條件>]〕默認(rèn)為當(dāng)前數(shù)據(jù)庫(kù)

要定義的根本表的名字組成該表的各個(gè)屬性〔列〕涉及相應(yīng)屬性列的完整性約束條件涉及一個(gè)或多個(gè)屬性列的完整性約束條件2024/1/785常用完整性約束主碼約束:PRIMARYKEY唯一性約束:UNIQUE非空值約束:NOTNULL參照完整性約束FOREIGNKEY……REFERENCESCHECK約束CHECK默認(rèn)值

DEFAULT標(biāo)識(shí)列

IDENTITY(seed,inctement)公式

AS2024/1/786二、數(shù)據(jù)類型類型標(biāo)識(shí)符取值范圍空間注意邏輯類型BIT0,11位不允許定義為NULL整數(shù)類型INT-231~231-14Smallint-215~215-12TINYINT0~28-11正整數(shù)2024/1/787浮點(diǎn)類型標(biāo)識(shí)符類別取值空間REAL-3.4×1038~3.4×10384FLOAT(n)n省略或[8,15]-1.7×10308~1.7×103088n∈[1,7]-3.4×1038~3.4×10384Decimal(p,s)或Numeric(p,s)P數(shù)據(jù)總位數(shù)S小數(shù)位數(shù)-1038~1038-1Numeric可用于帶identify關(guān)鍵字的列2-172024/1/788字符類型定長(zhǎng)CHAR(n)最多為8000個(gè)ANSI字符NCHAR(n)最多為4000個(gè)Unicode字符變長(zhǎng)VARCHAR(n)最多為8000個(gè)ANSI字符NVARCHAR(n)最多為4000個(gè)Unicode字符超長(zhǎng)TEXT1~231-1NTEXT230-1個(gè)Unicode字符2024/1/789二進(jìn)制數(shù)據(jù)類型類型標(biāo)識(shí)符空間說(shuō)明定長(zhǎng)BINARY(n)8000個(gè)字節(jié)如允許為NULL,成變長(zhǎng)變長(zhǎng)VARBINARY(n)8000個(gè)字節(jié)超長(zhǎng)IMAGE231-1個(gè)字節(jié)2024/1/790時(shí)間類型DATETIME8字節(jié)1753-1-1~9999-12-31的時(shí)間和日期精確到1/300秒SMALLDATETIME4字節(jié)1900-1-1~2079-6-6的時(shí)間和日期精確到1秒2024/1/791貨幣類型MONEY用2個(gè)4字節(jié)整數(shù)存儲(chǔ)SMALLMONEY用4字節(jié)存儲(chǔ)2024/1/792[例1]建立一個(gè)“學(xué)生〞表Student,它由學(xué)號(hào)Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個(gè)屬性組成。其中學(xué)號(hào)不能為空,值是唯一的,并且姓名取值也唯一。CREATETABLEStudent

(SnoCHAR(5)NOTNULL

UNIQUE,

SnameCHAR(20)UNIQUE,

SsexCHAR(1),

SageINT,

SdeptCHAR(15))2024/1/793[例2]建立一個(gè)“學(xué)生選課〞表SC,它由學(xué)號(hào)Sno、課程號(hào)Cno,修課成績(jī)Grade組成,其中(Sno,Cno)為主碼。CREATETABLESC(SnoCHAR(5),CnoCHAR(3),Gradeint,

Primarykey(Sno,Cno))2024/1/794例4.36:定義一個(gè)學(xué)生的成績(jī)表k2001CREATETABLEk2001/*表名為K2001*/(XHvarchar(12)NOTNULL,/*XH〔學(xué)號(hào)〕列,不為空*/XMvarchar(8)NULL,/*姓名*/KCHvarchar(8)NOTNULL,/*課程代碼*/KSCJvarchar(5)NULL,/*考試成績(jī)8/KKNYvarchar(5)NULL, /*開(kāi)課時(shí)間*/KCXFvarchar(5)NULL, /*課程學(xué)分*/KMvarchar(30)NULL, /*課程名稱*/KCFZvarchar(1)NULL, /*課程分組*/JSMvarchar(8)NULL, /*任課教師*/BZvarchar(18)NULL) /*備注*/2024/1/795例4.37:創(chuàng)立表n_jobs。CREATETABLEn_jobs(job_idsmallintIDENTITY(1,1)

PRIMARYKEYjob_descvarchar(50)NOTNULLDEFAULT

'新部門(mén),暫無(wú)職位',min_lvltinyintNOTNULLCHECK(min_lvl>=12),max_lvltinyintNOTNULLCHECK(max_lvl<=250))是表示為PRIMARYKEY約束創(chuàng)立聚集關(guān)鍵字。表示新列是標(biāo)識(shí)列。必須同時(shí)指定種子seed和增量increment,或者二者都不指定。如果二者都未指定,那么取默認(rèn)值〔1,1〕。設(shè)置默認(rèn)值,默認(rèn)值可以是常量、NULL或系統(tǒng)函數(shù)。

例4.38:創(chuàng)立表new_employees。CREATETABLEnew_employee(emp_idchar(9)CONSTRAINT

PK_emp_id

PRIMARYKEYNONCLUSTERED

CONSTRAINT

CK_emp_id

CHECK(emp_idLIKE

'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'oremp_idLIKE'[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]'),/*每個(gè)員工編號(hào)由三個(gè)字符打頭,然后是10000-99999的某個(gè)數(shù)字和代表性別的字母F或M*/fnamevarchar(20)NOTNULL,minitchar(1)NULL,lnamevarchar(30)NOTNULL,job_idsmallintNOTNULLDEFAULT1REFERENCESjobs(job_id),job_lvltinyintDEFAULT10,pub_idchar(4)NOTNULLDEFAULT('9952')REFERENCESpublishers(pub_id),hire_datedatetimeNOTNULLDEFAULT(getdate())/*使用了獲取當(dāng)前日期的函數(shù)作為默認(rèn)值)表示PRIMARYKEY、NOTNULL、UNIQUE、FOREIGNKEY或CHECK約束定義的開(kāi)始

約束的名稱

外鍵約束

2024/1/7974.3.2修改根本表語(yǔ)法結(jié)構(gòu):ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROP<完整性約束名>|COLUMN<列名>][ALTERCOLUMN<列名><數(shù)據(jù)類型>]增加新列和新的完整性約束條件刪除指定的完整性約束條件用于修改列名和數(shù)據(jù)類型2024/1/798例4.43向Stu_info表增加“入學(xué)時(shí)間〞列,其數(shù)據(jù)類型為日期型

ALTERTABLESTU_INFOADDRXSJDATETIME不管根本表中原來(lái)是否已有數(shù)據(jù),新增加的列一律為空值。1、添加列2024/1/799例4.44:將教師表的XB列改為SMALLINT數(shù)據(jù)類型

注意:修改原有的列定義有可能會(huì)破壞已有數(shù)據(jù)2、修改列ALTERTABLEGTECHALTERCOLUMNXBSMALLINT2024/1/71003、刪除列例4.45:刪除教師表中的性別一列。ALTERTABLEGTECHDROP

COLUMNXB

下面的列不能除去:被復(fù)制列;用在索引中的列;用在CHECK、FOREIGNKEY、UNIQUE或PRIMARYKEY約束中的列;有相關(guān)聯(lián)的默認(rèn)值〔由DEFAULT關(guān)鍵字定義〕的列或綁定到默認(rèn)對(duì)象的列;綁定到規(guī)那么的列。2024/1/7101[例]刪除數(shù)據(jù)庫(kù)表new_employee中的emp_id的檢查約束。ALTERTABLEnew_employeeDROP

CK_emp_id

4、刪除約束2024/1/71024.3.3刪除根本表語(yǔ)法格式:DROPTABLE<表名>

2024/1/71034.3.4視圖視圖是關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)提供給用戶以多種角度觀察數(shù)據(jù)庫(kù)中數(shù)據(jù)的重要機(jī)制。視圖是從一個(gè)或多個(gè)根本表〔或視圖〕導(dǎo)出的表,是個(gè)虛表。數(shù)據(jù)庫(kù)只存放視圖的定義,不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在原來(lái)的根本表中。所以,視圖的數(shù)據(jù)跟隨根本表的數(shù)據(jù)而變化。視圖一旦被定義,就可以被查詢、刪除,修改。再定義一個(gè)新的視圖。2024/1/7104補(bǔ)充說(shuō)明:視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫(kù)中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。視圖允許我們把表結(jié)構(gòu)的細(xì)節(jié)封裝起來(lái),這些表可能因你的應(yīng)用的進(jìn)化而變化,而我們卻可以通過(guò)視圖給用戶一個(gè)一致的接口.視圖幾乎可以在一個(gè)真正的表可以使用的任何地方使用.在其它視圖上面再建造視圖也是很常見(jiàn)的.2024/1/71051、定義視圖〔1〕用企業(yè)管理器建立視圖〔自學(xué)〕〔2〕用SQL數(shù)據(jù)定義語(yǔ)句createview命令建立視圖語(yǔ)法格式:CREATEVIEW

視圖名AS<子查詢>[WITHCHECKOPTION]

對(duì)視圖進(jìn)行UPDATE,INSERT和DELETE操作時(shí)要保證更新、插入或刪除的行滿足視圖定義中的條件表達(dá)式

2024/1/7106注意問(wèn)題:〔1〕只能在當(dāng)前的數(shù)據(jù)庫(kù)中創(chuàng)立視圖;〔2〕一個(gè)視圖最多可以引用1024個(gè)列;〔3〕視圖的命名必須符合SQLServer中的標(biāo)識(shí)符的定義規(guī)那么;〔4〕可以將視圖建立在其他視圖或者引用視圖的過(guò)程之上,SQLServer2000中允許最多32層的視圖嵌套;〔5〕不能將規(guī)那么、默認(rèn)值定義綁定在視圖上;〔6〕定義視圖的查詢語(yǔ)句中不能包括COMPUTE、COMPUTEBY、ORDERBY子句或是INTO等關(guān)鍵詞;〔7〕在視圖中不能定義全文索引,但可以定義索引;〔8〕不能創(chuàng)立臨時(shí)視圖,而且也不能在臨時(shí)表上創(chuàng)立視圖;2024/1/7107〔9〕默認(rèn)狀態(tài)下,視圖中的列繼承他們?cè)诨碇械拿Q。對(duì)于以下情況,在創(chuàng)立視圖時(shí)需要明確給出每一列的名稱。①視圖中的某些列來(lái)自表達(dá)式、函數(shù)或常量;②視圖中兩個(gè)或多個(gè)列在不同表中具有相同的名稱;③希望在視圖中的列使用不同于基表中的列名時(shí)。2024/1/7108A.選擇列定義視圖例:

CREATEVIEWMYVIEW1AS

SELECTEMP_ID,LNAME,FNAMEFROMEMPLOYEE定義了視圖后,可以和表一樣,使用SELECT語(yǔ)句訪問(wèn)它。

2024/1/7109B.基于列的表達(dá)式定義視圖

例:CREATEVIEWMYVIEW2ASSELECTTITLE,ADVANCE,

PRICE*ROYALTY*YTD_SALESASNEWPRICEFROMTITLESWHEREPRICE>$52024/1/7110C.選擇行定義視圖例:CREATEVIEWMYVIEW3

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論