版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
SQL語言1LANSOFTSQL語言1LANSOFT前言SQL是上世紀70年代末期,由IBM實驗室開發(fā)的。SQL是StructuredQueryLanguage的縮寫,即“結構化查詢語言”,它當初是為IBM公司的DB2開發(fā)的,是一個功能強大的數據庫語言。SQL不同于其他的計算機語言,是一個非過程語言。非過程(Nonprocedural)意味著“作什么”而不是“怎么作”,比如:SQL描述出要檢索、刪除、插入的數據特征,而不是怎樣進行這些操作。兩個標準化組織:ANSI(美國國家標準學會)和ISO(國際標準化組織),提出了SQL的工業(yè)標準,目前最新的標準是ANSI-92。2LANSOFT前言SQL是上世紀70年代末期,由IBM實驗室開發(fā)的。SQL概述SQL是操縱和檢索關系數據庫中數據的標準語言,使用SQL,程序員和數據庫管理員可以:修改數據庫結構;改變系統(tǒng)的安全性設置;增加用戶操作庫和表的權利;從庫中查詢信息;更新庫的內容。3LANSOFTSQL概述SQL是操縱和檢索關系數據庫中數據的標準語言,增強SQL為了增強功能,所有的數據庫產品都在一定程度上和ANSI標準有所不同,絕大多數系統(tǒng)提供了SQL的專有擴展功能,將SQL擴展成過程型語言。微軟的數據庫產品SQLServer所提供的Transact-SQL(T-SQL)語言就是擴展的SQL語言。4LANSOFT增強SQL為了增強功能,所有的數據庫產品都在一定程度上
SQL產品
Oracle公司開發(fā)了第一個使用SQL的商品化RDBMS。常見關系數據庫管理系統(tǒng)有:Oracle、Sybase、MicrosoftSQLServer、Access、Ingres等。5LANSOFTSQL產品Oracle公司開發(fā)了第一個使用SQL的商資源SQLServer連機叢書,可從微軟網站單獨下載。搜索引擎:
6LANSOFT資源SQLServer連機叢書,可從微軟網站單獨下載DBMS和RDBMS
DBMS(DatabaseManagermentSystem)
數據庫管理系統(tǒng)層次型數據庫網絡形數據庫關系型數據庫
RDBMS(RelationDatabaseManagermentSystem)
關系數據庫管理系統(tǒng)
7LANSOFTDBMS和RDBMSDBMS(DatabaseMana關系型DBMS—RDBMS
1970年E.F.Codd博士寫了一篇題為《大型共享數據銀行的數據的一個關系模型》(ARelationalModelofDataforLargeSharedDataBanks)的學術論文,這篇論文奠定了關系數據庫的基礎。
Codd博士提出了定義關系數據庫模型的十三條準則:0.一個關系型的DBMS必須能夠通過它的關系能力來全面地管理數據庫。1.信息準確。RDBMS的所有信息(包括表和列名)都應該用表中的值顯式地表示。2.保證訪問準則。在關系數據庫中的每個值都能保證以表名、主碼值和列名的組合訪問。8LANSOFT關系型DBMS—RDBMS1970年E.F.Codd關系數據庫模型的十三條準則3.系統(tǒng)的空值支持策略。RDBMS在系統(tǒng)級上提供對空值(未知的或尚不能顯式地定義具體的數值)處理的支持。空值和默認值不同,并且是獨立于任何域的。4.動態(tài)的、聯機的關系型數據字典。數據庫的描述和它的內容在邏輯級上表示成表,并且可以用數據庫語言查詢。5.功能范圍廣泛的數據子語言。一個關系系統(tǒng)至少應提供一種具有嚴格語法定義的語言,它的功能應很全面、很廣泛,支持數據定義、數據操縱、完整性規(guī)則、授權和事物處理。6.視圖更新準則。所有理論上可更新的可更新的視圖也應該允許由系統(tǒng)更新。9LANSOFT關系數據庫模型的十三條準則3.系統(tǒng)的空值支持策略。RDBM關系數據庫模型的十三條準則7.集合級別上的插入、修改和刪除。DBMS。8.數據物理獨立性。當數據的物理存取方法或存取結構變化時,應用程序和其他特殊程序應保持邏輯上不收影響。9.功能范圍廣泛的數據子語言。一個關系系統(tǒng)至少應提供一種具有嚴格語法定義的語言,它的功能應很全面、很廣泛,支持數據定義、數據操縱、完整性規(guī)則、授權和事物處理。10.視圖更新準則。所有理論上可更新的可更新的視圖也應該允許由系統(tǒng)更新。10LANSOFT關系數據庫模型的十三條準則7.集合級別上的插入、修改和刪關于ODBC11LANSOFT關于ODBC11LANSOFT客戶機/服務器開發(fā)工具
Microsoft公司的VisualBasic、 VisualC++Borland公司的 DelphiPowerSoft公司的PowerBuilder12LANSOFT客戶機/服務器開發(fā)工具Microsoft公司的Visu數據類型在SQL語言中,每個列、局部變量、表達式和參數都有一個相關的數據類型,這是指定對象可持有的數據類型(整型、字符、money等等)的特性。SQLServer提供系統(tǒng)數據類型集,定義了可與SQLServer一起使用的所有數據類型。下面列出系統(tǒng)提供的數據類型集。 精確數字,近似數字,字符串,Unicode字符串,二進制字符串,其它數據類型。 有關數據類型的細節(jié)請看SQLServer聯機叢書。13LANSOFT數據類型在SQL語言中,每個列、局部變量、表達式和使用Unicode數據統(tǒng)一的字符編碼標準,采用雙字節(jié)對字符進行編碼。Unicode規(guī)格為全球商業(yè)領域中廣泛使用的大部分字符定義了一個單一編碼方案。所有的計算機都用單一的Unicode規(guī)格將Unicode數據中的位模式一致地翻譯成字符。這保證了同一個位模式在所有的計算機上總是轉換成同一個字符。數據可以隨意地從一個數據庫或計算機傳送到另一個數據庫或計算機,而不用擔心接收系統(tǒng)是否會錯誤地翻譯位模式。 有關Unicode的細節(jié)請看SQLServer聯機叢書。14LANSOFT使用Unicode數據統(tǒng)一的字符編碼標準,采用雙字一般的語法規(guī)則SQL語法建議:Microsoft?SQLServer?2000Transact-SQL版遵從Entry級SQL-92標準,并支持Intermediate級和Full級標準中的很多附加功能。有關Unicode的細節(jié)請看SQLServer聯機叢書。15LANSOFT一般的語法規(guī)則SQL語法建議:15LANSOFT樣本數據庫
pubs16LANSOFT樣本數據庫pubs16LANSOFT表、行、列行:SQL表中構成表中的水平行的元素集合。表中的每一行代表由該表建模的對象的一個出現,并存儲該對象所有特性的值。例如,在Northwind示例數據庫中,Employees表建立NorthwindTraders公司職員的模型。表中的第一行記錄職員ID為1的職員的全部信息(例如姓名和頭銜)。列:SQL表中每一行中的區(qū)域,存儲用該表制作模型的某個對象特性的數據值。例如,Northwind示例數據庫中的Employees表建立NorthwindTraders公司職員的模型。Employees表的每個行中的LastName列存儲該行所代表的職員的姓氏,就象窗口或表單中的LastName字段包含姓氏一樣。17LANSOFT表、行、列行:SQL表中構成表中的水平行的元素集合。表中SQLServer服務管理器18LANSOFTSQLServer服務管理器18LANSOFT使用查詢分析器19LANSOFT使用查詢分析器19LANSOFT查詢分析器連接SQLServer
本地連接(local).主機名(用ipconfig/all查詢主機名)IP地址
遠程連接主機名IP地址20LANSOFT查詢分析器連接SQLServer本地連接20LANSO第一單元查詢21LANSOFT第一單元查詢21LANSOFT錯誤信息
select服務器:消息170,級別15,狀態(tài)1,行1第1行:'select'附近有語法錯誤。22LANSOFT錯誤信息select22LANSOFT第一個查詢
select*fromauthors星號*告訴數據庫返回由from指定的表的所有列,返回順序由數據庫決定。大小寫不影響查詢結果。selectau_id,au_lname,au_fname,phone,address,city,state,zip,contractfromauthors與前一條SQL語句有相同的結果。23LANSOFT第一個查詢select*fromauthors23L改變列的順序
selectau_id,phone,au_lname,au_fname,address,city,state,zip,contractfromauthors現在你有了控制各列輸出順序的能力。24LANSOFT改變列的順序selectau_id,phone,au選擇個別列如果你只對某些列感興趣,比如只想檢索au_lname,au_fname,phone,address,就應該這樣寫SQL語句:selectau_lname,au_fname,phone,addressfromauthors現在你已經得到你感興趣的列了。25LANSOFT選擇個別列如果你只對某些列感興趣,比如只想檢索au_ln選擇另一張表如果你需要另一張表中的信息,該怎么辦呢?select*fromdiscounts26LANSOFT選擇另一張表如果你需要另一張表中的信息,該怎么辦呢?26結果不重復的查詢觀察下面查詢的輸出:selectcityfromauthors你會發(fā)現有相同的城市,兩個人住在同一個城市這很正常,但如果你想看看到底有那幾個城市在表中怎么辦呢?試試這個:selectdistinctcityfromauthorsSQL語法中還有一個和distinct對應的關鍵字allselectallcityfromauthors你會發(fā)現查詢結果和上面的第一個SQL語句相同,既然如此,誰還想自找麻煩呢?27LANSOFT結果不重復的查詢觀察下面查詢的輸出:27LANSOFT第二單元表達式、條件和操作符28LANSOFT第二單元表達式、條件和操作符28LANSOFT表達式表達式用于返回一個值。它包括:字符串、數字、布爾表達式。其實你已經用過表達式了,跟在select和from中間的東西都是表達式。表達式是符號與運算符的組合。簡單的表達式可以是一個常量、變量、列或標量函數??梢杂眠\算符將兩個或更多的簡單表達式聯接起來組成復雜的表達式。29LANSOFT表達式表達式用于返回一個值。它包括:字符串、數字、布爾表條件30LANSOFT條件30LANSOFTWhere子句Where子句的語法:where<搜索條件>先來回顧一下我們前面所學的“第一個查詢”select*fromauthors你會看到,結果返回了數據庫pubs中表authors的所有內容,如果你想查某一作者的情況,可以鍵入:select*fromauthorswhereau_lname='Smith'我們得到了想要的結果。31LANSOFTWhere子句Where子句的語法:where<搜索條操作符操作符是條件表達式中用于精確表示你想從數據庫中查詢出什么數據的運算符號。操作符大致分為六類:算術操作符、比較操作符、字符操作符、邏輯操作符、集合操作符和其他操作符。32LANSOFT操作符操作符是條件表達式中用于精確表示你想從數據庫中查詢算術操作符(+)加號有兩種不同的用法,可以作算術操作符,也可以作字符操作符,我們先用它作算術操作符。鍵入:selectdiscounttype,stor_id,lowqty,highqty,discountfromdiscounts現在我們把所有的折扣增加0.5元,可以鍵入:selectdiscounttype,stor_id,lowqty,highqty,discount+0.5fromdiscounts我們得到了想要的結果。SQL允許你將已有的列進行組合或計算,以建立虛擬列和導出字段,原始表并不發(fā)生變化。33LANSOFT算術操作符(+)加號有兩種不同的用法,可以作算術操作符,算術操作符(+)續(xù)觀察一下discount+0.5字段的標題是(無列名),太不好聽了,我們把它改一改。鍵入:selectdiscounttype,stor_id,lowqty,highqty,discount+0.5新折扣fromdiscounts很好,我們可以重新命名列標題。重新命名任意字段列標題的語法格式:列名別名(注意它們之間有空格)加號還可以作為字符操作符,后面你將看到這種用法。34LANSOFT算術操作符(+)續(xù)觀察一下discount+0.5字段建立虛擬列我們想把原來的折扣和新折扣加以對照,鍵入:selectdiscounttype,stor_id,lowqty,highqty,discount舊折扣,discount+0.5新折扣fromdiscounts太好了!我們不僅建立了一個新的列,還可以重新命名任意列標題。35LANSOFT建立虛擬列我們想把原來的折扣和新折扣加以對照,鍵入:35算術操作符(-)減號也有兩種用法:可以用某列減去一個常數,或者用一列減去另一列。另一種用法是改變某數的符號。我們先來改變一列數的符號,鍵入:selectdiscounttype,stor_id,lowqty,highqty,discount-3fromdiscounts用一列減去另一列,鍵入:selectdiscounttype,stor_id,lowqty,highqty,discount舊折扣,discount+4新折扣,discount+4-discount折扣差fromdiscounts36LANSOFT算術操作符(-)減號也有兩種用法:可以用某列減去一個常數算術操作符(-)續(xù)如果不小心在數據類型是字符串的字段使用了減號:select-discounttype,stor_id,lowqty,highqty,discountfromdiscounts你將看到類似下面的結果:服務器:消息403,級別16,狀態(tài)1,行1對數據類型而言運算符無效。運算符為minus,類型為varchar。37LANSOFT算術操作符(-)續(xù)如果不小心在數據類型是字符串的字段使算術操作符(/)除號只有一種用法:selectdiscounttype,stor_id,lowqty,highqty,discount/3fromdiscounts或者:selectdiscounttype,stor_id,lowqty,highqty,discount舊折扣,discount+4新折扣,(discount+4)/discount折扣比fromdiscounts38LANSOFT算術操作符(/)除號只有一種用法:38LANSOFT算術操作符(*)乘號也只有一種用法:selectdiscounttype,stor_id,lowqty,highqty,discount*3fromdiscounts或者:selectdiscounttype,stor_id,lowqty,highqty,discount舊折扣,discount+4新折扣,(discount+4)*discount折扣乘fromdiscounts39LANSOFT算術操作符(*)乘號也只有一種用法:39LANSOFT算術操作符(%)模運算返回除法操作的余數:selectdiscounttype,stor_id,lowqty,lowqty%3模,highqty,discountfromdiscounts后面我們將會看到,模運算還可以作為函數。40LANSOFT算術操作符(%)模運算返回除法操作的余數:40LANSO算術操作符優(yōu)先級先乘除后加減,括號優(yōu)先。41LANSOFT算術操作符優(yōu)先級先乘除后加減,括號優(yōu)先。41LANSOF比較操作符比較操作符比較兩個表達式并返回如下三個值之一,TRUE,FALSE或NULL。
重要
不能將空值用于區(qū)分表中兩行所需的信息(例如,外鍵或主鍵)。如果數據出現空值,則邏輯運算符和比較運算符有可能返回TRUE或FALSE以外的第三種結果UNKNOWN。需要三值邏輯是導致許多應用程序出錯之源。42LANSOFT比較操作符比較操作符比較兩個表達式并返回如下三個值之一,NULL空值NULL的概念:在數據庫術語中,如果某記錄的某字段里沒有數據,則該字段的值就是NULL。NULL并不意味著字段包含一個0值或長度為0的字符串。0值是一個整數,而長度為0的字符串也是字符串的一個具體值。NULL意味著什么也沒有!操作符isnull用來檢測變量是否為空值。
重要
為了減少對已有查詢或報表的維護和可能的影響,建議盡量少使用空值。對查詢和數據修改語句進行規(guī)劃,使空值的影響降到最小。43LANSOFTNULL空值NULL的概念:在數據庫術語中,如果某記錄的Isnull操作符我們來找出一列中值為NULL的記錄:select*fromdiscountswherelowqtyisnull
執(zhí)行的不錯,現在如果用等號代替isnull:select*fromdiscountswherelowqty=
null會怎樣呢?試試看吧,什么也沒有,因為lowqty=null的比較結果是FALSE。還有一個操作符是ISNOTNULL,你一看就明白是什么意思。44LANSOFTIsnull操作符我們來找出一列中值為NULL的記錄比較操作符(=)我們早就用過等號了:select*fromdiscountswherediscount=5上面字段discount的數據類型是數字型,對字符串類型的字段記得加上單引號:select*fromdiscountswherediscounttype='VolumeDiscount'45LANSOFT比較操作符(=)我們早就用過等號了:45LANSOFT比較操作符(>和>=)大于號像這樣工作:select*fromdiscountswherediscount>5如果要包括5:select*fromdiscountswherediscount>=5字符也可以比較:select*fromdiscountswherediscounttype>=
'Vo'
46LANSOFT比較操作符(>和>=)大于號像這樣工作:46LANSOF比較操作符(<和<=)小于號像這樣工作:select*fromdiscountswherediscount<6.7如果要包括6.7:select*fromdiscountswherediscount<=6.7字符也可以比較:select*fromdiscountswherediscounttype<=
'Vo'
47LANSOFT比較操作符(<和<=)小于號像這樣工作:47LANSOF比較操作符(<>或!=)不等于可以這樣寫:select*fromdiscountswherediscount<>6.7還可以這樣寫:select*fromdiscountswherediscount!=6.7字符也可以不等于:select*fromdiscountswherediscounttype<>'VolumeDiscount'48LANSOFT比較操作符(<>或!=)不等于可以這樣寫:48LANSO字符操作符(like和%)如果你想查找不十分精確的數據,like很好用:select*fromauthorswhereau_lnamelike'St%'上面的操作選出au_lname的第一個字母是S的記錄,試試小寫select*fromauthorswhereau_lnamelike'st%'大小寫沒關系。%是通配符,代表多個字符。%也可以多個使用,見下面例子。49LANSOFT字符操作符(like和%)如果你想查找不十分精確的數據,字符操作符(_)下劃線是單個字符通配符:select*fromauthorswhereziplike'946_9'多個下劃線使用:select*fromauthorswhereziplike'9_6_8'_與%混合使用:select*fromauthorswherephonelike'%9_6_8%'50LANSOFT字符操作符(_)下劃線是單個字符通配符:50LANSOF字符操作符(+)連接符(+)用于連接兩個字符串:selectau_id,au_lname,au_fname,au_lname+au_fnamefromauthors我們在前面已經學過算術操作符+的用法。51LANSOFT字符操作符(+)連接符(+)用于連接兩個字符串:51LA邏輯操作符(and)與(and)用于連接符兩個表達式。只有當兩個表達式都為TRUE時,and才返回TRUE,否則返回FALSE。select*fromdiscountswherediscount>=5anddiscount<10很容易使用。52LANSOFT邏輯操作符(and)與(and)用于連接符兩個表達式。只邏輯操作符(or)或(or)也用于連接符兩個表達式。當兩個表達式中有一個為TRUE時,or就返回TRUE,只有兩個表達式都為FALSE時才返回FALSE。select*fromdiscountswherediscount=5ordiscount=6.7也很容易使用。53LANSOFT邏輯操作符(or)或(or)也用于連接符兩個表達式。當兩邏輯操作符(not)非(not)是反運算。如果條件為TRUE,則not運算后返回FALSE,反之返回TRUE。select*fromdiscountswherenotdiscount=5也很容易使用。54LANSOFT邏輯操作符(not)非(not)是反運算。如果條件為TR操作符(in)in可以簡化你已經學過的一些查詢,或者說你不會用in也沒關系,用前面學過的知識可以滿足你的要求。我們看前面的一個例子:select*fromdiscountswherediscount=5ordiscount=6.7我們用in來實現。select*fromdiscountswherediscountin(5,6.7)不僅語句更短了,而且更容易閱讀,in也可用于字符類型的字段。55LANSOFT操作符(in)in可以簡化你已經學過的一些查詢,或者說你操作符(between)between也用來簡化你已經學過的一些查詢,或者說你不會用between也沒關系,用前面學過的知識可以滿足你的要求。我們看前面的一個例子:select*fromdiscountswherediscount>=5anddiscount<10我們用between來實現。select*fromdiscountswherediscountbetween5and10不僅語句更短了,而且更容易閱讀,between也可用于字符類型的字段。56LANSOFT操作符(between)between也用來簡化你已經學第三單元函數57LANSOFT第三單元函數57LANSOFT函數聚集函數;日期和時間函數;數學函數;字符函數;數據類型轉換函數;其他函數。函數非常多,我們不能一一舉例,只能作一個示范性的介紹。58LANSOFT函數聚集函數;58LANSOFT聚集函數(count)count函數返回符合select語句中的查詢條件的行數。selectcount(*)fromdiscountswherediscount>=5anddiscount<1059LANSOFT聚集函數(count)count函數返回符合select聚集函數(sum)sum函數返回一列中所有值的和。selectsum(discount)fromdiscountswherediscount>=5anddiscount<10只對數值類型字段有效。60LANSOFT聚集函數(sum)sum函數返回一列中所有值的和。60L聚集函數(avg)avg函數計算一列的平均值。selectavg(discount)fromdiscountswherediscount>=5anddiscount<10只對數值類型字段有效。61LANSOFT聚集函數(avg)avg函數計算一列的平均值。61LAN聚集函數(max)max函數找到一列的最大值。selectmax(discount)fromdiscountswherediscount>=5anddiscount<10可用于字符型字段。62LANSOFT聚集函數(max)max函數找到一列的最大值。62LAN聚集函數(min)min函數找到一列的最小值。selectmin(discount)fromdiscountswherediscount>=5anddiscount<10可用于字符型字段。max函數和min函數可以一塊兒使用,查出值所在的范圍。selectmin(discount),max(discount)fromdiscounts63LANSOFT聚集函數(min)min函數找到一列的最小值。63LAN聚集函數(var)var函數計算標準差的平方—方差。selectvar(discount)fromdiscounts只對數值類型字段有效。64LANSOFT聚集函數(var)var函數計算標準差的平方—方差。64聚集函數(stdev)stdev函數計算標準差的平方—方差。selectstdev(discount)fromdiscounts只對數值類型字段有效。65LANSOFT聚集函數(stdev)stdev函數計算標準差的平方—方日期函數(年、月、日)給定日期取年、月、日。SELECT"YearNumber"=YEAR('03/12/2003'),"MonthNumber"=MONTH('03/12/2003'),DAY('03/12/2003')AS'DayNumber'
注意不同的列標題的定義方法,比較一下我們以前學過的別名。66LANSOFT日期函數(年、月、日)給定日期取年、月、日。66LANS日期函數(年、月、日)與上頁等價的寫法。SELECT"YearNumber"=DATEPART(yy,'03/12/2003'),"MonthNumber"=DATEPART(mm,'03/12/2003'),"DayNumber"=DATEPART(dd,'03/12/2003')注意不同的列標題的定義方法,比較一下我們以前學過的別名。67LANSOFT日期函數(年、月、日)與上頁等價的寫法。67LANSOF日期函數(系統(tǒng)日期)從系統(tǒng)日期中取年、月、日。SELECT"YearNumber"=YEAR(getdate()),"MonthNumber"=MONTH(getdate()),DAY(getdate())AS'DayNumber'68LANSOFT日期函數(系統(tǒng)日期)從系統(tǒng)日期中取年、月、日。68LAN日期函數(訪問字段)從日期字段中取年、月、日。SELECT"YearNumber"=YEAR(hire_date),"MonthNumber"=MONTH(hire_date),DAY(hire_date)AS'DayNumber'fromemployee69LANSOFT日期函數(訪問字段)從日期字段中取年、月、日。69LAN數學函數我們經常要用到數學函數,例如計算discount列的指數:SELECTdiscount,exp(discount)fromdiscounts還有很多數學函數,例如:ABS、CEILING、DEGREES、FLOOR、POWER、RADIANS、SIGN、EXP、LOG、LOG10、SQUARE、SQRT和三角函數,這里不再列舉,可查閱SQLServer聯機叢書。70LANSOFT數學函數我們經常要用到數學函數,例如計算discount字符函數(chr)將intASCII代碼轉換為字符的字符串函數,例如:SELECTchar(65)整數表達式是介于0和255之間的整數。如果整數表達式不在此范圍內,將返回NULL值。對于Unicode編碼,整數表達式可以大于255,例如:SELECTnchar(65)SELECTnchar(26578)71LANSOFT字符函數(chr)將intASCII代碼轉換為字符字符函數(len)len函數返回給定字符串表達式的字符(而不是字節(jié))個數,其中不包含尾隨空格。SELECTdiscount,len(discount)fromdiscountslen函數可用于數字和字符,例如:SELECT*,len(discounttype)fromdiscounts還有很多字符函數,可查閱SQLServer聯機叢書72LANSOFT字符函數(len)len函數返回給定字符串表達式的字符(數據類型轉換數據類型轉換有兩種:隱性轉換對于用戶是不可見的。SQLServer自動將數據從一種數據類型轉換成另一種數據類型。例如,如果一個smallint變量和一個int變量相比較,這個smallint變量在比較前即被隱性轉換成int變量。顯式轉換使用CAST或CONVERT函數。詳細用法可查閱SQLServer聯機叢書。73LANSOFT數據類型轉換數據類型轉換有兩種:73LANSOFT其他函數還有一些函數,如:配置函數、系統(tǒng)函數等,可查閱SQLServer聯機叢書74LANSOFT其他函數還有一些函數,如:配置函數、系統(tǒng)函數等,可查閱S第四單元子句75LANSOFT第四單元子句75LANSOFT子句selectwhereorderbygroupbyhvaing76LANSOFT子句select76LANSOFTSelect語句的一般語法SELECT[ALL|DISTINCT]
[TOPn[PERCENT][WITHTIES]]
<select_list><select_list>::=
{
*
|{table_name|view_name|table_alias}.*
|
{column_name|expression|IDENTITYCOL|ROWGUIDCOL}
[[AS]column_alias]
|column_alias=expression
}
[,...n]77LANSOFTSelect語句的一般語法SELECT[ALL|DSelect語句的一般語法(續(xù))從上頁我們看到了select語法的復雜性,實際上其他SQL語句的語法也很復雜,迄今為止,我們一直避免這種復雜的語法圖,因為對于初學者來說,復雜的語法難以理解,所以我們一直在用例子解釋特定的語法點。下面我們還這樣講,詳細的語法可查閱SQLServer聯機叢書。78LANSOFTSelect語句的一般語法(續(xù))從上頁我們看到了seleSelect語句的子句從數據庫中檢索行,并允許從一個或多個表中選擇一個或多個行或列。雖然SELECT語句的完整語法較復雜,但是其主要的子句可歸納如下:SELECTselect_list
[INTOnew_table]
FROMtable_source
[WHEREsearch_condition]
[GROUPBYgroup_by_expression]
[HAVINGsearch_condition]
[ORDERBYorder_expression[ASC|DESC]]79LANSOFTSelect語句的子句從數據庫中檢索行,并允許從一個或多個Select和where子句指定查詢返回的列。你已經上百次地使用過Select子句和where子句了,以后你還要更多地使用它們。80LANSOFTSelect和where子句指定查詢返回的列。你已經上百從混沌到有序Orderby子句如果你需要把查詢結果按順序顯示,可以使用orderby子句:SELECT*fromtitles記錄是按錄入順序顯示的。下面按價格從小到大排序:SELECT*fromtitlesorderbyprice按價格從大到小排序:SELECT*fromtitlesorderbypricedesc從小到大是升序排列,關鍵字是asc,系統(tǒng)默認排序為升序,所以asc可以省略。從大到小是降序排列,關鍵字是desc。81LANSOFT從混沌到有序Orderby子句如果你需要把查詢結果按Orderby子句(續(xù))orderby子句也可以用來對字符型數據排序,排序規(guī)則較為復雜,可查閱SQLServer聯機叢書。SELECT*fromtitlesorderbytitleascorderby子句也可以按多列進行排序:SELECT*fromtitlesorderbytitle,type,price注意優(yōu)先級:SELECT*fromtitlesorderbyprice,type,title82LANSOFTOrderby子句(續(xù))orderby子句也可以用來Groupby子句指定用來放置輸出行的組,并且如果SELECT子句<selectlist>中包含聚合函數,則計算每組的匯總值。指定GROUPBY時,選擇列表中任一非聚合表達式內的所有列都應包含在GROUPBY列表中,或者GROUPBY表達式必須與選擇列表表達式完全匹配。
說明
如果未指定ORDERBY子句,則使用GROUPBY子句返回的組沒有任何特定的順序。建議始終使用ORDERBY子句指定特定的數據順序。83LANSOFTGroupby子句指定用來放置輸出行的組,并且如果SGroupby子句在前面你已經學會了使用聚集函數(count,sum,avg,min,max等),先看下面:SELECT*fromtitleview注意:titleview是視圖,視圖的概念我們將在后面講解我們計算一下總價格:SELECTsum(price)fromtitleview我們使用多個聚集函數,按每個人分組計算價格:SELECTau_lname,sum(price)分組和,count(au_lname)計數fromtitleviewgroupbyau_lname84LANSOFTGroupby子句在前面你已經學會了使用聚集函數(co子句組合SQL變的越來越有用了。在做項目時,實際情況往往很復雜,我們還可以將子句組合起來使用:SELECTau_lname,sum(price)分組和,count(au_lname)計數fromtitleviewgroupbyau_lnameorderbyau_lnamedesc85LANSOFT子句組合SQL變的越來越有用了。在做項目時,實際情況往往having子句having子句給用在groupby子句中的數據加限制條件。HAVING通常與GROUPBY子句一起使用。如果不使用GROUPBY子句,HAVING的行為與WHERE子句一樣。SELECTau_lname,sum(price)分組和,count(au_lname)計數fromtitleviewgroupbyau_lnamehavingsum(price)>20orderbysum(price)HAVING可以讓你在比較表達式中使用聚集函數,而WHERE則不行。86LANSOFThaving子句having子句給用在groupby子正確使用where和having子句WHERE和ORDERBY子句經常用于單行的查詢,就像這樣:SELECT*fromtitleviewwhereprice>20orderbyau_lnamedescGROUPBY和HAVING一般用于合計,像上頁的例子。如果將WHERE和ORDERBY、GROUPBY和HAVING這兩組子句結合起來,就會產生料想不到的結果,你可以試試看。也許你要的正是這種混亂的局面。87LANSOFT正確使用where和having子句WHERE和ORDE第一階段總結到現在為止,憑你所學的知識,你已經能夠很有效地使用單個表了。下面我們將擴展范圍,包括對多個進行操作。88LANSOFT第一階段總結到現在為止,憑你所學的知識,你已經能夠很有效第五單元創(chuàng)建和操縱表89LANSOFT第五單元創(chuàng)建和操縱表89LANSOFT簡介迄今為止,你已經學習了用各種條件從數據庫中檢索數據。但是,你一定覺得困惑,在查詢之前,這些數據是怎樣寫入數據庫的?SQL”結構化查詢語言“就像它的名字一樣,只能從數據庫中查詢數據嗎?實際上SQL能做的比這多的多,你可以用SQL建庫、建表、增加數據、刪除數據、合并數據,并根據數據庫中數據的變化激發(fā)觸發(fā)器活動。可是沒有找到更好的單詞代替SQL,如果將這種語言稱為”結構化查詢增加修改刪除連接存儲觸發(fā)器查詢語言“是很麻煩的。所以,我們還叫它SQL吧,當然,你現在已經知道它的功能要遠遠大于它的字面意思。90LANSOFT簡介迄今為止,你已經學習了用各種條件從數據庫中檢索數據數據定義語句數據定義語句用來創(chuàng)建數據庫、創(chuàng)建表;修改表結構;刪除表、刪除數據庫。實現這些功能的語句被稱為數據定義語句,主要包括:CREATEDATABASECREATETABLEALTERTABLEDROPTABLEDROPDATABASE數據定義語句用來完成數據庫的管理任務。91LANSOFT數據定義語句數據定義語句用來創(chuàng)建數據庫、創(chuàng)建表;修改表結你的第一個數據庫項目我們的目標是建立一個學生成績管理系統(tǒng)。我們首先建立一個數據庫student,再在student中建立兩個表;學生檔案和學生成績。92LANSOFT你的第一個數據庫項目我們的目標是建立一個學生成績管理系統(tǒng)使用企業(yè)管理器93LANSOFT使用企業(yè)管理器93LANSOFT創(chuàng)建數據庫在開始任何數據庫項目的時候,第一個數據庫管理的步驟就是創(chuàng)建數據庫。盡管現在的數據庫管理系統(tǒng)提供圖形界面工具來完成數據庫的管理工作,但是,學會用SQL代碼來完成數據庫管理任務還是很重要,例如,當我們建立一個自動安裝系統(tǒng)時,就需要用SQL代碼所形成的文件。下面我們用兩種方法創(chuàng)建數據庫。用企業(yè)管理器創(chuàng)建數據庫student(演示)用SQL語句創(chuàng)建數據庫student(注意選擇master數據庫,注意刷新)createdatabasestudent94LANSOFT創(chuàng)建數據庫在開始任何數據庫項目的時候,第一個數據庫管理的刪除數據庫和創(chuàng)建數據庫一樣,我們可以用兩種方法刪除數據庫。用企業(yè)管理器刪除數據庫student(演示)用SQL語句刪除數據庫student(注意選擇master數據庫,注意刷新)dropdatabasestudent95LANSOFT刪除數據庫和創(chuàng)建數據庫一樣,我們可以用兩種方法刪除數據庫創(chuàng)建表“學生檔案”我們用兩種方法創(chuàng)建表。(注意避免“空”-NULL)用企業(yè)管理器創(chuàng)建表“學生檔案”(演示)使用默認值(DEFAULT)約束可以使得客戶端編程方便一些,默認值可以是常量、函數、系統(tǒng)函數、空值(NULL)等,默認值不能用于timestamp列和IDENTITY列。用SQL語句創(chuàng)建表“學生檔案”(注意選擇student數據庫,注意刷新)下頁是創(chuàng)建“學生檔案”的SQL代碼。96LANSOFT創(chuàng)建表“學生檔案”我們用兩種方法創(chuàng)建表。(注意避免“空”創(chuàng)建表“學生檔案”(續(xù))ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[學生檔案]')andOBJECTPROPERTY(id,N'IsUserTable')=1)droptable[dbo].[學生檔案]GOCREATETABLE[dbo].[學生檔案]( [s_id][int]IDENTITY(1,1)NOTNULL, [學號][varchar](10)COLLATEChinese_PRC_CI_ASNULL, [姓名][varchar](10)COLLATEChinese_PRC_CI_ASNULL, [性別][char](2)COLLATEChinese_PRC_CI_ASNULL, [班級][varchar](50)COLLATEChinese_PRC_CI_ASNULL)ON[PRIMARY]GO97LANSOFT創(chuàng)建表“學生檔案”(續(xù))ifexists(selectSQL代碼的自動生成手工書寫SQL代碼雖不是很難,但也要花費一些時間,我們可以用企業(yè)管理器自動生成已建對象的SQL語言代碼。例:生成單個表的SQL腳本代碼。打開企業(yè)管理器–選擇一個表,例如:學生檔案–右擊表名–所有任務–打開“生成SQL腳本”對話框–確定–選擇路徑和文件名–保存。在查詢分析器中運行看看,你發(fā)現沒有默認值約束的定義,主鍵定義也沒有,就是我們前面用過的。怎么辦?在打開的“生成SQL腳本”對話框中,選擇選項卡,選中表腳本選項的4個復選框,生成新的SQL腳本代碼。98LANSOFTSQL代碼的自動生成手工書寫SQL代碼雖不是很難,但也要SQL代碼的自動生成(續(xù))ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[學生檔案]')andOBJECTPROPERTY(id,N'IsUserTable')=1)droptable[dbo].[學生檔案]GOCREATETABLE[dbo].[學生檔案]( [s_id][int]IDENTITY(1,1)NOTNULL, [學號][varchar](10)COLLATEChinese_PRC_CI_ASNULL, [姓名][varchar](10)COLLATEChinese_PRC_CI_ASNULL, [性別][char](2)COLLATEChinese_PRC_CI_ASNULL, [班級][varchar](50)COLLATEChinese_PRC_CI_ASNULL)ON[PRIMARY]GOALTERTABLE[dbo].[學生檔案]WITHNOCHECKADD CONSTRAINT[PK_學生檔案]PRIMARYKEYCLUSTERED ( [s_id] )ON[PRIMARY]GOALTERTABLE[dbo].[學生檔案]ADD CONSTRAINT[DF_學生檔案_學號]DEFAULT('')FOR[學號], CONSTRAINT[DF_學生檔案_姓名]DEFAULT('')FOR[姓名], CONSTRAINT[DF_學生檔案_性別]DEFAULT('')FOR[性別], CONSTRAINT[DF_學生檔案_班級]DEFAULT('')FOR[班級]GO99LANSOFTSQL代碼的自動生成(續(xù))ifexists(select“學生檔案”的樣本數據學號 姓名 性別 班級001 王小童 男 初二一班002 張柳風 女 初二一班003 紫云飛 女 初二三班004 黃天龍 男 初二二班在查詢分析器中驗證你的工作。100LANSOFT“學生檔案”的樣本數據學號 姓名 性別 班級在查詢創(chuàng)建表“學生成績”我們用兩種方法創(chuàng)建表。(注意避免“空”-NULL)用企業(yè)管理器創(chuàng)建表“學生成績”用SQL語句創(chuàng)建表“學生成績”(注意選擇student數據庫,注意刷新)下頁是創(chuàng)建“學生成績”的SQL代碼101LANSOFT創(chuàng)建表“學生成績”我們用兩種方法創(chuàng)建表。(注意避免“空”創(chuàng)建表“學生成績”(續(xù))ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[學生成績]')andOBJECTPROPERTY(id,N'IsUserTable')=1)droptable[dbo].[學生成績]GOCREATETABLE[dbo].[學生成績]( [s_id][int]NULL, [學習科目][varchar](50)COLLATEChinese_PRC_CI_ASNULL, [學習成績][tinyint]NULL)ON[PRIMARY]GOALTERTABLE[dbo].[學生成績]ADD CONSTRAINT[DF_學生成績_s_id]DEFAULT(0)FOR[s_id], CONSTRAINT[DF_學生成績_學習科目]DEFAULT('')FOR[學習科目], CONSTRAINT[DF_學生成績_學習成績]DEFAULT(0)FOR[學習成績]GO102LANSOFT創(chuàng)建表“學生成績”(續(xù))ifexists(select“學生成績”的樣本數據
S_id
語文
數學
英語
1
78
100
87
2
85
92
95
3
65
89
86
4
98
67
75103LANSOFT“學生成績”的樣本數據
數據備份和恢復數據備份右擊student–所有任務–備份數據庫,打開SQLServer備份對話框–單擊添加按鈕,選擇路徑和文件名,選擇“重寫現有媒體”–確定數據恢復右擊student–所有任務–還原數據庫,打開還原數據庫對話框-單擊“從設備”單選按鈕-單擊“選擇設備”按鈕,添加路徑和文件名–確定104LANSOFT數據備份和恢復數據備份104LANSOFT第六單元連接(JOIN)105LANSOFT第六單元連接(JOIN)105LANSOFT連接內連接;外連接;左連接;右連接;等值連接;非等值連接。106LANSOFT連接內連接;106LANSOFT表關系在關系數據庫中,關系能防止冗余的數據。例如,如果正在設計一個數據庫來跟蹤有關書的信息,而每本書的信息(如書名、出版日期和出版商)都保存在一個名為titles的表中。同時還有一些想保存的有關出版商的信息,例如出版商的電話號碼、地址和郵政編碼。如果將所有這些信息都保存在titles表中,則對于某個出版商出版的每本書,出版商的電話號碼將是重復的。一個更好的解決方案是,單獨在一個名為publishers的表中只保存一次出版商信息。然后在titles表中設置指針,以引用publishers表中的項。107LANSOFT表關系在關系數據庫中,關系能防止冗余的數據。例如,如果正數據完整性存儲在數據庫中的所有數據值均正確的狀態(tài)。如果數據庫中存儲有不正確的數據值,則該數據庫稱為已喪失數據完整性。強制數據完整性可確保數據庫中的數據質量。例如,如果輸入了employee_id值為123的職員,那么該數據庫不應允許其他職員使用同一ID值。如果計劃將employee_rating列的值范圍設定為從1到5,則數據庫不應接受6。如果表有一dept_id列,該列存儲職員的部門編號,則數據庫應只允許接受公司中的有效部門編號。108LANSOFT數據完整性存儲在數據庫中的所有數據值均正確的狀態(tài)。如果數數據完整性的分類對表進行計劃有兩個重要步驟:標識列的有效值和確定如何強制列中的數據完整性。數據完整性有四種類型:實體完整性域完整性引用完整性用戶定義完整性參考SQLServer聯機叢書—數據完整性,概述。109LANSOFT數據完整性的分類對表進行計劃有兩個重要步驟:標識列的有效數據同步若要確保數據同步,可以在titles表和publishers表之間強制引用完整性。引用完整性關系能確保某個表中的信息與另一個表中的信息相匹配。例如,titles表中的每個書名必須和publishers表的特定出版商相關聯。不能在數據庫中添加數據庫中不存在的出版商的書名。110LANSOFT數據同步若要確保數據同步,可以在titles表和p引用完整性引用完整性是一種規(guī)則系統(tǒng),這些規(guī)則可確保相關表中各行間關系的有效性,并確保不會意外刪除或更改相關的數據。在強制引用完整性時必須遵循以下規(guī)則:如果在相關表的主鍵中不存在某個值,則不能在相關表的外鍵列中輸入該值。但是,可以在外鍵列中輸入空值。例如,在employee表中沒有包括某職員,則不能指明分配給該職員的工作,但是可在employee表的job_id列輸入空值來指明沒有給該職員分配工作。如果在相關表中存在與某行匹配的行,則不能從主表中刪除該行。例如,如果在employee表中給多個職員分配了由jobs表中某行所代表的工作時,則不能刪除該行。當主表的某行有相關行時,則不能更改主鍵值。例如,如果將jobs表中的一項工作分配給某職員,則不能從employee表中刪除該職員。當滿足下述所有條件時,可以設置引用完整性:主表中相匹配的列是主鍵或具有唯一約束。相關列具有相同的數據類型和長度。兩個表屬于同一個數據庫。111LANSOFT引用完整性引用完整性是一種規(guī)則系統(tǒng),這些規(guī)則可確保相關表唯一UNIQUE約束強制非主鍵上的實體完整性的約束。UNIQUE約束確保未輸入重復值,并創(chuàng)建一個索引以增強性能。112LANSOFT唯一UNIQUE約束強制非主鍵上的實體完整性的約束。U鍵、鍵列鍵:唯一標識行(PRIMARYKEY)、定義兩表之間的關系(FOREIGNKEY)或用于生成索引的一個列或一組列。鍵列:由主鍵、外鍵或索引鍵引用的列。
113LANSOFT鍵、鍵列鍵:唯一標識行(PRIMARYKEY)、定義主鍵主鍵(PK):唯一標識表中的所有行的一個列或一組列。主鍵不允許空值。不能存在具有相同的主鍵值的兩個行,因此主鍵值總是唯一標識單個行。表中可以有不止一個鍵唯一標識行,每個鍵都稱作候選鍵。只有一個候選鍵可以選作表的主鍵,所有其它候選鍵稱作備用鍵。盡管表不要求具有主鍵,但定義主鍵是很好的做法。在規(guī)范化的表中,每行中的所有數據值都完全依賴于主鍵。例如,在以EmployeeID作為主鍵的規(guī)范化的employee表中,所有列都應包含與某個特定職員相關的數據。該表不具有DepartmentName列,因為部門的名稱依賴于部門ID,而不是職員ID。114LANSOFT主鍵主鍵(PK):唯一標識表中的所有行的一個列或一組列外鍵外鍵(FK):列或列的組合,其值與同一個表或另一個表中的主鍵(PK)或唯一鍵相匹配。也稱作參照鍵。115LANSOFT外鍵外鍵(FK):列或列的組合,其值與同一個表或另一個表關系類型關系是通過匹配鍵列中的數據而工作的,而鍵列通常是兩個表中具有相同名稱的列。在大多數情況下,關系將一個表中為每個行提供唯一標識符的主鍵與另一個表中外鍵內的項相匹配。例如,通過在titles表的title_id列(主鍵)和sales表的title_id列(外鍵)之間創(chuàng)建一個關系,可以使銷售額與特定的銷售書名相關聯。表與表之間存在三種類型的關系。所創(chuàng)建的關系類型取決于相關聯的列是如何定義的。116LANSOFT表關系類型關系是通過匹配鍵列中的數據而工作的,而鍵列通常在一對一關系中,表A中的一行最多只能與表B中的一行相匹配,反之亦然。如果兩個相關列都是主鍵或具有唯一約束,則創(chuàng)建的是一對一關系。這種關系不常見,因為這種方式的大部分相關信息都在一個表中。使用一對一關系可以是為了:分割一個含有許多列的表。出于安全考慮而隔離表的某一部分。存儲可以很容易刪除的臨時數據,只需刪除表即可刪除這些數據。存儲只應用于主表子集的信息。一對一關系的主鍵方由鍵符號表示。外鍵方也由鍵符號表示。一對一關系117LANSOFT在一對一關系中,表A中的一行最多只能與表B中的一一對多關系一對多關系是最常見的關系類型。該關系中第一個表中的單個行可以與第二個表中的一個或多個行相關(匹配),但第二個表中的一個行只可以與第一個表中的一個行相關。例如,publishers表和titles表是一對多的關系:每一個出版商可出版許多書,但每一本書只能有一個出版商。如果在相關列中只有一列是主鍵或具有唯一約束,則創(chuàng)建的是一對多關系。一對多關系中的主鍵方由一個鍵符號表示。關系中的外鍵方由一個無窮大∞符號表示。118LANSOFT一對多關系一對多關系是最常見的關系類型。該關系中第一個表多對多關系在多對多關系中,表A中的一行可與表B中的多行相匹配,反之亦然。通過定義稱為連接表的第三方表創(chuàng)建這樣的關系,該連接表的主鍵包括表A和表B中的外鍵。例如,authors表和titles表是多對多關系,該關系通過從這些表中的每個表與titleauthors表的一對多關系定義。titleauthors表的主鍵由au_id列(authors表的主鍵)和title_id列(titles表的主鍵)組成。連接表:建立其它表之間的關系的表。連接表包含引用構成該關系的表的外鍵。例如,OrderParts連接表可以通過具有Orders表和Parts表的外鍵來展示每個訂單運送的部件。119LANSOFT多對多關系在多對多關系中,表A中的一行可與表B中連接兩個表如果我們需要的信息來自兩個表,可以這樣:SELECTdbo.學生檔案.學號,dbo.學生成績.學習科目FROMdbo.學生成績CROSSJOINdbo.學生檔案這就是兩個表的連接,仔細觀察一下結果,找出其中的規(guī)律。上面演示的就是所謂的交叉(CROSS)連接,它雖然不怎么有用,但它用來演示所有連接的。手工在視圖工具中輸入下面SQL語句,看看執(zhí)行結果。SELECT*FROM學生檔案,學生成績120LANSOFT連接兩個表如果我們需要的信息來自兩個表,可以這樣:120視圖(VIEW)和交叉連接視圖(VIEW)是一種虛擬表,視圖可以封裝復雜的查詢,視圖通過SQL語句由基表導出,視圖可以像真實表一樣使用。我們可以通過視圖來較快地學習連接。先修改學生檔案表,去掉主鍵設置,在企業(yè)管理器中做學生檔案和學生成績兩個表的視圖仔細觀察一下結果,你會發(fā)現前面這就是兩個表的交叉(CROSS)連接。121LANSOFT視圖(VIEW)和交叉連接視圖(VIEW)是一種虛擬表,內聯接通過比較源表間共享的列的值從多個源表檢索行的操作。內聯接排除來自不具有與其它源表中的行匹配的行的源表的行。122LANSOFT內聯接通過比較源表間共享的列的值從多個源表檢索行的操作。視圖(VIEW)和內連接我們通過視圖來學習內連接。先修改學生檔案表,加上主鍵設置,在企業(yè)管理器中做學生檔案和學生成績兩個表的視圖這就是兩個表的內(INNER)連接,其SQL語句如下:SELECTdbo.學生檔案.學號,dbo.學生檔案.姓名,dbo.學生檔案.性別,dbo.學生檔案.班級,dbo.學生成績.學習科目,dbo.學生成績.學習成績FROMdbo.學生成績INNERJOINdbo.學生檔案ONdbo.學生成績.s_id=dbo.學生檔案.s_id123LANSOFT視圖(VIEW)和內連接我們通過視圖來學習內連接。123將一個表連接到它本身將一個表連接到它自身是個經常使用的技術,用來找出有重復字段的記錄。SELECTdbo.學生檔案.學號,dbo.學生檔案.姓名FROMdbo.學生檔案INNERJOINdbo.學生檔案學生檔案_1ONdbo.學生檔案.姓名=學生檔案_1.姓名ANDdbo.學生檔案.學號<>學生檔案_1.學號等值連接。非等值連接。124LANSOFT將一個表連接到它本身將一個表連接到它自身是個經常使用的技外聯接一種聯接,包括滿足搜索條件的聯接表的所有行,甚至包括在所聯接的表中沒有匹配行的表中的行。對于當一個表中的行與另一個表中的行不匹配時所返回的結果集行,將為解析到沒有相應行的表中的所有結果集列提供NULL值。125LANSOFT外聯接一種聯接,包括滿足搜索條件的聯接表的所有行,甚至包外聯接-左連接在s_id列上聯接學生檔案表和學生成績表。結果只顯示相匹配的數據。若要在結果中包括所有的學生信息,而不管學生成績表中是否有關聯的記錄,可以使用SQL-92左向外聯接LEFTOUTERJOIN。下面是Transact-SQL左向外聯接的查詢和結果:
SELECTdbo.學生檔案.學號,dbo.學生檔案.姓名,dbo.學生檔案.性別,dbo.學生檔案.班級,dbo.學生成績.學習科目,dbo.學生成績.學習成績,dbo.學生成績.s_idFROMdbo.學生檔案LEFTOUTERJOINdbo.學生成績ONdbo.學生檔案.s_id=dbo.學生成績.s_id在視圖中觀察設計和結果。126LANSOFT外聯接-左連接在s_id列上聯接學生檔案表和學生成外聯接-右連接在s_id列上聯接學生檔案表和學生成績表。結果只顯示相匹配的數據。若要在結果中包括所有的學生信息,而不管學生成績表中是否有關聯的記錄,可以使用SQL-92右向外聯接運算符RIGHTOUTERJOIN。不管第一個表中是否有匹配的數據,結果將包含第二個表中的所有行。例:
SELECTdbo.學生檔案.學號,dbo.學生檔案.姓名,dbo.學生檔案.性別,dbo.學生檔案.班級,dbo.學生成績.學習科目,dbo.學生成績.學習成績,dbo.學生成績.s_idFROMdbo.學生檔案RIGHTOUTER
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024情侶共同投資合作協(xié)議書3篇
- 浙江交通職業(yè)技術學院《建筑綜合體實訓休閑娛樂空間》2023-2024學年第一學期期末試卷
- 《病毒性肝炎護理》課件
- 2024獨家房產交易居間合作合同版B版
- 金融行業(yè)市場營銷總結
- 物流倉儲銷售工作總結
- 環(huán)境工程師工作總結
- 2024年特惠版廣告投放協(xié)議3篇
- 渠道管理與控制總結
- 2024年音樂節(jié)舞臺設備租賃合同3篇
- ISO15189質量體系文件16 實驗室試劑和耗材管理程序
- 沈陽師范大學科研平臺和專業(yè)能力實踐基地建設規(guī)劃
- 大連市12處縣級以上飲用水水源保護區(qū)區(qū)劃方案
- 韓國文化與韓國語
- DLT 596-2021 電力設備預防性試驗規(guī)程
- 蘇教版二年級科學下冊第3課《神奇的新材料》教學設計
- 二次供水工程施工方案
- 第二章離心風機.ppt
- 中國傳統(tǒng)圖案紋樣
- DLT5210.1-2021電力建設施工質量驗收及評價規(guī)程
- 民航企業(yè)會計核算辦法
評論
0/150
提交評論