教學(xué)課件資源案例數(shù)據(jù)4章_第1頁
教學(xué)課件資源案例數(shù)據(jù)4章_第2頁
教學(xué)課件資源案例數(shù)據(jù)4章_第3頁
教學(xué)課件資源案例數(shù)據(jù)4章_第4頁
教學(xué)課件資源案例數(shù)據(jù)4章_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

SQLServer2017第1

第3

第5

第7第2

第4

第62本章內(nèi)第1SQL概數(shù)據(jù)定義數(shù)據(jù)查詢數(shù)據(jù)更新視圖的定義和使面向大數(shù)據(jù)管理的SQL擴展語

SQL是結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)的簡稱,是關(guān)系數(shù)據(jù)庫的標準語言。SQL是一種通用的、功能強大的數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng),幾乎所有關(guān)系數(shù)據(jù)庫系統(tǒng)都支持SQL,而且一些非關(guān)系數(shù)據(jù)庫也支持類似SQL或與SQL部分兼容的查詢語言,如HiveSQL、SciDBAQL、SparkSQL等。SQL同樣得到其他領(lǐng)域的重視和采用,如人工智能領(lǐng)域的數(shù)據(jù)檢索。同時,SQL語言也在不斷發(fā)展,SQL標準中增加了對JSON的支持,SQLServer2017增加了對圖數(shù)據(jù)處理的支持。3第1第1節(jié)SQL概SQL語言是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,允許用戶在數(shù)據(jù)結(jié)構(gòu)上工作數(shù)據(jù)庫系統(tǒng)可以使用相同的SQL查詢語言作為數(shù)據(jù)輸入與管理的接口。SQL語機和大型機的各種計算機系統(tǒng)上,具有良好的可移植性。SQL語言具有共享性,數(shù)據(jù)庫和各種產(chǎn)品都使用SQL作為共同的數(shù)據(jù)存取語言和標準的接口,使不異構(gòu)操作系統(tǒng)之間的共享與移植。SQL語言具有豐富的語義,其功能不僅僅是交互式數(shù)據(jù)語言,還包括數(shù)據(jù)定義、數(shù)據(jù)庫的插入/刪除/修改等更新操作本節(jié)所使用的示例數(shù)據(jù)庫是TPC-H,SQL命令執(zhí)行平臺為SQLServer2017一、SQL的產(chǎn)生與發(fā)SQL語言于1974年IBM公司圣約瑟研究研制的大型關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEMR中使用的SEQUEL語言(由BOYCE和CHAMBERLIN提出),后來在SEQUEL的基礎(chǔ)上發(fā)展了SQL語言。1992年制定了SQL92標準,全名是“InternationalStandardISO/IEC9075:1992,DatabaseLanguageSQL”。SQL99則進一步擴展為框架、SQL基礎(chǔ)部分、SQL調(diào)用接口、SQL永久SQL2003包含了XML相關(guān)內(nèi)容,自動生成列值(columnvalues)2006年Sun公司將以結(jié)構(gòu)化查詢語言基礎(chǔ)的數(shù)據(jù)庫管理系統(tǒng)嵌入JavaV6二、SQL語言結(jié) DQL用于在表中查詢數(shù)據(jù)。保留字SELECT是DQL(也是所有SQL)三、SQL語言特統(tǒng)一的數(shù)據(jù)操作語言:SQL語言集數(shù)據(jù)定義DDL、數(shù)據(jù)DML和數(shù)據(jù)控“做什么”,不必描述“怎么做”,也不需要了解路徑。數(shù)據(jù)路徑的選數(shù)據(jù)定義:CREATE、DROP、數(shù)據(jù):INSERT、DELETE、數(shù)據(jù)控制:GRANT、四、SQL數(shù)據(jù)類字符字符型用于字符串,根據(jù)字符串長度與長度的關(guān)系可以分為兩大類CHAR(n)和VARCHAR(n),表示最大長度為n的字符CHAR(n)采用固定長度,當字符串長度小于寬度時尾部自動增加空格。VARCHAR(n)按照字符串實際長度,字符串需要加上表示字節(jié)長度值的前 o’、 World’、’oWorldCup’在CHAR(12)或VARCHAR(12)中的空間分配符串長度增加1個前綴數(shù)據(jù)字節(jié),不同長度的字符串時實際使用的空間為的數(shù)據(jù)來說和簡單,在列數(shù)據(jù)庫中定長列易于實現(xiàn)根據(jù)邏輯位置訪在管理和上較為復(fù)雜。1‘051‘05Hello長度HelloHelloHelloWoHelloWorldHelloWoHelloWorldC

‘o‘oHelloWorldHelloWorld長度HelloWorldC長度NCHAR(n)和NVARCHAR(n)數(shù)據(jù)類型采用Unicode標準字符集,Unicode標 單位數(shù)值整型包括:BIGINT、INT、SMALLINT和TINYINT。為了節(jié)省數(shù)據(jù)庫的空間,在表設(shè)計時需要為列設(shè)置適合的數(shù)據(jù)類型,以免空間浪費。值域和數(shù)數(shù)據(jù)類范 -263(-9,223,372,036,854,775,808)到263-

8字 -231(-2,147,483,648)231-

4字 -215(-32,768)到215-1 2字 0到 1字型數(shù)據(jù)用于表示一個數(shù)的整數(shù)部分和小數(shù)部分。UMERICp數(shù),默認為0,滿足0≤s≤p。NUMERIC型數(shù)據(jù)使用最大精度時可以從- -1范圍內(nèi)的數(shù)。Decimal與NUMERIC用法相同。DOUBLE分別對應(yīng)單精度(4字節(jié))與以精度浮點數(shù)(8字節(jié)),REAL的SQL-92同義詞為FLOAT(24),數(shù)值范圍-3.40E38-1.18E-38、0以及1.18E-38至3.40E+38。FLOAT(n)類型n為用于FLOAT數(shù)值尾數(shù),大小為4字節(jié)時n取值范圍為1-24,精度是7位;DOUBLEPRECISION的同義詞為FLOAT(53),大小為8字節(jié),n取值范圍為25-53,精度是15位。FLOAT數(shù)值范圍(取決于n值大?。?1.79E308-2.23E308、02.23E308至1.79E+308浮點型數(shù)據(jù)屬于近似數(shù)字數(shù)據(jù)類型,值的最近似值,并不指定的精確類型而是使用INTEGER、DECIMAL、MONEYSMALLMONEY等數(shù)據(jù)類貨幣型數(shù)據(jù)包括:MONEY和SMALLMONEY。MONEY和SMALLMONEY 表4-2MONEY和SMALLMONEY值域 空-922,337,203,685,477.5808到8-214,748.36484邏輯邏輯型BOOLEAN類型只能有兩個取值:真(True)或假(False),用于表SMALLDATETIME為例說明日期型數(shù)據(jù)的大小與取值范圍一個DATETIME型的字段可以的日期范圍是從第一毫秒年月日最后一毫秒,長度為8字節(jié)SMALLDATETIME型的字段能夠從到的日期, 本章內(nèi)第1SQL概數(shù)據(jù)定義數(shù)據(jù)查詢數(shù)據(jù)更新視圖的定義和使面向大數(shù)據(jù)管理的SQL擴展語

SQL是結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)的簡稱,是關(guān)系數(shù)據(jù)庫的標準語言。SQL是一種通用的、功能強大的數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng),幾乎所有關(guān)系數(shù)據(jù)庫系統(tǒng)都支持SQL,而且一些非關(guān)系數(shù)據(jù)庫也支持類似SQL或與SQL部分兼容的查詢語言,如HiveSQL、SciDBAQL、SparkSQL等。SQL同樣得到其他領(lǐng)域的重視和采用,如人工智能領(lǐng)域的數(shù)據(jù)檢索。同時,SQL語言也在不斷發(fā)展,SQL標準中增加了對JSON的支持,SQLServer2017增加了對圖數(shù)據(jù)處理的支持。13第2第2節(jié)數(shù)據(jù)定義數(shù)據(jù)庫中的關(guān)系必須由數(shù)據(jù)定義語言(DDL)指定給系統(tǒng),SQL的DDL用于

DROPTABLEDROPINDEXDROPVIEW

(也稱 一、模式的定義模式的定CREATESCHEMA權(quán)限。CREATESCHEMAschema_name[AUTHORIZATIONusername][schema_element[...]]CREATESCHEMAAUTHORIZATIONusername[schema_element[...]]SQL命令示例CREATETABLEpart(p_partkeyint,p_namevarchar(22),p_categoryvarchar(7))CREATEVIEWpart_viewASSELECTp_name,p_categoryFROMpartWHEREp_partkey上面的SQL命令與以下三個SQL命令等價SELECTp_name,p_categoryFROMpartWHEREp_partkey定義等。當沒有指定模式名時,模式名隱含為用戶名TPCH_user刪除模DROPSCHEMASQL命令描【例4-2】刪除模式刪除模式TPCHDEMO時需要首先刪除表part和視圖part_view,然再DROPVIEWDROPSCHEMA模式轉(zhuǎn)【例4-3】創(chuàng)建一個模式temp并在模式中創(chuàng)建表users,然后將usersTPCHDEMOALTERSCHEMATPCHDEMOTRANSFER首先創(chuàng)建模式temp和模式中的表users,在SQLServer2017管理器中查看數(shù)據(jù)庫中的表對象存在名稱為temp.users的表。通過ALTERSCHEMA命令將模式temp中的表users轉(zhuǎn)移給二、表的定義、刪除與修CREATETABLE[database_name.[schema_name].|schema_name.](<column_name><type_name>[,<column_name><type_name>SQL命令描準化的設(shè)計中通常采用表名縮寫通過下劃線與列名組成復(fù)合列名名方避免因數(shù)據(jù)類型值域過大導(dǎo)致的空間浪費問題。在大數(shù)據(jù)時,數(shù)據(jù)類型的寬度決定了數(shù)據(jù)空間,需要合理地根據(jù)應(yīng)用的特征選擇適當?shù)?第2節(jié)數(shù)據(jù)定義列級完整性約束constraint_name包括[NULL|NOTNULL如P_SIZEintNULL表示列P_SIZE可以取空值。注意,表中設(shè)置為主碼的列不可為空,需要設(shè)置NOTNULL約束條件。{PRIMARYKEY|UNIQUE}[CLUSTERED|NONCLUSTERED為主碼并創(chuàng)建索引。索引是指表中行數(shù)據(jù)的物理順序與鍵值的邏輯(索引)順序相同,一個表只能有一個索引,一些數(shù)據(jù)庫系統(tǒng)默認為主碼建立索引。REFERENCES[schema_name.]referenced_table_name[(ref_column) 第2第2節(jié)數(shù)據(jù)定義【例4-4】參照圖3-13(A)模式,寫出TPC-H數(shù)據(jù)庫中各表的定義命令

PRIMARY varchar(152)

PRIMARYN_REGIONKEY REFERENCESREGION varchar(152)

varchar(23)

PRIMARY

REFERENCESvarchar(101) REFERENCES

PRIMARY

REFERENCESvarchar(117));

REFERENCES

varchar(79));

修改ALTERTABLE<table_name[ADD<column_name><type_name>[ADD<table_constraint>][DROP<column_name>][DROP<constraint_name>][ALTERCOLUMN<column_name>[type_name]|[NULL|NOTNULLSQL命令示例【例45NOTNULL;ALTERTABLELINEITEMADDCONSTRAINTFK_SFOREIGNKEY(L_SURRKEY)REFERENCESR(S_SUPPKEY);--SQL命令解析:在LINEITEM表中增加一個外鍵約束。CONSTRAINT關(guān)鍵類型一樣的列作為臨時列,然后將要修改列的數(shù)據(jù)到臨時列并置空要換后回被修改的列,最后刪除臨時列。刪除命令:DROPDROPTABLE<table_name>SQL命令描的約束所,如FOREIGNKEY,不能有視圖、觸發(fā)器、過程及函數(shù)SQL命令示DROPTABLE不同的數(shù)據(jù)庫對DROPTABLE命令有不同的規(guī)定,有的數(shù)據(jù)庫不支持內(nèi)存模以SQLServerHekaton內(nèi)存引擎為例,數(shù)據(jù)庫可以創(chuàng)建內(nèi)存優(yōu)化表。在Server2016【例4-7】為TPC-H(TPCH)數(shù)據(jù)庫的LINEITEM表創(chuàng)建內(nèi)存'C:\IM_DATA\TPCH_mod')TOFILEGROUPTPCH_mod;為數(shù)據(jù)庫TPCH增加文件組TPCH_mod,為文件組增加文C:\IM_DATA\TPCH_mod作為數(shù)據(jù)容通過下面的SQL命令創(chuàng)建內(nèi)存表LINEITEM_IM,其中子句indexix_orderkeynonclusteredhash(lo_orderkey,lo_linenumber)with(bucket_count= 但過大的哈希桶數(shù)量也會產(chǎn)生空間的浪費。命令子句WITH(MEMORY_OPTIMIZED=ON,用于設(shè)置內(nèi)存表類型,MEMORY_OPTIMIZED=ON表示創(chuàng)建表為內(nèi)存DURABILITY=SCHEMA_ONLY表示創(chuàng)建非持久化內(nèi)存優(yōu)化表,不記錄這些I/O,但如果服務(wù)器或進行故障轉(zhuǎn)移,則無法恢復(fù)數(shù)據(jù);表的主是在內(nèi)存中,即為從內(nèi)存表中的行,和更新這些行數(shù)據(jù)到內(nèi)存中,但內(nèi)存優(yōu)化表的數(shù)據(jù)同時還在磁盤上著一個僅用于持久性目的副本,第2第2節(jié)數(shù)據(jù)定義

notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notnull,notindexix_orderkeynonclusteredhash(L_ORDERKEY,L_LINENUMBER)with(bucket_count= 第2第2節(jié)數(shù)據(jù)定義三、代表性的索引,提供多種路徑,數(shù)據(jù)庫能夠自動地執(zhí)行索引查找,提高數(shù)據(jù)庫的查詢連接索引、索引和列索引等。索引 數(shù)據(jù)庫通常會為關(guān)系中定義的主碼自動創(chuàng)建索引(clusteredindex),即織表記錄鍵值-地址(PageId)對的分層。在創(chuàng)建索引時,原始表中較長的記錄按索引的結(jié)構(gòu)抽取出鍵值-地址對排序后以page為單位在B+樹索引page中的最小值抽取出構(gòu)建上級非葉索引節(jié)點,以page為單位依次每個葉節(jié)點建立索引。非葉節(jié)點依次向上構(gòu)建,直到只產(chǎn)生唯一的非葉節(jié)點作為B+節(jié)),page大小為4KB,則記錄需要在地址4字節(jié)),則每個4KB大小的page中可以512個索引項,B+樹索引的葉在執(zhí)行索引查找時,首先B+樹索引的根節(jié)點,根據(jù)鍵值大小下一3非葉索引節(jié)點,再依次葉節(jié)點,獲得鍵值匹配記33圖4-3B+范圍查找時只需要查找范圍表達式的最小值后在點上順序,直到CSB+-Tree索B+樹索引是一種磁盤索引結(jié)構(gòu),在內(nèi)存數(shù)據(jù)庫中CSB+-Tree是一種cache敏感 提高索引查找過程的cacheline利用率,即在一個cacheline中盡可能多的索引信息。通常的B+-Tree節(jié)點中至少一有半的空間用于下級節(jié)點的指針,而得到。通過這種地址計算機制,CSB+-Tree的非葉節(jié)點中減少了指針的空間,能夠的節(jié)點信息,從而提高cacheline的利用率。內(nèi)存以cacheline為單位,一個cacheline長度通常為64字節(jié),內(nèi)存B+-Tree索引的節(jié)點以cacheline為單位,假設(shè)一個鍵值和指針的長度均為4字節(jié),則一個 line節(jié)點中至多能7個子節(jié)點(7個鍵值,8個指針)信息,而CSB+-Tree節(jié)點中只一個下級子節(jié)點指針,則一個cacheline節(jié)點中能夠存14個鍵值)信息,從而提高了索引查找時cacheline的利用率,降低了索引樹的圖4-4為CSB+-Tree示意圖,虛線部分是連續(xù)的下級子節(jié)點組(node包含不超過3個的節(jié)點,如節(jié)點[3的下級節(jié)點有兩個,節(jié)點[1319]的下級節(jié)點有3個,下級節(jié)點定長連續(xù),通過首節(jié)點地址和偏移地址可以計算出下B+-Tree節(jié)點時只需要創(chuàng)建一個新的節(jié)點,而CSB+-Tree節(jié)點時則需創(chuàng)建一個新的節(jié)點組,當CSB+-Tree在更新時產(chǎn)生較多的操作時,CSB+-Tree的代價較大,可以通過在CSB+-Tree節(jié)點中預(yù)留較大的空間來減少分裂代價。CSB+-Tree時節(jié)點組的代價較大,進一步的優(yōu)化策略是將節(jié)點組為多個段,插入數(shù)據(jù)產(chǎn)生時通過段代替代價較大的節(jié)點組復(fù)制,從而降低CSB+-Tree索引代價??傮w上說,SB-r索引具有較好的查找性,能夠提高helin利用率,提高索引性能。但由于采用偏移地址計算來代替節(jié)點地址的策略需要將節(jié)續(xù)引價S適用于讀密集型的決策支持負載,如SS、P-、P-S等負載中索引字鍵使S-具有較低的索引 代價。CST-Tree索T-Tree是AVL-Tree的變種,是一種適合內(nèi)存的索引結(jié)構(gòu),它在一個節(jié)點中問代價較高。提高T-Tree內(nèi)存性能的另一個方法是按cacheline大小設(shè)計T-Tree節(jié)點。在T-Tree檢索中,每個節(jié)點的產(chǎn)生一個cachelinemiss,但在一個節(jié)點中通常只有最大值和最小值用于比較查找鍵值,cacheline的利用率低,一個檢索操作產(chǎn)生較多的cachelinemisses。用較少的空間,并且能夠顯著提高索引查找時的cache。第2第2

第2第2節(jié)數(shù)據(jù)定義當二叉樹為數(shù)組時,不需要父節(jié)點節(jié)點的指針,可以根據(jù)節(jié)點ii/2i2i21圖4-5(B)中第一個二分查找中第3個節(jié)點240對應(yīng)的父節(jié)點位置為1,左子節(jié)點位置為6,右子節(jié)點位置為7。當每個二分查找連續(xù)時,節(jié)點只需要下級第一個的地址指針,其他以過偏移地址計算得到其地址。圖4-5()使用aheline長度的數(shù)組節(jié)點組,當鍵值為4字節(jié),heli3273。節(jié)點組內(nèi)部的查找只產(chǎn)生一個elieis,節(jié)點組之間的查找產(chǎn)生新的helinei。 在節(jié)點組內(nèi)部完成與個節(jié)點 組,產(chǎn)生一個cache miss;在圖4-5(C)最右側(cè)的節(jié)點組中與節(jié)點300和290進行比較,確定鍵值287在節(jié)點290對應(yīng)的T-Tree節(jié)點中,對應(yīng)的T-Tree當CST-Tree插入新的數(shù)據(jù)產(chǎn)生節(jié)點時,需要增加新的節(jié)點以及新的節(jié)點組 line為節(jié)點單位,減少索引查找 line miss數(shù)量,另一方面采用連續(xù)的數(shù)組消除指針代價, 需要保證節(jié)點組的連續(xù),當數(shù)據(jù)更新產(chǎn)生較多的節(jié)點時,索引代機性能的影響較大,如通過哈希索引較多的鍵值時,每個索引都可能導(dǎo)致一個磁盤page的隨機,產(chǎn)生大量隨機磁盤I/O,索引性能在能更高的cache中,從而提高哈希索引性能。哈希函數(shù)計算直接得到數(shù)據(jù)位置,

9876543210的低勢集屬性。如圖4-7所示,關(guān)系中的屬性ndr和Countr分別有2個和3ndr的位圖索引包含兩個位圖,分別表示ndr值為M或F的記錄在表中的位置。圖右所示的位圖索引結(jié)構(gòu)可以看作是為屬性ndr按屬性成員的數(shù)量創(chuàng)建一個ndndr位圖矩陣的每一行中只有一個對應(yīng)位置取值為1,其余位置取值0。通過位圖索引機,ndr屬性為2個位壓縮了屬性空得ndr定值時所有滿足條件記錄的位置。第2第2節(jié)數(shù)據(jù)定義圖4-8對應(yīng)了在為Gender和Country屬性創(chuàng)建位圖索引后執(zhí)行查詢時位圖索引SELECTcount(*)FROMWHEREGender=’M’ANDCountryin(’Mexico’Gender值為’M’的位圖,查詢條件Countryin(’Mexico’,’USA’)轉(zhuǎn)換為訪 第2第2節(jié)數(shù)據(jù)定義屬性中的成員數(shù)量越多,位圖索引中的位圖數(shù)量越多,位圖空間代價越大過壓縮技術(shù)縮減位圖索引空間,同時,當位圖很大時,位圖運算也消耗大量的CPU計算資源,可以通過SIMD并行計算技術(shù)提圖計算性能,也可以圖4-9中維表Customer的屬性Gender和Country為低勢集屬性,事實表Sales中Customer表的Gender和Country屬性創(chuàng)建與Sales表的位圖連接索引ONsales(customer.gender,customer.country)FROMsales,customerWHEREsales.customer_id= 索引Storage索引是一種根據(jù)數(shù)據(jù)塊元信息過濾查詢數(shù)據(jù)塊的索引技術(shù)。如圖4-10所件“PROD_CODEBETWEEN75000AND90000”超出第一個數(shù)據(jù)塊中描第二個數(shù)據(jù)塊。索引只記錄數(shù)據(jù)塊中匯總的元信息,數(shù)據(jù)量極小,可以常駐內(nèi)存。通過索引過濾掉與查詢條件不相關(guān)的磁盤數(shù)據(jù)塊,提高查詢的查詢中索引的過濾效果較好。與其他索引不同,索引不是一種精確的索引,而是基于元數(shù)據(jù)統(tǒng)計的粗糙過濾索引,索引的粒度是數(shù)據(jù)塊,數(shù)據(jù)塊內(nèi)還需要通過掃描操作完成查詢。第2據(jù)定義RowPROD_CODESALES_DT13-Mar-13-Mar-123-Mar-212-Mar-12313-Feb-13-Feb-311-Jan-412-Dec-56

1234Storage

第2節(jié)數(shù)據(jù)定義列索引Columnstore列索引是一種基于列模型的索引結(jié)構(gòu)。SQLServer2012/2016/2017中采用了列索引技術(shù),如圖4-11所示,行記錄以1M行為單位劃分為rowgroup,每個rowgroup中的屬性按列并進行壓縮,采用字典表壓縮技術(shù)的列需要在rowgroup中字典表。在查詢處理時,索引涉及的列在列索圖4-11列索第2節(jié)數(shù)據(jù)定義在傳統(tǒng)的磁盤行數(shù)據(jù)庫中,當按指定鍵值查找時需要掃描全部的記錄才能找到滿足條件的記錄,在查找過程中只有指定屬性值被查找所使用,數(shù)據(jù)數(shù)據(jù)效率還是查找效率都有較好的性能。索引是數(shù)據(jù)庫重要的查詢優(yōu)化技第2第2節(jié)數(shù)據(jù)定義四、索引的創(chuàng)建CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEXON<object>(column_name[ASC|DESC][,...n]SQL命令描個列上,各列通過逗號分隔,ASC表示升序,DESC表示降CLUSTERED表示建立的索引是索引。索引按索引列(或多個列)值的順序組織數(shù)據(jù)在表中的物理順序,一個基本表上只能創(chuàng)建一個聚集索引,一些數(shù)據(jù)庫默認為主鍵創(chuàng)建索引。索引需要占用額的基本更時索也同步行更新數(shù)據(jù)庫管理員需衡索引策,有選擇建索引來以較低的【例4-8】為TPC-H數(shù)據(jù)庫的r表的s_name列創(chuàng)建唯一索引,為s_nation列CREATEUNIQUEINDEXs_name_InxONCREATEINDEXs_n_c_InxONr(s_nationkeyASC,s_phone查詢:select*fromrwheres_name=' 第2節(jié)數(shù)據(jù)定義第2第2節(jié)數(shù)據(jù)定義【例4-9】為TPC-H數(shù)據(jù)庫的LINEITEM表創(chuàng)建列索引SELECTl_returnflag,l_linestatus,SUM(l_extendedprice*(1-l_discount)*(1+l_tax))FROMlineitemWHEREl_shipdate<='1998-12-01'GROUPBYl_returnflag,l_linestatus;為查詢中的列創(chuàng)建列索引,將查詢的表掃描操作轉(zhuǎn)換為高效的索引掃描。創(chuàng)建列索引命令如下ONlineitem(l_returnflag,l_linestatus,創(chuàng)建列索引后,執(zhí)行查詢時數(shù)據(jù)庫查詢處理引擎自動選擇列索引加速查詢處理性能,在查詢計劃中使用列索引掃描操作代替原始的表掃描操作,圖4-14基于列索引掃描的查詢計索引創(chuàng)建后由數(shù)據(jù)庫系統(tǒng)自動使用和,不需要用戶干預(yù)。索引提高了數(shù)據(jù)庫查詢性DROPINDEX[index_nameON<object>] 以使用兩種指定方法:index_nameON<object>和table_or_view_name.index_name,DROPINDEXDROPINDEXs_name_InxON本章內(nèi)第1SQL概數(shù)據(jù)定義數(shù)據(jù)查詢數(shù)據(jù)更新視圖的定義和使面向大數(shù)據(jù)管理的SQL擴展語

SQL是結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)的簡稱,是關(guān)系數(shù)據(jù)庫的標準語言。SQL是一種通用的、功能強大的數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng),幾乎所有關(guān)系數(shù)據(jù)庫系統(tǒng)都支持SQL,而且一些非關(guān)系數(shù)據(jù)庫也支持類似SQL或與SQL部分兼容的查詢語言,如HiveSQL、SciDBAQL、SparkSQL等。SQL同樣得到其他領(lǐng)域的重視和采用,如人工智能領(lǐng)域的數(shù)據(jù)檢索。同時,SQL語言也在不斷發(fā)展,SQL標準中增加了對JSON的支持,SQLServer2017增加了對圖數(shù)據(jù)處理的支持。63第3第3節(jié)數(shù)據(jù)查詢查詢是數(shù)據(jù)庫的操作,SQL提供SELECT語句進行數(shù)據(jù)查詢。SELECT[WITHSELECTselect_list[INTOnew_table[FROMtable_source][WHEREsearch_condition[GROUPBY[ORDERBYorder_expression[ASC|DESC]SQL命令描述出目標列表達式select_list指定的元組屬性,按GROUPBY子句進行計算,分組計算的結(jié)果按HAVING子句search_condition指定的條件輸出,輸出的結(jié)果按ORDERBY子句order_expression指定的列進行排一、單表查詢是針對一個表的查詢操作,主要包括選擇、投影、、分組、排投影 查詢?nèi)康牧袝r,select_list可以用*或表中全部列名來表SQL命令示例:(示例表為SELECT*FROMPART;或P_SIZE,P_CONTAINER,P_RETAILPRICE, FROMPART;SELECTP_NAME,P_BRAND,P_CONTAINERFROM和順序取出屬性P_NAME,P_BRAND和P_CONTAINER的值,組成一個新的元 在行數(shù)據(jù)庫中,各個列的屬性順序地在一起,雖然查詢中可能只輸所示,投影操作不能減少從磁盤數(shù)據(jù)的代價(A)行時的投影操圖4-15行和列投影操作的數(shù)據(jù)方而列是將各列獨立,查詢可以 查 所示,數(shù)據(jù)的磁盤效率更高(B)列時的投影操圖4-15行和列投影操作的數(shù)據(jù)方SQL命令示 MITDATE,L_RECEIPTDATE,'IntervalDays:'asReceipting,DATEDIFF(DAY, MITDATE,L_RECEIPTDATE)asIntervalDay,L_EXTENDEDPRICE*(1-L_DISCOUNT)asDiscountedPrice,fromLINEITEM;–SQL查詢解析:輸出表中原始的列信息,常量'IntervalDays:'作為常量列,as短語為列設(shè)置別名,日期函數(shù)DATEDIFF(DAY, 與MITDATE間隔的天數(shù)并作為IntervalDay輸出,折扣價格表達式L_EXTENDEDPRICE*(1-L_DISCOUNT)與折扣稅后價格表達式L_EXTENDEDPRICE*(1-L_DISCOUNT)*(1+L_TAX)第3第3節(jié)數(shù)據(jù)查詢SQL命令示selectL_SHIPMODEfromselectdistinctL_SHIPMODEfrom– 第3第3節(jié)數(shù)據(jù)查詢選擇操查詢條 查詢條件運算

=,>,<,>=,<=,!=,<>,NOT+BETWEENAND,NOTBETWEENIN,NOTLIKE,NOTISNULL,ISNOTAND,OR, SQL命令示select*fromLINEITEMwhereL_select*fromLINEITEMwhereL_SHIPINSTRUCT='COLLECTCOD';select*fromLINEITEMwhereNOT SQL命令解析:輸出表 MITDATE時間不晚于L_SHIPDATE時間select*fromLINEITEM SQL命令解析:輸出表 MITDATE超過10天的記錄范圍操作符BETWEENAND和NOTBETWEENAND是否在或不在指定范圍之內(nèi)。CBETWEENaANDb等價于CaANDCb【例4-16】輸出LINEITEM表中指定范圍之select*from –SQL命令解析:輸 RECEIPTDATE之間的記select*from MITDATEnotbetween'1996-01-01'and'1997-12-–SQL命令解析:輸出LINEITEM表 日期函數(shù)日期函數(shù)年qq,月mm,年qq,月mm,日dd,周wk,mi,秒ss,()startdateenddate參數(shù)是合法的日期示例from第3第3節(jié)數(shù)據(jù)查詢集合判斷操作符IN和NOTIN用于判斷表達式是否在指定集合范圍之內(nèi)。集合判斷操作符CINa,b,c)等價于CaORC=bORC=c。集合操作符中使用時更加SQL命令示【例417】輸出LINEITEMselect*fromLINEITEMwhereL_SHIPMODEin('MAIL','SHIP');select*fromPARTwhereP_SIZEnotin(49,14,23,45,19,3,36,9);SQL命令解析:輸出PART表中為P_SIZE不是49,14,23,45,19,3,36,9的記錄第3第3節(jié)數(shù)據(jù)查詢match_expression[NOT]LIKEpattern[ESCAPEescape_character select*fromPARTwhereP_TYPElike開頭的記錄。* R MENTlike select*fromLINEITEM MENTlike'%returnrate \%for%'ESCAPE 第3第3節(jié)數(shù)據(jù)查詢于空白或零值,空值用NULLWHERE子句中使用ISNULLISNOTNULL,不能使用=NULL。SQL命令示 表中沒有客戶評 select*fromLINEITEM MENTisSQL命令解析:輸 表 MENT列為空值的記錄SQL命令示【例4-20】輸出LINEITEM表中滿足復(fù)合條件的記錄selectsum(L_EXTENDEDPRICE*L_DISCOUNT)asrevenuefromLINEITEMwhereL_SHIPDATEbetween'1994-01-01'and'1994-12-31'andL_DISCOUNTbetween0.06-0.01and0.06+0.01andL_TY<第3第3節(jié)數(shù)據(jù)查詢select*fromwhereL_SHIPMODEin('AIR','AIRandL_SHIPINSTRUCT='DELIVER and((L_TY>=10andL_TY<=20)or(L_TY>=30andL_TY<=40));SHIPINSTRUCT類型為DELIVER ,TY在10與20之選擇和投影操作查詢對應(yīng)的是元組操作,查看的是記錄的明細。數(shù)據(jù)庫的SQL提供的函數(shù)主要包括:SUM([DISTINCT|ALL]<expression>)AVG([DISTINCT|ALL]<expression>)MAX([DISTINCT|ALL]<expression>)MIN([DISTINCT|ALL]<expression>)

當指定DISTINCT短語時,計算時只計算列中不重復(fù)值記錄,缺?。ˋLL)時計算對列中所有的值進行計算。COUNT(*)為統(tǒng)計表中元組的數(shù)量,SQL命令示sum(L_TY)assum_qty,sum(L_EXTENDEDPRICE)assum_base_price,sum(L_EXTENDEDPRICE*(1-L_DISCOUNT))assum_disc_price,avg(L_TY)asavg_qty,avg(L_EXTENDEDPRICE)asavg_price,avg(L_DISCOUNT)asavg_disc,count(*)ascount_orderfromSQL命令分析:統(tǒng)計LINEITEM表中不同表達式的計算結(jié)果。COUNT對象是*時表示統(tǒng)計表中記錄數(shù)量,函數(shù)可以對原始列或表達式進行計算,【例4-22】統(tǒng)計LINEITEM表中L_TY列的數(shù)據(jù)特征selectcount(distinctL_TY)asCARD,max(L_TY)asMaxValue,min(L_TY)asMinValuefromLINEITEM;【例4-23】統(tǒng)計ORDERS表中高優(yōu)化級與低優(yōu)化級訂單的selectwhenO_ORDERPRIORITY='1-URGENT'orO_ORDERPRIORITY='2-then1else0end)aswhenO_ORDERPRIORITY<>'1-URGENT'andO_ORDERPRIORITY<>then1else0end)asfromSQL命令分析:通過case語句根據(jù)構(gòu)建的選擇條件輸出分支結(jié)果,并對結(jié)果 第3第3節(jié)數(shù)據(jù)查詢分組操GPOUPBY語句將查詢記錄集按指定的一列或多列進行分組,然后對相同分組的記錄進行計算。分組操作擴展了函數(shù)的應(yīng)用范圍,將一個匯總結(jié)果細分為若干個分組上的計算結(jié)果,為用戶提供維度、更細粒度的分析SQL命令示例selectsum(L_TY)assum_tyfromL_RETURNFLAG,sum(L_TY)assum_tyfromLINEITEMgroupbyL_RETURNFLAG;fromLINEITEMgroupbySQL命令解析:按L_RETURNFLAG和L_LINESTATUS屬性分組統(tǒng) 第3第3節(jié)數(shù)據(jù)查詢下面給出了三個SQL命令按不同的粒度分 圖4-18不同粒度分組統(tǒng)計結(jié)含:23個聚合分組:{a,b,c}、{a,b}、{a,c}、{b,c}、{a}、、{c}、{},代表{a,

{a,

{SQL的GROUPBY子句中支持按照簡單分組、上卷分組和CUBE分組方式group_by_expression|ROLLUPgroup_by_expression|CUBEspec>)SELECTa,b,c,SUM(<expression>FROM–查詢按(abc)、(ab(aSELECTa,b,c,SUM(<expression>)FROMTGROUPBYCUBE其中nL_LINESTATUS、L_SHIPINSTRUCT三個屬性的聚合結(jié)sum(L_TY)assum_from–SQL命令解析:查詢按L_RETURNFLAG、L_LINESTATUS、L_SHIPINSTRUCT三個屬性直接進行分組計算,查詢結(jié)果如圖4-20所ROLLUPGROUPBY分sum(L_TY)assum_tyfromLINEITEM–SQL命令解析:查詢以到粗進行多個分組屬性計算CUBEGROUPBYsum(L_TY)assum_fromSQL命令解析:查詢以L_RETURNFLAGL_LINESTATUS和行分組計算第3第3圖4-22CUBEgroupby

第3第3節(jié)數(shù)據(jù)查詢SQL命令示selectL_ORDERKEY,count(*)asfromgroupbyL_ORDERKEYhavingcount(*)>=5;–SQL命令解析:HAVING短語中的COUNT(*)>5作為分組計算結(jié)果的過濾條件,對分組結(jié)果進行篩選。的訂單的平均。fromgroupbyhavingavg(L_TY)between28and30and–SQL命令解析:HAVING短語中可以使用輸出目標列中沒有的函數(shù)表達式。如HAVINGavg(L_TY)between28and30andcount(*)>5短語中表達式avg(L_TY)between28and30和count(*)>5均不是查詢輸出的函數(shù)表達式,只用于對分組計算結(jié)果進行篩選 第3第3節(jié)數(shù)據(jù)查詢排序操SQL中的ORDERBY子句用于對查詢結(jié)果按照指定的屬性順序排列,排序?qū)賁QL命令示【例4-28】對LINEITEM表進行分組計算,輸出排序的查詢結(jié)果selectsum(L_TY)assum_fromgroupbyorderby–SQLL_RETURNFLAG,第二排序?qū)傩詾長_LINESTATUSselectsum(L_TY)assum_fromgroupbyorderbysum(L_TY)–SQL命令解析:對分組結(jié)果按表達式結(jié)果降序排列selectsum(L_TY)assum_fromgroupbyorderbysum_ty–SQL命令解析:當表達式設(shè)置別名時,可以使用別名作為排序?qū)傩悦?表達式二、數(shù)據(jù)庫中最重要的關(guān)系操作,包括連接、等值連接、自然連接、非等值連接、等值連接、自然連接、非等值連在SQL命令中,當在FROM子句中指定了連接的表名,但沒有設(shè)置連接條件一條元組與REGION表中的全部元組進行連[<table_name1>.]<column_name1><operator>在SQL語法中,只要連接列滿足連接條件表達式即可執(zhí)行連接操作,在實【例4-29】執(zhí)行NATION表和REGION表上的等值連接操select*fromNATION,REGIONwhereselect*fromNATIONINNERJOINREGION--SQL命令解析:等值連接操作還可以采用內(nèi)連接的語法結(jié)構(gòu)表示。內(nèi)<table_name1>INNERJOINON[<table_name1>.]<column_name1>=SQL命令示例fromCUSTOMER,ORDERS,whereC_MKTSEGMENT='BUILDING'andC_CUSTKEY=O_CUSTKEYandL_ORDERKEY=O_ORDERKEYandO_ORDERDATE<'1995-03-15'andL_SHIPDATE>'1995-03-15'orderbyrevenueDESC, 接表達式為C_CUSTKEYO_CUSTKEY,ORDERS表與LINEITEM表之間的主-外碼等值連接表達式為L_ORDERKEY=O_ORDERKEY,與其他不表上的選擇條件構(gòu)成復(fù)合條件,完成連接表上的分組計算第3第3節(jié)數(shù)據(jù)查詢自身連表與自己進行的連接操作稱為表的自身連接,簡稱自連接(selfjoin)。使用selectdistinctfromLINEITEML1,LINEITEMwhereL1.L_SHIPINSTRUCT='DELIVERIN andL2.L_SHIPINSTRUCT='TAKEBACKRETURN'andL1.L_ORDERKEY=L2.L_ORDERKEY;–SQL命令解析:LINEITEM表中一個訂單包含多個訂單項,每個訂單項包含特定的選擇L_SHIPINSTRUCT值為DELIVERIN的元組,再從相同的LINEITEM表 第3第3節(jié)數(shù)據(jù)查詢外連N連接的組合。SQL命令示【例4-32】輸出ORDERS表與CUSTOMER表左外連接與右外連接的結(jié)果fromORDERSleftouterjoinCUSTOMERonO_CUSTKEY=C_CUSTKEY;selectO_ORDERKEY,O_CUSTKEY,C_CUSTKEYfromORDERSrightouterjoinCUSTOMERon。SQ命令解析:ORER表外碼OCSKYUOMRC_CSKEODRCSOEERSCUOEORERSCSOMERRRSOE表元組的CCSKY屬性值在ODR表ODROMER中CUSOMER表屬性非空而ODE424。識別僵尸客圖4-24ORDERS表與CUSTOMER表左外連接與識別僵尸客多表連SQL命令示 fromPART, –SQL命令解析:PARTSUPP表與PART表、 等值連接。SQL命令中FROM子句包含3個連接表名,WHERE子句中包含PARTSUPP表與2個表基于主、外碼的等值連接條件,分別對應(yīng)3個表間連selectP_NAME,P_BRAND,innerjoin RonPS_SUPPKEY=S_SUPPKEY;【例434】在TPC-Hselectfrom whereS_SUPPKEY=L_SUPPKEYandPS_SUPPKEY=L_SUPPKEYandPS_PARTKEY=L_PARTKEYandP_PARTKEY=L_PARTKEYandO_ORDERKEY=L_ORDERKEYandC_CUSTKEY=O_ORDERKEYandC_NATIONKEY=N_NATIONKEYandN_REGIONKEY=R_REGIONKEY;–SQL命令解析:如圖4-25,TPC-H數(shù)據(jù)庫是一種典型的雪花型模式,模式以LINEITEM碼-外碼參照關(guān)系與其他表連R等表又有下級的間主碼-外碼參照關(guān)系一一轉(zhuǎn)值連接表達式,完成雪花型連

圖4-25TPC-H連接操作的基本實現(xiàn)嵌套循環(huán)連接(nested-loopR和S的記錄數(shù)記作|R|和|S|,則嵌套循環(huán)連接需要執(zhí)行|R|×|S|次循環(huán)比–在嵌套循環(huán)連接中,內(nèi)表通常為排序表–有索引,以加速內(nèi)表記錄查找性能。也可以將較小的R Nested作為內(nèi)表,和ation將R表劃分為小于cc大小的子表,然后S分區(qū)子表與分區(qū)子表執(zhí)行嵌套循環(huán)連接操作,分區(qū)子表采用簡單的順ac內(nèi)的高性能掃描提高內(nèi)表記錄查Nested在新型處理器平臺下,嵌套循環(huán)連接算法還可以通過SIM比較操作,也可以通過GPU、Pi等眾核計算架構(gòu)加速嵌套循環(huán)連接算法性能。排序歸并連接(sort-mergeRS’RS’哈希連接(hash哈希連接算法主要通過哈希匹配查找連接記錄。當前代表性的哈希連接算法主要包括基于共享哈希表的無分區(qū)哈希連接算法(如圖426(C)所示)和基于Radix分區(qū)的哈希連接算法(如圖4(D)所示)無分區(qū)哈希連接算法分為生成(bud)和探測(pobe兩個階段,在生成階段通過掃描R表,為表,將可以并行完成。將R表邏輯劃分為n個分區(qū),n個線程并行掃描n個分區(qū),并創(chuàng)建線程間共享的哈希表。當線程數(shù)量較多時,哈希表由于大量的并發(fā)而導(dǎo)致哈希表生能降低。在探測階段,n個線程對應(yīng)的n個分區(qū)可以并行執(zhí)行哈希探測操作,當共享哈希表小于cace時,哈希探測性能較,當共享哈希表較大時哈希探測產(chǎn)生較多的cacess增加了內(nèi)存代價降低了哈希探測性能。Radx分區(qū)的哈希連接算法對R表和表的連接屬性按相同的Rad進行多趟分區(qū),保證每趟分區(qū)時分數(shù)量不過處器的TB優(yōu)TB性能通過趟Radi分區(qū)將Rcace大小的分區(qū),然后在分區(qū)上創(chuàng)建哈希表。在哈希探測階段,每個線程執(zhí)行一對R表和S區(qū)上的連接操作,通過caceonehashhash... h

per

hhPass

Pass

Pass

Pass ②

② ③

①三、為嵌套查詢(nestedquery)。例如:在上面的示例中,子查詢(或稱為內(nèi)層查詢)selectP_PARTKEYfromPARTwhereP_CONTAINER='MEDCASE'嵌套在父查詢(或稱為外層查詢)中,子使用orderby子句,orderby子句對最終查詢結(jié)果排序。但本例中當子查詢需要輸出前10個子查詢記錄時,子查詢中top與orderby可以共同使用,即selecttop10P_PARTKEYfromPARTwhereP_CONTAINERMEDCASE'orderby嵌套查詢通過簡單查詢構(gòu)造復(fù)雜查詢,增加SQL的查詢能力,降低用戶進包含IN謂詞的子查selectP_BRAND,P_TYPE,P_SIZE,count(distinctps_suppkey) andP_TYPEnotlike'MEDIUMandP_SIZEin(49,14,23,45,19,3,36,andPS_SUPPKEYnotinselectfrom MENTlike )order tdesc,P_BRAND,P_TYPE,--SQL命令解析:首先執(zhí)行子查詢selectS_SUPPKEY RMENTlike' 果集;然后執(zhí)行外層查詢,將子查詢結(jié)果集作為notin的操作集,排除父查詢當子查詢的查詢條件不依賴于父查詢時,子查詢可以獨立執(zhí)行,這類子查selectP_BRAND,P_TYPE,P_SIZE,count(distinctPS_SUPPKEY)as andP_BRAND<>'Brand#45'andP_TYPEnotlike'MEDIUMPOLISHED%'andP_SIZEin(49,14,23,45,19,3,36,9) MENTnotlike groupbyP_BRAND,P_TYPE,order tdesc,P_BRAND,P_TYPE,--SQL命令解析:嵌套查詢條件是notin,改寫為連接操作時需要將子查詢的條 MENTlike' MENTnotlike' 【例4-36】通過IN子查詢完成CUSTOMER、NATION與REGION表間的查詢(SELECTR_REGIONKEYFROMREGION三個表之間的連接關(guān)系為,查表上生成謂詞條件N_REGIONKEYIN2),投影在連接列N_NATIONKEY上,selectandR_NAME='ASIA';–SQL命令解析:IN嵌套子查詢實現(xiàn)連接列結(jié)果集的逐級向上傳遞,通過對帶有比較運算符的相關(guān)【例4-37】帶有= andP_SIZE=15andP_TYPElikeandS_NATIONKEY=N_NATIONKEYandN_REGIONKEY=R_REGIONKEYandR_NAME='EUROPE'selectfrom andS_NATIONKEY=N_NATIONKEYandN_REGIONKEY=R_REGIONKEYandR_NAME='EUROPE')orderbyS_ACCTBALdesc,N_NAME,S_NAME,SQL解析:外層查詢“PS_SUPPLYCOST=”表達式為子查詢結(jié)果,即內(nèi)層子算出的結(jié)果集,外層查詢通過PS_SUPPLYCOST=(…)表達式篩選內(nèi)層查詢的改寫后的查詢?nèi)缦耊ITHps_supplycostTable(min_supplycost,partkey)(from andP_SIZE=15andP_TYPElikeandR_NAME=groupby) andPARTKEY=P_PARTKEY--增加與派生表partkey連接表達 andP_SIZE=15andP_TYPElikeandR_NAME='EUROPE' 帶有ANY或ALL謂詞的子查–【例4-38】統(tǒng)計LINEITEM表中L_EXTENDEDPRICE大于任何一個中國顧selectcount(*)fromLINEITEMwhereL_EXTENDEDPRICE>ANY(selectL_EXTENDEDPRICEfromLINEITEM, R,NATIONandN_NAME=''); 第第3節(jié)數(shù)據(jù)查詢>ANY子查詢可以改寫為子查詢中的最小值,即selectcount(*)fromLINEITEMwhereselectmin(L_EXTENDEDPRICE)fromLINEITEM, R,NATIONandN_NAME='');–SQL解析:大于集合中任一元素值等價于大于集合中最小值。查詢改寫前同理,ANY或ALL子查詢轉(zhuǎn)換函數(shù)的對應(yīng)關(guān)系還包括=ANY等價于IN謂>(>=)ANY等價于>(>=)MIN謂<(<=)ALL等價于<(<=)MIN謂>(>=)ALL等價于>(>=)MAX謂

第3第3節(jié)數(shù)據(jù)查詢帶有EXIST謂詞的子查帶有EXIST謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯結(jié)果TRUE或FALSESQL命令示selectO_ORDERPRIORITY,count(*)asorder_countfromORDERSandexists(select*from groupbyorderby–SQL解析:查詢在ORDERS表的執(zhí)行謂詞條件,滿足謂詞條件的記錄的O_ORDERKEY下推到內(nèi)層子查詢,與LINEITEM表謂 該查詢可以改寫為使用連接運算的SQL語句selectO_ORDERPRIORITY,count(distinctL_ORDERKEY)asfromORDERS,whereO_ORDERKEY=L_ORDERKEYandO_ORDERDATE>='1993-07-andO_ORDERDATE<DATEADD(MONTH,3,'1993-07- MITDATE<groupbyorderby–SQL解析:將查詢改寫為兩表連接操作。原始查詢判斷ORDERS表上是否【例4-40】查詢在沒有任何商品的顧客的數(shù)量fromCUSTOMERwherenotselect*fromORDERS,selectfromORDERSrightouterjoinCUSTOMERonO_CUSTKEY=C_CUSTKEYwhereO_ORDERKEYisNULL;執(zhí)行右連接操作,沒有記錄的顧客在右連接結(jié)果中ORDERS表屬性為 【例 】查詢 年月起的個月內(nèi)沒有任何商品的顧客的數(shù)量selectfromwherenotselect*fromwhereselectcount(distinctC_CUSTKEY)from(selectO_CUSTKEYfromordersrightouterjoinCUSTOMERonwherecustkeyisselectC_CUSTKEYfromselectdistinctO_CUSTKEYfromORDERS,where–SQL解析:首先選擇CUSTOMER表中所有C_CUSTKEY集合,然后再選出ORDERS表中1993年7月起3個月內(nèi)的訂單的去重O_CUSTKEY集合,兩個四、集SQL命令示例:集合并運L_SHIPINSTRUCT方式為DELIVERIN selectdistinctL_ORDERKEYfromLINEITEMwhereL_SHIPMODEin('AIR','AIRREG')selectdistinctL_ORDERKEYfromLINEITEMwhereL_SHIPINSTRUCT='DELIVERIN'selectdistinctL_ORDERKEYfromLINEITEMwhereL_SHIPMODEin('AIR','AIRREG')u

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論