SQL培訓(xùn)資料課件_第1頁(yè)
SQL培訓(xùn)資料課件_第2頁(yè)
SQL培訓(xùn)資料課件_第3頁(yè)
SQL培訓(xùn)資料課件_第4頁(yè)
SQL培訓(xùn)資料課件_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

SQL培訓(xùn)2013年3月第一頁(yè),共五十八頁(yè)。內(nèi)容簡(jiǎn)介?SQL指令:SQL如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫(kù)之中的資料。?表格處理:SQL如何被用來處理數(shù)據(jù)庫(kù)中的表格。?進(jìn)階SQL:介紹SQL進(jìn)階概念,以及如何用SQL來執(zhí)行一些較復(fù)雜的運(yùn)算。

?

SQL實(shí)例:介紹一些典型的實(shí)例,以及與大規(guī)劃相關(guān)的語句。第二頁(yè),共五十八頁(yè)。SELECTSELECT"欄位名"FROM"表格名";DISTINCT

找出表格內(nèi)的不同資料值的情況SELECTDISTINCT"欄位名"FROM"表格名";例如:selectdistinctregion_namefromGEOGRAPHYt;WHERESELECT"欄位名"FROM"表格名"WHERE"條件";SQL指令第三頁(yè),共五十八頁(yè)。AND/ORSELECT"欄位名"FROM"表格名"WHERE"簡(jiǎn)單條件"{[AND|OR]"簡(jiǎn)單條件"}IN/NOTINSELECT"欄位名"FROM"表格名"WHERE"欄位名"IN('值一','值二',...)例:SELECT*FROMStore_InformationWHEREstore_nameIN('LosAngeles','SanDiego')BETWEEN......AND.......SQL指令第四頁(yè),共五十八頁(yè)。SELECT"欄位名"FROM"表格名"WHERE"欄位名"BETWEEN'值一'AND'值二'例:SELECT*FROMStore_InformationWHEREDatesBETWEEN'Jan-06-1999'AND'Jan-10-1999'LIKE字符篩選(注意:區(qū)分大小寫)SELECT"欄位名"FROM"表格名"WHERE"欄位名"LIKE{模式}

例:SELECT*FROMStore_InformationWHEREstore_nameLIKE'%An%'SQL指令第五頁(yè),共五十八頁(yè)。ORDERBY排序SELECT"欄位名"FROM"表格名"[WHERE"條件"]ORDERBY"欄位名"[ASC,DESC]ASC(默認(rèn))代表結(jié)果會(huì)以由小往大的順序列出,而DESC代表結(jié)果會(huì)以由大往小的順序列出例:SELECTstore_name,Sales,DatesFROMStore_InformationORDERBYSalesDESCGROUPBY分組SELECT"欄位1",SUM("欄位2")FROM"表格名"GROUPBY"欄位1"SQL指令第六頁(yè),共五十八頁(yè)。SELECTstore_name,SUM(Sales)FROMStore_InformationGROUPBYstore_nameALIAS別名SELECT"表格別名"."欄位1""欄位別名"FROM"表格名""表格別名"selectt.store_name,sum(sales)合計(jì)fromSTORE_INFORMATIONtgroupbystore_name;函數(shù)AVG(平均)、COUNT(計(jì)數(shù))、MAX(最大值)、MIN(最小值)、SUM(總合)SQL指令第七頁(yè),共五十八頁(yè)。SELECT"函數(shù)名"("欄位名")FROM"表格名"selectcount(store_name)計(jì)數(shù)fromSTORE_INFORMATIONt;HAVING對(duì)函數(shù)產(chǎn)生的值來設(shè)定條件SELECT"欄位1",SUM("欄位2")FROM"表格名"GROUPBY"欄位1"HAVING(函數(shù)條件)SELECTstore_name,SUM(sales)FROMStore_InformationGROUPBYstore_nameHAVINGSUM(sales)>1500表格鏈接

左連接(leftjoin),又稱內(nèi)部連接(innerjoin),在這個(gè)情況下,要兩個(gè)表格內(nèi)都有同樣的值,那一筆資料才會(huì)被選出。SQL指令第八頁(yè),共五十八頁(yè)。selectg.*,s.*fromgeographyg,store_informationswhereg.store_name=s.store_name笛卡兒連接selectg.*,s.*fromgeographyg,store_informations外部連接(outerjion),列出一個(gè)表格中每一筆的資料,無論它的值在另一個(gè)表格中有沒有出現(xiàn)。在要選出所有資料的那個(gè)表格之后加上一個(gè)"(+)"selectg.store_name,sum(s.sales)salesfromgeographyg,store_informationswhereg.store_name=s.store_name(+)groupbyg.store_name;請(qǐng)注意:當(dāng)?shù)诙€(gè)表格沒有相對(duì)的資料時(shí),SQL會(huì)傳回NULL值。SQL指令第九頁(yè),共五十八頁(yè)。CONCATENATE連接字符串有的時(shí)候,我們有需要將由不同欄位獲得的資料串連在一起。每一種數(shù)據(jù)庫(kù)都有提供方法來達(dá)到這個(gè)目的MySQL:CONCAT()Oracle:CONCAT(),||SQLServer:+CONCAT()的語法如下:CONCAT(字符串1,字符串2,字符串3,...)注意:Oracle的CONCAT()只允許兩個(gè)參數(shù);換言之,一次只能將兩個(gè)字符串串連起來。不過,在Oracle中,我們可以用'||'來一次串連多個(gè)字符串。例:selectg.region_name||''||g.store_namefromgeographyg;SQL指令第十頁(yè),共五十八頁(yè)。SUBSTRING抓出一個(gè)欄位資料中的其中一部分MySQL:SUBSTR(),SUBSTRING()Oracle:SUBSTR()SQLServer:SUBSTRING()最常用到的方式如下(在這里我們用SUBSTR()為例):SUBSTR(str,pos):由<str>中,選出所有從第<pos>位置開始的字符。請(qǐng)注意,這個(gè)語法不適用于SQLServer上。SUBSTR(str,pos,len):由<str>中的第<pos>位置開始,選出接下去的<len>個(gè)字符。selectsubstr(store_name,3,6)fromgeographywherestore_name='LosAngeles';SQL指令第十一頁(yè),共五十八頁(yè)。TRIM移除SQL中的TRIM函數(shù)是用來移除掉一個(gè)字符串中的字頭或字尾。最常見的用途是移除字首或字尾的空白。這個(gè)函數(shù)在不同的數(shù)據(jù)庫(kù)中有不同的名稱:MySQL:TRIM(),RTRIM(),LTRIM()Oracle:RTRIM(),LTRIM()SQLServer:RTRIM(),LTRIM()各種trim函數(shù)的語法如下:TRIM([[位置][要移除的字符串]FROM]字符串)[位置]的可能值為L(zhǎng)EADING(起頭),TRAILING(結(jié)尾),or (起頭及結(jié)尾)。這個(gè)函數(shù)將把[要移除的字符串]從字符串的起頭、結(jié)尾,或是起頭及結(jié)尾移除。如果我們沒有列出[要移除的字符串]是什么的話,那空白就會(huì)被移除。SQL指令第十二頁(yè),共五十八頁(yè)。LTRIM(字符串):將所有字符串起頭的空白移除。RTRIM(字符串):將所有字符串結(jié)尾的空白移除。selectrtrim(store_name)fromgeographyg;--刪除頭和尾空白selecttrim(store_name)fromgeographyg;--刪除頭和尾字母“o”selecttrim(BOTH'o'fromstore_name)fromgeographyg;在起頭處添加字段:lpad(tab_month,2,‘0’)月份格式改為“MM”2位

selectlpad('7',2,'0')fromdualSQL指令第十三頁(yè),共五十八頁(yè)。內(nèi)容簡(jiǎn)介?SQL指令:SQL如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫(kù)之中的資料。?表格處理:SQL如何被用來處理數(shù)據(jù)庫(kù)中的表格。?進(jìn)階SQL:介紹SQL進(jìn)階概念,以及如何用SQL來執(zhí)行一些較復(fù)雜的運(yùn)算。

?

SQL實(shí)例:介紹一些典型的實(shí)例。第十四頁(yè),共五十八頁(yè)。CREATETABLE建表語法是:CREATETABLE"表格名"("欄位1""欄位1資料種類"NOTNULL,"欄位2""欄位2資料種類",...)--CreatetablecreatetableGEOGRAPHY(region_nameVARCHAR2(20),store_nameVARCHAR2(20)NOTNULL)表格處理第十五頁(yè),共五十八頁(yè)。CREATETABLE建表語法是:CREATETABLE"表格名"("欄位1""欄位1資料種類"NOTNULL,"欄位2""欄位2資料種類",...)注意:字段類型char和varchar2區(qū)別CHAR的長(zhǎng)度是固定的,而VARCHAR2的長(zhǎng)度是可以變化的。比如,存儲(chǔ)字符串“abc”,對(duì)于CHAR(20),表示你存儲(chǔ)的字符將占20個(gè)字節(jié)(包括17個(gè)空字符),而同樣的VARCHAR2(20)則只占用3個(gè)字節(jié)的長(zhǎng)度,20只是最大值,當(dāng)你存儲(chǔ)的字符小于20時(shí),按實(shí)際長(zhǎng)度存儲(chǔ)。表格處理第十六頁(yè),共五十八頁(yè)。表格處理添加注釋--AddcommentstothetablecommentontableGEOGRAPHYis'商店所屬地理位置';--AddcommentstothecolumnscommentoncolumnGEOGRAPHY.region_nameis'地區(qū)名稱';commentoncolumnGEOGRAPHY.store_nameis'商店名稱';CONSTRAINT約束限制NOTNULLUNIQUECHECK主鍵(PrimaryKey)外來鍵(ForeignKey)第十七頁(yè),共五十八頁(yè)。表格處理UNIQUE唯一性UNIQUE限制是保證一個(gè)欄位中的所有資料都是有不一樣的值。舉例來說,在以下的語句中,CREATETABLECustomer(SIDintegerUnique,Last_Namevarchar(30),First_Namevarchar(30));"SID"欄位不能有重復(fù)值存在,而"Last_Name"及"First_Name"這兩個(gè)欄位則是允許有重復(fù)值存在。請(qǐng)注意,一個(gè)被指定為主鍵的欄位也一定會(huì)含有UNIQUE的特性。相對(duì)來說,一個(gè)UNIQUE的欄位并不一定會(huì)是一個(gè)主鍵。第十八頁(yè),共五十八頁(yè)。表格處理CHECK核對(duì)CHECK限制是保證一個(gè)欄位中的所有資料都是符合某些條件。舉例來說,在以下的語句中,CREATETABLECustomer(SIDintegerCHECK(SID>0),Last_Namevarchar(30),First_Namevarchar(30));"SID"攔只能包含大于0的整數(shù)。注意,CHECK限制目前尚未被執(zhí)行于MySQL數(shù)據(jù)庫(kù)上。第十九頁(yè),共五十八頁(yè)。表格處理主鍵主鍵(PrimaryKey)中的每一筆資料都是表格中的唯一值。換言之,它是用來獨(dú)一無二地確認(rèn)一個(gè)表格中的每一行資料。主鍵可以是原本資料內(nèi)的一個(gè)欄位,或是一個(gè)人造欄位(與原本資料沒有關(guān)系的欄位)。主鍵可以包含一或多個(gè)欄位。當(dāng)主鍵包含多個(gè)欄位時(shí),稱為組合鍵(CompositeKey)。注意,在用ALTERTABLE語句來添加主鍵之前,我們需要確認(rèn)被用來當(dāng)做主鍵的欄位是設(shè)定為『NOTNULL』;也就是說,那個(gè)欄位一定不能沒有資料。Oracle:CREATETABLECustomer(SIDintegerPRIMARYKEY,Last_Namevarchar(30),First_Namevarchar(30));Oracle:ALTERTABLECustomerADDPRIMARYKEY(SID);第二十頁(yè),共五十八頁(yè)。表格處理外來鍵外來鍵是一個(gè)(或數(shù)個(gè))指向另外一個(gè)表格主鍵的欄位。外來鍵的目的是確定資料的參考完整性(referentialintegrity)。換言之,只有被準(zhǔn)許的資料值才會(huì)被存入數(shù)據(jù)庫(kù)內(nèi)。舉例來說,假設(shè)我們有兩個(gè)表格:一個(gè)CUSTOMER表格,里面記錄了所有顧客的資料;另一個(gè)ORDERS表格,里面記錄了所有顧客訂購(gòu)的資料。在這里的一個(gè)限制,就是所有的訂購(gòu)資料中的顧客,都一定是要跟在CUSTOMER表格中存在。在這里,我們就會(huì)在ORDERS表格中設(shè)定一個(gè)外來鍵,而這個(gè)外來鍵是指向CUSTOMER表格中的主鍵。這樣一來,我們就可以確定所有在ORDERS表格中的顧客都存在CUSTOMER表格中。換句話說,ORDERS表格之中,不能有任何顧客是不存在于CUSTOMER表格中的資料。第二十一頁(yè),共五十八頁(yè)。表格處理

第二十二頁(yè),共五十八頁(yè)。表格處理在以上的例子中,ORDERS表格中的customer_SID欄位是一個(gè)指向CUSTOMERS表格中SID欄位的外來鍵。第二十三頁(yè),共五十八頁(yè)。表格處理CREATEVIEW視圖視觀表(Views)可以被當(dāng)作是虛擬表格。它跟表格的不同是,表格中有實(shí)際儲(chǔ)存資料,而視觀表是建立在表格之上的一個(gè)架構(gòu),它本身并不實(shí)際儲(chǔ)存資料。建立一個(gè)視觀表的語法如下:CREATEVIEW"VIEW_NAME"AS"SQL語句"createviewv_geographyasselectregion_name,trim(store_name)v_store_namefromgeographyg;-第二十四頁(yè),共五十八頁(yè)。表格處理CREATEVIEW視圖視觀表(Views)可以被當(dāng)作是虛擬表格。它跟表格的不同是,表格中有實(shí)際儲(chǔ)存資料,而視觀表是建立在表格之上的一個(gè)架構(gòu),它本身并不實(shí)際儲(chǔ)存資料。建立一個(gè)視觀表的語法如下:CREATEVIEW"VIEW_NAME"AS"SQL語句"createviewv_geographyasselectregion_name,trim(store_name)v_store_namefromgeographyg;--刪除視圖dropviewv_geography;第二十五頁(yè),共五十八頁(yè)。表格處理CREATEINDEX 索引如果一個(gè)表格沒有索引的話,數(shù)據(jù)庫(kù)系統(tǒng)就需要將整個(gè)表格的資料讀出(這個(gè)過程叫做'tablescan')。若有適當(dāng)?shù)乃饕嬖冢瑪?shù)據(jù)庫(kù)系統(tǒng)就可以先由這個(gè)索引去找出需要的資料是在表格的什么地方,然后直接去那些地方抓資料。這樣子速度就快多了。語法:CREATEINDEX"INDEX_NAME"ON"TABLE_NAME"(COLUMN_NAME)createindexidx_store_info_store_nameonstore_information(store_name,)索引的命名并沒有一個(gè)固定的方式。通常會(huì)用的方式是在名稱前加一個(gè)字首,例如“IDX_”,來避免與數(shù)據(jù)庫(kù)中的其他物件混淆。另外,在索引名之內(nèi)包括表格名及欄位名也是一個(gè)好的方式。(刪除,修改索引)第二十六頁(yè),共五十八頁(yè)。表格處理ALTERTABLE修改表結(jié)構(gòu)ALTERTABLE語句的語法形式:ALTERTABLEtable{[

MODIFYcolumn_name{new_data_type[(precision[,scale])][NULL|NOTNULL]}]|ADD{[<add_column_nameadd_data_type>]}[,...n]|DROPCOLUMN{drop_colum_name}[,...n]}在以上語法形式中:column_name:要修改的列名。new_data_type:要修改列的新數(shù)據(jù)類型。precision:是指定數(shù)據(jù)類型的精度。第二十七頁(yè),共五十八頁(yè)。表格處理scale:是指定數(shù)據(jù)類型的小數(shù)位數(shù)。add_column_name:要添加到表中的列名。add_data_type:要添加到表中的列的數(shù)據(jù)類型。drop_colum_name:要從表中刪除的列名[,...n]:可以有多個(gè)列。加一個(gè)欄位:ADD"欄位1""欄位1資料種類"altertablecustomeraddaddresschar(30);刪去一個(gè)欄位:DROPcolumn"欄位1"altertablecustomerdropcolumnaddress;改變欄位的資料種類:MODIFY"欄位1""新資料種類"altertablecustomermodifyaddrschar(50);修改欄位名RENAME……TO……

altertablecustomerrenamecolumnaddrtoaddrs;第二十八頁(yè),共五十八頁(yè)。表格處理DROPTABLE

清除表格DROPTABLE"表格名"droptablecustomer;TRUNCATETABLE清除表格中所有資料TRUNCATETABLE"表格名"truncatetablecustomer;DELETEFROM刪除表數(shù)據(jù)DELETEFROM“表格名”

WHERE{條件}deletefromstore_informationtwherestore_name='LosAngeles';第二十九頁(yè),共五十八頁(yè)。表格處理INSERTINTO插入INSERTINTO"表格名"("欄位1","欄位2",...)VALUES("值1","值2",...)insertintostore_information(store_name,sales,dates)values('losangeles',900,'jan-10-1999')INSERTINTO"表格1"("欄位1","欄位2",...)SELECT"欄位3","欄位4",…FROM"表格2"insertintostore_information(store_name,sales,dates)selectstore_name,sales,datesfromv_store_informationwheredateslike'%1998'第三十頁(yè),共五十八頁(yè)。表格處理UPDATE修改表格資料

UPDATE"表格名“

SET"欄位1"=[新值]

WHERE{條件}updatestore_informationsetsales=800wherestore_name='losangeles';第三十一頁(yè),共五十八頁(yè)。內(nèi)容簡(jiǎn)介?SQL指令:SQL如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫(kù)之中的資料。?表格處理:SQL如何被用來處理數(shù)據(jù)庫(kù)中的表格。?進(jìn)階SQL:介紹SQL進(jìn)階概念,以及如何用SQL來執(zhí)行一些較復(fù)雜的運(yùn)算。

?

SQL實(shí)例:介紹一些典型的實(shí)例。第三十二頁(yè),共五十八頁(yè)。UNION

求合集將兩個(gè)

SQL語句的結(jié)果合并在一起。[SQL語句1]UNION[SQL語句2]selectdatesfromstore_informationunionselectdatesfrominternet_salesUNIONALLUNIONALL和

UNION不同之處在于

UNIONALL會(huì)將每一筆符合條件的資料都列出來,無論資料值有無重復(fù)。

SQL進(jìn)階第三十三頁(yè),共五十八頁(yè)。INTERSECT交集

UNION指令類似,

INTERSECT也是對(duì)兩個(gè)

SQL語句所產(chǎn)生的結(jié)果做處理的。不同的地方是,UNION基本上是一個(gè)OR(如果這個(gè)值存在于第一句或是第二句,它就會(huì)被選出),而INTERSECT則比較像AND(這個(gè)值要存在于第一句和第二句才會(huì)被選出)。UNION是合集,而INTERSECT是交集。

INTERSECT的語法如下:

[SQL語句1]INTERSECT[SQL語句2]SQL進(jìn)階第三十四頁(yè),共五十八頁(yè)。MINUS

MINUS指令是運(yùn)用在兩個(gè)SQL語句上。它先找出第一個(gè)SQL語句所產(chǎn)生的結(jié)果,然后看這些結(jié)果有沒有在第二個(gè)SQL語句的結(jié)果中。如果有的話,那這一筆資料就被去除,而不會(huì)在最后的結(jié)果中出現(xiàn)。如果第二個(gè)SQL語句所產(chǎn)生的結(jié)果并沒有存在于第一個(gè)SQL語句所產(chǎn)生的結(jié)果內(nèi),那這筆資料就被拋棄。

MINUS的語法如下:[SQL語句1]MINUS[SQL語句2]注意:在MINUS指令下,不同的值只會(huì)被列出一次。SQL進(jìn)階第三十五頁(yè),共五十八頁(yè)。子查詢我們可以在一個(gè)SQL語句中放入另一個(gè)SQL語句。當(dāng)我們?cè)赪HERE子句或HAVING子句中插入另一個(gè)SQL語句時(shí),我們就有一個(gè)子查詢(subquery)的架構(gòu)。子查詢的作用是什么呢?它可以被用來連接表格。有的時(shí)候子查詢是唯一能夠連接兩個(gè)表格的方式。

子查詢的語法如下:

SELECT“欄位1”

FROM"表格"

WHERE"欄位2"[比較運(yùn)算素](SELECT“欄位1”

FROM“表格”

WHERE[條件])selectsum(sales)fromstore_information

twherestore_namein(selectstore_namefromgeographywhereregion_name='East');SQL進(jìn)階第三十六頁(yè),共五十八頁(yè)。在這個(gè)例子中,我們并沒有直接將兩個(gè)表格連接起來,然后由此直接算出每一間東區(qū)店面的營(yíng)業(yè)額。我們做的是先找出哪些店是在東區(qū)的,然后再算出這些店的營(yíng)業(yè)額總共是多少。

在以上的例子,內(nèi)部查詢本身與外部查詢沒有關(guān)系。這一類的子查詢稱為『簡(jiǎn)單子查詢』(SimpleSubquery)。如果內(nèi)部查詢是要利用到外部查詢提到的表格中的欄位,那這個(gè)字查詢就被稱為『相關(guān)子查詢』(CorrelatedSubquery)。以下是一個(gè)相關(guān)子查詢的例子:

selectsum(i.sales)fromstore_informationiwherei.store_namein(selectstore_namefromgeographygwhereg.store_name=i.store_name)SQL進(jìn)階第三十七頁(yè),共五十八頁(yè)。EXISTS

在上一頁(yè)中,我們用IN來連接內(nèi)查詢和外查詢。另外有數(shù)個(gè)方式,例如>,<,及=,都可以用來連接內(nèi)查詢和外查詢。EXISTS也是其中一種方式。這一頁(yè)我們將討論EXISTS的用法。

基本上,EXISTS是用來測(cè)試內(nèi)查詢有沒有產(chǎn)生任何結(jié)果。如果有的話,系統(tǒng)就會(huì)執(zhí)行外查詢中的SQL。若是沒有的話,那整個(gè)SQL語句就不會(huì)產(chǎn)生任何結(jié)果。

EXISTS的語法是:

SELECT“欄位1”

FROM“表格1”WHEREEXISTS(SELECT*FROM“表格2”WHERE[條件])SQL進(jìn)階第三十八頁(yè),共五十八頁(yè)。CASE

SQL用來做為if-then-else之類邏輯的關(guān)鍵字。CASE的語法如下:

SELECTCASE("欄位名")WHEN"條件1"THEN"結(jié)果1"WHEN"條件2"THEN"結(jié)果2"...[ELSE"結(jié)果N"]ENDFROM"表格名"

“條件”可以是一個(gè)數(shù)值或是公式。ELSE子句則并不是必須的。SQL進(jìn)階第三十九頁(yè),共五十八頁(yè)。selectstore_name,casestore_namewhen'losangeles'thensales*2when'SanDiego'thensales*1.5elsesalesend"newsales",datesfromstore_information“NewSales”是用到CASE那個(gè)欄位的欄位別名。算排名要以SQL列出排名,基本的概念是要做一個(gè)表格自我連結(jié)(selfjoin),SQL進(jìn)階第四十頁(yè),共五十八頁(yè)。也是一個(gè)笛卡爾連接,將結(jié)果依序列出,然后算出每一行之前(包含那一行本身)有多少行數(shù),a1.sales,count(a2.sales)sales_rankfromtotal_salesa1,total_salesa2wherea1.sales<a2.sales

or(a1.sales==),a1.salesorderbya1.salesdesc,desc;對(duì)比:selectrow_number()over(orderbyt.salesdesc)m,t.*

fromtotal_salest;SQL進(jìn)階第四十一頁(yè),共五十八頁(yè)。算中位數(shù)selectsalesmedianfrom(,a1.sales,count(a1.sales)rankfromtotal_salesa1,total_salesa2wherea1.sales<a2.sales

or(a1.sales=<=),a1.salesorderbya1.salesdesc)a3whererank=(selectceil((count(*)+1)/2)fromtotal_sales);SQL進(jìn)階第四十二頁(yè),共五十八頁(yè)。算累積總計(jì)要以SQL算出累積總計(jì),基本上的概念與列出排名類似:第一是先做個(gè)表格自我連結(jié)(selfjoin),然后將結(jié)果依序列出。在做列出排名時(shí),我們算出每一行之前(包含那一行本身)有多少行數(shù);而在做累積總計(jì)

時(shí),我們則是算出每一行之前(包含那一行本身)的總合。,a1.sales,sum(a2.sales)running_totalfromtotal_salesa1,total_salesa2wherea1.sales<=a2.sales

/*or(a1.sales==)*/,a1.salesorderbya1.salesdesc,desc;SQL進(jìn)階第四十三頁(yè),共五十八頁(yè)。算總合百分比每一筆資料是所有總合的百分之幾?要用SQL算出總合百分比,我們需要用到算排名和累積總計(jì)的概念,以及運(yùn)用子查詢的做法。在這里,我們把子查詢放在外部查詢的SELECT子句中。,a1.sales,

a1.sales/(selectsum(sales)fromtotal_sales)pct_to_totalfromtotal_salesa1,total_salesa2wherea1.sales<=a2.sales

/*or(a1.sales==)*/,a1.salesorderbya1.salesdesc,desc;SQL進(jìn)階第四十四頁(yè),共五十八頁(yè)。算累積總合百分比我們要算出到目前為止的累積總合是所有總合的百分之幾,而不是光看每一筆資料是所有總合的百分之幾。,a1.sales,

sum(a2.sales)/(selectsum(sales)fromtotal_sales)pct_to_totalfromtotal_salesa1,total_salesa2wherea1.sales<=a2.sales

/*or(a1.sales==)*/,a1.salesorderbya1.salesdesc,desc;SQL進(jìn)階第四十五頁(yè),共五十八頁(yè)。數(shù)據(jù)處理的相關(guān)函數(shù)ceil(5/2)=3--向上取整floor(5/2)=2--向下取整round(7/3,2)=2.33--四舍五入法則mod(5,2)=1--取余TRUNCfordates(日期)TRUNC(date,[fmt])trunc(sysdate,'yyyy')--返回當(dāng)年第一天.trunc(sysdate,'mm')--返回當(dāng)月第一天.trunc(sysdate,'d')--返回當(dāng)前星期的第一天.TRUNCfornumber(數(shù)字)TRUNC(number[,decimals])trunc(89.985,2)=89.98trunc(89.985)=89(即取整)trunc(89.985,-1)=80小數(shù)點(diǎn)左邊指定位數(shù)后面的部分截去,以0記。SQL進(jìn)階第四十六頁(yè),共五十八頁(yè)。查詢指定行數(shù)據(jù)--注意:偽例rownum不能使用“>”--查詢表的前十行數(shù)據(jù)select*fromtablenamewhererownum<=10;--查詢11-20行記錄--方法一select*from(selectrownumm,t.*fromreport_infotwhererownum<=20)wherem>=11;--方法二select*fromtablenamewhererownum<=20minusselect*fromtablenamewhererownum<11;--方法三select*from(selectrow_number()over(orderbyt.salesdesc)m,t.*fromtotal_salest)wherembetween2and5;SQL進(jìn)階第四十七頁(yè),共五十八頁(yè)。對(duì)比學(xué)習(xí)selectrownum,t.*fromtotal_salest;--順序排序selectrow_number()over(orderbyt.salesdesc)m,t.*fromtotal_salest;--跳躍排序selectrank()over(orderbyt.salesdesc)m,t.*fromtotal_salest;--連續(xù)排序selectdense_rank()over(orderbyt.salesdesc)m,t.*fromtotal_salest;SQL進(jìn)階第四十八頁(yè),共五十八頁(yè)。內(nèi)容簡(jiǎn)介?SQL指令:SQL如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫(kù)之中的資料。?表格處理:SQL如何被用來處理數(shù)據(jù)庫(kù)中的表格。?進(jìn)階SQL:介紹SQL進(jìn)階概念,以及如何用SQL來執(zhí)行一些較復(fù)雜的運(yùn)算。

?

SQL實(shí)例:介紹一些典型的實(shí)例,以及與大規(guī)劃相關(guān)的語句。第四十九頁(yè),共五十八頁(yè)。--設(shè)置月報(bào)報(bào)表參考期別selectdistincttab_year年份,tab_month月份from(selecttab_year,tab_monthfromDXP_408703unionselectto_number(to_char(add_months(sysdate,-1),'yyyy'))tab_year,

to_number(to_char(add_months(sysdate,-1),'mm'))tab_monthfromdual

)orderbytab_yeardesc,tab_monthdesc

SQL實(shí)例第五十頁(yè),共五十八頁(yè)。--設(shè)置季報(bào)報(bào)表參考期別selectdistincttab_year年份,tab_month季度from(selectdistincttab_year,tab_month

fromJNJP_PRICE_EXPONENT_SGCCunionselectto_number(to_char(sysdate,'yyyy'))tab_year,

trunc(to_number(to_char(sysdate,'mm'))/3)tab_month

fromdual)

orderbytab_yeardesc,tab_monthdesc;SQL實(shí)例第五十一頁(yè),共五十八頁(yè)。t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論