【正文】
ORACLE數(shù)據(jù)庫(kù)SQL學(xué)習(xí)教程83 / 86目錄課程說(shuō)明 1課程介紹 1課程目標(biāo) 1相關(guān)資料 1第1章 SQL概述 2 產(chǎn)品概述 2 產(chǎn)品簡(jiǎn)介 2 SQL語(yǔ)言基本分類 2 DDL語(yǔ)言 2 DML 4第2章 SQL語(yǔ)句指令 7 SELECT 7 DISTINCT 8 WHERE 9 AND OR 10 IN 12 BETWEEN 13 LIKE 15 ORDER BY 17 函數(shù) 19 COUNT 21 GROUP BY 22 HAVING 24 ALIAS 25 表格鏈接 27 外部鏈接 29 CONCATENATE 31 SUBSTRING 33 TRIM 35第3章 復(fù)雜SQL 36 子查詢 36 外連接 38第4章 表格處理 39 CREATE TABLE 39 CONSTRAINT 41 NOT NULL 41 UNIQUE 42 CHECK 42 主鍵 43 外來(lái)鍵 45 CREATE VIEW 47 CREATE INDEX 50 ALTER TABLE 51 DROP TABLE 55 TRUNCATE TABLE 55 INSERT INTO 56 UPDATE 58 DELETE FROM 59第5章 進(jìn)階SQL 61 UNION 62 UNION ALL 63 INTERSECT 65 MINUS 67 子查詢 69 EXISTS 71 CASE 73 算排名 75 算中位數(shù) 77 算總合百分比 80 算累積總合百分比 81課程說(shuō)明課程介紹本課程基于ORACLE數(shù)據(jù)庫(kù)介紹SQL。課程目標(biāo)完成本課程的學(xué)習(xí)后,您應(yīng)該能夠: l 了解數(shù)據(jù)庫(kù)的常用對(duì)象。l 熟練掌握標(biāo)準(zhǔn)SQL的使用。l 熟練掌握ORACLE常用標(biāo)量函數(shù)的使用。相關(guān)資料ORACLE公司發(fā)布的相關(guān)資料。第1章 SQL概述 產(chǎn)品概述 產(chǎn)品簡(jiǎn)介SQL誕生于70年代的IBM某實(shí)驗(yàn)室。 SQL是一種非過(guò)程語(yǔ)言,它描述了如何對(duì)數(shù)據(jù)進(jìn)行檢索、插入、刪除,但它并不說(shuō)明如何進(jìn)行這樣的操作。 SQL是英文Structured Query Language的縮寫(xiě),意思為結(jié)構(gòu)化查詢語(yǔ)言。SQL語(yǔ)言的主要功能就是同各種數(shù)據(jù)庫(kù)建立聯(lián)系,進(jìn)行溝通。按照ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。SQL語(yǔ)句可以用來(lái)執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語(yǔ)言標(biāo)準(zhǔn)。雖然很多數(shù)據(jù)庫(kù)都對(duì)SQL語(yǔ)句進(jìn)行了再開(kāi)發(fā)和擴(kuò)展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內(nèi)的標(biāo)準(zhǔn)的SQL命令仍然可以被用來(lái)完成幾乎所有的數(shù)據(jù)庫(kù)操作。下面,我們就來(lái)詳細(xì)介紹一下SQL語(yǔ)言的基本知識(shí) SQL語(yǔ)言基本分類在編寫(xiě)程序的過(guò)程中,你能用到的SQL語(yǔ)句通常上只有為DDL(數(shù)據(jù)定義語(yǔ)言)和DML(數(shù)據(jù)操縱語(yǔ)言)兩種,其它的一般不會(huì)在腳本編寫(xiě)的時(shí)候使用到。 DDL語(yǔ)言數(shù)據(jù)定義語(yǔ)言: (Data Definition Language, DDL) 是SQL語(yǔ)言集中負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)定義與數(shù)據(jù)庫(kù)對(duì)象定義的語(yǔ)言,由CREATE、ALTER與DROP三個(gè)語(yǔ)法所組成,最早是由 Codasyl (Conference on Data Systems Languages) 數(shù)據(jù)模型開(kāi)始,現(xiàn)在被納入 SQL 指令中作為其中一個(gè)子集。目前大多數(shù)的DBMS都支持對(duì)數(shù)據(jù)庫(kù)對(duì)象的DDL操作,部份數(shù)據(jù)庫(kù) (如 PostgreSQL) 可把DDL放在交易指令中,也就是它可以被撤回 (Rollback)。較新版本的DBMS會(huì)加入DDL專用的觸發(fā)程序,讓數(shù)據(jù)庫(kù)管理員可以追蹤來(lái)自DDL的修改。CREATE: CREATE 是負(fù)責(zé)數(shù)據(jù)庫(kù)對(duì)象的建立,舉凡數(shù)據(jù)庫(kù)、數(shù)據(jù)表、數(shù)據(jù)庫(kù)索引、預(yù)存程序、用戶函數(shù)、觸發(fā)程序或是用戶自定型別等對(duì)象,都可以使用 CREATE 指令來(lái)建立,而為了各式數(shù)據(jù)庫(kù)對(duì)象的不同,CREATE 也有很多的參數(shù)。對(duì)表的操作語(yǔ)法(示例)如下:? CREATE TABLE(建表)1. CREATE TABLE table_name(2. column_name1 data_type,3. column_name2 data_type,.......4. )其他像是: CREATE INDEX:建立數(shù)據(jù)表索引。 CREATE PROCEDURE:建立預(yù)存程序。 CREATE FUNCTION:建立用戶函數(shù)。 CREATE VIEW:建立查看表。 CREATE TRIGGER:建立觸發(fā)程序。 等等,都是使用來(lái)建立不同數(shù)據(jù)庫(kù)對(duì)象的指令。DROP 則是刪除數(shù)據(jù)庫(kù)對(duì)象的指令,并且只需要指定要?jiǎng)h除的數(shù)據(jù)庫(kù)對(duì)象名稱即可,在 DDL 語(yǔ)法中算是最簡(jiǎn)單的。 例如: DROP TABLE myTable。 刪除 myTable 數(shù)據(jù)表。 ? DROP VIEW myView。 刪除 myView 檢視表。ALTER 是負(fù)責(zé)數(shù)據(jù)庫(kù)對(duì)象修改的指令,相較于 CREATE 需要定義完整的數(shù)據(jù)對(duì)象參數(shù),ALTER 則是可依照要修改的幅度來(lái)決定使用的參數(shù),因此使用上并不會(huì)太困難,例如: ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL 。 在數(shù)據(jù)表 doc_exa 中加入一個(gè)新的字段,名稱為 column_b,數(shù)據(jù)型別為 varchar(20),允許 NULL 值。 ? ALTER TABLE doc_exb DROP COLUMN column_b 。 在數(shù)據(jù)表 doc_exb 中移除 column_b 字段 DML數(shù)據(jù)操縱語(yǔ)言:DML(Data Manipulation Language),用戶通過(guò)它可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的基本操作。例如,對(duì)表中數(shù)據(jù)的查詢、插入、刪除和修改。關(guān)鍵字:select 、insert、update,delete語(yǔ)法如下:Select SELECT 欄位 FROM 表格名 Distinct SELECT DISTINCT 欄位 FROM 表格名 Where SELECT 欄位 FROM 表格名 WHERE condition And/Or SELECT 欄位 FROM 表格名 WHERE 簡(jiǎn)單條件 {[AND|OR] 簡(jiǎn)單條件}+ In SELECT 欄位 FROM 表格名 WHERE 欄位 IN (39。值139。, 39。值239。, ...) Between SELECT 欄位 FROM 表格名 WHERE 欄位 BETWEEN 39。值139。 AND 39。值239。 Like SELECT 欄位 FROM 表格名 WHERE 欄位 LIKE {模式} Order By SELECT 欄位 FROM 表格名 [WHERE 條件]ORDER BY 欄位 [ASC, DESC] Count SELECT COUNT(欄位) FROM 表格名 Group By SELECT 欄位1, SUM(欄位2) FROM 表格名 GROUP BY 欄位1 Having SELECT 欄位1, SUM(欄位2) FROM 表格名 GROUP BY 欄位1 HAVING (函數(shù)條件) Create Table CREATE TABLE 表格名(欄位 1 欄位 1 資料種類,欄位 2 欄位 2 資料種類,... ) Drop Table DROP TABLE 表格名 Truncate Table TRUNCATE TABLE 表格名 Insert Into INSERT INTO 表格名 (欄位1, 欄位2, ...)VALUES (值1, 值2, ...) Update UPDATE 表格名SET 欄位1 = [新值]WHERE {條件} Delete From DELETE FROM 表格名WHERE {條件}第2章 SQL語(yǔ)句指令 SELECT是用來(lái)做什么的呢?一個(gè)最常用的方式是將資料從數(shù)據(jù)庫(kù)中的表格內(nèi)選出。從這一句回答中,我們馬上可以看到兩個(gè)關(guān)鍵字: 從 (FROM) 數(shù)據(jù)庫(kù)中的表格內(nèi)選出 (SELECT)。(表格是一個(gè)數(shù)據(jù)庫(kù)內(nèi)的結(jié)構(gòu),它的目的是儲(chǔ)存資料。在表格處理這一部分中,我們會(huì)提到如何使用 SQL 來(lái)設(shè)定表格。) 我們由這里可以看到最基本的 SQL 架構(gòu): SELECT 欄位名 FROM 表格名 我們用以下的例子來(lái)看看實(shí)際上是怎么用的。假設(shè)我們有以下這個(gè)表格: store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 若要選出所有的店名 (store_Name),我們就打入: SELECT store_name FROM Store_Information 結(jié)果:store_nameLos AngelesSan DiegoLos AngelesBoston我們一次可以讀取好幾個(gè)欄位,也可以同時(shí)由好幾個(gè)表格中選資料。 DISTINCTSELECT 指令讓我們能夠讀取表格中一個(gè)或數(shù)個(gè)欄位的所有資料。這將把所有的資料都抓出,無(wú)論資料值有無(wú)重復(fù)。在資料處理中,我們會(huì)經(jīng)常碰到需要找出表格內(nèi)的不同資料值的情況。換句話說(shuō),我們需要知道這個(gè)表格/欄位內(nèi)有哪些不同的值,而每個(gè)值出現(xiàn)的次數(shù)并不重要。這要如何達(dá)成呢?在 SQL 中,這是很容易做到的。我們只要在 SELECT 后加上一個(gè) DISTINCT 就可以了。DISTINCT 的語(yǔ)法如下: SELECT DISTINCT 欄位名 FROM 表格名 舉例來(lái)說(shuō),若要在以下的表格,Store_Information,找出所有不同的店名時(shí), Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 我們就鍵入,SELECT DISTINCT store_name FROM Store_Information結(jié)果: store_name Los Angeles San Diego Boston WHERE我們并不一定每一次都要將表格內(nèi)的資料都完全抓出。在許多時(shí)候,我們會(huì)需要選擇性地抓資料。就我們的例子來(lái)說(shuō),我們可能只要抓出營(yíng)業(yè)額超過(guò) $1,000 的資料。要做到這一點(diǎn),我們就需要用到 WHERE 這個(gè)指令。這個(gè)指令的語(yǔ)法如下:SELECT 欄位名 FROM 表格名 WHERE 條件 若我們要由以下的表格抓出營(yíng)業(yè)額超過(guò) $1,000 的資料, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 我們就鍵入,SELECT store_name FROM Store_Information WHERE Sales 1000 結(jié)果: store_name Los Angeles AND OR在上一頁(yè)中,我們看到 WHERE 指令可以被用來(lái)由表格中有條件地選取資料。 這個(gè)條件可能是簡(jiǎn)單的 (像上一頁(yè)的例子),也可能是復(fù)雜的。復(fù)雜條件是由二或多個(gè)簡(jiǎn)單條件透過(guò) AND 或是 OR 的連接而成。一個(gè) SQL 語(yǔ)句中可以有無(wú)限多個(gè)簡(jiǎn)單條件的存在。 復(fù)雜條件的語(yǔ)法如下: SELECT 欄位名 FROM 表格名 WHERE 簡(jiǎn)單條件 {[AND|OR] 簡(jiǎn)單條件}+ {}+ 代表{}之內(nèi)的情況會(huì)發(fā)生一或多次。在這里的意思就是 AND 加簡(jiǎn)單條件及 OR 加簡(jiǎn)單條件的情況可以發(fā)生一或多次。另外,我們可以用 () 來(lái)代表?xiàng)l件的先后次序。 舉例來(lái)說(shuō),我們?nèi)粢?Store_Information 表格中選出所有 Sales 高于 $1,000 或是 Sales 在 $500 及 $275 之間的資料的話, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 San Francisco $300 Jan08