

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> Transact-SQL Cookbook</p><p><b> 第一章 數(shù)據(jù)透視表</b></p><p> 1.1 使用數(shù)據(jù)透視表</p><p><b> 1.1.1 問題</b></p><p> 支持一個元素序列往往需要解決各種問題。例如,給定一個日期范圍
2、,你可能希望產(chǎn)生一行在每個日期的范圍。或者,您可能希望將一系列的返回值在單獨的行成一系列單獨的列值相同的行。實現(xiàn)這種功能,你可以使用一個永久表中存儲一系列的順序號碼。這種表是稱為一個數(shù)據(jù)透視表。</p><p> 許多食譜書中使用數(shù)據(jù)透視表,然后,在所有情況下,表的名稱是。這個食譜告訴你如何創(chuàng)建表。</p><p> 1.1.2 解決方案</p><p> 首
3、先,創(chuàng)建數(shù)據(jù)透視表。下一步,創(chuàng)建一個表名為富,將幫助你在透視表:</p><p> CREATE TABLE Pivot (</p><p><b> i INT,</b></p><p> PRIMARY KEY(i)</p><p><b> )</b></p><p
4、> CREATE TABLE Foo(</p><p><b> i CHAR(1)</b></p><p><b> )</b></p><p> 富表是一個簡單的支持表,你應(yīng)插入以下10行:</p><p> INSERT INTO Foo VALUES('0')
5、</p><p> INSERT INTO Foo VALUES('1')</p><p> INSERT INTO Foo VALUES('2')</p><p> INSERT INTO Foo VALUES('3')</p><p> INSERT INTO Foo VALUES(
6、'4')</p><p> INSERT INTO Foo VALUES('5')</p><p> INSERT INTO Foo VALUES('6')</p><p> INSERT INTO Foo VALUES('7')</p><p> INSERT INTO
7、 Foo VALUES('8')</p><p> INSERT INTO Foo VALUES('9')</p><p> 利用10行在富表,你可以很容易地填充樞軸表1000行。得到1000行10行,加入富本身三倍,創(chuàng)建一個笛卡爾積:</p><p> INSERT INTO Pivot</p><p>
8、; SELECT f1.i+f2.i+f3.i</p><p> FROM Foo f1, Foo F2, Foo f3</p><p> 如果你名單上的行數(shù)據(jù)透視表,你會看到它所需的數(shù)目的元素,他們將編號從0到999。 </p><p><b> 1.1.3討論</b></p><p> 你會看到食譜,跟隨在
9、這本書中,樞軸表通常是用來添加一個排序?qū)傩圆樵儭D撤N形式的數(shù)據(jù)透視表中發(fā)現(xiàn)許多數(shù)據(jù)庫為基礎(chǔ)的系統(tǒng),盡管它往往是隱藏的用戶,主要用在預(yù)定義的查詢和程序。</p><p> 你已經(jīng)看到一些表連接(的富表)控制的行數(shù),我們插入語句生成的數(shù)據(jù)透視表。從0到999的值是通過連接生成的字符串。數(shù)字值,是字符串。因此,當(dāng)加號(+)運算符用來串連,我們得到的結(jié)果如下:</p><p> '0&
10、#39; + '0' + '0' = '000'</p><p> '0' + '0' + '1' = '001</p><p> 這些結(jié)果是插入整數(shù)列在目的地的數(shù)據(jù)透視表。當(dāng)你使用一個插入語句插入字符串到整數(shù)列的數(shù)據(jù)庫,含蓄地轉(zhuǎn)換成整數(shù)的字符串。笛卡爾積富情況下確保所有可能的組合生
11、成,和,因此,所有可能的值從0到999的產(chǎn)生。</p><p> 這是值得指出的,這個例子使用行從0999和負(fù)數(shù)。你可以很容易地產(chǎn)生負(fù)面的號碼,如果需要,重復(fù)插入聲明“-”符號前面的連接字符串,小心點大約0排。有沒有這樣的事,作為一個- 0,所以你不想將' 000 '行時產(chǎn)生的負(fù)軸數(shù)。如果你這樣做,你最終會與0行的數(shù)據(jù)透視表。在我們的例子中,0行是不可能的,因為我們定義一個主鍵的透視表。<
12、/p><p> 樞軸表可能是最有用的表中的世界。一旦你使用它,它幾乎是不可能創(chuàng)造一個嚴(yán)重的應(yīng)用沒有它。作為一個示范,讓我們用樞軸表生成一個圖表迅速從32碼到126:</p><p> SELECT i Ascii_Code, CHAR(i) Ascii_Char FROM Pivot</p><p> WHERE i BETWEEN 32 AND 126</
13、p><p> Ascii_Code Ascii_Char </p><p> ----------- ---------- </p><p> 32 </p><p> 33 !</p><p> 34 "</p><p>
14、; 35 #</p><p> 36 $</p><p> 37 %</p><p> 38 &</p><p> 39 '</p><p> 40 (</p><
15、p> 41 )</p><p> 42 *</p><p> 43 +</p><p> 44 ,</p><p> 45 -</p><p> 46 .</p><p>
16、; 47 /</p><p> 48 0</p><p> 49 1</p><p> 50 2</p><p> 51 3</p><p><b> ...</b></p><
17、;p> 如何更好的使用數(shù)據(jù)透視表在這個特定的例子是你產(chǎn)生行輸出不具有同等數(shù)量的行輸入。沒有數(shù)據(jù)透視表,這是困難的,如果不是不可能的任務(wù)。簡單的指定一個范圍,然后選擇樞軸行在該范圍內(nèi),我們能夠產(chǎn)生的數(shù)據(jù),不存在任何數(shù)據(jù)庫中的表。</p><p> 作為另一個例子,數(shù)據(jù)透視表的有用性,我們可以很容易地使用它來生成一個日歷的下一個七天:</p><p><b> SELEC
18、T </b></p><p> CONVERT(CHAR(10),DATEADD(d,i,CURRENT_TIMESTAMP), 121) date,</p><p> DATENAME(dw,DATEADD(d,i,CURRENT_TIMESTAMP)) day FROM Pivot</p><p> WHERE i BETWEEN 0 AND
19、6</p><p> date day </p><p> ---------- ------------------------------ </p><p> 2001-11-05 Monday</p><p> 2001-11-06 Tuesday</p&g
20、t;<p> 2001-11-07 Wednesday</p><p> 2001-11-08 Thursday</p><p> 2001-11-09 Friday</p><p> 2001-11-10 Saturday</p><p> 2001-11-11 Sunday</p><p>
21、 這些查詢只是快速震蕩,列在這里向您展示如何一個數(shù)據(jù)透視表可用于查詢。你會看到其他的食譜,樞軸表往往是一個必不可少的工具,為快速有效的解決問題。</p><p><b> 第二章 集</b></p><p> 結(jié)構(gòu)化查詢語言,作為一種語言,是圍繞這一概念集。你可能記得在小學(xué)學(xué)習(xí),或者也許你研究套代數(shù)在高中或大學(xué)。雖然語句如選擇,更新,刪除和可用于在一個數(shù)據(jù)行在一
22、個時間,該報表設(shè)計運行數(shù)據(jù)集,且你獲得最好的優(yōu)勢時,使用這種方式。盡管這一切,我們通常看到的程序,使用操縱數(shù)據(jù)一次一行,而不是采取優(yōu)勢的強(qiáng)大的訂珠加工能力。我們希望,這一章,我們可以打開你的眼睛的力量,集合操作。</p><p> 當(dāng)你寫語句,不知道對程序,選擇一個記錄,更新它,然后選擇另一個。相反,認(rèn)為無論在經(jīng)營上的記錄集,一下子。如果你使用的程序性思維,思維可以采取一些習(xí)慣。為了幫助你,這一章提出了一些食譜
23、表明權(quán)力的一套面向編程方法與結(jié)構(gòu)化查詢語言。</p><p> 食譜,在本章的組織表現(xiàn)出不同類型的操作,可以進(jìn)行設(shè)置。你會看到如何找到共同的要素,總結(jié)的一組數(shù)據(jù),并找出元素集是一個極端。行動不一定符合數(shù)學(xué)定義的集合運算。相反,我們這些定義和解決現(xiàn)實世界的問題,用代數(shù)術(shù)語。在現(xiàn)實世界中,有些偏離嚴(yán)格的數(shù)學(xué)定義是必要的。例如,它往往是必要的元素的集合,一個操作是不可能的數(shù)學(xué)定義集。</p><p
24、><b> 2.1簡介</b></p><p> 潛水前的食譜,我們想通過一些基本步驟作了簡要的概念和定義的術(shù)語在本章。雖然我們相信你所熟悉的數(shù)學(xué)概念,交叉口,和工會,我們想把這些set-algebra條款納入一個現(xiàn)實世界的例子。</p><p><b> 2.1.1部件</b></p><p> 有三種類型
25、的部件時應(yīng)注意工作組。第一個是自己設(shè)定的。一個集合是一個集合的元素,和,為我們的宗旨,元素是數(shù)據(jù)庫表中的行或列的查詢返回的。最后,我們的宇宙,這是我們長期使用參考的所有可能的元素為一組給定。</p><p><b> 2.1.1.1集</b></p><p> 一個集合是一個集合的元素。根據(jù)定義,內(nèi)容不得復(fù)制,和他們沒有命令。在這里,數(shù)學(xué)定義的一組不同于其實際使用
26、中的語言。在現(xiàn)實世界中,它往往是有益的排序集合的元素到一個指定的順序。這樣做可以讓你找到極端等五大,或底部五,記錄。圖2 - 1顯示了一例2套。我們會提到這些例子,我們討論的各個方面的術(shù)語。</p><p> 我們的目的,我們將考慮一組是一個收集表中的行確定一個共同的元素??紤],例如,下面的表項。這張桌子是一家集集,其中每個集是一個獨特的標(biāo)識order-identification數(shù)。</p>&
27、lt;p> CREATE TABLE OrderItems(</p><p> OrderId INTEGER,</p><p> ItemId INTEGER,</p><p> ProductId CHAR(10),</p><p> Qty INTEGER,</p><p> PRIMARY K
28、EY(OrderId,ItemId)</p><p><b> )</b></p><p> 每一集都在這個案件是一個秩序和有很多元素,不重復(fù)。將元素行定義產(chǎn)品的數(shù)量和這些產(chǎn)品被命令。常見的元素是訂單列。</p><p> 使用SQL,很容易從一組列表中的所有元素。你只是問題的一條語句的選擇與確定一套具體的利益。以下查詢將返回所有單項記錄
29、集合中的順序確定的:</p><p> SELECT * FROM OrderItems WHERE OrderId=112</p><p> 在這一章中,我們將與集,總是在一個表。許多作者試圖證明集合操作使用不同的表。這個方法有2個問題。首先,從實證角度而有利,你很少會發(fā)現(xiàn)一個數(shù)據(jù)庫表,都具有相同的結(jié)構(gòu)。其次,有許多隱藏的可能性書面查詢來當(dāng)你認(rèn)為不同的設(shè)置為不同的片同表。通過集中在一
30、個表,我們希望能打開你的心,這些可能性。</p><p><b> 2.1.1.2元素</b></p><p> 一個元素是一個成員的一組。圖2 - 1,每一個人的信是一個元素。我們的目的,工作時,一個元素是一個行的表。結(jié)構(gòu)化查詢語言,它往往是有益的,不認(rèn)為元素統(tǒng)一實體。在純數(shù)學(xué)意義上來說,這是不可能的,一個集合的元素劃分為2個或多個組件。結(jié)構(gòu)化查詢語言,然而,你
31、可以分為組成元素。一個表通常是由許多不同的欄目,你就會經(jīng)常查詢寫入操作只有一個子集,這些列。</p><p> 例如,讓我們說,你想找到的所有訂單,包含一個炸藥,無論數(shù)量。你的元素排在orderitems表。你需要使用產(chǎn)品編號列識別爆炸物,你會需要返回訂單列確定的訂單,但你沒有使用其他表中的列。這里的查詢:</p><p> SELECT OrderId </p><
32、;p> FROM OrderItems o</p><p> GROUP BY OrderId</p><p> HAVING EXISTS( </p><p><b> SELECT * </b></p><p> FROM OrderItems o1 </p><p> WH
33、ERE o1.ProductId='Explosive' AND o.OrderId=o1.OrderId)</p><p> 此查詢實際使用的一組操作,你會讀到這一章。操作稱為包含操作,和它對應(yīng)的查詢關(guān)鍵字的存在。</p><p><b> 2.1.1.3合集</b></p><p> 一個合集的所有可能的元素可以是一個
34、給定的集合??紤]1和2圖。每一集是由字母的字母表。如果我們決定,只有字母可以設(shè)置元素,宇宙的兩隊會設(shè)置的所有信件,如圖2 - 2所示。</p><p> 一個更現(xiàn)實的例子一個宇宙,認(rèn)為一個學(xué)校課程的學(xué)生提供40種可能。每個學(xué)生選擇一個小數(shù)目40課程采取在某一學(xué)期。課程內(nèi)容。本課程,使學(xué)生正在制定一套。不同的學(xué)生采取不同的組合和數(shù)量的課程。該集是不一樣的,也不是所有大小相同,但他們都包含元素相同的宇宙。每個學(xué)生必
35、須選擇從相同的40種可能性。</p><p> 在學(xué)生/課程的例子了,所有的元素都來自同一個宇宙。它也可能為一些套在一個表有不同的宇宙人。例如,假設(shè)一個表列出完成案例研究,學(xué)生提出了。進(jìn)一步假設(shè),宇宙可能的情況是不同的每個過程研究。如果你認(rèn)為一套定義一個課程和學(xué)生,宇宙的元素,將取決于課程的學(xué)生。每個課程都會有不同的宇宙。</p><p><b> 2.1.2集合運算<
36、/b></p><p> 設(shè)置操作允許你把兩只集并返回一些有意義的結(jié)果。確切的結(jié)果取決于要執(zhí)行的操作。例如,你可以把兩只,只返回那些元素出現(xiàn)在兩套。這個過程被稱為交叉。其他業(yè)務(wù)包括:包含,工會,補充,和差異。</p><p><b> 2.1.2.1包含</b></p><p> 包含操作告訴你是否一個特定的元素可以被發(fā)現(xiàn)在一個集合
37、。圖2 - 3顯示1(圖1)包含字母“d”</p><p> 包含是一個非?;镜膕et-algebra操作,可以實現(xiàn)直接在查詢相結(jié)合的選擇語句的存在條款。例如,在下面的查詢,存在用于每個學(xué)生的studentmaster表看,學(xué)生在組學(xué)生采取accn101課程編號:</p><p> SELECT * FROM StudentMaster sm</p><p>
38、 WHERE EXISTS (SELECT * FROM Students s</p><p> WHERE sm.StudentName = s.StudentName</p><p> AND s.CourseId = 'ACCN101')</p><p> 使用的存在是如此普遍,你可能甚至不想太多的基本操作,它代表。</p>
39、<p><b> 2.1.2.2交叉</b></p><p> 交叉是一個運行在2個或更多的是比較常見的元素。例如,圖2 - 4顯示1和2之間的交叉。</p><p> 一個典型的問題回答了一個路口,學(xué)生已accn101誰也采取了mgmt120。SQL - 92標(biāo)準(zhǔn)指定關(guān)鍵字的使用交叉實施交叉操作。因此,你應(yīng)該能寫:</p><
40、p> SELECT DISTINCT StudentName</p><p> FROM Students</p><p> WHERE CourseId='ACCN101'</p><p><b> INTERSECT</b></p><p> SELECT DISTINCT Stude
41、ntName</p><p> FROM Students</p><p> WHERE CourseId='MGMT120</p><p> 不幸的是,服務(wù)器不實施相交關(guān)鍵字。在這一章的交叉食譜顯示一些技術(shù)解決了這個問題。此外,本章告訴你如何執(zhí)行部分路口。一部分路口允許你查找元素屬于某個特定的集數(shù),但不一定是所有集合。</p><
42、p><b> 2.1.2.3聯(lián)盟</b></p><p> 工會是一種結(jié)合成一個較大的一套或多套,如圖2 - 5所示。結(jié)果集包含的所有要素兩套。</p><p> 結(jié)構(gòu)化查詢語言(如語言)是裝備精良的工作與工會和實行聯(lián)合操作使用聯(lián)合關(guān)鍵字。這允許你把返回的行選擇報表和混合在一起到一個結(jié)果集。例如,下面的查詢返回一個列表的學(xué)生誰采取任何accn101或mgm
43、t120:</p><p> SELECT * FROM Students</p><p> WHERE CourseId = 'ACCN101'</p><p><b> UNION</b></p><p> SELECT * FROM Students</p><p>
44、 WHERE CourseId = 'MGMT120'</p><p> 在合并操作,刪除所有重復(fù)的結(jié)果。這方面的例子,如果一個學(xué)生采取了兩個課程,他仍將只顯示一次。如果你想保存重復(fù)行,你可以使用所有的地方工會聯(lián)盟。</p><p> 當(dāng)你執(zhí)行一個語句的選擇使用歐盟運營商,服務(wù)器必須執(zhí)行每個查詢分別。在許多情況下,工會可以實現(xiàn)更有效的聯(lián)盟商。一個典型的例子是當(dāng)你定義一
45、條為一組或多組標(biāo)識相結(jié)合。另一個這樣的情況是當(dāng)你計算信息匯總數(shù)集。</p><p><b> 2.1.2.4補充</b></p><p> 補語是這個集合的所有元素在宇宙中缺少一套。圖2 - 6顯示設(shè)置1及其補充關(guān)于宇宙圖2 - 2。</p><p> 補充操作是密切相關(guān)的宇宙的一套,和一個聯(lián)盟既補充和原來的宇宙,給你。你會看到在一個食譜
46、,這樣的一個例子是查找學(xué)生的記錄,生成一個名單,失蹤的學(xué)期論文。</p><p> 不要被誤導(dǎo)了的簡單的概念。與補充,需要定義一個宇宙。它往往是可能定義一個宇宙范圍;例如,你可以定義一個特定的容器有100個可能的插槽。在這種情況下,它是相當(dāng)容易操作的補充。然而,如果你的問題需要你的具體定義的每一個可能的元素為一套,復(fù)雜的補充操作將增加。在這種情況下,你必須定義一個宇宙在不同的表和表查詢。</p>
47、<p><b> 2.1.2.5差異</b></p><p> 兩國之間的差異集的元素的集合,一組是不存在的。圖2 - 7說明之間的差異1和2集。</p><p> 設(shè)置不同的是一個常見的問題時,程序集,它是有用的當(dāng)你想找到2個或更多的之間的差異。你可以減去一個從另一個,一套或多套從所有人,從一個特定的設(shè)置。</p><p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫外文文獻(xiàn)翻譯2篇
- 外文文獻(xiàn)翻譯--數(shù)據(jù)庫管理系統(tǒng)的介紹
- 數(shù)據(jù)庫畢業(yè)設(shè)計外文文獻(xiàn)及翻譯
- 軟件數(shù)據(jù)庫的面向?qū)ο蟮囊暯峭馕奈墨I(xiàn)翻譯
- 英文文獻(xiàn)數(shù)據(jù)庫簡介
- [學(xué)習(xí)]外文文獻(xiàn)數(shù)據(jù)庫請求全文方法
- 外文文獻(xiàn)及翻譯---信息系統(tǒng)開發(fā)和數(shù)據(jù)庫開發(fā)
- 外文文獻(xiàn)及翻譯:信息系統(tǒng)開發(fā)和數(shù)據(jù)庫開發(fā)
- 外文翻譯----數(shù)據(jù)庫和數(shù)據(jù)庫系統(tǒng)
- 外文文摘型數(shù)據(jù)庫簡介
- 電路交換網(wǎng)與vb調(diào)用數(shù)據(jù)庫外文文獻(xiàn)翻譯@中英文翻譯@外文翻譯
- 數(shù)據(jù)庫設(shè)計外文翻譯
- sql數(shù)據(jù)庫外文翻譯
- 數(shù)據(jù)庫設(shè)計外文翻譯
- 數(shù)據(jù)庫管理-外文翻譯
- 外文翻譯---數(shù)據(jù)庫管理
- 數(shù)據(jù)庫編程外文翻譯
- 數(shù)據(jù)庫管理外文翻譯
- 數(shù)據(jù)庫外文翻譯---關(guān)系數(shù)據(jù)庫的結(jié)構(gòu)
- 醫(yī)學(xué)全文文獻(xiàn)與循證醫(yī)學(xué)數(shù)據(jù)庫
評論
0/150
提交評論