【正文】
條件是由二或多個簡單條件透過 AND 或是 OR 的連接而成。值一39。Los Angeles39。 這將選出欄位值包含在值一及值二之間的每一筆資料?;旧希?LIKE 能讓我們依據(jù)一個模式 (pattern) 來找出我們要的資料。 為結(jié)尾的字符串。 39。ABCABC39。WXYZ39。這個模式的字符串。結(jié)果: store_name Sales Date LOS ANGELES $1500 Jan051999 SAN FRANCISCO $300 Jan081999 SAN DIEGO $250 Jan071999 ORDER BY到目前為止,我們已學(xué)到如何藉由 SELECT 及 WHERE 這兩個指令將資料由表格中抓出。 ASC 代表結(jié)果會以由小往大的順序列出,而 DESC 代表結(jié)果會以由大往小的順序列出。在上面這個例子中,我們用以下這句 SQL 可以達到完全一樣的效果: SELECT store_name, Sales, Date FROM Store_Information ORDER BY 2 DESC 函數(shù)既然數(shù)據(jù)庫中有許多資料都是已數(shù)字的型態(tài)存在,一個很重要的用途就是要能夠?qū)@些數(shù)字做一些運算,例如將它們總合起來,或是找出它們的平均值。它的語法是: SELECT COUNT(欄位名) FROM 表格名 舉例來說,若我們要找出我們的范例表格中有幾筆 store_name 欄不是空白的資料時, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 我們就鍵入,SELECT COUNT(store_name) FROM Store_Information WHERE store_name is not NULL 結(jié)果: Count(store_name) 4 is not NULL 是 這個欄位不是空白 的意思。 HAVING那我們?nèi)绾螌瘮?shù)產(chǎn)生的值來設(shè)定條件呢?舉例來說,我們可能只需要知道哪些店的營業(yè)額有超過 $1,500。 簡單地來說,欄位別名的目的是為了讓 SQL 產(chǎn)生的結(jié)果易讀。 我們先來看一下欄位別名和表格別名的語法: SELECT 表格別名.欄位1 欄位別名 FROM 表格名 表格別名 基本上,這兩種別名都是放在它們要替代的物件后面,而它們中間由一個空白分開。 表格鏈接現(xiàn)在我們介紹連接(join)的概念。若我們沒有用表格別名的話,第一行就會變成 SELECT REGION, SUM() SALES 很明顯地,這就復(fù)雜多了。在這個例子中,笛卡兒連接會讓我們得到 4 x 4 = 16 行的結(jié)果。New York39。請注意,Oracle的CONCAT()只允許兩個參數(shù);換言之,一次只能將兩個字符串串連起來。EastBoston39。 39。 SUBSTR(str,pos,len): 由str中的第pos位置開始,選出接下去的len個字符。an D39。 例 1: SELECT TRIM(39。 結(jié)果: 39。產(chǎn)品數(shù)據(jù)insert into productinfo values(1,39。IBM39。Nokia411039。,to_date(39。microsoft39。,39。insert into orderdetail values(1,2,5)。(1)查詢采購ThinkPadR32產(chǎn)品的訂單明細:select * from orderdetail where productid = (select productid from productinfo where productname=39。)order by orderid(4)查詢hoperun客戶采購的ibm公司價格在13000以上的所有產(chǎn)品的總件數(shù):select sum(quantity) from orderdetail where orderid in(select orderid from orderinfo where customer=39。)and orderid in(select orderid from orderdetail where productid in(select productid from productinfo where panyname=39。在絕大部份的情況下,數(shù)據(jù)庫廠商不可能知道您需要如何儲存您的資料,所以通常您會需要自己在數(shù)據(jù)庫中建立表格。它可能是一個整數(shù) (例如 1),、一個實數(shù) (例如 )、一個字符串 (例如 39。 這個欄位的資料種類是 char(50)──代表這是一個 50 個字符的字符串)。 UNIQUE UNIQUE 限制是保證一個欄位中的所有資料都是有不一樣的值。 請注意,CHECK 限制目前尚未被執(zhí)行于 MySQL 數(shù)據(jù)庫上。 以下舉幾個在建置新表格時設(shè)定主鍵的方式: MySQL: CREATE TABLE Customer (SID integer, Last_Name varchar(30), First_Name varchar(30), PRIMARY KEY (SID))。外來鍵的目的是確定資料的參考完整性(referential integrity)。 以下列出幾個在建置 ORDERS 表格時指定外來鍵的方式: MySQL: CREATE TABLE ORDERS (Order_ID integer, Order_Date date, Customer_SID integer, Amount double, Primary Key (Order_ID), Foreign Key (Customer_SID) references CUSTOMER(SID))。它跟表格的不同是,表格中有實際儲存資料,而視觀表是建立在表格之上的一個架構(gòu),它本身并不實際儲存資料。舉例來說,假設(shè)我們要在一本園藝書中找如何種植青椒的訊息。若有適當(dāng)?shù)乃饕嬖?,?shù)據(jù)庫系統(tǒng)就可以先由這個索引去找出需要的資料是在表格的什么地方,然后直接去那些地方抓資料。因此,在下指令前,請先由數(shù)據(jù)庫使用手冊中確認正確的語法。這可以用以下的指令達成: ALTER table customer modify Addr char(30) 這個指令執(zhí)行后的表格架構(gòu)是: customer 表格 欄位名稱資料種類First_Namechar(50)Last_Namechar(50)Addrchar(30)Citychar(50)Countrychar(25)Birth_DatedateGenderchar(1)最后,我們要刪除 Gender 欄位。事實上,如果我們不能這樣做的話,那將會是一個很大的問題,因為數(shù)據(jù)庫管理師 (Database Administrator DBA) 勢必?zé)o法對數(shù)據(jù)庫做有效率的管理。常見的改變?nèi)缦拢?加一個欄位 刪去一個欄位 改變欄位名稱 改變欄位的資料種類 以上列出的改變并不是所有可能的改變。 因此,在表格上建立索引是一件有利于系統(tǒng)效率的事。若這本書有索引的話,我們就可以先去索引找出種植青椒的信息是在哪一頁,然后直接到那一頁去閱讀。來看一個例子。 SQL Server: CREATE TABLE ORDERS (Order_ID integer primary key, Order_Date datetime, Customer_SID integer references CUSTOMER(SID), Amount double)。 舉例來說,假設(shè)我們有兩個表格:一個 CUSTOMER 表格,里面記錄了所有顧客的資料;另一個 ORDERS 表格,里面記錄了所有顧客訂購的資料。 SQL Server: CREATE TABLE Customer (SID integer PRIMARY KEY, Last_Name varchar(30), First_Name varchar(30))。 主鍵主鍵 (Primary Key) 中的每一筆資料都是表格中的唯一值。 SID 欄位不能有重復(fù)值存在,而 Last_Name 及 First_Name 這兩個欄位則是允許有重復(fù)值存在。 CREATE TABLE 的語法是: CREATE TABLE 表格名(欄位 1 欄位 1 資料種類,欄位 2 欄位 2 資料種類,... ) 若我們要建立我們上面提過的顧客表格,我們就鍵入以下的 SQL: CREATE TABLE customer(First_Name char(50),Last_Name char(50),Address char(50),City char(50),Country char(25),Birth_Date date) CONSTRAINT我們可以限制哪一些資料可以存入表格中。)、一個日期/時間 (例如 39。 在我們跳入 CREATE TABLE 的語法之前,我們最好先對表格這個東西有些多一點的了解。)) 外連接? 插入一條新產(chǎn)品數(shù)據(jù): insert into productinfo values(5,39。) and productid in (select productid from productinfo where panyname=39。)(2)查詢采購IBM公司產(chǎn)品的訂單明細:select * from orderdetail where productid in (select productid from productinfo where panyname=39。insert into orderdetail values(2,1,30)。,to_date(39。2006010139。,39。Nokia39。insert into productinfo values(3,39。,39。 例 3: SELECT RTRIM(39。)。最常見的用途是移除字首或字尾的空白。Los Angeles39。Boston39。 39。||39。所以,在這個情況下,我們需要用外部連接來串聯(lián)這兩個表格: SELECT , SUM() SALES FROM Georgraphy A1, Store_Information A2 WHERE = (+) GROUP BY 我們在這里是使用了 Oracle 的外部連接語法。在這個情況下,要兩個表格內(nèi)都有同樣的值,那一筆資料才會被選出。 接下來我們看第三行,就是 WHERE 子句。我們先假設(shè)我們有以下的兩個表格, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 Geography 表格 region_name store_name East Boston East New York West Los Angeles West San Diego 而我們要知道每一區(qū) (region_name) 的營業(yè)額 (sales)。這里的不同處是我們加上了欄位別名以及表格別名: SELECT Store, SUM() Total Sales FROM Store_Information A1GROUP BY 結(jié)果: Store Total Sales Los Angeles $1800 San Diego $250 Boston $700 在結(jié)果中,資料本身沒有不同。雖然在這個情況下沒有什么問題,可是如果這個欄位不是一個簡單的總合,而是一個復(fù)雜的計算,那欄位名就沒有這么易懂了。那要怎么辦呢?很幸運地,SQL 有提供一個 HAVING 的指令,而我們就可以用這個指令來達到這個目標。舉例來說,如果我們要找出我們的表格中有多少個不同的 store_name,我們就鍵入, SELECT COUNT(DISTINCT store_name) FROM Store_Information 結(jié)果: Count(DISTINCT store_name) 3 GROUP BY我們現(xiàn)在回到函數(shù)上。它們是: AVG (平均) COUNT (計數(shù)) MAX (最大值) MIN (最小值) SUM (總合) 運用函數(shù)的語法是: SELECT 函數(shù)名(欄位名) FROM 表格名 舉例來說,若我們要由我們的范例表格中求出 Sales 欄位的總合, Store_Information 表格store_n