第3章查詢操作_第1頁
第3章查詢操作_第2頁
第3章查詢操作_第3頁
第3章查詢操作_第4頁
第3章查詢操作_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第 3 章查 詢 操 作3.1 【案例 8】簡單查詢相關(guān)知識(shí)1SELECT 語句(1)語句功能使用 SELECT 語句可以讓用戶以不同的方式在復(fù)雜的表中找到或查看所需要的數(shù)據(jù),其輸出結(jié)果可以是數(shù)量、數(shù)據(jù)源、數(shù)據(jù)類型等。所以在數(shù)據(jù)庫操作中會(huì)經(jīng)常使用 SELECT 語句,它是 SQL 標(biāo)準(zhǔn)中最靈活和使用最廣泛的語句之一。SQL 查詢語句的目標(biāo)是從數(shù)據(jù)庫中檢索滿足條件的記錄,其通過 SELECT 語句來完成,查詢語句并不會(huì)改變數(shù)據(jù)庫中的數(shù)據(jù),它只是檢索數(shù)據(jù)。SELECT 語句既可以完成簡單的單表查詢,也可以完成相當(dāng)復(fù)雜的連接查詢、嵌套查詢和集合查詢。(2)基本格式SQL 查詢的基本語句格式如下:SE

2、LECT ALL | DISTINCT ,FROM ,llllllWHERE GROUPORDERBY HAVINGBY ASC | DESC (3)語句說明整個(gè) SELECT 語句的含義是:根據(jù) WHERE 子句的,從 FROM 子句指定的表中找出滿足條件的記錄,再按 SELECT 子句中指定的字段次序,篩選出記錄中的字段值,構(gòu)造一個(gè)顯示結(jié)果表。SELECT 語句操作的是記錄(數(shù)據(jù))集合(一個(gè)表或多個(gè)表),而不是單獨(dú)的一條記錄。語句返回的也是滿足 WHERE 條件的記錄集合,即結(jié)果表。SELECT 語句的基本格式是由 SELECT 子句、FROM 子句和 WHERE 子句組成的查詢塊。如果有

3、 GROUP BY 子句,則將查詢結(jié)果按的值進(jìn)行分組,該值相等的記錄為一個(gè)組。如果有 GROUP BY 子句帶 HAVING 短語,則只有滿足指定條件的組才會(huì)輸出。如果有 ORDER BY 子句,則顯示的查詢結(jié)果表還要按值的升序或降序進(jìn)行排序。2查詢所有列屬性在 SELECT 語句中,提供了一種快速選擇表中所有列的方法,它會(huì)將列按照在源表中的順序進(jìn)行排序,即使用通配符“*”顯示所有的字段。其語法格式為:SELECTFROM*表名其中“*”表示源表中所有的信息,“表名”表示要查詢的數(shù)據(jù)信息的源表。3查詢指定列的屬性通過 SELECT 語句可以“過濾”掉某些字段的數(shù)據(jù),只顯示用戶需要的數(shù)據(jù)。如果

4、SELECT 子句后的字段先后順序與源表中的順序不一致,那么在結(jié)果表中,字段將按照 SELECT 子句后的字段順序顯示。4DISTINCT 子句在數(shù)據(jù)庫中,數(shù)據(jù)難免會(huì)出現(xiàn)重復(fù)行的現(xiàn)象,如“選課管理”數(shù)據(jù)庫中“學(xué)生基本檔案”表的“籍貫”列記錄了學(xué)生的出生所在地,有很多學(xué)生來自同一個(gè)地方。如果希望在查詢返回結(jié)果中刪除重復(fù)行,可以在 SELECT子句中使用 DISTINCT 關(guān)鍵字。5別名使用 SELECT 語句查詢數(shù)據(jù)時(shí),可以通過使用別名的方法根據(jù)需要對(duì)數(shù)據(jù)顯示的標(biāo)題進(jìn)行修改,或者為沒有標(biāo)題的列增加臨時(shí)的標(biāo)題。在顯示結(jié)果集時(shí),以別名(顯示的名字)代替原來的列名,通常也用來顯示結(jié)果集中列的漢字標(biāo)題。

5、lll當(dāng) SELECT 子句含有算術(shù)表達(dá)式、常量、函數(shù)名時(shí),需要有列,分隔目標(biāo)列表達(dá)式時(shí),可以通過指定別名來改變查詢結(jié)果的列標(biāo)題,對(duì)列使用別名的操作有以下 3 種方式:“列名 列標(biāo)題”形式;“列名 AS 列標(biāo)題”形式;“列標(biāo)題=列名”形式。6列的計(jì)算在進(jìn)行查詢時(shí),經(jīng)常需要對(duì)查詢到的數(shù)據(jù)進(jìn)行再次計(jì)算。這時(shí)可在 SELECT 語句中使用計(jì)算列完成,計(jì)算列并不存在于數(shù)據(jù)表中,是通過對(duì)某些列的數(shù)據(jù)進(jìn)行計(jì)算得到的結(jié)果。7WHERE 子句在數(shù)據(jù)庫中查詢數(shù)據(jù)時(shí),有時(shí)用戶只希望得到滿足條件的數(shù)據(jù)而非全部數(shù)據(jù),這就需要在 SELECT 語句中加入條件語句,即 WHERE 子句。WHERE 子句通過條件表達(dá)式描述

6、關(guān)系中元組的選擇條件,數(shù)據(jù)庫系統(tǒng)處理語句時(shí),按行為單位,逐個(gè)檢查每個(gè)行是否滿足條件,將不滿足條件的行篩選掉。WHERE 子句的基本格式如下:SELECT FROM WHERE查詢結(jié)果返回表中值為 true 的所有行,而對(duì)于值為 false 或者未知的行則不返回。WHERE 子句中的有多種使用方式,表 3-1-1 中列出了在 WHERE 子句中可以使用的條件表達(dá)式。表 3-1-1WHERE 子句使用的條件表達(dá)式類別運(yùn)算符說明比較運(yùn)算符邏輯運(yùn)算符范圍運(yùn)算符列表運(yùn)算符字符運(yùn)算符未知值=、=、=、AND、OR、NOTBETWEEN、NOT BETWEENIN、NOT INLIKE、NOT LIKEIS

7、 NULL、IS NOT NULL比較兩個(gè)表達(dá)式組合兩個(gè)表達(dá)式的運(yùn)算結(jié)果或取反搜索值是否在范圍內(nèi)查詢值是否屬于列表值之一字符串是否匹配查詢值是否為 NULL下面詳細(xì)介紹表中 WHERE 子句中的條件表達(dá)式使用方法及其他功能與特點(diǎn)。(1)比較運(yùn)算符WHERE 子句使用的比較運(yùn)算符如表 3-1-2 所示,使用它們可以對(duì)查詢條件進(jìn)行限定。語法格式如下:WHERE 表達(dá)式 1 比較運(yùn)算符 表達(dá)式 2其中,表達(dá)式 1 和表達(dá)式 2 表示要比較的表達(dá)式。表 3-1-2關(guān)系運(yùn)算符號(hào)運(yùn)算符號(hào)含義=!=或者等于小于小于或者等于大于大于或者等于不等于(2)邏輯運(yùn)算符WHERE 子句中的邏輯運(yùn)算符包括 AND、OR

8、 和 NOT。這 3 個(gè)邏輯運(yùn)算符可以混合使用,在 WHERE 子句中可以使用邏輯運(yùn)算符來限定查詢條件。語法格式如下:WHERENOT 表達(dá)式 表達(dá)式 1logical_operator 表達(dá)式 2其中 logical_operator 表示邏輯運(yùn)算符 AND 和 OR 任意一個(gè),如果在 WHERE 子句中使用 NOT 運(yùn)算符,則將 NOT 放在表達(dá)式的前面。WHERE 子句常用的邏輯查詢條件如表 3-1-3 所示。表 3-1-3邏輯運(yùn)算符號(hào)運(yùn)算符號(hào)含義ORANDNOT或(或者)與(并且)非(否)(3)范圍運(yùn)算符使用范圍運(yùn)算符時(shí),用戶可以自定義上邊界值和下邊界值來指定搜索的范圍。BETWEEN

9、 表示搜索設(shè)定范圍之內(nèi)的數(shù)據(jù),NOT BETWEENT 表示搜索設(shè)定范圍之外的數(shù)據(jù)。其語法格式為:WHERE expression NOT BETWEEN valuel AND value2其中 NOT 為可選項(xiàng),value1 表示范圍的下限,value2 表示范圍的上限。注意,value1 的值一定要小于 value2的值。(4)列表運(yùn)算符在 WHERE 子句中,如果需要確定表達(dá)式的取值是否屬于某一列表值之一時(shí),可以使用關(guān)鍵字 IN 或 NOT IN、來限定查詢條件。其語法格式如下:WHERE expressionNOT INvalue_list其中 NOT 為可選值,value_list

10、表示列表值,如果列表值不止一個(gè)時(shí),需要將這些值用括號(hào)括起來,各列表值用逗號(hào)分隔?!景咐?8-13】從“選課管理”數(shù)據(jù)庫的“學(xué)生基本檔案”表中查詢出“籍貫”是“北京”“山東”和“山西”的學(xué)生的學(xué)號(hào)、姓名、性別、民族和籍貫信息,格式如下所示。SELECT 學(xué)號(hào),姓名,性別,民族,籍貫FROM 學(xué)生基本檔案WHERE 籍貫 IN(北京,山東,山西)上述語句演示了如何在 WHERE 子句中使用 IN 條件限定查詢條件,語句中(“北京”“山東”和“山西”)定義了一個(gè)列表值,查詢的內(nèi)容為“籍貫”,屬于列表值中的內(nèi)容,執(zhí)行后返回的結(jié)果如圖 3-1-15 所示。圖 3-1-14NOT BETWEEN 運(yùn)算符使

11、用及效果圖 3-1-15IN 運(yùn)算符使用及效果(5)字符匹配符字符匹配符 LIKE 或 NOT LIKE 可以把表達(dá)式與字符串進(jìn)行比較,從而實(shí)現(xiàn)對(duì)字符串的模糊查詢。語法格式如下:WHERE expressionNOT LIKEstring其中,NOT 為可選項(xiàng),string表示進(jìn)行比較的字符串。WHERE 子句可以實(shí)現(xiàn)對(duì)字符串的模糊匹配,進(jìn)行模糊匹配時(shí),在 string 字符串中使用通配符。在 SQL Server 2005 中,使用通配符時(shí)必須將字符串連同通配符用單引號(hào)括起來。表 3-1-4 中列出了幾種比較常用的通配符的表示方式和意義。根據(jù)表 3-1-4 所示通配符的含義,下面給出一些常用

12、的實(shí)例,如表 3-1-5 所示。(6)IS NULL EXISTS 運(yùn)算符NULL 表示未知的、不可用的或?qū)⒃谝院筇砑拥臄?shù)據(jù)。NULL 值與零、零長度的字符串或空白(字符串)的含義不同。NULL 值可用于區(qū)分輸入的是零(數(shù)值列)或空白(字符列)還是無數(shù)據(jù)輸入(NULL 可用于數(shù)字列和字符列)。EXISTS 是檢查某一個(gè)字段值是否有值。實(shí)際上,EXISTS 是 IS NULL 的反義詞。其語法格式如下:WHEREcolumnISNOTNULL在 WHERE 子句中,使用 IS NULL 或 IS NOT NULL 條件可以查詢某一數(shù)據(jù)值是否為 NULL 的數(shù)據(jù)信息。8ORDER BY 子句在 S

13、ELECT 語句中,使用 ORDER BY 子句可以對(duì)查詢結(jié)果按照一個(gè)或多個(gè)字段進(jìn)行升序(ASC)或降序(DESC)排序。ORDER BY 子句在 SELECT 語句中的語法格式為:SELECT FROM WHERE ORDER BYASC |DESCorder_expression 指明了排序列或列的別名和表達(dá)式。當(dāng)有多個(gè)字段排序時(shí),每個(gè)排序字段之間要用半角逗號(hào)隔開;ORDER BY 子句的默認(rèn)值為升序(ASC);當(dāng)排序要求為 DESC 時(shí),結(jié)果集的行按排序字段值的降序排列。9GROUP BY 子句使用 SELECT 語句進(jìn)行數(shù)據(jù)查詢時(shí),可以用 GROUP BY 子句對(duì)某一列的值進(jìn)行分類,形

14、成結(jié)果集。分組可以使用組的元組集中在一起,可以進(jìn)行數(shù)據(jù)的分組統(tǒng)計(jì)。當(dāng) SELECT 子句后的目標(biāo)列中有統(tǒng)計(jì)函數(shù)時(shí),如果查詢語句中有分組子句,則統(tǒng)計(jì)為分組統(tǒng)計(jì),否則為對(duì)整個(gè)結(jié)果集的統(tǒng)計(jì)。GROUP BY 子句后可以帶上 HAVING 子句表達(dá)式選擇條件,組選擇條件為帶有函數(shù)的條件表達(dá)式,它決定著整個(gè)組記錄的查詢條件。語法格式如下:SELECT FROM GROUP BYALL WITH ROLLUPCUBE其中,關(guān)鍵字 ALL 一般與 WHERE 子句的條件一同使用,它表示所有被 GROUP BY 子句分類的數(shù)據(jù)都將出現(xiàn)在結(jié)果集中,即使該列不滿足 WHERE 子句的查詢條件。column_nam

15、e 表示列名,ROLLUP 表示只返回第一個(gè)分組條件指定的列的統(tǒng)計(jì)行,若改變列的順序就會(huì)使返回的結(jié)果行數(shù)據(jù)發(fā)生變化。CUBE 是 ROLLUP 的擴(kuò)展,表示除了返回由 GROUP BY 子句指定的列外,還返回按組統(tǒng)計(jì)的行。GROUP BY 子句通常與統(tǒng)計(jì)函數(shù)聯(lián)合使用,如 COUNT、SUM 等。表中列出了幾個(gè)常用的統(tǒng)計(jì)函數(shù)及功能。3.2 【案例 9】多表查詢相關(guān)知識(shí)1多表查詢的連接條件在關(guān)系型數(shù)據(jù)庫中,將一個(gè)查詢同時(shí)涉及兩個(gè)以上的表,稱為連接查詢,連接查詢是關(guān)系數(shù)據(jù)庫中最重要的查詢。多數(shù)情況下,一個(gè) SQL 查詢語句一次往往涉及多個(gè)表。連接查詢主要包括以下幾種類型:等值連接查詢、非等值連接查詢

16、、自然連接查詢、自身連接查詢、外連接查詢、復(fù)合條件連接查詢。(1)基本格式 . . (2)連接條件運(yùn)算符在多表查詢中,用來連接多個(gè)表的條件稱為連接條件。應(yīng)用于連接條件的運(yùn)算符可以是比較運(yùn)算符(=、=、=、=、=、!=或等比較運(yùn)算符。單值情況下使用=,多值情況下使用 IN 或 NOT IN 謂詞。(2)ANY 和 ALL 運(yùn)算符的含義子查詢返回單值時(shí)可以用比較運(yùn)算符,而使用 ANY 或 ALL 謂詞時(shí)則必須同時(shí)使用比較運(yùn)算符,其含義如表3-3-1 所示。(3)ANY 的表達(dá)式書寫方式(4)ALL 的表達(dá)式書寫方式lll(5)=ANY 的表達(dá)式書寫方式3帶有 EXISTS 的子查詢(1)EXIST

17、S 關(guān)鍵字的含義在 SQL 中,關(guān)鍵字 EXISTS 代表“存在”的含義,它只查找滿足條件的那些記錄,一旦找到第一個(gè)匹配的記錄后,則馬上停止查找。帶 EXISTS 的子查詢不返回任何記錄,只產(chǎn)生邏輯值“真”(TRUE)或者邏輯值“假”(FALSE),它的作用是在 WHERE 子句中測試子查詢返回的行是否存在。如果存在則返回真值,如果不存在則返回假值。即表明找到或者沒有找到的含義。(2)EXISTS 和 NOT EXISTS 的使用(3)內(nèi)連接和 EXISTS 的使用(4)EXISTS 語法說明使用 EXISTS 后,若內(nèi)層查詢結(jié)果非空,則外層的 WHERE 子句返回真值 TRUE,否則返回假值

18、 FALSE。EXISTS 作用的不是列之間的關(guān)系,而是表之間的關(guān)系。采用的既不是等號(hào),也不是 IN,所以在 SELECT 列表中不需要制定字段名,通常用 SELECT *來代替。EXISTS 通常使用一個(gè)所謂的關(guān)聯(lián)子查詢,該子查詢并不在它自己的查詢中運(yùn)行。為了實(shí)現(xiàn)關(guān)聯(lián)子查詢,SQL 服務(wù)器必須對(duì)外查詢的每一條記錄都執(zhí)行一次此子查詢來測試是否匹配。(5)相關(guān)子查詢的處理過程當(dāng)子查詢的查詢條件依賴于外層父查詢的某個(gè)屬性值,我們稱這類查詢?yōu)橄嚓P(guān)子查詢。求解相關(guān)子查詢不能像求解不相關(guān)子查詢那樣,一次將子查詢求解出來,然后求解父查詢。相關(guān)子查詢的內(nèi)層查詢由于與外層查詢有關(guān),因此必須反復(fù)求值。相關(guān)子查詢

19、的一般處理過程如下: 首先取外層查詢中“學(xué)生基本檔案”表的第一條記錄,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值(即“學(xué)號(hào)”值)處理內(nèi)層查詢,若 WHERE 子句返回值為真(即內(nèi)層查詢結(jié)果非空),則取此記錄,放入結(jié)果表。 再檢查“學(xué)生基本檔案”表的下一條記錄。 重復(fù)執(zhí)行步驟,直至“學(xué)生基本檔案”表全部檢查完畢。在案例 10-9 中,若內(nèi)層查詢結(jié)果不為空,則外層的 WHERE 子句返回真值,則取此記錄放入結(jié)果表中。取出外層查詢中(“學(xué)生基本檔案”表)的第 1 條記錄,根據(jù)它與內(nèi)層查詢相關(guān)的字段值(學(xué)號(hào)值)處理內(nèi)層查詢,然后再取(“學(xué)生基本檔案”表)下一條記錄;重復(fù)這一過程,直至外層(“學(xué)生基本檔案”表)全部檢

20、查完為止。4限制子查詢的條件子查詢也是使用 SELECT 語句組成,所以在使用 SELECT 語句應(yīng)注意的問題也同樣適用于子查詢,同時(shí)子查詢還要受下面條件的限制。 通過比較運(yùn)算符引入的子查詢的選擇列表只能包括一個(gè)表達(dá)式或列名稱。 如果外部查詢的 WHERE 語句包括某個(gè)列名,則該子句必須與子查詢選擇列表中的該列兼容。 子查詢的選擇列表中不允許出現(xiàn) ntext、text 和 image 數(shù)據(jù)類型。 無修改的比較運(yùn)算符引入的子查詢不能包括 GROUP BY 和 HAVING 子句。 包括 GROUP BY 的子查詢不能使用 DISTINCT 關(guān)鍵字。 不能指定 COMPUTE 和 INTO 子句。

21、 只有同時(shí)指定了 TOP,才可以指定 ORDER BY。 由子查詢創(chuàng)建的視圖不能更新。 通過 EXISTS 引入的子查詢的選擇列表由星號(hào)(*)組成,而不使用單個(gè)列名。 當(dāng)=、!=、或=用在主查詢中,ORDER BY 子句和 GROUP BY 子句不能用在內(nèi)層查詢中,因?yàn)閮?nèi)層查詢返回的一個(gè)以上的值不可被外層查詢處理。3.4 【案例 11】聯(lián)合查詢相關(guān)知識(shí)1聯(lián)合查詢的語法格式如果在查詢中需要多個(gè)不同的查詢結(jié)果,同時(shí)希望將它們連接在一起,組成一組數(shù)據(jù),可以使用 UNION 子句。使用 UNION 子句的查詢稱為聯(lián)合查詢,它可以將兩個(gè)或更多的查詢結(jié)果集組合為單個(gè)結(jié)果集,該結(jié)果集包含聯(lián)合查詢中所有查詢結(jié)

22、果集中的全部行的數(shù)據(jù)。聯(lián)合查詢不同于對(duì)兩個(gè)表中的列進(jìn)行連接查詢,前者是組合兩個(gè)表中的行,后者是匹配兩個(gè)表中的列數(shù)據(jù)。使用聯(lián)合查詢的語法格式如下:SELECT 字段列表FROM 表名WHERE 條件表達(dá)式UNION ALLSELECT 字段列表FROM 表名WHERE 條件表達(dá)式ORDER BY 排序表達(dá)式其中 ALL 關(guān)鍵字為可選的,如果在 UNION 子句中使用該關(guān)鍵字,則返回全部滿足匹配的結(jié)果;如果不使用該關(guān)鍵字,則返回結(jié)果中刪除滿足匹配的重復(fù)行。在進(jìn)行聯(lián)合查詢時(shí),查詢結(jié)果的列標(biāo)題為第一個(gè)查詢語句的列標(biāo)題。因此,必須在同一個(gè)查詢語句中定義列標(biāo)題。2使用聯(lián)合查詢的規(guī)定 參加 UNION 操作

23、的各個(gè)結(jié)果表的字段個(gè)數(shù)必須相同,包括參加 UNION 操作的字段名、算術(shù)表達(dá)式、聚合函數(shù)的數(shù)目。即使用 UNION 關(guān)鍵字進(jìn)行聯(lián)合查詢時(shí),要保證每個(gè)聯(lián)合查詢語句的選擇列表中有相同數(shù)量的表達(dá)式。 UNION 操作中的對(duì)應(yīng)字段的數(shù)據(jù)類型必須相同,或者可以進(jìn)行顯式或隱式轉(zhuǎn)換。每個(gè)查詢選擇表達(dá)式應(yīng)具有相同的數(shù)據(jù)類型,或者可以自動(dòng)將它們轉(zhuǎn)換為相同的數(shù)據(jù)類型。在自動(dòng)轉(zhuǎn)換時(shí),系統(tǒng)會(huì)將低精度的數(shù)據(jù)類型轉(zhuǎn)換為高精度的數(shù)據(jù)類型。 各語句中對(duì)應(yīng)的結(jié)果集列出現(xiàn)的順序必須相同。 使用 UNION 的 SELECT 語句時(shí),如果要對(duì)聯(lián)合查詢結(jié)果進(jìn)行排序,必須使用第一個(gè)查詢語句中的列名、列標(biāo)題和列序號(hào),并且排序子句 ORD

24、ER BY 中最好使用數(shù)字來指定排序次序。如果使用數(shù)字,則聯(lián)合查詢的子查詢中的列名就需要相同,也可以使用別名來統(tǒng)一列名。另外在對(duì)聯(lián)合查詢的結(jié)果進(jìn)行排序時(shí),必須把 ORDER BY 子句放在 SELECT 子句的后面。 使用 UNION 將結(jié)果表進(jìn)行邏輯聯(lián)合時(shí),如果希望在查詢中顯示重復(fù)的行,可以使用 UNION ALL。UNION ALL是另一種對(duì)表進(jìn)行聯(lián)合查詢的方法,與 UNION 的唯一區(qū)別是不刪除重復(fù)行,也不對(duì)行進(jìn)行自動(dòng)排序。3在 SSMS 中使用查詢數(shù)據(jù)庫用戶可以使用 SQL Server Management Studio 中提供的圖形化的查詢方式,進(jìn)行簡單的選擇,完成查詢操作。具體操

25、作步驟如下: 啟動(dòng) SQL Server Management Studio 程序,在“對(duì)象資源管理器”窗格中依次展開“數(shù)據(jù)庫”結(jié)點(diǎn)“選課管理”數(shù)據(jù)庫結(jié)點(diǎn)。 右擊要執(zhí)行查詢的表,如“學(xué)生基本檔案”表,選擇“打開表”命令。 在顯示表的記錄區(qū)域右擊,選擇“窗格”“條件”命令,如圖 3-4-3 所示。 在查詢條件選擇界面中,選擇要輸出的列,指定排序方式和查詢條件。圖 3-4-2UNION 聯(lián)合查詢的效果圖 3-4-3選擇“條件”命令 右擊,選擇“執(zhí)行 SQL”命令,或者單擊工具欄上的“執(zhí)行”按鈕,執(zhí)行效果如圖 3-4-4 所示。 在查詢結(jié)果處右擊,選擇“窗格”“關(guān)系圖”命令,可以查詢所影響的關(guān)系圖,

26、如圖 3-4-5 所示。圖 3-4-4使用 SSMS 查詢的效果圖 3-4-5 “學(xué)生基本檔案”表關(guān)系圖 右擊,選擇“添加分組依據(jù)”命令,可以指定分組條件,效果如圖 3-4-6 所示。4分布式查詢通過使用 OLE DB,Microsoft SQL Server 2005 可支持分布式查詢。分布式查詢從多個(gè)異類數(shù)據(jù)源中訪問數(shù)據(jù),這些數(shù)據(jù)源可以存儲(chǔ)于一臺(tái)或多臺(tái)計(jì)算機(jī)中。ll圖 3-4-6添加分組依據(jù)后的效果(1)分布式查詢?cè)L問的存儲(chǔ)數(shù)據(jù)SQL Server 用戶可以使用分布式查詢?cè)L問以下內(nèi)容:存儲(chǔ)在多個(gè) SQL Server 實(shí)例中的分布式數(shù)據(jù)。存儲(chǔ)在各種可以使用 OLE DB 訪問接口訪問的關(guān)系

27、和非關(guān)系數(shù)據(jù)源中的異類數(shù)據(jù)。OLE DB 訪問接口將在稱為行集的表格格式對(duì)象中公開數(shù)據(jù)。(2)分布式查詢?cè)L問的數(shù)據(jù)源外部數(shù)據(jù)源中的表和視圖可以在 SELECT、INSERT、UPDATE 和 DELETE Transact-SQL 語句中直接引用。因?yàn)閘ll分布式查詢使用 OLE DB 作為基本接口,所以它們不僅可以訪問帶有 SQL 查詢處理器的傳統(tǒng) DBMS 系統(tǒng),也可以訪問復(fù)雜的、具有不同功能的數(shù)據(jù)源所管理的數(shù)據(jù)。SQL Server 允許在 Transact-SQL 語句中像引用 SQL Server 表一樣引用 OLE DB 訪問接口中的行集。只要擁有數(shù)據(jù)的軟件通過 OLE DB 訪問

28、接口在表格格式行集中公開其數(shù)據(jù),就可在分布式查詢中使用此數(shù)據(jù)。3.5 【案例 12】操作查詢相關(guān)知識(shí)1INSERT SELECT 語句使用 INSERT SELECT 語句,可以把通過 SELECT 語句產(chǎn)生的結(jié)果集插入到指定表中,這種方法用于插入的數(shù)據(jù)不確定(通常多于一條),并且都具有一些特殊性。(1)INSERT SELECT 語句遵循的原則INSERT SELECT 語句可以把其他數(shù)據(jù)表行添加到現(xiàn)有的表中。使用 INSERT SELECT 語句比使用多個(gè)單行的INSERT 語句效率要高得多。但是要遵循以下規(guī)定:在數(shù)據(jù)庫中必須存在要插入新行的表。在最外面的查詢表中插入所有滿足 SELECT

29、 語句的行。必須保證接受新值的表中列的數(shù)據(jù)類型與源表中相應(yīng)列的數(shù)據(jù)類型一致。l必須明確是否存在默認(rèn)值,或所有被忽略的列是否允許為空值。如果不允許空值,則必須為這些列提供值。(2)INSERT SELECT 語句的基本語法INSERT 目標(biāo)表名SELECT 字段列表FROMWHERE源表名條件表達(dá)式(3)帶 WHERE 子句的 INSERT SELECT 語句如果要插入的多條數(shù)據(jù)具有相同的特征,可以使用帶 WHERE 子句指定條件的 INSERT SELECT 語句,將這些數(shù)據(jù)批量添加到目的表中。2SELECT INTO 語句使用 SELECT INTO 語句可以把任何查詢結(jié)果集放置到一個(gè)新表中

30、,還可以把導(dǎo)入的數(shù)據(jù)填充到數(shù)據(jù)庫的新表中。正確地使用 SELECT INTO 語句可以很好地解決復(fù)雜的問題,例如需要從不同的數(shù)據(jù)源中得到數(shù)據(jù)集,如果一開始先創(chuàng)建一個(gè)臨時(shí)表,那么在該表中執(zhí)行查詢比在多表或多數(shù)據(jù)庫中執(zhí)行查詢更簡單。(1)SELECT INTO 語句遵循的原則llll使用 SELECT INTO 語句創(chuàng)建一個(gè)表并且在單獨(dú)操作時(shí)向表中插入行時(shí),要確保在 SELECT INTO 語句中指定的表名是唯一的,如果表名重復(fù),SELECT INTO 語句將失敗。使用 SELECT INTO 語句可以創(chuàng)建本地或全局臨時(shí)表。要?jiǎng)?chuàng)建一個(gè)本地臨時(shí)表,需要在表名前加一個(gè)符號(hào)(#);要?jiǎng)?chuàng)建一個(gè)全局臨時(shí)表,

31、需要在表名前加兩個(gè)符號(hào)(#)。本地臨時(shí)表只在當(dāng)前的會(huì)話中可見,全局臨時(shí)表在所有的會(huì)話中都可見。當(dāng)使用者結(jié)束會(huì)話時(shí),本地臨時(shí)表的空間會(huì)被回收。當(dāng)創(chuàng)建表的會(huì)話結(jié)束且當(dāng)前參照表的最后一個(gè) Transact_SQL 語句完成時(shí),全局臨時(shí)表的空間會(huì)被回收。(2)SELECT INTO 語句的基本語法SELECT 字段列表INTOFROM新表名源表名WHERE 條件表達(dá)式3使用 UPDATE 語句更新查詢更改或更新表中的數(shù)據(jù)也是日常維護(hù)數(shù)據(jù)庫的操作之一。使用帶有 FROM 子句的 UPDATE 語句不但能在一個(gè)表中進(jìn)行操作,而且還能在多個(gè)表中進(jìn)行操作。使用包含 UPDATE 語句的連接或子查詢時(shí),應(yīng)遵循以下原則:llll在一個(gè)單獨(dú)的 UPDATE 語句中,SQL Server 2005 不會(huì)對(duì)同一行做兩次更新。使用 SET 關(guān)鍵字可以引入列的列名或各種要更新的變量名,SET 關(guān)鍵字引用的列必須明確。如果子查詢沒有返回值,必須在子查詢中引入 IN、EXISTS、ANY 或 ALL 等關(guān)鍵字。因?yàn)樵趩为?dú)的 UPDATE 語句中,SQL Server 2005 不會(huì)對(duì)同一行做兩次更新,所以在相關(guān)子查詢中可以使用

溫馨提示

  • 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)論