版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第8章操縱表中數(shù)據(jù)學(xué)習(xí)目標(biāo)本章重點本章內(nèi)容2/3/20231學(xué)習(xí)目標(biāo)表創(chuàng)建之后,就可以對表執(zhí)行各種操縱了。操縱表實際上就是操縱數(shù)據(jù)。用戶可以根據(jù)需要向表中添加數(shù)據(jù),可以更新表中已有的數(shù)據(jù),甚至可以刪除表中不再使用的數(shù)據(jù)。在更多情況下,用戶需要檢索表中的數(shù)據(jù)。如果需要的數(shù)據(jù)在一個表中,那么檢索操作比較簡單。如果需要的數(shù)據(jù)分散在多個不同的表中,那么需要執(zhí)行復(fù)雜的檢索操作。本章全面研究操縱表中數(shù)據(jù)的內(nèi)容。2/3/20232本章重點插入數(shù)據(jù)更新數(shù)據(jù)刪除數(shù)據(jù)檢索數(shù)據(jù)高級操縱加密數(shù)據(jù)2/3/20233本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/20234本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/202358.1概述下面,通過一個具體示例,研究表創(chuàng)建之后用戶面臨的操縱數(shù)據(jù)問題和解決這些操縱數(shù)據(jù)問題的思路。【例8-1】創(chuàng)建books表,研究數(shù)據(jù)操縱問題。2/3/20236空表和數(shù)據(jù)操縱問題表創(chuàng)建之后,表只是一個空表。如何向表中添加數(shù)據(jù)呢?如果表中已有數(shù)據(jù)了,但是數(shù)據(jù)不合適或不正確,那么如何更新這些數(shù)據(jù)呢?如果表中的數(shù)據(jù)不再需要了,那么如何刪除這些過時的數(shù)據(jù)呢?如何按照用戶需要,將表中的數(shù)據(jù)檢索出來呢?這些問題都是數(shù)據(jù)操縱問題。用戶可以使用INSERT、UPDATE、DELETE、SELECT等語句來解決這些數(shù)據(jù)操縱問題。2/3/20237本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/202388.2插入數(shù)據(jù)表創(chuàng)建之后只是一個空表,因此向表中插入數(shù)據(jù)是在表結(jié)構(gòu)創(chuàng)建之后首先需要執(zhí)行的操作。向表中插入數(shù)據(jù),應(yīng)該使用INSERT語句。該語句包括了兩個子句,即INSERT子句和VALUES子句。INSERT子句指定要插入數(shù)據(jù)的表名或視圖名稱,它可以包含表或視圖中列的列表。VALUES子句指定將要插入的數(shù)據(jù)。2/3/20239【例8-2】向books表中插入一行完整數(shù)據(jù)2/3/202310【例8-3】向books表中插入空值2/3/202311【例8-4】向books表中插入部分列數(shù)據(jù)2/3/202312【例8-5】使用DEFAULTVALUES子句2/3/202313【例8-6】使用INSERT…SELECT形式2/3/202314【例8-7】使用SELECT…INTO形式2/3/202315【例8-8】使用BULKINSERT語句2/3/202316本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023178.3更新數(shù)據(jù)可以使用UPDATE語句更新表中已經(jīng)存在的數(shù)據(jù)。UPDATE語句既可以一次更新一行數(shù)據(jù),也可以一次更新許多行,甚至可以一次更新表中的全部數(shù)據(jù)行。在UPDATE語句中,使用WHERE子句指定要更新的數(shù)據(jù)行滿足的基本條件,使用SET子句給出新的數(shù)據(jù)。新數(shù)據(jù)既可以是常量,也可以是指定的表達式。UPDATE語句的基本語法形式如下:UPDATEtable_or_view_name
SETcolumn_name=expression,…WHEREsearch_condition
2/3/202318【例8-9】查看books表中的數(shù)據(jù)2/3/202319【例8-10】更新books表中指定圖書的頁數(shù)和價格數(shù)據(jù)2/3/202320【例8-11】更新books表中所有圖書的價格數(shù)據(jù)2/3/202321【例8-12】在UPDATE語句中使用FROM子句2/3/202322本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023238.4刪除數(shù)據(jù)當(dāng)表中的數(shù)據(jù)不再需要時,可以將其刪除。一般情況下,使用DELETE語句刪除數(shù)據(jù)。DELETE語句可以從一個表中刪除一行或多行數(shù)據(jù)。刪除數(shù)據(jù)的DELEE語句的基本語法形式如下:DELETEFROMtable_or_name
WHEREsearch_condition
在DELETE語句中,如果使用了WHERE子句,那么將從指定的表中刪除滿足WHERE子句條件的數(shù)據(jù)行。如果沒有使用WHERE子句,那么將刪除指定表中的全部數(shù)據(jù)。2/3/202324【例8-13】使用DELETE語句刪除2/3/202325DELETE語句的說明就像UPDATE語句一樣,在DELETE語句中還可以再使用一個FROM子句指定將要刪除的數(shù)據(jù)與其他表或視圖之間的關(guān)系。也就是說,一個正常的DELETE語句中可以包含兩個FROM子句,但是這兩個FROM子句的作用是不同的。第一個FROM子句用于指定將要刪除的數(shù)據(jù)所在的表或視圖名稱,第二個FROM子句用于指定將要刪除的數(shù)據(jù)的其他復(fù)雜的條件。DELETE語句只是刪除表中的數(shù)據(jù),表結(jié)構(gòu)依然存在于數(shù)據(jù)庫中。如果需要刪除表結(jié)構(gòu),那么應(yīng)該使用DROPTABLE語句。在刪除表中的全部數(shù)據(jù)時,還可以使用TRUNCATETABLE語句。TRUNCATETABLE語句和DELETE語句都可以將表中的全部數(shù)據(jù)刪除,但是兩條語句又有不同的特點。2/3/202326本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023278.5檢索數(shù)據(jù)概述如果我們希望檢索表中數(shù)據(jù),可以使用SELECT語句。在SELECT語句中,有3個基本的組成部分即SELECT子句、FROM子句和WHERE子句。SELECT子句用于指定將要檢索的列名稱,F(xiàn)ROM子句指定將要檢索的對象,WHERE子句則用于指定數(shù)據(jù)應(yīng)該滿足的條件。在一般的檢索操作中,SELECT子句和FROM子句是必不可少的。只有當(dāng)SELECT子句中僅包括常量、變量或算術(shù)表達式(沒有列名)時,F(xiàn)ROM子句才可以省略。WHERE子句是可選的。如果沒有使用WHERE子句,表示檢索所有的數(shù)據(jù)。2/3/202328【例8-14】檢索表中所有數(shù)據(jù)2/3/202329本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023308.6使用SELECT子句檢索數(shù)據(jù)SELECT子句是SELECT語句的一部分,指SELECT關(guān)鍵字后面的內(nèi)容。在SELECT語句中,可以在SELECT子句中選擇指定的數(shù)據(jù)列、使用文字串、改變列標(biāo)題、執(zhí)行數(shù)據(jù)運算、使用ALL關(guān)鍵字及使用DISTINCT關(guān)鍵字等。2/3/202331選擇指定的數(shù)據(jù)列選擇指定的數(shù)據(jù)列是指可以在SELECT子句中指定將要檢索的列名稱。選擇指定的列名稱要注意幾點,第一,這些列名稱應(yīng)該與表中定義的列名稱一致,否則就可能出錯或者得到意想不到的結(jié)果;第二,列名稱之間的順序既可以與表中定義的列順序相同,也可以不相同;第三,SELECT語句的檢索結(jié)果只是影響數(shù)據(jù)的顯示,對表中數(shù)據(jù)的存儲沒有任何的影響。2/3/202332【例8-15】檢索指定的數(shù)據(jù)列2/3/202333文字串通常,直接閱讀SELECT語句的檢索結(jié)果是一件頭疼的事情,因為顯示出來的數(shù)據(jù)只是一些不連貫的、閱讀性不強的信息。為了提高SELECT語句檢索結(jié)果的可讀性,可以通過在SELECT關(guān)鍵字后面增加文字串。通常情況下,使用單引號將文字串引起來。2/3/202334【例8-16】在檢索結(jié)果中使用文字串2/3/202335【例8-17】在文字串中使用了單引號和雙引號2/3/202336改變列標(biāo)題在默認(rèn)情況下,在數(shù)據(jù)檢索結(jié)果中所顯示出來的列標(biāo)題就是在定義表時使用的列名稱。但是,在檢索過程中可以根據(jù)用戶的需要改變顯示的列標(biāo)題。實際上,改變列標(biāo)題也就是為指定的列定義一個別名。改變列標(biāo)題有兩種方法,一種方法是使用等號(=),另一種方法是使用AS關(guān)鍵字。當(dāng)使用=時,其語法形式是:新標(biāo)題=列名。當(dāng)使用AS關(guān)鍵字時,其形式是列名AS新標(biāo)題。由于AS關(guān)鍵字是可以省略的,因此改變列標(biāo)題也可以寫成這種形式:列名新標(biāo)題。注意,使用等號和使用AS關(guān)鍵字時,新標(biāo)題和列名的位置是不同的。2/3/202337【例8-18】改變列標(biāo)題2/3/202338數(shù)據(jù)運算數(shù)據(jù)運算就是指對檢索的數(shù)據(jù)進行各種運算。也就是說,可以在SELECT關(guān)鍵字后面列出的列項中使用各種運算符和函數(shù)。這些運算符和函數(shù)包括算術(shù)運算符、數(shù)學(xué)函數(shù)、字符串函數(shù)、日期和時間函數(shù)及系統(tǒng)函數(shù)等。算術(shù)運算符可以用在各種數(shù)值列上,這些列的數(shù)據(jù)類型可以是INT、SMALLINT、TINYINT、FLOAT、REAL、MONEY或SMALLMONEY。這些算術(shù)運算符包括+、–、*、/和%。2/3/202339【例8-19】使用算術(shù)運算符2/3/202340【例8-20】使用數(shù)學(xué)函數(shù)2/3/202341【例8-21】使用字符串函數(shù)2/3/202342使用ALL或DISTINCT關(guān)鍵字在SELECT語句中,可以在SELECT子句中通過使用ALL或DISTINCT關(guān)鍵字控制查詢結(jié)果集的顯示樣式。ALL關(guān)鍵字表示檢索所有的數(shù)據(jù),包括重復(fù)的數(shù)據(jù)行。DISTINCT關(guān)鍵字表示僅僅顯示那些不重復(fù)的數(shù)據(jù)行,重復(fù)的數(shù)據(jù)行只是顯示一次。由于ALL關(guān)鍵字是默認(rèn)值,所以當(dāng)沒有顯式使用ALL或DISTINCT關(guān)鍵字時,隱含著使用ALL關(guān)鍵字。需要明確的是,數(shù)據(jù)行是否重復(fù),由SELECT子句中ALL或DISTINCT關(guān)鍵字后面的所有表達式項的組合決定。2/3/202343【例8-22】使用ALL或DISTINCT關(guān)鍵字2/3/202344本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023458.7排序在使用SELECT語句時,排序是一種常見的操作。排序是指按照指定的列或其他表達式對結(jié)果集進行排列順序的方式。SELECT語句中的ORDERBY子句負(fù)責(zé)完成排序操作。在排序時既可以按照升序排列,也可以按照降序排列。關(guān)鍵字ASC表示升序,DESC表示降序,默認(rèn)情況下是升序。2/3/202346【例8-23】使用排序子句2/3/202347【例8-24】使用多個列進行排序的檢索操作2/3/202348【例8-25】使用TOP關(guān)鍵字2/3/202349本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023508.8使用WHERE子句選擇數(shù)據(jù)在上一節(jié)的示例中,都是檢索表中的全部數(shù)據(jù)行。但實際,在很多情況下,只需要表中的一部分?jǐn)?shù)據(jù)。例如,在包含有數(shù)百萬、數(shù)千萬行數(shù)據(jù)的表中,可能永遠(yuǎn)也不會執(zhí)行一個檢索表中全部數(shù)據(jù)的語句,因為在一次查詢中處理表中全部數(shù)據(jù)幾乎是不現(xiàn)實的。在SELECT語句中,WHERE子句指定將要搜索的數(shù)據(jù)行的條件。也就是說,只有滿足WHERE子句條件的數(shù)據(jù)行才會出現(xiàn)在結(jié)果集中。這些搜索條件可以分為簡單搜索條件、模糊搜索條件和復(fù)合搜索條件。2/3/202351簡單搜索條件在WHERE子句中,簡單搜索條件是指使用比較運算符、范圍、列表、合并以及取反等運算方式形成的搜索條件。比較運算符是搜索條件中最常使用的。WHERE子句的語法允許在列名稱和列值之間使用比較運算符。例如,比較運算符>(大于)可以用來檢索那些大于在WHERE子句中指定的列值的行。2/3/202352【例8-26】使用簡單搜索條件2/3/202353模糊搜索條件在檢索字符數(shù)據(jù)時,通常提供的檢索條件是不十分準(zhǔn)確的,例如這種搜索條件僅僅是包含、類似某種樣式的字符。在WHERE子句中,可以使用LIKE關(guān)鍵字實現(xiàn)這種靈活的模糊搜索條件。LIKE關(guān)鍵字用于檢索與特定字符串匹配的字符數(shù)據(jù)。LIKE關(guān)鍵字后面可以跟一個列值的一部分而不是一個完整的列值,從而形成LIKE子句。LIKE子句的語法形式如下:match_expression[NOT]LIKEpattern[ESCAPEescape_character]2/3/202354【例8-27】通配符的示例(1)LIKE'AB%'返回以“AB”開始的任意字符串。(2)LIKE'Ab%'返回以“Ab”開始的任意字符串。(3)LIKE'%abc'返回以“abc”結(jié)束的任意字符串。(4)LIKE'%abc%'返回包含“abc”的任意字符串。(5)LIKE'_ab'返回以“ab”結(jié)束的三個字符的字符串。(6)LIKE'[ACK]%'返回以“A”、“C”或“K”開始的任意字符串。(7)LIKE'[A-T]ing'返回四個字符的字符串,結(jié)尾是“ing”,首字符的范圍從A到T。(8)LIKE'M[^c]%'返回以“M”開始且第二個字符不是“c”的任意長度的字符串。2/3/202355【例8-28】使用模糊搜索條件2/3/202356復(fù)合搜索條件在WHERE子句中可以使用邏輯運算符把若干個搜索條件合并起來,組成復(fù)雜的復(fù)合搜索條件。這些邏輯運算符包括AND,OR和NOT。AND運算符表示只有在所有條件都為真時,才返回真。OR運算符表示只要有一個條件為真時,就可以返回真。NOT運算符取相反。當(dāng)在一個WHERE子句中,同時包含多個邏輯運算符時,其優(yōu)先級從高到低依次是NOT、AND、OR。2/3/202357【例8-29】使用復(fù)合搜索條件2/3/202358本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023598.9聚合技術(shù)聚合技術(shù)是指對一組數(shù)據(jù)進行聚合運算得到聚合值的過程。在聚合運算中主要是使用聚合函數(shù)。在MicrosoftSQLServer2005系統(tǒng)中,一般情況下可以在3個地方使用聚合函數(shù),即SELECT子句、COMPUTE子句和HAVING子句。本節(jié)主要講述如何在SELECT子句和COMPUTE子句中使用聚合函數(shù),有關(guān)HAVING子句使用聚合函數(shù)的內(nèi)容在下一節(jié)介紹。2/3/202360SELECT子句中的聚合在SELECT子句中可以使用聚合函數(shù)進行運算,運算結(jié)果作為新列出現(xiàn)在結(jié)果集中。在聚合運算的表達式中,可以包括列名、常量以及由算術(shù)運算符連接起來的函數(shù)。2/3/202361【例8-30】在SELECT子句中使用聚合函數(shù)2/3/202362COMPUTE子句需要指出的是,當(dāng)在SELECT子句中出現(xiàn)聚合函數(shù)時,結(jié)果集中的數(shù)據(jù)全是聚合值,沒有明細(xì)值。這是使用SELECT子句計算聚合值的缺點。能否解決這種問題呢?答案是肯定的,解決問題的方法就是使用COMPUTE子句。COMPUTE子句使用聚合函數(shù)計算聚合值,并且可以依然保持原有的明細(xì)值,新的聚合值作為特殊的列出現(xiàn)。COMPUTE子句有兩種形式,一種形式是不帶BY子句,另一種形式是帶BY子句。2/3/202363【例8-31】在COMPUTE子句中使用聚合函數(shù)2/3/202364本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023658.10分組技術(shù)聚合函數(shù)只能產(chǎn)生一個單一的匯總數(shù)據(jù),使用GROUPBY子句,則可以生成分組的匯總數(shù)據(jù)。GROUPBY子句把數(shù)據(jù)組織起來分成組。一般情況下可以根據(jù)表中的某一列進行分組,通過使用聚合函數(shù)對每一個組可以產(chǎn)生聚合值。如果希望過濾某些分組,可以使用HAVING子句排。分組技術(shù)是指使用GROUPBY子句完成分組操作的技術(shù)。如果在GROUPBY子句中沒有使用CUBE或ROLLUP關(guān)鍵字,那么表示這種分組技術(shù)是普通分組技術(shù)。2/3/202366普通分組技術(shù)GROUPBY子句、HAVING子句和聚合函數(shù)一起完成對每一個組生成一行和一個匯總值。在使用GROUPBY子句和HAVING子句的過程中,要求考慮下列一些條件:在SELECT子句中的非合計列必須出現(xiàn)在GROUPBY子句中。這是因為這些非合計列必須作為組出現(xiàn),否則不能滿足一組只能有一行匯總值的條件。在HAVING子句中的列只返回一個值。因為HAVING子句是作為GROUPBY子句的條件出現(xiàn)的,所以HAVING子句必須與GROUPBY子句同時出現(xiàn),并且必須在GROUPBY子句之后出現(xiàn)。GROUPBY子句可以包括表達式。GROUPBYALL顯示出所有的組,甚至那些不滿足WHERE子句條件的組也顯示出來。如果GROUPBYALL和HAVING子句同時出現(xiàn),那么HAVING條件將覆蓋ALL。2/3/202367【例8-32】使用GROUPBY子句進行分組2/3/202368使用ROLLUP或CUBE關(guān)鍵字在GROUPBY子句中,可以使用ROLLUP或CUBE關(guān)鍵字獲得附加的分組數(shù)據(jù),這些附加的分組數(shù)據(jù)是通過各組之間的組合得到的。實際上,使用CUBE關(guān)鍵字可以生成多維數(shù)據(jù)。下面,通過一個示例講述這兩個關(guān)鍵字的特點。2/3/202369【例8-33】使用ROLLUP或CUBE關(guān)鍵字2/3/202370本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023718.11連接技術(shù)前面介紹的檢索操作都是從一個表中檢索數(shù)據(jù)。在實際應(yīng)用中,經(jīng)常需要同時從兩個表或兩個以上表中檢索數(shù)據(jù),并且每一個表中的數(shù)據(jù)往往作為一個單獨的列出現(xiàn)在結(jié)果集中。實現(xiàn)從兩個或兩個以上表中檢索數(shù)據(jù)且結(jié)果集中出現(xiàn)的列來自于兩個或兩個以上表中的檢索操作被稱為連接技術(shù),或者說連接技術(shù)是指對兩個表或兩個以上表中數(shù)據(jù)執(zhí)行乘積運算的技術(shù)。在MicrosoftSQLServer2005系統(tǒng)中,這種連接操作又可以細(xì)分為交叉連接、內(nèi)連接、外連接等。下面分別研究這些連接技術(shù)。2/3/202372交叉連接交叉連接也被稱為笛卡爾乘積,返回兩個表的乘積。在檢索結(jié)果集中,包含了所連接的兩個表中所有行的全部組合。例如,如果對A表和B表執(zhí)行交叉連接,A表中有5行數(shù)據(jù),B表中有12行數(shù)據(jù),那么結(jié)果集中可以有60行數(shù)據(jù)。交叉連接使用CROSSJOIN關(guān)鍵字來創(chuàng)建。實際上,交叉連接的使用是比較少的,但是交叉連接是理解外連接和內(nèi)連接的基礎(chǔ)。2/3/202373【例8-34】交叉連接檢索2/3/202374內(nèi)連接內(nèi)連接把兩個表中的數(shù)據(jù)連接生成第三個表,在這個第三個表中僅包含那些滿足連接條件的數(shù)據(jù)行。在內(nèi)連接中,使用INNERJOIN連接運算符,并且使用ON關(guān)鍵字指定連接條件。內(nèi)連接是一種常用的連接方式,如果在JOIN關(guān)鍵字前面沒有明確指定連接類型,那么默認(rèn)的連接類型是內(nèi)連接。2/3/202375【例8-35】內(nèi)連接檢索2/3/202376外連接在外連接中,不僅包括那些滿足條件的數(shù)據(jù),而且某些表不滿足條件的數(shù)據(jù)也會顯示在結(jié)果集中。也就是說,外連接只限制其中一個表的數(shù)據(jù)行,而不限制另外一個表中的數(shù)據(jù)。這種連接形式在許多情況下是非常有用的,例如在連鎖超市統(tǒng)計報表時,不僅要統(tǒng)計那些有銷售量的超市和商品,而且還要統(tǒng)計那些沒有銷售量的超市和商品。需要注意的是,外連接只能用于兩個表中。在MicrosoftSQLServer2005系統(tǒng)中,可以使用的3種外連接關(guān)鍵字,即LEFTOUTERJOIN、RIGHTOUTERJOIN和FULLOUTERJOIN。2/3/202377【例8-36】外連接檢索2/3/202378本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023798.12子查詢技術(shù)SELECT語句可以嵌套在其他許多語句中,這些語句包括SELECT、INSERT、UPDATE及DELETE等,這些嵌套的SELECT語句被稱為子查詢。當(dāng)一個查詢依賴于另外一個查詢結(jié)果時,那么可以使用子查詢。在某些查詢中,查詢語句比較復(fù)雜不容易理解,因此為了把這些復(fù)雜的查詢語句分解成多個比較簡單的查詢語句形式時常使用子查詢方式。使用子查詢方式完成查詢操作的技術(shù)是子查詢技術(shù)。2/3/202380【例8-37】使用了子查詢技術(shù)外連接檢索2/3/202381本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023828.13集合運算技術(shù)查詢語句的結(jié)果集往往是一個包含了多行數(shù)據(jù)集合。集合之間可以進行并、差、交等運算。在MicrosoftSQLServer2005系統(tǒng)中,兩個查詢語句之間也可以進行集合運算。其中,UNION運算符表示并集運算,EXCEPT運算符從左查詢中返回右查詢中沒有找到的重復(fù)值,INTERSECT運算符則返回左右兩個查詢語句都包含的所有非重復(fù)值。需要注意的是,在集合運算時,所有查詢語句中的列的數(shù)量和順序必須相同,且數(shù)據(jù)類型必須兼容。2/3/202383【例8-38】執(zhí)行集合運算2/3/202384本章內(nèi)容8.1概述8.2插入數(shù)據(jù)8.3更新數(shù)據(jù)8.4刪除數(shù)據(jù)8.5檢索數(shù)據(jù)概述8.6使用SELECT子句檢索數(shù)據(jù)8.7排序8.8使用WHERE子句選擇數(shù)據(jù)8.9聚合技術(shù)8.10分組技術(shù)8.11連接技術(shù)8.12子查詢技術(shù)8.13集合運算技術(shù)8.14公用表表達式8.15PIVOT和UNPIVOT8.16加密表中數(shù)據(jù)8.17上機練習(xí)8.18習(xí)題2/3/2023858.14公用表表達式在MicrosoftSQLServer2005系統(tǒng)中,可以使用公用表表達式(commontableexpression,CTE)。CTE是定義在SELECT、INSERT、UPDATE或DELETE語句中的臨時命名
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人與企業(yè)合作合同范例
- 工程簽收合同范例
- 儀器標(biāo)簽采購合同范例
- 林地用地流轉(zhuǎn)合同范例
- 校服服裝訂購合同范例
- 賓館水電維護合同范例
- 涉外采礦合同范例
- 國外客戶傭金合同范例
- 展館合同范例
- 期房內(nèi)部合同范例
- 校招面試官培訓(xùn)課件
- 初中九年級英語課件ReadingThe world in danger 市賽一等獎
- 展覽館維修維護投標(biāo)方案
- 項目電氣工程師總結(jié)
- 陳赫賈玲小品《歡喜密探》臺詞劇本
- 2023招聘專員個人年終總結(jié)
- 國際郵輪產(chǎn)業(yè)及未來郵輪
- 水工建筑物考試試題及答案
- 多元回歸分析論文
- 小學(xué)第四季度意識形態(tài)分析研判報告
- 部編二年級語文上冊 培優(yōu)輔差測試記錄表
評論
0/150
提交評論