數(shù)據(jù)庫外文文獻(xiàn)翻譯_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論