![數(shù)據(jù)庫應(yīng)用軟件2010_第1頁](http://file4.renrendoc.com/view/4e830204b5c5be71d02273badc5cb305/4e830204b5c5be71d02273badc5cb3051.gif)
![數(shù)據(jù)庫應(yīng)用軟件2010_第2頁](http://file4.renrendoc.com/view/4e830204b5c5be71d02273badc5cb305/4e830204b5c5be71d02273badc5cb3052.gif)
![數(shù)據(jù)庫應(yīng)用軟件2010_第3頁](http://file4.renrendoc.com/view/4e830204b5c5be71d02273badc5cb305/4e830204b5c5be71d02273badc5cb3053.gif)
![數(shù)據(jù)庫應(yīng)用軟件2010_第4頁](http://file4.renrendoc.com/view/4e830204b5c5be71d02273badc5cb305/4e830204b5c5be71d02273badc5cb3054.gif)
![數(shù)據(jù)庫應(yīng)用軟件2010_第5頁](http://file4.renrendoc.com/view/4e830204b5c5be71d02273badc5cb305/4e830204b5c5be71d02273badc5cb3055.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
主講人:孫承愛總學(xué)時:54學(xué)時(上課36學(xué)時,上機(jī)18學(xué)時)授課方式:有的邊講邊練,有的課下練習(xí)。大作業(yè):開發(fā)一個小系統(tǒng)(50分)平時成績:考勤+作業(yè)+操作(50分)電話P)86057852(O)Email:sun910213@126.com
數(shù)據(jù)庫原理與應(yīng)用4.1TSQL語言1、TSQL概述:TSQL是應(yīng)用于數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言,本身不能獨(dú)立存在,是一種非過程性的語言。2、TSQL語言按照用途可以分為如下4類:?DQL(DataQueryLanguage)數(shù)據(jù)查詢語言主要進(jìn)行查詢操作(SELECT語句)?DDL(DataDefinitionLanguage)數(shù)據(jù)定義語言主要進(jìn)行建立對象的操作(建庫、表、視圖、索引等)?DML(DataManipulationLanguage)數(shù)據(jù)操縱語言主要進(jìn)行數(shù)據(jù)處理操作(插入、刪除、更新等)?DCL(DataControlLanguage)數(shù)據(jù)控制語言主要進(jìn)行多個SQL語句的操作4標(biāo)準(zhǔn)SQL語句啟動查詢分析器的操作步驟:(1)在“開始”菜單的“程序”級聯(lián)菜單中,選擇MicrosoftSQLServer程序組中的“查詢分析器”選項(xiàng),即可啟動SQL查詢分析器。(2)在啟動SQL查詢分析器時,系統(tǒng)首先打開“連接到SQLServer”對話框,如右圖所示。如果是遠(yuǎn)程SQLServer服務(wù)器,可以直接在SQLServer文本框中輸入遠(yuǎn)程計(jì)算機(jī)的IP地址。4.2TSQL基礎(chǔ)SQLServer提供了多種圖形和命令行工具,用戶可以使用不同的方法來訪問數(shù)據(jù)庫。SQL查詢分析器是一個圖形用戶界面,用以交互地設(shè)計(jì)和測試SQL語句、批處理和腳本。4.2.1查詢分析器(3)選擇SQLServer服務(wù)器后,單擊“確定”按鈕,然后在“連接到SQLServer”對話框中設(shè)置正確的驗(yàn)證模式,即可連接到SQLServer服務(wù)器,并打開SQL查詢分析器,如圖所示。對象窗口SQL的輸入窗口語句執(zhí)行查詢的按鈕4.2.2數(shù)據(jù)庫的操作語句1.創(chuàng)建數(shù)據(jù)庫CREATEDATABASEdatabase_name(新庫名不可多于128個字符)[[ON[filespec]]ON子句顯式定義數(shù)據(jù)文件[LOGON[filespec]]LOG
ON子句顯式定義日志文件]如果省略O(shè)N和LOGON,庫的大小與model庫的大小相等filespec定義為([NAME=logical_file_name,]FILENAME=‘os_file_name’(指出操作系統(tǒng)創(chuàng)建filespec定義的物理文件時使用的路徑名和文件名)[,SIZE=size](指出filespec中定義的文件大小,不可為分?jǐn)?shù))
[,MAXSIZE={max_size|UNLIMITED}](指出filespec中定義的文件可以增長到的最大值,不可為分?jǐn)?shù))[,FILEGROWTH=growth_increment])(指出filespec中定義的文件的增長增量,不能超過MAXSIZE,不可為分?jǐn)?shù))例如:CreatedatabasetestOn(name=test1,filename=‘F:\testDB_test1.mdf’,size=10mb,maxsize=50mb[unlimited],filegrowth=10mb)Logon(name=test1_log,filename=‘F:\testDB_test1.ldf’,size=10mb,maxsize=50mb[unlimited],filegrowth=10mb)執(zhí)行并刷新后可以在企業(yè)管理器中看到新建立的數(shù)據(jù)庫2、修改數(shù)據(jù)庫:ALTERDATABASEdatabase_name(要修改的庫名){ADDFILEfilespec(指定要添加文件)|ADDLOGFILEfilespec
(指定要添加日志文件)|REMOVEFILElogical_file_name(指定從庫中刪除空文件)|MODIFYFILEfilespec(指定要更改給定的文件)|MODIFYNAME=new_dbname(用來重命名數(shù)據(jù)庫)}filespec定義同前面所述例1:為test新加一個邏輯名為test2的數(shù)據(jù)文件,其大小及其最大值分別為10mb和50mbalterdatabasetestaddfile(name=test2,filename='F:\testDB_test2.ndf',size=10mb,maxsize=50mb[unlimited],filegrowth=5mb[10%])例2:為test改名為test0
alterdatabasetestmodifyname=test03.使用和刪除數(shù)據(jù)庫使用和刪除數(shù)據(jù)庫,可以使用USE和DROP語句。其語法如下:USEDATABASEdatabase_nameDROP
DATABASEdatabase_name例如:使用并刪除數(shù)據(jù)庫test0
USEDATABASEtest0dropdatabasetest0說明:如果不知道當(dāng)前的服務(wù)器中有哪些數(shù)據(jù)庫,可以執(zhí)行sp_helpdb存儲過程來查看格式為:EXECsp_helpdb[庫名]4.2.3表的操作語句1.表的創(chuàng)建使用CREATETABLE語句來建立表,其語法如下:CREATETABLEtable_name(表名)(column_namel(列名)data_type(類型)[NULL|NOTNULL](是否允許為空)[PRIMARY|UNIQUE](是否為主鍵/唯一性)[FOREIGNKEY[(column_name)]](外鍵)REFERENCESref_table[(ref_column[column_name2……]))](是否與其它表關(guān)聯(lián))例1:createtablesc(snochar(10)foreignkeyreferences
student(sno),cnochar(10)foreignkeyreferences
course(cno),degreenumeric(9))與其他表建立關(guān)聯(lián):表的字段可能參考到其他表的字段,這就需要將兩個表建立關(guān)聯(lián),語法為:FOREIGNKEYREFERENCEref_table(ref_column)例2:createtablescore(snochar(10)notnullforeignkeyreferencesstudent(sno),cnochar(10)notnullforeignkeyreferencescourse(cno),degreenumeric(9),primarykey(sno,cno))創(chuàng)建數(shù)據(jù)表時的選項(xiàng)從父表中刪除記錄時,如果有一個子記錄引用這個被刪除的父記錄,則參照完整性就丟失了,此時可以考慮以下幾種情況:1)NOACTION(不操作):如果有任何相關(guān)的子記錄,就不從父表中將該記錄刪除。2)CASCADE(級聯(lián)):當(dāng)父記錄被刪除后,自動刪除相關(guān)的子記錄.如果被刪除的子記錄也在其它關(guān)系中充當(dāng)父記錄,那么也應(yīng)該刪除那些子表中的相關(guān)記錄。3)SETNULL(置空);當(dāng)父記錄被刪除時,相關(guān)子記錄中外鍵的值自動被置為空值。4)SETDEFAULT(置預(yù)定值):當(dāng)父記錄被刪除時,所有相關(guān)子記錄中的外碼的值自動置為他們的預(yù)置值。5)NOCHECK(不檢查):當(dāng)父記錄被刪除時,不做任何保證參照完整性的操作。另外,可以使用SELECTINTO語句創(chuàng)建一個新表,并用SELECT的結(jié)果集填充該表。例如:用student中的字段sno,sname,ssex,age創(chuàng)建student1表。selectsno,sname,ssex,ageintostudent1fromstudent2.修改表SQL語言提供了ALTERTABLE語句來修改表的結(jié)構(gòu)。語法如下:ALTERTABLEtable_name
ADD[column_namedata_type](增加字段)[PRIMARYKEY|CONSTRAIN][FOREIGNKEY(column_name)REFERENCESref_table(ref_column)]DROP[CONSTRAINT]constraint_name|COLUMNcolumn_name刪除限制刪除字段例如:在tes數(shù)據(jù)庫中給book表增加人個“price”字段
Alter
table
bookaddpriceint3.刪除關(guān)聯(lián)和表使用SQL語言要比使用企業(yè)管理器刪除表容易得多。語法為:DROPTABLEtable_name例如:要刪除book表DROPTABLEbook4.2.4數(shù)據(jù)查詢基本格式是由SELECT子句、FROM子句和WHERE子句組成:SELECT
列名表FROM
表或視圖名WHERE
查詢限定條件完整的SELECT語句的用法如下所示:SELECT
列名表[INTO
新表名]FROM
表或視圖名[WHERE查詢限定條件][GROUP
BY
分組表達(dá)式[HAVING
分組條件]][ORDER
BY
次序表達(dá)式[ASC|DESC]]使用SQL語句時應(yīng)注意的事項(xiàng)1、SQL中的字符串中只能用‘’,而不能用“”2、每個SELECT語句將產(chǎn)生一個查詢結(jié)果集,它由一個或多個列以及0行或多行結(jié)果組成。3、(NOT)BETWEEN…AND…測試包含邊界兩端的值。4、(NOT)IN用于取值有限,多者取其一。5、(NOT)LIKE模式匹配查詢,“%”代表0個或多個字符序列“—”代表一個字符;若查詢的串中含有“%”或“—”,則用轉(zhuǎn)義字符表示。例:LIKE’15#%’ESCAPE‘#’和
LIKE’15\%’ESCAPE‘\’都可查詢含“15%”的字符串。6、ISNULL(ISNOTNULL)用于查詢是否為空??罩担褐钢挡淮_定或不能使用的數(shù)據(jù)列。兩個不確定的值是不能比較是否相等的。7、‘*’可以代替所有列名,但它只可用于關(guān)系表比較穩(wěn)定的情況下,否則當(dāng)表發(fā)生變化時將會給修改帶來麻煩。8、在算術(shù)表達(dá)式中引用的列必須都為數(shù)值類型的。列名一般與檢索的表中相應(yīng)列名相同,但也有的為位置名(如col3)或用AS子句來為列名命名。9、ORDERBY子句允許檢索得到的行基于任一列或列的組合以升序或降序排列,而不考慮這些列是否出現(xiàn)在結(jié)果中,但是,有的版本堅(jiān)持ORDERBY元素需要出現(xiàn)在SELECT列表中,但不管是哪種情況,ORDERBY子句必須是SELECT語句的最后一個子句.10、聚合函數(shù)在表中的一個列上操作,并且返回單一值。COUNT、MAX、MIN可以用到數(shù)值和非數(shù)值型字段上,但SUM、AVG只能用到數(shù)值型字段上。除COUNT(*)外,每個函數(shù)都首先忽略NULL值,然后再對剩下的非空值進(jìn)行操作,而COUNT(*)是COUNT的特殊用法,它統(tǒng)計(jì)表中的所有行,不管這些行是否是空值或是否出現(xiàn)重復(fù)值。去掉重復(fù)值DISTINCT對于MAX和MIN來說沒有作用,但對于SUM和AVG有影響。但要注意在一個查詢中DISTINCT只能指定一次。11、特別要注意的是,聚合函數(shù)只能在SELECT列表和HAVING子句中使用。在任何別的地方使用都是不正確的。如果SELECT列表中包含了聚合函數(shù),并且沒有使用GROUPBY子句,那么SELECT列表中的項(xiàng)不能包含對任何列的引用,除非該列是聚合函數(shù)的參數(shù)也就是說SELECT列表中的項(xiàng)要么全為聚合函數(shù),要么全不是聚合函數(shù),或含有GROUPBY參數(shù)。SELECTNO,COUNT(STY)FROMSSS(錯誤)SELECTNO,COUNT(STY)FROMSSSGROUPBYNO12、一個包含了GROUPBY子句的查詢被稱為分組查詢,因?yàn)樗鼘ELECT表中的數(shù)據(jù)進(jìn)行分組并為每個分組產(chǎn)生了一個概要行。在GROPRBY子句中的列被稱為分組列。ISO標(biāo)準(zhǔn)要求SELECT子句和GROUPBY子句緊密結(jié)合在一起。當(dāng)使用了GROUPBY子句后,SELECT列表中的每一項(xiàng)在每個分組中必須都是單值的,而且,SELECT子句只能包含:列名、聚合函數(shù)、常量、一個包含上述各項(xiàng)的表達(dá)式。在SELECT列表中的所有列名都必須出現(xiàn)在GROUPBY子句中,除非該名稱只在聚合函數(shù)中使用。反之則不然,在GROUPBY子句中出現(xiàn)的列名則不一定出現(xiàn)在SELECT列表中。當(dāng)WHERE子句和GROUPBY子句同時使用時,WHERE子句先被應(yīng)用,然后在剩下的滿足條件的行之上進(jìn)行分組。13、HAVING子句和GROUPBY子句同時作用來限制在結(jié)果表中出現(xiàn)的分組。盡管HAVING和WHERE子句在語法上相似,但是它們的目的不同。WHERE子名過濾進(jìn)入結(jié)果表的單個行,而HAVING子句將過濾進(jìn)入結(jié)果表的整個分組。ISO標(biāo)準(zhǔn)要求在HAVING子句中使用的列名必須在GROUPBY列表中出現(xiàn),或者被包含在聚合函數(shù)中。事實(shí)上,HAVING子句的查詢條件常常至少包含一個聚合函數(shù)。否則查詢條件就可以移到WHERE子句并應(yīng)用到單行中。(切記聚合函數(shù)不可在WHERE子句中使用)。14、使用子查詢(結(jié)果列來自一個表)時的規(guī)則:(1)ORDERBY子句不能用在子查詢中,盡管最外層SELECT語句可能會使用該子句。(2)子查詢SELECT列表必須由一列列名或是一個表達(dá)式組成。除非子查詢使用關(guān)鍵字EXISTS(3)默認(rèn)時,子查詢中的列名是子查詢FROM子句中的表中存在的列名。通過限定列名也可以引用外層查詢的FROM子句中的表。(4)當(dāng)子查詢是比較運(yùn)算中涉及的兩個操作數(shù)中的一個時,子查詢必須出現(xiàn)在比較操作符的右側(cè)。例如,下面的形式就是不正確的。SELECTstaffNo,name,positionFROMstaffWHERE(SELECTAVG(salary)FROMstaff)<salary(5)子查詢不能作為表達(dá)式的一部分。15、當(dāng)結(jié)果列來自多個表時必須使用連接查詢。2.選擇查詢(行向)為了選擇表中滿足查詢條件的某些行,可以使用SQL命令中的WHERE子句。WHERE子句的查詢條件是一個邏輯表達(dá)式,它是由多個關(guān)系表達(dá)式通過邏輯運(yùn)算符(AND、OR、NOT)連接而成的。3.排序查詢通過在SELECT命令中加入ORDERBY子句來控制選擇行的顯示順序。ORDERBY子句可以按升序(默認(rèn)或ASC)、降序(DESC)排列各行,也可以按多個列來排序。1.投影查詢(列向)使用SELECT語句可以選擇查詢表中的任意列。FROM子句指出從什么表中提取數(shù)據(jù)。如果要去掉重復(fù)的顯示行,可以在字段名前加上“DISTINCT”關(guān)鍵字來說明。查詢舉例函數(shù)名功能AVG計(jì)算一個數(shù)值型列的平均值COUNT計(jì)算指定列中選擇的項(xiàng)數(shù),COUNT(*)統(tǒng)計(jì)查詢輸出的行數(shù)MIN計(jì)算指定列中的最小值MAX計(jì)算指定列中的最大值SUM計(jì)算指定列中的數(shù)值總和STDEV計(jì)算統(tǒng)計(jì)標(biāo)準(zhǔn)偏差VAR統(tǒng)計(jì)方差4.使用聚合函數(shù)Student(Sno,SName,SSex,Age,Class)Score(Sno,Cno,Degree)例1:計(jì)算班級編號為020104的學(xué)生數(shù)selectcount(*)fromstudentwhereclass=‘020104’例2:計(jì)算最高分和最低分selectmax(degree),min(degree) fromscore例3:計(jì)算最高分和最低分之差selectmax(degree)-min(degree) fromscore常用的聚合函數(shù)列表例4:計(jì)算學(xué)號是2002010401的學(xué)生的平均分selectavg(degree)fromscorewheresno=‘2002010401’5.表的連接查詢在一個查詢中,當(dāng)需要對兩個或多個表連接時,可以指定連接列,在WHERE子句中給出連接條件,在FROM子句中指定要連接的表,格式:SELECT列名1,…FROM表1,…WHERE連接條件Student(Sno,SName,SSex,Age)Score(Sno,Cno,Degree)例1:查詢課程編號是數(shù)學(xué)課程的平均分selectavg(degree)fromscore,coursewhereo=oandame=‘?dāng)?shù)學(xué)’例2:查詢比學(xué)生‘2002010401’的‘6-166’號課程成績高的記錄selects2.*fromscores1,scores2wheres1.sno=‘2002010401’ando=‘6-166’ ands2.degree>s1.degree6.子查詢子查詢可以使用幾個簡單命令構(gòu)造功能強(qiáng)大的復(fù)合命令。子查詢最常用于SQL命令的WHERE子句中。Student(Sno,SName,SSex,Age)Score(Sno,Cno,Degree)例1:查詢比學(xué)生‘2002010401’的‘6-166’號課程成績高的所有記錄select*fromscorewheredegree>(selectdegreefromscorewheresno=‘2002010401’andcno=‘6-166’)例2:查詢存在有85分以上成績的課程cnoselectdistinctcnofromscorewheredegreein(selectdegreefromscorewheredegree>85)例3:查詢“張旭”老師任課的學(xué)生成績,并按成績遞增排列selectcno,sno,degreefromscorewherecno=(selectofromcoursex,teacherywherex.tno=y.tnoandy.tname=“張旭”)orderbydegreedesc例4:查詢選修某課程的學(xué)生人數(shù)多于5人的教師姓名selecttnamefromteacherwheretnoin(selectx.tnofromcoursex,scoreywhereo=ogroupbyx.tnohavingcount(x.tno)>5)說明:SQL命令還提供了UNION子句,它可以將多個SQL命令連接起來生成單個SQL無法做到的結(jié)果集合。例:查詢所有教師和學(xué)生的tname、tsext和tbirthday.Selecttnameas“姓名”,tsextas“性別”,tbirthdayas“出生日期”fromteacherUNIONSelectsname,ssext,sbirthday
fromstudent例5:查詢選修編號為“3-105”的課程,且成績高于所有編號為“3-245”成績低的學(xué)生的cno,sno,degreeSelectcno,sno,degreefromscorewherecno=“3-105”anddegree>all(selectdegreefromscorewherecno=“3-245”)Orderbydegreedesc注意事項(xiàng)1、使用別名的格式格式1:別名AS字段名稱格式2:字段名稱別名格式3:別名=字段名稱(其中的別名用單引號括起來)2、ntext、text、image三種類型的數(shù)據(jù)不能用作ORDERBY排序的字段。3、SELECT列表中可以直接出現(xiàn)字符串,它將直接顯示在結(jié)果中。如:SELECT
學(xué)號,‘總成績’,sum(成績)FROMSTUDENT對比:SELECT
學(xué)號,sum(成績)AS總成績,FROMSTUDENT4、GETDATE()函數(shù)可以獲取當(dāng)前的日期。函數(shù)DATEPART(參數(shù)表)可以取日期時間類型數(shù)據(jù)中的各個組成成份,具體到網(wǎng)上查著用。5、要想顯示單引號,必須用兩個單引號表示如:SET@XX=‘thisisa’’string’’’6、CHAR函數(shù)可以將一個整數(shù)轉(zhuǎn)換成ASCII碼如:在字符串中用CHAR(13)和CHAR(10)產(chǎn)生一個回車并生成一個新行,PRINT用于打印字符串,將其顯示在屏幕上。PRINT‘第一行’+CHAR(13)+CHAR(10)+‘第二行’執(zhí)行結(jié)果為:第一行 第二行7、日期時間類型數(shù)據(jù)為datetime(精確到3‰秒)和smalldatetime(精確到精確到分鐘)如:SELECTCAST(‘2010-6-112:35:29.988’ASsmalldatetime)結(jié)果顯示:2010-6-112:35:00(1)CAST函數(shù)是將某種數(shù)據(jù)類型的表達(dá)式轉(zhuǎn)換為另一種數(shù)據(jù)類型(AS前面的類型轉(zhuǎn)為AS后面的類型)。
8、SQLSERVER支持邏輯數(shù)據(jù)類型bit,它可以存儲整型數(shù)據(jù)1、0、NULL。如果輸入0以外的其它值時,SQLSERVER均把它著1。4.3TSQL程序設(shè)計(jì)基礎(chǔ)4.3.1標(biāo)識符1.常規(guī)標(biāo)識符常規(guī)標(biāo)識符必須符合標(biāo)識符的格式規(guī)則。在TSQL語句中使用常規(guī)標(biāo)識符時不用將其分隔。在SQLServer2005中,常規(guī)標(biāo)識符的格式規(guī)則取決于數(shù)據(jù)庫的兼容級別,兼容級別可以用存儲過程sp_dbcmptlevel來設(shè)置。當(dāng)兼容級別為80時,規(guī)則如下:?第一個字符必須是Unicode2.0標(biāo)準(zhǔn)所定義的字母、下劃線、@、#。?后續(xù)字符可以是Unicode2.0所定義的字母、來自基本拉丁字母或其他國家/地區(qū)腳本的十進(jìn)制數(shù)字、at符號(@)、美元符號($)、數(shù)字符號(#)或下劃線(_)。?標(biāo)識符不能是TSQL的保留字。SQLServer保留其保留字的大寫和小寫形式。不允許嵌入空格或其它特殊字符。?常規(guī)標(biāo)識符和分隔標(biāo)識符包含的字符數(shù)必須在1~128之間。對于本地臨時表,標(biāo)識符最多可以有116個字符。2.分隔標(biāo)識符在TSQL語句中,對不符合所有標(biāo)識符規(guī)則的標(biāo)識符必須進(jìn)行分隔。符合標(biāo)識符格式規(guī)則的標(biāo)識符可以分隔,也可以不分隔。分隔標(biāo)識符在下列情況下使用:?當(dāng)在對象名稱或?qū)ο竺Q的組成部分中使用保留字時,推薦不要使用保留關(guān)鍵字作為對象名稱。?當(dāng)使用未被列為合法標(biāo)識符的字符時,SQLServer允許在分隔標(biāo)識符中使用當(dāng)前代碼頁中的任何字符。在SQLServer中,TSQL所使用的分隔標(biāo)識符類型有下面兩種:
?被引用的標(biāo)識符用雙引號(“”)分隔開。
?括在括號中的標(biāo)識符用方括號([])分隔。分隔標(biāo)識符的格式規(guī)則是:?分隔標(biāo)識符可以包含與常規(guī)標(biāo)識符相同的字符數(shù)(1~128個,不包括分隔符字符)。本地臨時表標(biāo)識符最多可以包含116個字符。?標(biāo)識符主體可以包含當(dāng)前代碼頁內(nèi)字母(分隔符本身除外)的任意組合。3.使用標(biāo)識符在SQLServer2005中,一個對象的全稱語法格式為:server.database.owner.object可用的簡寫格式包含下面幾種:server.database..objectserver..owner.objectserver…objectdatabase.ownerobjectdatabase..objectowner.objectobject在上面的簡寫格式中,沒有指明的部分使用如下的默認(rèn)設(shè)置值:服務(wù)器(本地服務(wù)器),數(shù)據(jù)庫(當(dāng)前數(shù)據(jù)庫),所有者(在指定的數(shù)據(jù)庫中與當(dāng)前連接會話的登錄標(biāo)識相對應(yīng)的數(shù)據(jù)庫用戶或數(shù)據(jù)庫所有者)例如:一個用戶名為bookadm的用戶登錄到myserver服務(wù)器上,并使用book數(shù)據(jù)庫,使用下述語句創(chuàng)建了一個mytable表。Creattablemytable(column1int,column2char(20))則:表mytable的全稱就是:myserver.book.bookadm.mytable4.3.2數(shù)據(jù)類型在SQLServer2005中,以下對象可以具有數(shù)據(jù)類型:?表和視圖中的列。?存儲過程中的參數(shù)。?變量。?返回一個或多個特定數(shù)據(jù)類型數(shù)據(jù)值的TSQL函數(shù)。?具有一個返回代碼的存儲過程(返回代碼總是具有integer數(shù)據(jù)類型)。指定對象的數(shù)據(jù)類型定義了該對象的4個特性:?對象所含的數(shù)據(jù)類型。?所存儲值的長度或它的大小。?數(shù)字精度(僅用于數(shù)字?jǐn)?shù)據(jù)類型)。?數(shù)值小數(shù)位數(shù)(僅用于數(shù)字?jǐn)?shù)據(jù)類型)。分類數(shù)據(jù)類型定義符整數(shù)型Bigint(8),int(4),smallint(2),tinyint(1)邏輯數(shù)值型Bit(1或2字節(jié),不可建索引)小數(shù)數(shù)據(jù)類型decimal,numeric(長度見P147表9.3)貨幣型Money(8),smallmoney(4)(前面加¥符號)近似數(shù)值型float,real(長度見P148表9.4)字符型char,varchar,text(用“”‘’括起來的字符串)見P148、9Unicode字符型Nchar,nvarchar,ntext二進(jìn)制數(shù)據(jù)類型Binary(最多8KB),varbinary(最多8KB)
,image日期時間類型datetime,smalldatetime(格式見P152-153)其他數(shù)據(jù)類型cursor,sal_variant,table,timestamp,uniqueidentifier見P155SQLServer2005提供的系統(tǒng)數(shù)據(jù)類型4.3.3運(yùn)算符SQLServer的運(yùn)算符有算術(shù)運(yùn)算符、賦值運(yùn)算符、按位運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、字符串連接運(yùn)算符和一元運(yùn)算符。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符包括+、-、*、/和%(取模)
%(取模,結(jié)果符號與被除數(shù)據(jù)的符號相同)2.賦值運(yùn)算符TSQL有一個賦值運(yùn)算符,即等號(=)。3.按位運(yùn)算符按位運(yùn)算符包括&(按位與)、|(按位或)和^(按位異或)。4.比較運(yùn)算符SQLServer提供的比較運(yùn)算符有下面幾種:>、<、=、<=、>=、!=、<>、!<、!>5.邏輯運(yùn)算符SQLServer總共提供了10個邏輯運(yùn)算符,如表所示。邏輯運(yùn)算符含義ALL當(dāng)一組比較關(guān)系的值都為TRUE時,才返回TRUEAND當(dāng)要比較的兩個布爾表達(dá)式的值都為TRUE,才返回TRUEANY只要一組比較關(guān)系中有一個值為TRUE,就返回TRUEBETWEEN只有操作數(shù)在定義的范圍內(nèi),才返回TRUE(含兩個端點(diǎn))EXISTS如果在子查詢中存在,就返回TRUEIN如果操作數(shù)在所給的列表表達(dá)式中,則返回TRUELIKE如果操作數(shù)與模式相匹配,則返回TRUE(下頁有例子)(常使用通配符)NOT對所有其他的布爾運(yùn)算取反OR只要比較的兩個表達(dá)式有一個為TRUE,就返回TRUESOME如果一組比較關(guān)系中有一些為TRUE,則返回TRUE說明:SQLServer中通配符及其含義%包含0個或更多個字符的任意字符串—任何單個字符[]指定范圍([a-f]或集合([abcdef])中的任何單個字符)[^]不屬于指定范圍([a-f]或集合([abcdef])的任何單個字符)例:利用like運(yùn)算符查找相匹配的記錄select*fromtestdb..studentwheresnamelike'%明%’select*fromtestdb..studentwheresnamelike‘王%’select*fromtestdb..studentwheresnamelike‘_明’
select*fromtestdb..studentwheresnamelike‘[王,李]%’select*fromtestdb..studentwheresnamelike‘[^王,李]%’6.字符串連接運(yùn)算符字符串連接運(yùn)算符為加號(+)。7.一元運(yùn)算符一元操作符包含+(正)、-(負(fù))和~(按位取反)。測試字符串連接運(yùn)算符select'姓名:'+sname+',性別'+ssex+',年齡'+cast(ageaschar)fromtestdb..studentwheresnamelike'_明‘8.在SQLServer中,運(yùn)算符的優(yōu)先級如下:?+(正)、-(負(fù))、~(按位取反)?*(乘)、/(除)、%(模)?+(加)、+(連接)、-(減)?=、>、<、>=、<=、<>、!=、!>和!<比較運(yùn)算符?^(位異或)、&(位與)、|(位或)?NOT?AND?ALL、ANY、BETWEEN、IN、LIKE、OR、SOME?=(賦值)4.3.4變量變量分為局部變量和全局變量。全局變量名稱前面有兩個at符號(@@),由系統(tǒng)定義和維護(hù)。局部變量前面有一個at符號(@),由用戶定義和使用。1.局部變量局部變量的定義可以使用DECLARE語句,其語法格式如下:DECLARE{@local_variabledata_type}[,…n]如果要給變量賦值,可使用SET和SELECT語句。語法格式如下:SET@local_variable=expressionSELECT{@local_variable=expression}[,…n]2.全局變量變量名稱說明
@@FETCH_STATUS返回FETCH語句游標(biāo)的狀態(tài)@@identity返回最新插入的identity列值@@IDLE返回自SQLServer本次啟動以來,CPU空閑的時間,單位為毫秒@@IO_BUSY返回自SQLServer本次啟動以來,CPU處理輸入和輸出操作的時間,單位為毫秒@@LANGID返回本地當(dāng)前使用的語言標(biāo)識符@@LANGUAGE返回當(dāng)前使用的語言名稱@@LOCK_TIMEOUT返回當(dāng)前的鎖定超時設(shè)置,單位為毫秒@@MAX_CONNECTIONS返回SQLServer允許同時連接的最大用戶數(shù)目@@MAXPRECISION返回當(dāng)前服務(wù)器設(shè)置的decimal和numeric數(shù)據(jù)類型使用的精度@@NESTLEVEL返回當(dāng)前存儲過程的嵌套層數(shù)@@OPTIONS返回當(dāng)前SET選項(xiàng)信息@@PACK_RECEIVED返回自SQLServer本次啟動以來,通過網(wǎng)絡(luò)讀取的輸入數(shù)據(jù)包數(shù)目SQLServer2005中的全局變量變量名稱說明
@@PACK_SENT返回自SQLServer本次啟動以來,通過網(wǎng)絡(luò)發(fā)送的輸出數(shù)據(jù)包數(shù)目@@PACKET_ERRORS返回自SQLServer本次啟動以來,SQLServer中出現(xiàn)的網(wǎng)絡(luò)數(shù)據(jù)包的錯誤數(shù)目@@PROCID返回當(dāng)前的存儲過程標(biāo)識符@@REMSERVER返回注冊記錄中顯示的遠(yuǎn)程數(shù)據(jù)服務(wù)器的名稱@@ROWCOUNT返回上一個語句所處理的行數(shù)@@SERVERNAME返回運(yùn)行SQLServer的本地服務(wù)器名稱@@SERVICENAME返回SQLServer運(yùn)行時的注冊鍵名稱@@SPID返回服務(wù)器處理標(biāo)識符@@TEXTSIZE返回當(dāng)前TESTSIZE選項(xiàng)的設(shè)置值@@TIMETICKS返回一個計(jì)時單位的微秒數(shù),操作系統(tǒng)的一個計(jì)時單位是31.25毫秒@@TOTAL_ERRORS返回自SQLServer本次啟動以來,磁盤的讀寫錯誤次數(shù)@@TOTAL_READ返回自SQLServer本次啟動以來,讀磁盤的次數(shù)@@TOTAL_WRITE返回自SQLServer本次啟動以來,寫磁盤的次數(shù)@@TRANCOUNT返回當(dāng)前連接的有效事務(wù)數(shù)@@VERSION返回當(dāng)前SOLServer服務(wù)器的日期,版本和處理器類型SQLServer2005中的全局變量4.3.5批處理批處理是包含一個或多個TSQL語句的組,從應(yīng)用程序一次性地發(fā)送到SQLServer執(zhí)行。批處理語句以GO結(jié)束。運(yùn)行時錯誤(如算術(shù)溢出或違反約束)會產(chǎn)生以下兩種影響之一:?大多數(shù)運(yùn)行時錯誤將停止執(zhí)行批處理中當(dāng)前及其之后的語句。?少數(shù)運(yùn)行時錯誤(如違反約束)僅停止執(zhí)行當(dāng)前語句。而繼續(xù)執(zhí)行批處理中其它所有語句。在建立一個批處理的時候,應(yīng)該遵循下面的規(guī)則:?如果EXECUTE語句是批處理中的第一句,則不需要EXECUTE。如果EXECUTE語句不是批處理中的第一條語句,則需要EXECUTE。USESCHOOLGOCREATEVIEWVIEW1ASSELECT*FROMSTUDENTWHERECLASS='95031'GOSELECT*FROMVIEW1GO?CREATEDEFAULT、CREATEPROCEDURE、CREATERULE、CREATETRIGGER和CREATEVIEW語句不能在批處理中與其它語句組合使用。批處理必須以CREATE語句開始。所有跟在該批處理后的其它語句將被解釋為第一個CREATE語句定義的一部分。不能在同一個批處理中更改表,然后引用新列。4.3.6注釋SQLServer支持兩種類型的注釋字符:--(雙連字符):可與要執(zhí)行的代碼處在同一行,也可另起一行,若為多行注釋,則必須在每個注釋行的開始使用雙連字符。/*…*/:可與要執(zhí)行的代碼處在同一行,也可另起一行,甚至在可執(zhí)行代碼內(nèi),若為多行注釋,則必須在開始處使用/*,在結(jié)束處使用*/,注釋行內(nèi)不應(yīng)出現(xiàn)其他注釋字符。說明:多行/*…*/注釋不能跨越批處理,整個注釋必須包含在一個批處理內(nèi)。USESCHOOL/*打開SCHOOL數(shù)據(jù)庫*/GOCREATEVIEWVIEW1ASSELECT*FROMSTUDENTWHERECLASS='95031'GOSELECT*FROMVIEW1--執(zhí)行一個SELECT語句GO控制流語句說明BEGIN…END定義語句塊IF…ELSE條件處理語句,如果條件成立,執(zhí)行IF語句;否則執(zhí)行ELSE語句CASE分支語句WHILE循環(huán)語句GOTO無條件跳轉(zhuǎn)語句RETURN無條件退出語句WAITFOR延遲語句BREAK跳出整個循環(huán)語句CONTINUE重新開始下一次循環(huán)語句4.3.7控制流語句SQLServer提供的控制流語句如下表所示。1.BEGIN…END語句BEGIN…END語句用于將多個TSQL語句組合為一個邏輯塊。語法格式為:BEGIN {sql語句|語句塊} END例如:begindeclare@varFfloatset@varF=456.256beginprint'變量@varF的值為:'printcast(@varFasvarchar(12))endendCast函數(shù)可將各種不同類型的數(shù)據(jù)轉(zhuǎn)換為字符串下面幾種情況經(jīng)常要用到BEGIN和END語句:?WHILE循環(huán)需要包含語句塊。?CASE函數(shù)的元素需要包含語句塊。?IF或ELSE子句需要包含語句塊。2.IF…ELSE語句使用IF…ELSE語句,可以有條件地執(zhí)行語句。其語法格式如下IFBoolean_expression{sql語句|語句塊}[ELSE{sql語句|語句塊}]如果IF和ELSE語句的后面都使用了CREATTABLE或者SELECTINTO語句,那么CREATTABLE或者SELECTINTO
語句必須指向相同的表名。例如:使用IFELSE結(jié)構(gòu)實(shí)現(xiàn)查詢Useschoolif(selectavg(degree)fromscorewherecno='3-105')>80 begin print'課程:3-105' print'考試成績還不錯' endelse begin print'課程:3-105' print'考試成績一般' end;3.CASE語句使用CASE語句可以進(jìn)行多個分支的選擇。CASE具有兩種格式:?簡單CASE格式?搜索CASE格式(1)簡單CASE格式,其語法格式如下:CASEinput_expressionWHENwhen_expressionTHENresult_expression […n][ELSEelse_result_expression]END例如:useschoolselecttnameas'姓名',departas'單位',caseprof when'教授'then'高級職稱' when'副教授'then'高級職稱' when'講師'then'中級職稱'/*when'助教'then'初級職稱‘*/
ELSE‘無職稱’endas'職稱'fromteacher(2)搜索CASE格式,其語法格式如下:CASEWHENBoolean_expressionTHENresult_expression[…n][ELSEelse_result_expression]END例如:usetestdbselectsnoas'姓名‘,cnoas'單位',casewhendegree>=85then'A'whendegree>=75then'B'whendegree>=60then'C'/*whendegree<60then'E'
*/
else‘E’endas'成績'fromscore4.WHILE語句WHILE語句可以設(shè)置重復(fù)執(zhí)行SQL語句或語句塊的條件??梢允褂肂REAK和CONTINUE關(guān)鍵字在循環(huán)內(nèi)部控制WHILE循環(huán)中語句的執(zhí)行。其語法格式如下:WHILEBoolean_expression{sql語句|語句塊}[BREAK]{sql語句|語句塊}[CONTINUE]例如:使用while循環(huán)求1+2+...+100declare@sint,@iintset@i=0set@s=0while@i<=100beginset@s=@s+@iset@i=@i+1endprint'1+2+...+100='+cast(@saschar(25))例如:使用goto語句求1+2+...+100declare@sint,@iintset@i=0set@s=0my_loop:set@s=@s+@iset@i=@i+1if@i<=100gotomy_loopprint'1+2+...+100='+cast(@saschar(25))5.GOTO語句GOTO語句可以實(shí)現(xiàn)無條件的跳轉(zhuǎn)。其語法格式為:GOTOlable6.RETURN語句使用RETURN語句,可以從查詢或過程中無條件退出??稍谌魏螘r候用于從過程、批處理或語句塊中退出,而不執(zhí)行位于RETURN之后的語句。語法格式為:RETURN[integer_expression]例如:UseschoolGoCreateprocmyp@nochar(10)--創(chuàng)建存儲過程myp,no為形參Asreturn(selectavg(degree)fromscorewheresno=@no)執(zhí)行完上述語句后再執(zhí)行下面的SQL語句declare@nochar(10),@avg1floatSet@no=‘108’Exec@avg1=myp@no--no為實(shí)參Selectsname,@avg1as‘平均分’fromstudentwheresno=@nogo7.WAITFOR語句使用WAITFOR語句,可以在指定的時間或者過了一定時間后,執(zhí)行語句塊、存儲過程或者事務(wù)。語法格式為:WAITFOR{DELAY'time'|TIME'time'}其中:DELAY指示SQLServer一直等到指定的時間過去,最長24小時?!畉ime’要等待的時間。不允許有日期部分。TIME指示SQLServer等待到指定時間。例如:下面的語句指定在1時10分執(zhí)行一個語句。BEGINWAITFORTIME‘2:10:00’PRINT‘現(xiàn)在是2:10:00’END執(zhí)行后,等機(jī)器時間到了2時10分,則出現(xiàn)信息現(xiàn)在是2:10:00說明:1、函數(shù)convert的作用是將一個數(shù)傳值型數(shù)據(jù)轉(zhuǎn)換為字符串。例,CONVERT(char(10),GETDATE(),3)–其中的3為第三種格式dd/mm/yy,10為后面的日期取出的長度。2、函數(shù)ISNULL常用于某些有關(guān)聯(lián)的表之間,當(dāng)某些列為空時無法向與該列相關(guān)聯(lián)的表中插入數(shù)據(jù),而此時又必須向與這些與此為空的列有關(guān)聯(lián)的表中插入記錄,此時可以將這些為空的列值設(shè)置為某一個無用的數(shù)據(jù)。例:SELECTSNOAS‘學(xué)號’,SNAMEAS‘姓名’, ISNULL(DEGREE,0)AS‘成績’FROM STUDENTWHERESET=‘男’1.內(nèi)置函數(shù)函數(shù)分類說明聚合函數(shù)執(zhí)行的操作是將多個值合并為一個值,如COUNT、SUM、MIN、MAX配置函數(shù)是一種標(biāo)量函數(shù),可返回有關(guān)配置設(shè)置的信息游標(biāo)函數(shù)返回有關(guān)游標(biāo)狀態(tài)的信息日期和時間函數(shù)操作datetime和smalldatetime值數(shù)學(xué)函數(shù)執(zhí)行三角、幾何和其他數(shù)字運(yùn)算元數(shù)據(jù)函數(shù)返回?cái)?shù)據(jù)庫和數(shù)據(jù)庫對象的特性信息行集函數(shù)返回行集,這些行集可用在Transact-SQL語句中表引用所在的位置安全性函數(shù)返回有關(guān)用戶和角色的信息字符串函數(shù)操作char、varchar、nchar、nvarchar、binary、varbinary值系統(tǒng)函數(shù)對系統(tǒng)級別的各種選項(xiàng)和對象進(jìn)行操作或報(bào)告系統(tǒng)統(tǒng)計(jì)函數(shù)返回有關(guān)SQLServer性能的信息文本和圖像函數(shù)操作text和image值SQLServer2005提供的內(nèi)置函數(shù)4.3.8函數(shù)SQLServer2005支持兩種函數(shù)類型:內(nèi)置函數(shù)和用戶定義函數(shù)。2.用戶定義函數(shù)SQLServer2005支持3種用戶定義函數(shù):?標(biāo)量函數(shù)?內(nèi)嵌表值函數(shù)?多語句表值函數(shù)SQLServer2005還支持返回table數(shù)據(jù)類型的用戶定義函數(shù):?該函數(shù)可聲明內(nèi)部table變量,將行插入該變量,然后將該變量作為返回值返回。?一類稱為內(nèi)嵌函數(shù)的用戶定義函數(shù),將SELECT語句的結(jié)果集作為變量類型table返回。例如:返回單值的函數(shù)useschoolgocreatefunctionCubicVolume(@CubeLengthdecimal(4,1),@CubeWidthdecimal(4,1),@CubeHeightdecimal(4,1))returnsdecimal(12,3)asbegin
return(@CubeLength*@CubeWidth*@CubeHeight)endgoselectCAST(SUN.CubicVolume(1,2,4)aschar(10))as'體積'登錄名例如:返回表的函數(shù)useschoolgocreatefunctionStudent_class(@classnochar(10))returns@sttable(snochar(10),snamechar(10),cnochar(10),degreeint)asbegininsert@stselects.sno,s.sname,o,sc.degreefromstudents,scorescwheres.sno=sc.snoands.class=@classnoreturnEndgoselect*fromstudent_class('020105')內(nèi)嵌用戶定義函數(shù)遵循以下規(guī)則:(1)RETURN子句僅包含關(guān)鍵字table。不必定義返回變量的格式,因?yàn)樗蒖ETURN子句中的SELECT語句的結(jié)果集的格式設(shè)置。(2)函數(shù)體必須由BEGIN和END分隔。(3)RETURN子句在括號中包含單個SELECT語句。SELECT語句的結(jié)果集構(gòu)成函數(shù)所返回的表。內(nèi)嵌函數(shù)中使用的SELECT語句受到與視圖中使用的SELECT語句相同的限制。一、聯(lián)接查詢說明1、內(nèi)聯(lián)接內(nèi)聯(lián)接消除與另一個表中的任何行不匹配的行,僅當(dāng)至少有一個同屬于兩表的行符合聯(lián)接條件時,內(nèi)聯(lián)接才返回行。selectbookname,authornamefrombook
innerjoin
authors
on(book.authorid=authors.authorid)2、外聯(lián)接外聯(lián)接會返回FROM子句中提到的至少一個表或視圖的所有行,只要這些行符合任何WHERE或HAVING搜索條件。將檢索通過左向外聯(lián)接引用的左表的所有行,以及通過右向外聯(lián)接引用的右表的所有行。完整外聯(lián)接中兩個表的所有行都將返回。(1)LEFTOUTERJOIN或LEFTJOIN
(2)RIGHTOUTERJOIN或RIGHTJOIN(3)FULLOUTERJOIN或FULLJOIN
3、左向外聯(lián)接selectbookname,authornamefrombook
LEFTOUTERJOIN
authors
on(book.authorid=authors.authorid)4、右向外聯(lián)接selectbookname,authornamefrombook
LEFTOUTERJOIN
authors
on(book.authorid=authors.authorid)5、完全外聯(lián)接selectbookname,authornamefrombook
FULLOUTERJOIN
authors
on(book.authorid=authors.authorid)6、交叉聯(lián)接(一般無意義)selectbookname,authornamefrombook
CROSSJOIN
authors空值不會相互匹配,可以通過外連接才能測試被連接的某個表的字段是否有空值。二、幾個選擇項(xiàng)的使用1、TOP顯示查詢頭尾若干記錄或百分比(用TOPNPERCENT子句)
例:返回5%定貨額最大的定單
SELECTTOP5PERCENT*FROM
Order
ORDERBYUnitPrice*Quantity*(1-Discount)DESC例:返回96年1月的定單
SELECTOrderID,CustomerID,OrderDateFROM
Orders
WHEREOrderDate>#1/1/96#ANDOrderDate<#1/30/96#
McirosoftJETSQL中,日期用‘#’定界。日期也可以用Datevalue()函數(shù)來代替。在比較字符型的數(shù)據(jù)時,要加上單引號’’,尾空格在比較中被忽略。例:WHERE
OrderDate>#96-1-1#也可以表示為:WHERE
OrderDate>Datevalue(‘1/1/96’)2、使用NOT表達(dá)式求反。
例:查看96年1月1日以后的定單
WHERENotOrderDate<=#1/1/96#
3、IN運(yùn)算符用來匹配列表中的任何一個值。IN子句可以代替用OR子句連接的一連串的條件。
例:要找出住在London、Paris或Berlin的所有客戶
SELECTCustomerID,CityFROM
Customers
WHERECityIn(‘London’,’Paris’,’Berlin’)4、SUBSTRING(字符串,開始位置,長度)例:SELECTSUBSTRING(City,3,4)FROM
Customers三、功能查詢所謂功能查詢,實(shí)際上是一種操作查詢,它可以對數(shù)據(jù)庫進(jìn)行快速高效的操作。它以選擇查詢?yōu)槟康?,挑選出符合條件的數(shù)據(jù),再對數(shù)據(jù)進(jìn)行批處理。功能查詢包括更新查詢,刪除查詢,添加查詢和生成表查詢。功能查詢是一個SELECT查詢(也就是子查詢)它返回單個值且嵌套在SELECT、INSERT、UPDATE、DELETE語句或其它子查詢中。任何允許使用表達(dá)式的地方都可以使用子查詢。如果某個表只出現(xiàn)在子查詢中而不出現(xiàn)在外部查詢中,那么該表中的列就無法包含中輸出中。子查詢最多允許嵌套32層。1、更新查詢
UPDATE子句可以同時更改一個或多個表中的數(shù)據(jù)。它也可以同時更改多個字段的值。語法:UPDATE
表名
SET
新值WHERE準(zhǔn)則
例:英國客戶的定貨量增加5%,貨運(yùn)量增加3%
UPDATE
OEDERS
SET
OrderAmount=OrderAmount*1.1
Freight=Freight*1.03WHERE
ShipCountry=‘UK’2、刪除查詢
DELETE子句可以使用戶刪除大量的過時的或冗于的數(shù)據(jù)。刪除查詢的對象是整個記錄。語法:
DELETE
[表名.*]FROM
來源表WHERE
準(zhǔn)則
例:要刪除所有94年前的定單
DELETE*FROM
OrdersWHEREOrderData<#94-1-1#3、追加查詢
INSERT子句可以將一個或一組記錄追加到一個或多個表的尾部。INTO子句指定接受新記錄的表valueS關(guān)鍵字指定新記錄所包含的數(shù)據(jù)值。語法:
INSETRINTO目的表或查詢(字段1,字段2,…)
valueS(數(shù)值1,數(shù)值2,…)
例:增加一個客戶
INSERTINTOEmployees(FirstName,LastName,title)
valueS(‘Harry’,’Washington’,’Trainee’)4、生成表查詢
可以一次性地把所有滿足條件的記錄拷貝到一張新表中。通常制作記錄的備份或副本或作為報(bào)表的基礎(chǔ)。語法:
SELECT字段1,字段2,…INTO
新表[IN
外部數(shù)據(jù)庫]
FROM
來源數(shù)據(jù)庫WHERE
準(zhǔn)則例:為定單制作一個存檔備份
SELECT*INTO
OrdersArchiveFROM
Orders四、表達(dá)式的值與子查詢1、表達(dá)式的值與子查詢返回的單一值做比較
語法:表達(dá)式comparision
[ANY|ALL|SOME](子查詢)
說明:ANY和SOME謂詞是同義詞,與比較運(yùn)算符(=,<,>,<>,<=,>=)一起使用。返回一個布爾值True或False。ANY的意思是,表達(dá)式與子查詢返回的一系列的值逐一比較,只要其中的一次比較產(chǎn)生True結(jié)果,ANY測試的返回True值(既WHERE子句的結(jié)果),對應(yīng)于該表達(dá)式的當(dāng)前記錄將進(jìn)入主查詢的結(jié)果中。ALL測試則要求表達(dá)式與子查詢返回的一系列的值的比較都產(chǎn)生True結(jié)果,才回返回True值。
例:主查詢返回單價(jià)比任何一個折扣大于等于25%的產(chǎn)品的單價(jià)要高的所有產(chǎn)品。SELECT*FROMProductsWHERE
UnitPrice>ANY
(SELECTUnitPriceFROM[OrderDetails]WHEREDiscount>0.25)
2、檢查表達(dá)式的值是否匹配子查詢返回的一組值的某個值
語法:[NOT]IN(子查詢)
例:返回庫存價(jià)值大于等于1000的產(chǎn)品。SELECTProductNameFROMProductsWHEREProductIDIN(SELECTPrdoctIDFROM[OrderDEtails]WHEREUnitPrice*Quantity>=1000)3、檢測子查詢是否返回任何記錄
語法:[NOT]EXISTS(子查詢)
例:用EXISTS檢索英國的客戶
SELECTComPanyName,ContactNameFROMOrders
WHEREEXIS
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)貸款合同擔(dān)保協(xié)議
- 遠(yuǎn)程辦公勞動合同
- 2025年家居木飾面電商平臺合作推廣合同
- 外墻保溫工程承包合同模板
- 2025年度公司內(nèi)部股東股權(quán)轉(zhuǎn)讓與分紅權(quán)安排合同
- 新車銷售的合同范本(7篇)
- 內(nèi)服抗病類批發(fā)合同(3篇)
- 中外計(jì)算機(jī)產(chǎn)品合資經(jīng)營企業(yè)合同(8篇)
- 2025年度智能倉儲管理系統(tǒng)設(shè)備銷售合同范本
- 2025年度歷史文化街區(qū)建設(shè)項(xiàng)目工程總承包合同范本(含文化遺產(chǎn)保護(hù))
- 四年級計(jì)算題大全(列豎式計(jì)算,可打印)
- 科技計(jì)劃項(xiàng)目申報(bào)培訓(xùn)
- 591食堂不合格食品處置制度
- 產(chǎn)業(yè)鏈鏈長分工表
- 國際金融課件(完整版)
- 導(dǎo)向標(biāo)識系統(tǒng)設(shè)計(jì)(一)課件
- 220t鍋爐課程設(shè)計(jì) 李學(xué)玉
- 全英文劇本 《劇院魅影》
- 北京城的中軸線PPT通用課件
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
- 京東方頂崗實(shí)習(xí)報(bào)告1
評論
0/150
提交評論