SQL培訓(xùn)PPT-超實(shí)用(共58張)_第1頁
SQL培訓(xùn)PPT-超實(shí)用(共58張)_第2頁
SQL培訓(xùn)PPT-超實(shí)用(共58張)_第3頁
SQL培訓(xùn)PPT-超實(shí)用(共58張)_第4頁
SQL培訓(xùn)PPT-超實(shí)用(共58張)_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、SQL 培訓(xùn)培訓(xùn)20132013年年3 3月月內(nèi)容簡介內(nèi)容簡介 SQL SQL 指令指令: SQL : SQL 如何被用來儲(chǔ)存、讀取、以及處理如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫之中的資料。數(shù)據(jù)庫之中的資料。 表格處理表格處理: SQL : SQL 如何被用來處理數(shù)據(jù)庫中的表格。如何被用來處理數(shù)據(jù)庫中的表格。 進(jìn)階進(jìn)階 SQL: SQL: 介紹介紹 SQL SQL 進(jìn)階概念,以及如何用進(jìn)階概念,以及如何用 SQL SQL 來執(zhí)行一些較復(fù)雜的運(yùn)算。來執(zhí)行一些較復(fù)雜的運(yùn)算。 SQL SQL 實(shí)例實(shí)例: :介紹一些典型的實(shí)例,以及與大規(guī)劃相介紹一些典型的實(shí)例,以及與大規(guī)劃相關(guān)的語句。關(guān)的語句。SEL

2、ECTSELECTSELECT SELECT 欄位名欄位名 FROM FROM 表格名表格名 ; ;DISTINCTDISTINCT 找出表格內(nèi)的不同資料值的情況SELECT DISTINCT 欄位名 FROM 表格名;例如:select distinct region_name from GEOGRAPHY t;WHERE WHERE SELECT 欄位名 FROM 表格名 WHERE 條件 ;SQL 指令指令A(yù)ND /ORAND /ORSELECT 欄位名 FROM 表格名 WHERE 簡單條件 AND|OR 簡單條件IN / NOT ININ / NOT INSELECT 欄位名 FRO

3、M 表格名 WHERE 欄位名 IN (值一, 值二, .) 例:SELECT * FROM Store_Information WHERE store_name IN (Los Angeles, San Diego) BETWEEN.AND.BETWEEN.AND.SQL 指令指令SELECT 欄位名 FROM 表格名 WHERE 欄位名 BETWEEN 值一 AND 值二 例:SELECT * FROM Store_Information WHERE Dates BETWEEN Jan-06-1999 AND Jan-10-1999LIKE LIKE 字符篩選字符篩選( (注意:區(qū)分大小寫

4、注意:區(qū)分大小寫) )SELECT 欄位名 FROM 表格名 WHERE 欄位名 LIKE 模式 例:SELECT * FROM Store_Information WHERE store_name LIKE %An%SQL 指令指令ORDER BY ORDER BY 排序排序SELECT 欄位名 FROM 表格名 WHERE 條件 ORDER BY 欄位名 ASC, DESC ASC (默認(rèn))代表結(jié)果會(huì)以由小往大的順序列出,而 DESC 代表結(jié)果會(huì)以由大往小的順序列出例:SELECT store_name, Sales, Dates FROM Store_Information ORDER

5、BY Sales DESCGROUP BY GROUP BY 分組分組SELECT 欄位1, SUM(欄位2) FROM 表格名 GROUP BY 欄位1 SQL 指令指令SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name ALIAS ALIAS 別名別名SELECT 表格別名.欄位1 欄位別名 FROM 表格名 表格別名select t.store_name,sum(sales) 合計(jì) from STORE_INFORMATION t group by store_name ;函數(shù)函數(shù)AVG (AV

6、G (平均平均) )、 COUNT ( COUNT (計(jì)數(shù)計(jì)數(shù)) )、 MAX ( MAX (最大值最大值) ) 、MIN (MIN (最小值最小值) ) 、SUM (SUM (總合總合) ) SQL 指令指令SELECT 函數(shù)名(欄位名) FROM 表格名 select count(store_name) 計(jì)數(shù) from STORE_INFORMATION t ;HAVING HAVING 對(duì)函數(shù)產(chǎn)生的值來設(shè)定條件 SELECT 欄位1, SUM(欄位2) FROM 表格名 GROUP BY 欄位1 HAVING (函數(shù)條件) SELECT store_name, SUM(sales) FR

7、OM Store_Information GROUP BY store_name HAVING SUM(sales) 1500 表格鏈接表格鏈接 左連接 (left join),又稱內(nèi)部連接 (inner join),在這個(gè)情況下,要兩個(gè)表格內(nèi)都有同樣的值,那一筆資料才會(huì)被選出。SQL 指令指令select g.*,s.* from geography g, store_information s where g.store_name = s.store_name笛卡兒連接笛卡兒連接select g.*,s.* from geography g, store_information s 外部連

8、接外部連接(outer jion),列出一個(gè)表格中每一筆的資料,無論它的值在另一個(gè)表格中有沒有出現(xiàn)。在要選出所有資料的那個(gè)表格之后加上一個(gè) (+)select g.store_name, sum(s.sales) sales from geography g, store_information s where g.store_name = s.store_name (+) group by g.store_name ;請(qǐng)注意: 當(dāng)?shù)诙€(gè)表格沒有相對(duì)的資料時(shí), SQL 會(huì)傳回 NULL 值。SQL 指令指令CONCATENATE CONCATENATE 連接字符串連接字符串有的時(shí)候,我們有需要

9、將由不同欄位獲得的資料串連在一起。每一種數(shù)據(jù)庫都有提供方法來達(dá)到這個(gè)目的MySQL: CONCAT() Oracle: CONCAT(), | SQL Server: + CONCAT() 的語法如下:CONCAT(字符串1, 字符串2, 字符串3, .)注意:Oracle的CONCAT()只允許兩個(gè)參數(shù);換言之,一次只能將兩個(gè)字符串串連起來。不過,在Oracle中,我們可以用|來一次串連多個(gè)字符串。例:select g.region_name | | g.store_name from geography g;SQL 指令指令SUBSTRING 抓出一個(gè)欄位資料中的其中一部分抓出一個(gè)欄位資料

10、中的其中一部分MySQL: SUBSTR(), SUBSTRING() Oracle: SUBSTR() SQL Server: SUBSTRING() 最常用到的方式如下 (在這里我們用SUBSTR()為例): SUBSTR(str,pos): 由中,選出所有從第位置開始的字符。請(qǐng)注意,這個(gè)語法不適用于SQL Server上。 SUBSTR(str,pos,len): 由中的第位置開始,選出接下去的個(gè)字符。select substr(store_name, 3,6) from geography where store_name = Los Angeles; SQL 指令指令TRIM 移除移

11、除SQL 中的 TRIM 函數(shù)是用來移除掉一個(gè)字符串中的字頭或字尾。最常見的用途是移除字首或字尾的空白。這個(gè)函數(shù)在不同的數(shù)據(jù)庫中有不同的名稱: MySQL: TRIM(), RTRIM(), LTRIM() Oracle: RTRIM(), LTRIM() SQL Server: RTRIM(), LTRIM() 各種 trim 函數(shù)的語法如下: TRIM(位置 要移除的字符串 FROM 字符串) 位置 的可能值為 LEADING (起頭), TRAILING (結(jié)尾), or (起頭及結(jié)尾)。 這個(gè)函數(shù)將把 要移除的字符串 從字符串的起頭、結(jié)尾,或是起頭及結(jié)尾移除。如果我們沒有列出 要移除的

12、字符串 是什么的話,那空白就會(huì)被移除。 SQL 指令指令LTRIM(字符串): 將所有字符串起頭的空白移除。 RTRIM(字符串): 將所有字符串結(jié)尾的空白移除。select rtrim(store_name) from geography g;-刪除頭和尾空白select trim(store_name) from geography g; -刪除頭和尾字母“o”select trim(BOTH o from store_name ) from geography g;在起頭處添加字段:在起頭處添加字段:lpad(tab_month, 2, 0) 月份格式改為“MM”2位 select lp

13、ad(7,2,0) from dualSQL 指令指令內(nèi)容簡介內(nèi)容簡介 SQL SQL 指令指令: SQL : SQL 如何被用來儲(chǔ)存、讀取、以及處理如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫之中的資料。數(shù)據(jù)庫之中的資料。 表格處理表格處理: SQL : SQL 如何被用來處理數(shù)據(jù)庫中的表格。如何被用來處理數(shù)據(jù)庫中的表格。 進(jìn)階進(jìn)階 SQL: SQL: 介紹介紹 SQL SQL 進(jìn)階概念,以及如何用進(jìn)階概念,以及如何用 SQL SQL 來執(zhí)行一些較復(fù)雜的運(yùn)算。來執(zhí)行一些較復(fù)雜的運(yùn)算。 SQL SQL 實(shí)例實(shí)例: :介紹一些典型的實(shí)例。介紹一些典型的實(shí)例。CREATE TABLE CREATE TAB

14、LE 建表建表語法是: CREATE TABLE 表格名(欄位 1 欄位 1 資料種類 NOT NULLNOT NULL, 欄位 2 欄位 2 資料種類, . ) - Create tablecreate table GEOGRAPHY( region_name VARCHAR2(20), store_name VARCHAR2(20) NOT NULLNOT NULL)表格處理表格處理CREATE TABLE CREATE TABLE 建表建表語法是: CREATE TABLE 表格名(欄位 1 欄位 1 資料種類 NOT NULLNOT NULL, 欄位 2 欄位 2 資料種類, . )

15、注意:字段類型char和varchar2區(qū)別CHAR的長度是固定的,而VARCHAR2的長度是可以變化的。 比如,存儲(chǔ)字符串“abc”,對(duì)于CHAR (20),表示你存儲(chǔ)的字符將占20個(gè)字節(jié)(包括17個(gè)空字符), 而同樣的VARCHAR2 (20)則只占用3個(gè)字節(jié)的長度,20只是最大值,當(dāng)你存儲(chǔ)的字符小于20時(shí),按實(shí)際長度存儲(chǔ)。表格處理表格處理表格處理表格處理添加注釋添加注釋- Add comments to the table comment on table GEOGRAPHY is 商店所屬地理位置;- Add comments to the columns comment on col

16、umn GEOGRAPHY.region_name is 地區(qū)名稱;comment on column GEOGRAPHY.store_name is 商店名稱;CONSTRAINT CONSTRAINT 約束約束 限制限制NOT NULL UNIQUE CHECK 主鍵 (Primary Key) 外來鍵 (Foreign Key) 表格處理表格處理UNIQUE UNIQUE 唯一性唯一性UNIQUE 限制是保證一個(gè)欄位中的所有資料都是有不一樣的值。 舉例來說,在以下的語句中, CREATE TABLE Customer (SID integer Unique, Last_Name varc

17、har (30), First_Name varchar(30); SID 欄位不能有重復(fù)值存在,而 Last_Name 及 First_Name 這兩個(gè)欄位則是允許有重復(fù)值存在。 請(qǐng)注意,一個(gè)被指定為主鍵的欄位也一定會(huì)含有 UNIQUE 的特性。相對(duì)來說,一個(gè) UNIQUE 的欄位并不一定會(huì)是一個(gè)主鍵。 表格處理表格處理CHECK CHECK 核對(duì)核對(duì)CHECK 限制是保證一個(gè)欄位中的所有資料都是符合某些條件。 舉例來說,在以下的語句中, CREATE TABLE Customer (SID integer CHECK (SID 0), Last_Name varchar (30), Fir

18、st_Name varchar(30); SID 攔只能包含大于 0 的整數(shù)。 注意,CHECK 限制目前尚未被執(zhí)行于 MySQL 數(shù)據(jù)庫上。表格處理表格處理主鍵主鍵主鍵 (Primary Key) 中的每一筆資料都是表格中的唯一值。換言之,它是用來獨(dú)一無二地確認(rèn)一個(gè)表格中的每一行資料。主鍵可以是原本資料內(nèi)的一個(gè)欄位,或是一個(gè)人造欄位 (與原本資料沒有關(guān)系的欄位)。主鍵可以包含一或多個(gè)欄位。當(dāng)主鍵包含多個(gè)欄位時(shí),稱為組合鍵 (Composite Key)。 注意,在用ALTER TABLE語句來添加主鍵之前,我們需要確認(rèn)被用來當(dāng)做主鍵的欄位是設(shè)定為 NOT NULL ;也就是說,那個(gè)欄位一定不

19、能沒有資料。 Oracle: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30); Oracle: ALTER TABLE Customer ADD PRIMARY KEY (SID); 表格處理表格處理 外來鍵外來鍵 外來鍵是一個(gè)(或數(shù)個(gè))指向另外一個(gè)表格主鍵的欄位。外來鍵的目的是確定資料的參考完整性(referential integrity)。換言之,只有被準(zhǔn)許的資料值才會(huì)被存入數(shù)據(jù)庫內(nèi)。 舉例來說,假設(shè)我們有兩個(gè)表格:一個(gè) CUSTOMER 表格,里面

20、記錄了所有顧客的資料;另一個(gè) ORDERS 表格,里面記錄了所有顧客訂購的資料。在這里的一個(gè)限制,就是所有的訂購資料中的顧客,都一定是要跟在 CUSTOMER 表格中存在。在這里,我們就會(huì)在 ORDERS 表格中設(shè)定一個(gè)外來鍵,而這個(gè)外來鍵是指向 CUSTOMER 表格中的主鍵。這樣一來,我們就可以確定所有在 ORDERS 表格中的顧客都存在 CUSTOMER 表格中。換句話說,ORDERS表格之中,不能有任何顧客是不存在于 CUSTOMER 表格中的資料。 表格處理表格處理 表格處理表格處理在以上的例子中,ORDERS 表格中的 customer_SID 欄位是一個(gè)指向 CUSTOMERS

21、表格中 SID 欄位的外來鍵。 表格處理表格處理CREATE VIEW CREATE VIEW 視圖視圖視觀表 (Views) 可以被當(dāng)作是虛擬表格。它跟表格的不同是,表格中有實(shí)際儲(chǔ)存資料,而視觀表是建立在表格之上的一個(gè)架構(gòu),它本身并不實(shí)際儲(chǔ)存資料。建立一個(gè)視觀表的語法如下: CREATE VIEW VIEW_NAME AS SQL 語句create view v_geography as select region_name,trim(store_name) v_store_name from geography g; -表格處理表格處理CREATE VIEW CREATE VIEW 視圖視

22、圖視觀表 (Views) 可以被當(dāng)作是虛擬表格。它跟表格的不同是,表格中有實(shí)際儲(chǔ)存資料,而視觀表是建立在表格之上的一個(gè)架構(gòu),它本身并不實(shí)際儲(chǔ)存資料。建立一個(gè)視觀表的語法如下: CREATE VIEW VIEW_NAME AS SQL 語句create view v_geography as select region_name,trim(store_name) v_store_name from geography g; -刪除視圖drop view v_geography;表格處理表格處理CREATE INDEXCREATE INDEX索引索引如果一個(gè)表格沒有索引的話,數(shù)據(jù)庫系統(tǒng)就需要將整個(gè)

23、表格的資料讀出 (這個(gè)過程叫做table scan)。若有適當(dāng)?shù)乃饕嬖?,?shù)據(jù)庫系統(tǒng)就可以先由這個(gè)索引去找出需要的資料是在表格的什么地方,然后直接去那些地方抓資料。這樣子速度就快多了。語法:CREATE INDEX INDEX_NAME ON TABLE_NAME (COLUMN_NAME) create index idx_store_info_store_name on store_information (store_name,)索引的命名并沒有一個(gè)固定的方式。通常會(huì)用的方式是在名稱前加一個(gè)字首,例如 “IDX_” ,來避免與數(shù)據(jù)庫中的其他物件混淆。另外,在索引名之內(nèi)包括表格名及欄位名也

24、是一個(gè)好的方式。 (刪除,修改索引)表格處理表格處理ALTER TABLE ALTER TABLE 修改表結(jié)構(gòu)修改表結(jié)構(gòu)ALTER TABLE語句的語法形式: ALTER TABLE table MODIFY column_name new_data_type ( precision , scale ) NULL | NOT NULL | ADD ,.n | DROP COLUMN drop_colum_name ,.n 在以上語法形式中: column_name:要修改的列名。 new_data_type :要修改列的新數(shù)據(jù)類型。 precision:是指定數(shù)據(jù)類型的精度。 表格處理表格處理

25、scale:是指定數(shù)據(jù)類型的小數(shù)位數(shù)。 add_column_name :要添加到表中的列名。 add_data_type :要添加到表中的列的數(shù)據(jù)類型。 drop_colum_name :要從表中刪除的列名 ,.n :可以有多個(gè)列。加一個(gè)欄位: ADD 欄位 1 欄位 1 資料種類 alter table customer add address char(30);刪去一個(gè)欄位: DROP column 欄位 1 alter table customer drop column address ;改變欄位的資料種類: MODIFY 欄位 1 新資料種類 alter table custome

26、r modify addrs char(50);修改欄位名 RENAME TO alter table customer rename column addr to addrs;表格處理表格處理DROP TABLEDROP TABLE 清除表格清除表格DROP TABLE 表格名 drop table customer;TRUNCATE TABLE TRUNCATE TABLE 清除表格中所有資料清除表格中所有資料TRUNCATE TABLE 表格名 truncate table customer;DELETE FROM DELETE FROM 刪除表數(shù)據(jù)刪除表數(shù)據(jù)DELETE FROM “表

27、格名” WHERE 條件 delete from store_information t where store_name =Los Angeles;表格處理表格處理INSERT INTO INSERT INTO 插入插入INSERT INTO 表格名 (欄位1, 欄位2, .)VALUES (值1, 值2, .) insert into store_information (store_name, sales, dates)values (los angeles, 900, jan-10-1999) INSERT INTO 表格1 (欄位1, 欄位2, .)SELECT 欄位3, 欄位4,

28、FROM 表格2 insert into store_information (store_name, sales, dates)select store_name, sales, dates from v_store_information where dates like %1998表格處理表格處理UPDATE UPDATE 修改表格資料修改表格資料 UPDATE 表格名“ SET 欄位1 = 新值 WHERE 條件 update store_information set sales=800 where store_name =los angeles;內(nèi)容簡介內(nèi)容簡介 SQL SQL 指

29、令指令: SQL : SQL 如何被用來儲(chǔ)存、讀取、以及處理如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫之中的資料。數(shù)據(jù)庫之中的資料。 表格處理表格處理: SQL : SQL 如何被用來處理數(shù)據(jù)庫中的表格。如何被用來處理數(shù)據(jù)庫中的表格。 進(jìn)階進(jìn)階 SQL: SQL: 介紹介紹 SQL SQL 進(jìn)階概念,以及如何用進(jìn)階概念,以及如何用 SQL SQL 來執(zhí)行一些較復(fù)雜的運(yùn)算。來執(zhí)行一些較復(fù)雜的運(yùn)算。 SQL SQL 實(shí)例實(shí)例: :介紹一些典型的實(shí)例。介紹一些典型的實(shí)例。UNIONUNION 求合集求合集將兩個(gè) SQL 語句的結(jié)果合并在一起。SQL 語句 1UNIONSQL 語句 2 select dat

30、es from store_informationunionselect dates from internet_sales UNION ALLUNION ALLUNION ALL 和 UNION 不同之處在于 UNION ALL 會(huì)將每一筆符合條件的資料都列出來,無論資料值有無重復(fù)。 SQLSQL進(jìn)階進(jìn)階INTERSECT INTERSECT 交集交集和 UNION 指令類似, INTERSECT 也是對(duì)兩個(gè) SQL 語句所產(chǎn)生的結(jié)果做處理的。不同的地方是, UNION 基本上是一個(gè) OR (如果這個(gè)值存在于第一句或是第二句,它就會(huì)被選出),而 INTERSECT 則比較像 AND (這個(gè)值

31、要存在于第一句和第二句才會(huì)被選出)。 UNION 是合集,而 INTERSECT 是交集。 INTERSECT 的語法如下: SQL 語句 1INTERSECTSQL 語句 2 SQLSQL進(jìn)階進(jìn)階MINUSMINUS 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 語句 1MINUSSQL 語句 2 注意

32、:在 MINUS 指令下,不同的值只會(huì)被列出一次。SQLSQL進(jìn)階進(jìn)階子查詢子查詢我們可以在一個(gè) SQL 語句中放入另一個(gè) SQL 語句。當(dāng)我們?cè)?WHERE 子句或 HAVING 子句中插入另一個(gè) SQL 語句時(shí),我們就有一個(gè)子查詢 (subquery) 的架構(gòu)。 子查詢的作用是什么呢?它可以被用來連接表格。有的時(shí)候子查詢是唯一能夠連接兩個(gè)表格的方式。 子查詢的語法如下: SELECT “欄位1” FROM 表格 WHERE 欄位2 比較運(yùn)算素 (SELECT “欄位1” FROM “表格” WHERE 條件) select sum(sales) from store_information

33、 t where store_name in (select store_name from geography where region_name=East);SQLSQL進(jìn)階進(jìn)階在這個(gè)例子中,我們并沒有直接將兩個(gè)表格連接起來,然后由此直接算出每一間東區(qū)店面的營業(yè)額。我們做的是先找出哪些店是在東區(qū)的,然后再算出這些店的營業(yè)額總共是多少。 在以上的例子,內(nèi)部查詢本身與外部查詢沒有關(guān)系。這一類的子查詢稱為簡單子查詢 (Simple Subquery)。如果內(nèi)部查詢是要利用到外部查詢提到的表格中的欄位,那這個(gè)字查詢就被稱為相關(guān)子查詢 (Correlated Subquery)。以下是一個(gè)相關(guān)子查詢

34、的例子: select sum(i.sales) from store_information i where i.store_name in(select store_name from geography gwhere g.store_name = i.store_name)SQLSQL進(jìn)階進(jìn)階EXISTS EXISTS 在上一頁中,我們用 IN 來連接內(nèi)查詢和外查詢。另外有數(shù)個(gè)方式,例如 , , 及 =,都可以用來連接內(nèi)查詢和外查詢。 EXISTS 也是其中一種方式。這一頁我們將討論 EXISTS 的用法。 基本上, EXISTS 是用來測(cè)試內(nèi)查詢有沒有產(chǎn)生任何結(jié)果。如果有的話,系統(tǒng)就會(huì)

35、執(zhí)行外查詢中的 SQL。若是沒有的話,那整個(gè) SQL 語句就不會(huì)產(chǎn)生任何結(jié)果。 EXISTS 的語法是: SELECT “欄位1” FROM “表格1”WHERE EXISTS (SELECT * FROM “表格2”WHERE 條件)SQLSQL進(jìn)階進(jìn)階CASECASE SQL 用來做為 if-then-else 之類邏輯的關(guān)鍵字。 CASE 的語法如下: SELECT CASE (欄位名) WHEN 條件1 THEN 結(jié)果1 WHEN 條件2 THEN 結(jié)果2 . ELSE 結(jié)果N ENDFROM 表格名“條件” 可以是一個(gè)數(shù)值或是公式。 ELSE 子句則并不是必須的。SQLSQL進(jìn)階進(jìn)階

36、select store_name, case store_name when los angeles then sales * 2 when San Diego then sales * 1.5 else sales endnew sales,datesfrom store_information“New Sales” 是用到 CASE 那個(gè)欄位的欄位別名。算排名算排名要以 SQL 列出排名,基本的概念是要做一個(gè)表格自我連結(jié) (self join),SQLSQL進(jìn)階進(jìn)階也是一個(gè)笛卡爾連接,將結(jié)果依序列出,然后算出每一行之前 (包含那一行本身) 有多少行數(shù)select , a1.

37、sales, count(a2.sales) sales_rank from total_sales a1, total_sales a2 where a1.sales a2.sales or (a1.sales=a2.sales and = ) group by , a1.sales order by a1.sales desc, desc;對(duì)比:對(duì)比:select row_number()over(order by t.sales desc) m,t.* from total_sales t;SQLSQL進(jìn)階進(jìn)階算中位數(shù)算中位數(shù)s

38、elect sales median from (select , a1.sales, count(a1.sales) rank from total_sales a1, total_sales a2 where a1.sales a2.sales or (a1.sales=a2.sales and = ) group by , a1.sales order by a1.sales desc) a3 where rank = (select ceil(count(*)+1)/2) from total_sales); SQLSQL進(jìn)階進(jìn)

39、階算累積總計(jì)算累積總計(jì)要以 SQL 算出累積總計(jì),基本上的概念與列出排名類似:第一是先做個(gè)表格自我連結(jié) (self join),然后將結(jié)果依序列出。在做列出排名時(shí),我們算出每一行之前 (包含那一行本身) 有多少行數(shù);而在做累積總計(jì) 時(shí),我們則是算出每一行之前 (包含那一行本身) 的總合。select , a1.sales, sum(a2.sales) running_total from total_sales a1, total_sales a2 where a1.sales = a2.sales /*or (a1.sales=a2.sales and = a2

40、.name)*/ group by , a1.sales order by a1.sales desc, desc;SQLSQL進(jìn)階進(jìn)階算總合百分比算總合百分比每一筆資料是所有總合的百分之幾?要用 SQL 算出總合百分比,我們需要用到算排名和累積總計(jì)的概念,以及運(yùn)用子查詢的做法。在這里,我們把子查詢放在外部查詢的 SELECT 子句中。select , a1.sales, a1.sales/(select sum(sales) from total_sales) pct_to_total from total_sales a1, total_sale

41、s a2 where a1.sales = a2.sales /*or (a1.sales=a2.sales and = )*/ group by , a1.sales order by a1.sales desc, desc;SQLSQL進(jìn)階進(jìn)階算累積總合百分比算累積總合百分比我們要算出到目前為止的累積總合是所有總合的百分之幾,而不是光看每一筆資料是所有總合的百分之幾。select , a1.sales, sum(a2.sales)/(select sum(sales) from total_sales) pct_to

42、_total from total_sales a1, total_sales a2 where a1.sales ”-查詢表的前十行數(shù)據(jù)select * from tablename where rownum=10;-查詢11-20行記錄-方法一select * from (select rownum m,t.* from report_info t where rownum=11; -方法二select * from tablename where rownum=20 minusselect * from tablename where rownum 11;-方法三select * fro

43、m (select row_number()over(order by t.sales desc) m,t.* from total_sales t) where m between 2 and 5;SQLSQL進(jìn)階進(jìn)階對(duì)比學(xué)習(xí)對(duì)比學(xué)習(xí)select rownum,t.* from total_sales t;-順序排序select row_number()over(order by t.sales desc) m,t.* from total_sales t; -跳躍排序select rank()over(order by t.sales desc) m,t.* from total_sale

44、s t; -連續(xù)排序select dense_rank()over(order by t.sales desc) m,t.* from total_sales t; SQLSQL進(jìn)階進(jìn)階內(nèi)容簡介內(nèi)容簡介 SQL SQL 指令指令: SQL : SQL 如何被用來儲(chǔ)存、讀取、以及處理如何被用來儲(chǔ)存、讀取、以及處理數(shù)據(jù)庫之中的資料。數(shù)據(jù)庫之中的資料。 表格處理表格處理: SQL : SQL 如何被用來處理數(shù)據(jù)庫中的表格。如何被用來處理數(shù)據(jù)庫中的表格。 進(jìn)階進(jìn)階 SQL: SQL: 介紹介紹 SQL SQL 進(jìn)階概念,以及如何用進(jìn)階概念,以及如何用 SQL SQL 來執(zhí)行一些較復(fù)雜的運(yùn)算。來執(zhí)行一些

45、較復(fù)雜的運(yùn)算。 SQL SQL 實(shí)例實(shí)例: :介紹一些典型的實(shí)例,以及與大規(guī)劃相介紹一些典型的實(shí)例,以及與大規(guī)劃相關(guān)的語句。關(guān)的語句。-設(shè)置月報(bào)報(bào)表參考期別設(shè)置月報(bào)報(bào)表參考期別select distinct tab_year 年份,tab_month 月份 from( select tab_year,tab_month from DXP_408703unionselect to_number(to_char(add_months(sysdate,-1),yyyy)tab_year, to_number(to_char(add_months(sysdate,-1),mm) tab_month from dual ) order by tab_year desc,tab_month desc SQLSQL實(shí)例實(shí)例-設(shè)置季報(bào)報(bào)表參考期別設(shè)置季報(bào)報(bào)表參考期別select distinct tab_year 年份, tab_month 季度 from (select dis

溫馨提示

  • 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. 人人文庫網(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)論