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