高等教育SQL-Server-課件_第1頁
高等教育SQL-Server-課件_第2頁
高等教育SQL-Server-課件_第3頁
高等教育SQL-Server-課件_第4頁
高等教育SQL-Server-課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Transact-SQL語言Transact-SQL語言1Transact-SQL語言SQL是一種結(jié)構(gòu)化查詢語言,它包括數(shù)據(jù)定義、查詢、操縱和控制四個(gè)方面的功能,是一種功能齊全的數(shù)據(jù)庫語言。SQL是ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)局)確認(rèn)的關(guān)系型數(shù)據(jù)庫語言標(biāo)準(zhǔn),因此無論是像Oracle,Sybase,Informix,SQLServer這些大型數(shù)據(jù)庫管理系統(tǒng),還是像VisualFoxPro等微機(jī)上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言。

Transact-SQL語言SQL是一種結(jié)構(gòu)化查詢語言,它包SQL語言及其特點(diǎn)1)非過程化語言在SQL語言中,數(shù)據(jù)的存取路徑并不一定要求用戶指定,存取路徑的選擇和SQL語言的操作過程都是由系統(tǒng)自動(dòng)完成的,用戶只需提出“做什么”,而不必指明“怎么做”,從而提高了數(shù)據(jù)的獨(dú)立性。

SQL語言及其特點(diǎn)1)非過程化語言2)統(tǒng)一的語言SQL語言集數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操縱語言(DML)和數(shù)據(jù)控制語言(DCL)的功能于一體,可以獨(dú)立完成數(shù)據(jù)庫生命周期中的全部活動(dòng),包括定義關(guān)系模式、建立數(shù)據(jù)庫、錄入數(shù)據(jù)、查詢、更新、維護(hù)、數(shù)據(jù)庫安全性控制等一系列操作,為數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)提供良好的環(huán)境。以前的數(shù)據(jù)庫管理系統(tǒng)為上述各類操作提供單獨(dú)的語言,而SQL可用于所有的用戶的數(shù)據(jù)庫活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理、應(yīng)用程序員、決策支持系統(tǒng)人員及許多其他類型的終端用戶,將全部任務(wù)統(tǒng)一在一種語言中。SQL語言及其特點(diǎn)2)統(tǒng)一的語言SQL語言及其特點(diǎn)3)是所有關(guān)系數(shù)據(jù)庫的公共語言由于所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)都支持SQL語言,所以用戶可以將使用SQL的技能從一個(gè)RDBMS轉(zhuǎn)到另一個(gè)RDBMS,所有用SQL編寫的程序都可以從一個(gè)RDBMS移植的另一個(gè)RDBMS。SQL語言及其特點(diǎn)3)是所有關(guān)系數(shù)據(jù)庫的公共語言SQL語言及其特點(diǎn)運(yùn)算符P94算術(shù)運(yùn)算符包括加(+)、減(-)、乘(*)、除(/)和取模(%)賦值運(yùn)算符Transact-SQL中只有一個(gè)賦值運(yùn)算符,即等號(hào)(=)位運(yùn)算符包括按位與(&)、按位或(|)、按位異或(^)和求反(~)。位運(yùn)算符用來對(duì)整型數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)(image數(shù)據(jù)類型除外)之間執(zhí)行位操作。要求在位運(yùn)算符左右兩側(cè)的操作數(shù)不能同時(shí)是二進(jìn)制數(shù)據(jù)。運(yùn)算符P94算術(shù)運(yùn)算符運(yùn)算符比較運(yùn)算符比較運(yùn)算符包括:等于(=)、大于(>)、大于或等于(>=)、小于(<)、小于或等于(<=)、不等于(<>或!=)、不小于(!<)、不大于(!>)。邏輯運(yùn)算符邏輯運(yùn)算符包括與(AND)、或(OR)和非(NOT)等運(yùn)算符。邏輯運(yùn)算返回布爾值,值為TRUE或FALSE。字符串連接運(yùn)算符(+)例如:‘a(chǎn)bc’+‘123’‘a(chǎn)bc123’運(yùn)算符比較運(yùn)算符ALL、ANY分別用于判斷一個(gè)表達(dá)式的值與一個(gè)子查詢結(jié)果集合中的所有或任一個(gè)值間的關(guān)系是滿足指定的比較條件。它們的語法格式為:expression{=|!=|>|>=|!>|<|<=|!<}{ALL|ANY}(subquery)其中,expression為被測(cè)試表達(dá)式。Subquery為子查詢,它返回單列的結(jié)果集合,其中的集合成員具有相同的數(shù)據(jù)類型。EXISTS表示子查詢包含任何行時(shí),為真。運(yùn)算符ALL、ANY運(yùn)算符運(yùn)算符的優(yōu)先級(jí)括號(hào):();乘、除、求模運(yùn)算符:*,/,%;加減運(yùn)算符:+,-;比較運(yùn)算符:=,>,<,>=,<=,<>,!=,!>,!<;位運(yùn)算符:^,&,|;邏輯運(yùn)算符:NOT;邏輯運(yùn)算符:AND;邏輯運(yùn)算符:OR。運(yùn)算符運(yùn)算符的優(yōu)先級(jí)運(yùn)算符變量變量是一種語言中必不可少的組成部分。Transact-SQL語言中有兩種形式的變量,一種是用戶自己定義的局部變量,另外一種是系統(tǒng)提供的全局變量。變量變量是一種語言中必不可少的組成部分。Transact-S全局變量全局變量在整個(gè)SQLServer系統(tǒng)內(nèi)使用。存儲(chǔ)的通常是一些SQLServer的配置設(shè)定值和統(tǒng)計(jì)數(shù)據(jù)。在使用全局變量時(shí)應(yīng)該注意以下幾點(diǎn):全局變量是在服務(wù)器級(jí)定義的。用戶只能使用預(yù)先定義的全局變量。引用全局變量時(shí),必須以標(biāo)記符“@@”開頭。全局變量對(duì)用戶來說是只讀的。局部變量的名稱不能與全局變量的名稱相同。SQLServer中可用的系統(tǒng)全局變量見P102表4.5全局變量全局變量在整個(gè)SQLServer系統(tǒng)內(nèi)使用。存儲(chǔ)的局部變量P103局部變量是一個(gè)能夠擁有特定數(shù)據(jù)類型的對(duì)象,它的作用范圍僅限制在程序內(nèi)部。利用局部變量可以保存程序執(zhí)行過程中的中間數(shù)據(jù)值,保存由存儲(chǔ)過程返回的數(shù)據(jù)值等。局部變量被引用時(shí)要在其名稱前加上標(biāo)志“@”,而且必須先用DECLARE命令定義后才可以使用。局部變量P103局部變量是一個(gè)能夠擁有特定數(shù)據(jù)類型的局部變量局部變量的定義

DECLAER@local_variabledata_type[,@local_variabledata_type…]

局部變量的賦值方法

SET@local_variable=expression[,@local_variable=expression]或者SELECT@local_variable=expression[,@local_variable=expression]局部變量局部變量的定義控制語句P110流程控制語句是指那些用來控制程序執(zhí)行和流程分支的命令,在SQLServer2000中,流程控制語句主要用來控制SQL語句、語句塊或者存儲(chǔ)過程的執(zhí)行流程??刂普Z句P110流程控制語句是指那些用來控制程序執(zhí)行BEGIN…END程序塊BEGIN…END能夠?qū)⒍鄠€(gè)Transact-SQL語句組合成一個(gè)語句塊,并將它們視為一個(gè)單元處理。在條件語句和循環(huán)等控制流程語句中,當(dāng)符合特定條件便要執(zhí)行兩個(gè)或者多個(gè)語句時(shí),就需要使用BEGIN…END語句,其語法形式為:BEGIN

{sql_statement

|statement_block

}

END

BEGIN…END程序塊BEGIN…END能夠?qū)⒍鄠€(gè)TranIF…ELSE語句IF…ELSE語句是條件判斷語句,其中,ELSE子句是可選的,最簡(jiǎn)單的IF語句沒有ELSE子句部分。IF…ELSE語句用來判斷當(dāng)某一條件成立時(shí)執(zhí)行某段程序,條件不成立時(shí)執(zhí)行另一段程序。SQLServer允許嵌套使用IF…ELSE語句,而且嵌套層數(shù)沒有限制。IF…ELSE語句IF…ELSE語句是條件判斷語句,其中,EIF…ELSE語句IF…ELSE語句的語法形式

IFBoolean_expression

{sql_statement|statement_block}

[ELSE

{sql_statement|statement_block}]

例:對(duì)X、Y、Z三個(gè)數(shù)排序輸出。使用SET和SELECT對(duì)變量賦值的區(qū)別使用PRINT和SELECT輸出變量值的區(qū)別IF…ELSE語句IF…ELSE語句的語法形式CASE語句CASE語句嚴(yán)格說起來,不叫語句,應(yīng)該叫CASE表達(dá)式(或叫函數(shù)),因?yàn)樗荒軉为?dú)執(zhí)行,只能作為其它語句中的一部分。CASE表達(dá)式可以計(jì)算多個(gè)條件式,并將其中一個(gè)符合條件的結(jié)果表達(dá)式返回。CASE表達(dá)式按照使用形式的不同,可以分為簡(jiǎn)單CASE表達(dá)式和搜索CASE表達(dá)式。CASE語句CASE語句嚴(yán)格說起來,不叫語句,應(yīng)該叫CASE簡(jiǎn)單CASE表達(dá)式CASEinput_expression

WHENwhen_expressionTHENresult_expression

[...n]

ELSEelse_result_expression

END

例:DECLARE@xint,@yintSET@x=‘2’SET@y=CASE@xWHEN‘1’THEN@x+5WHEN‘2’THEN@x*5ENDSELECT@x,@y簡(jiǎn)單CASE表達(dá)式CASEinput_expression搜索CASE表達(dá)式CASE

WHENBoolean_expressionTHENresult_expression

[...n]

ELSEelse_result_expressionEND

例:DECLARE@xint,@yint

CASEWHEN@x=‘1’THEN@x+5WHEN@x=‘2’THEN@x*5END搜索CASE表達(dá)式CASE

WHENBoolean_exWHILE…CONTINUE…BREAK語句WHILE…CONTINUE…BREAK語句用于設(shè)置重復(fù)執(zhí)行SQL語句或語句塊的條件。只要指定的條件為真,就重復(fù)執(zhí)行語句。其中,CONTINUE語句可以使程序跳過CONTINUE語句后面的語句,回到WHILE循環(huán)的第一行命令。BREAK語句則使程序完全跳出循環(huán),結(jié)束WHILE語句的執(zhí)行。

WHILE語句可以嵌套使用。WHILE…CONTINUE…BREAK語句WHILE…COWHILE…CONTINUE…BREAK語句結(jié)束WHILE語句的語法形式為:WHILEBoolean_expression

BEGIN

{sql_statement|statement_block}

[BREAK]

{sql_statement|statement_block}

[CONTINUE]

{sql_statement|statement_block}

END例:P113【例4.8】求出150~180之間的所有素?cái)?shù)。WHILE…CONTINUE…BREAK語句結(jié)束WHILE語WAITFOR語句WAITFOR語句用于暫時(shí)停止執(zhí)行SQL語句、語句塊或者存儲(chǔ)過程等,直到所設(shè)定的時(shí)間已過或者所設(shè)定的時(shí)間已到才繼續(xù)執(zhí)行。WAITFOR語句的語法形式為:

WAITFOR{DELAY'time'|TIME'time'}

其中,DELAY用于指定時(shí)間間隔,TIME用于指定某一時(shí)刻,其數(shù)據(jù)類型為datetime,格式為‘hh:mm:ss’。WAITFOR語句WAITFOR語句用于暫時(shí)停止執(zhí)行SQL語RETURN語句RETURN語句用于無條件地終止一個(gè)查詢、存儲(chǔ)過程或者批處理,此時(shí)位于RETURN語句之后的程序?qū)⒉粫?huì)被執(zhí)行。RETURN語句的語法形式為:

RETURN[integer_expression

]

其中,參數(shù)integer_expression為返回的整型值。存儲(chǔ)過程可以給調(diào)用過程或應(yīng)用程序返回整型值。RETURN語句RETURN語句用于無條件地終止一個(gè)查詢、存SQL語言的命令SQL功能命令動(dòng)詞說明數(shù)據(jù)定義語言(DDL)CREATE按特點(diǎn)的模式創(chuàng)建一個(gè)新表、視圖和表索引ALTERTABLE修改表結(jié)構(gòu)DROP刪除一張表、視圖、表索引數(shù)據(jù)操縱語言(DML)SELECT從一個(gè)表或多個(gè)表中查詢行和列INSERT向一個(gè)表中增加行UPDATE更新表中存在行的某幾列DELETE從一個(gè)表中刪除行數(shù)據(jù)控制語言(DCL)GRANT向用戶授予操作權(quán)限REVOKE向用戶收回操作權(quán)限SQL語言的命令SQL功能命令動(dòng)詞說明數(shù)據(jù)定義語言(DDL)數(shù)據(jù)定義P1141)定義基本表CREATETABLE<表名>(<列名><數(shù)據(jù)類型>〔約束條件〕〔,<列名><數(shù)據(jù)類型>〔約束條件〕…〕);

數(shù)據(jù)定義P1141)定義基本表2)修改基本表ALTERTABLE<表名>〔ADD<新列名><數(shù)據(jù)類型>〔約束條件〕〕〔DROP<約束條件>〕〔MODIFY(<新列名><數(shù)據(jù)類型>)〕;3)刪除基本表DROPTABLE<表名>;數(shù)據(jù)定義P1192)修改基本表數(shù)據(jù)定義P1193)建立索引CREATE〔UNIQUE〕〔CLUSTER〕INDEX<索引名>

ON<表名>(<列名>〔<次序>〕〔,<列名>〔<次序>〕〕…);數(shù)據(jù)定義3)建立索引數(shù)據(jù)定義4)修改索引ALTERINDEX<索引名>TO[NOT]CLUSTER;5)刪除索引DROPINDEX<索引名>;數(shù)據(jù)定義4)修改索引數(shù)據(jù)定義數(shù)據(jù)操縱語言P124數(shù)據(jù)操縱語言(DML)是指用來查詢、添加、修改和刪除數(shù)據(jù)庫中數(shù)據(jù)的語言,這些語言包括以下四種:SELECT語句INSERT語句UPDATE語句DELETE語句數(shù)據(jù)操縱語言P124數(shù)據(jù)操縱語言(DML)是指用來SELECT語句SELECT語句從數(shù)據(jù)庫中檢索行,并允許從一個(gè)或多個(gè)表中選擇一個(gè)或多個(gè)行或列。根據(jù)WHERE子句中的表達(dá)式,從表中找出滿足條件的元組,形成結(jié)果表。SELECT語句的基本格式如下:SELECT[Distinct][ALL|TOPn]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…[INTOnew_table]FROM<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<分組列名>[HAVING<條件表達(dá)式>]][ORDERBY<列名>[ASC|DESC][,<列名>[ASC|DESC]]

…]其中,[]表示可選項(xiàng)。

SELECT語句SELECT語句從數(shù)據(jù)庫中檢索行,并允許從一SELECT語句的意義是:根據(jù)FROM子句中提供的表,按照WHERE子句中的條件(表間的連接條件和選擇條件)表達(dá)式,從表中找出滿足條件的記錄。按照SELECT子句中給出的目標(biāo)列,選出記錄中的字段值,形成查詢結(jié)果的數(shù)據(jù)表。目標(biāo)列上可以是字段名,字段表達(dá)式,也可以是使用匯總函數(shù)對(duì)字段值進(jìn)行統(tǒng)計(jì)計(jì)算的值。SELECT語句的功能很強(qiáng)??梢酝瓿蓪?duì)各種數(shù)據(jù)的查詢,可以通過WHERE子句的變化,以不同的語句形式,完成相同的查詢?nèi)蝿?wù)。SELECT還可以以子查詢形式嵌入到SELECT語句、INSERT(插入記錄)語句、DELETE(刪除記錄)語句和UPDATE(修改記錄)語句中,作為這些語句操作的條件,構(gòu)成嵌套查詢或帶有查詢的更新(增、刪、改)語句。SELECT語句SELECT語句的意義是:根據(jù)FROM子句中提供的表,按照WSELECT語句中各字句的作用如下:①

SELECT子句:用來指定由查詢返回的列(字段)。②

INTO子句:用來創(chuàng)建新表,并將查詢結(jié)果行插入新表中。③

FROM子句:用來指定從中查詢行的表。④

WHERE子句:用來指定限制返回的行的搜索條件。⑤

GROUPBY子句:用來指定查詢結(jié)果的分組條件,可以利用它進(jìn)行分組匯總。⑥HAVING子句:必須跟隨GROUPBY使用,用來指定分組必須滿足的條件。HAVING子句能使用累計(jì)函數(shù)(如SUM,AVG等函數(shù)),而WHERE子句不能。⑦

ORDERBY子句:用來指定結(jié)果集的排序方式。SELECT語句SELECT語句中各字句的作用如下:SELECT語句SELECT語句單表查詢(不帶條件查詢)查詢指定屬性列查詢所有屬性列重命名查詢的屬性列名對(duì)查詢結(jié)果排序消除查詢?nèi)≈抵貜?fù)的行SELECT語句單表查詢(不帶條件查詢)條件查詢Where子句用來設(shè)置一個(gè)篩選條件,使得查詢結(jié)果中僅包含那些滿足條件的數(shù)據(jù)。比較運(yùn)算符利用空值查詢BETWEEN關(guān)鍵字在WHERE子句中,可以使用BETWEEN、NOTBETWEEN兩個(gè)運(yùn)算符來確定表達(dá)式的取值是否在范圍之內(nèi),并以此作為篩選的條件。用法是:SELECTselect_listFROMtable_sourceWHEREexpression[NOT]BETWEENexpressionANDexpression其中:[]表示可選項(xiàng)。條件查詢Where子句用來設(shè)置一個(gè)篩選條件,使得查詢結(jié)果中條件查詢IN關(guān)鍵字在WHERE子句中,可以使用IN、NOTIN兩個(gè)運(yùn)算符來確定表達(dá)式的取值是否屬于列表值之一,并以此作為篩選的條件。用法是:SELECTselect_listFROMtable_sourceWHEREexpression[NOT]IN(value_list)其中:[]表示可選項(xiàng),value_list表示值列表,若有多個(gè)值,值之間用逗號(hào)分隔。條件查詢IN關(guān)鍵字條件查詢P95LIKE關(guān)鍵字LIKE、NOTLIKE字符串匹配運(yùn)算符可以把表達(dá)式與字符串進(jìn)行比較,并以此作為篩選的條件。用法是:SELECTselect_listFROMtable_sourceWHEREexpression[NOT]LIKE‘string’

其中:[]表示可選項(xiàng),string表示用來進(jìn)行比較的字符串。在string中,可以使用通配符,以實(shí)現(xiàn)對(duì)字符串的模糊查詢。SQLServer提供了四種通配符:%代表任意多個(gè)字符,_(下劃線)代表單個(gè)字符,[]代表指定范圍內(nèi)的單個(gè)字符,[^]代表不在指定范圍內(nèi)的單個(gè)字符。

注:含通配符的字符串須用單引號(hào)引起來。

條件查詢P95LIKE關(guān)鍵字匯總數(shù)據(jù)匯總函數(shù)會(huì)將某個(gè)特定的一組數(shù)值進(jìn)行計(jì)算并將結(jié)果以單一值來返回。除了count函數(shù)之外,其余的匯總函數(shù)會(huì)忽略所有Null的值?!銇碚f,其匯總函數(shù)通常會(huì)與SELECT語句中的GROUPBY一起使用。要使用匯總函數(shù)之前,必須要注意總和并不是適用在每一個(gè)TRANSACT-SQL語句中使用,它只能在如下所示的語句或子句中來使用:(1)SELECT語句的選擇列表(子查詢或外部查詢)。(2)COMPUTE或COMPUTEBY子句。(3)HAVING子句。匯總數(shù)據(jù)匯總函數(shù)會(huì)將某個(gè)特定的一組數(shù)值進(jìn)行計(jì)算并將結(jié)果以單一簡(jiǎn)單的計(jì)算查詢P109

聚合函數(shù)在函數(shù)執(zhí)行過程中對(duì)某一數(shù)據(jù)集(表)中的數(shù)據(jù)進(jìn)行聚合運(yùn)算,執(zhí)行完畢后的輸出結(jié)果是一個(gè)簡(jiǎn)單的數(shù)值。用于計(jì)算檢索的函數(shù)有:1)COUNT求一組值中一共有多少個(gè)2)SUM為一組值求和3)AVG為一組值求平均值4)MAX求一組值中最大值5)MIN求一組值中最小值這些函數(shù)可以用在SELECT短語中對(duì)查詢結(jié)果進(jìn)行計(jì)算簡(jiǎn)單的計(jì)算查詢P109聚合函數(shù)在函數(shù)執(zhí)行過程中對(duì)某一數(shù)分組與計(jì)算查詢

GROUPBY子句通常用于對(duì)某一個(gè)數(shù)據(jù)集(或表)中的某一列上具有相同值的數(shù)據(jù)進(jìn)行操作,即按指定列上值相等的原則分組,然后再對(duì)組進(jìn)行相應(yīng)的操作,這稱為分組查詢。GROUPBY子句用來為結(jié)果集中的每一行產(chǎn)生集合值。如果集合函數(shù)沒有使用GROUPBY子句,則只為SELECT語句報(bào)告一個(gè)集合值。HAVING子句指定組或集合的搜索條件,HAVING通常與GROUPBY一起使用。HAVING的行為與WHERE子句一樣,惟一差別就是HAVING子句可以使用累計(jì)函數(shù)。分組與計(jì)算查詢GROUPBY子句通常用于對(duì)某一個(gè)數(shù)據(jù)集(子查詢

子查詢是一個(gè)包含在另一條SELECT語句里的SELECT語句。外層的SELECT語句叫外部查詢,內(nèi)層的SELECT語句叫內(nèi)部查詢(或子查詢)。通常,任何允許使用表達(dá)式的地方都可以使用子查詢。包含子查詢的SELECT語句主要采用以下格式中的一種:1)WHEREexpression[NOT]IN(subquery)2)WHEREexpressioncomparison_operator[ANY|ALL](subquery)3)WHEREexpression[NOT]EXISTS(subquery)子查詢子查詢是一個(gè)包含在另一條SELECT語句里的SELE子查詢P94使用IN的子查詢使用IN(或NOTIN)引入的子查詢返回的查詢結(jié)果是一列,該列有零值或更多值。子查詢返回結(jié)果之后,外部查詢可以使用這些結(jié)果。其格式為:WHEREexpression[NOT]IN(subquery)子查詢P94使用IN的子查詢子查詢P94使用比較運(yùn)算符的子查詢子查詢可由一個(gè)比較運(yùn)算符引入。比較運(yùn)算符可以是=、<>、>、>=、<、!>,!<或<=等等。其格式為:WHEREexpressioncomparison_operator[ANY|ALL](subquery)其中:comparison_operator為比較運(yùn)算符,ALL表示子查詢subquery返回的查詢結(jié)果中的每一個(gè)值,ANY表示子查詢中的任意一個(gè)值。子查詢P94使用比較運(yùn)算符的子查詢子查詢使用EXISTS的子查詢使用EXISTS(或NOTEXISTS)關(guān)鍵字引入一個(gè)子查詢時(shí),就相當(dāng)于進(jìn)行一次存在測(cè)試。外部查詢的WHERE子句測(cè)試子查詢返回的行是否存在。子查詢實(shí)際上不產(chǎn)生任何數(shù)據(jù);它只返回TRUE或FALSE值。其格式:WHERE[NOT]EXISTS(subquery)子查詢使用EXISTS的子查詢連接查詢P129連接查詢可以在FROM或WHERE子句中指定連接條件,建議在FROM子句中指定連接,因?yàn)檫@樣可以將指定的連接條件與WHERE子句中可能指定的搜索條件分開,連接查詢的主要用法是:

SELECTselect_listFROMfirst_tablejoin_typesecond_table[ON(連接條件)][WHERE篩選條件][ORDERBY排序表達(dá)式[DESC]]其中,join_type指定所執(zhí)行的連接類型,”連接條件”指定連接條件。連接類型可分為內(nèi)連接(INNERJOIN)、外連接(OUTERJOIN)和交叉(CROSSJOIN)三類。連接查詢P129連接查詢可以在FROM或WHERE子內(nèi)連接(INNERJOIN)它利用兩個(gè)關(guān)系中共有的一個(gè)屬性,將該屬性值相等的元組內(nèi)容連接起來,去掉其中的重復(fù)屬性作為新的關(guān)系中的一個(gè)元組。連接過程:執(zhí)行連接時(shí),系統(tǒng)先將左邊的表記錄指針定位在首記錄上,然后再右邊的表中尋找符合條件的記錄,每找到一個(gè)就與左邊的表中的當(dāng)前記錄按指定字段進(jìn)行連接,生成目標(biāo)結(jié)果集中的一條記錄;待右邊的記錄都處理完后,當(dāng)前表的記錄指針則再向下移動(dòng)一個(gè)記錄;重復(fù)上述尋找與連接過程,直至當(dāng)前表的所有記錄處理完為止。內(nèi)連接(INNERJOIN)它利用兩個(gè)關(guān)系中共有的一個(gè)屬性外連接(OUTERJOIN)外連接中參與連接的表有主從之分,以主表的每行數(shù)據(jù)去匹配從表的數(shù)據(jù)行,符合連接條件的數(shù)據(jù)將直接返回到查詢結(jié)果中;如果主表的行在從表中沒有相匹配的行,與內(nèi)連接丟棄不匹配行的做法不同,主表的行不會(huì)被丟棄,而是也返回到查詢結(jié)果中,相對(duì)應(yīng)的從表的行的列位置將被填上NULL值后再返回到結(jié)果集中。外連接又分為:左連接(LEFTOUTERJOIN)右連接(RIGHTOUTERJOIN)完全連接(FULLOUTERJOIN)(兩個(gè)連接表中的所有數(shù)據(jù)行)

外連接(OUTERJOIN)外連接中參與連接的表有主從之分交叉(CROSSJOIN)交叉連接產(chǎn)生的查詢結(jié)果的行數(shù)為第一個(gè)表的行數(shù)乘以第二個(gè)表的行數(shù)。注意:如果交叉連接帶有WHERE子句,則交叉連接的作用同內(nèi)連接一樣。

交叉(CROSSJOIN)交叉連接產(chǎn)生的查詢結(jié)果的行數(shù)為第自連接自連接中,使用同一個(gè)表的相同列進(jìn)行比較連接。這時(shí),對(duì)于同一個(gè)表應(yīng)給出不同的的別名。自連接自連接中,使用同一個(gè)表的相同列進(jìn)行比較連接。這時(shí),對(duì)于聯(lián)合查詢聯(lián)合查詢就是使用UNION字句將來自不同查詢的結(jié)果合并成為一個(gè)結(jié)果,UNION會(huì)自動(dòng)將重復(fù)的數(shù)據(jù)行刪除。帶UNION子句的SELECT語句的主要用法是:SELECTselect_listFROMtable_source[WHERE篩選條件]{UNIONSELECTselect_listFROMtable_source[WHERE篩選條件]}[,...n]ORDERBY{排序表達(dá)式[DESC]}[,...n]其中:[]表示可選項(xiàng);{}表示必選項(xiàng);[,...n]表示前面的項(xiàng)可重復(fù)n次注意:為了進(jìn)行并運(yùn)算,要求進(jìn)行并運(yùn)算的兩個(gè)查詢結(jié)果具有相同的字段個(gè)數(shù),并且具有相同的數(shù)據(jù)類型和取值范圍。

聯(lián)合查詢聯(lián)合查詢就是使用UNION字句將來自不同查詢的結(jié)果合基于查詢生成新表有時(shí)候可能需要將查詢結(jié)果保存下來,使用INTO子句可以生成一個(gè)新表并將查詢結(jié)果保存在這個(gè)新表中。其主要用法是:SELECTselect_listINTOnew_tableFROMtable_source[WHEREsearch_condition]其中:new_table為要新建的表的名稱?;诓樵兩尚卤碛袝r(shí)候可能需要將查詢結(jié)果保存下來,使用INTINSERT(P131)INSERTINTO表名(字段1,字段2,…字段m)values(值1,值2,…值m)表名:表示將要添加數(shù)據(jù)的表。字段1,字段2,…字段m:表示將要用后面的值添加數(shù)據(jù)的列值1,值2,…值m:是要向上述列中添加的數(shù)據(jù)注意:如果表中某列定義了IDENTITY屬性或者將某列的DEFAULT屬性定義成NEWID(),則這樣的列的值不能用INSERT語句給出,而是在使用INSERT語句添加新行時(shí)由系統(tǒng)自動(dòng)生成。INSERT(P

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論