【正文】
消失,可是表格本身會繼續(xù)存在。我們就打入以下的 SQL 語句: INSERT INTO Store_Information (store_name, Sales, Date)VALUES (39。這整句 SQL 也可以含有 WHERE、 GROUP BY、及 HAVING 等子句,以及表格連接及別名等等。這個指令的語法是: UPDATE 表格名SET 欄位1 = [新值]WHERE {條件} 最容易了解這個語法的方式是透過一個例子。在這里我們可以用以下的 SQL 來達到這個目的: DELETE FROM Store_InformationWHERE store_name = Los Angeles 現(xiàn)在表格的內(nèi)容變成: Store_Information 表格store_name Sales Date San Diego $250 Jan071999 Boston $700 Jan081999進階SQL在這一部分,我們將介紹以下的 SQL 概念及關(guān)鍵字: SQL UNION SQL UNION ALL SQL INTERSECT SQL MINUS SQL Subquery SQL EXISTS SQL CASE 我們并介紹如何用 SQL 來做出以下的運算: 排名 (Rank) 中位數(shù) (Median) 累積總計 (Running Total) 總合百分比 (Percent to Total) 累積總合百分比 (Cumulative Percent to Total) UNIONUNION 指令的目的是將兩個 SQL 語句的結(jié)果合并起來。 UNION ALL 的語法如下: [SQL 語句 1]UNION ALL[SQL 語句 2] 我們用和上一頁同樣的例子來顯示出 UNION ALL 和 UNION 的不同。它先找出第一個 SQL 語句所產(chǎn)生的結(jié)果,然后看這些結(jié)果有沒有在第二個 SQL 語句的結(jié)果中。要達到這個目的,我們用以下的 SQL 語句: SELECT Date FROM Store_InformationINTERSECTSELECT Date FROM Internet_Sales 結(jié)果: Date Jan071999 請注意,在 INTERSECT 指令下,不同的值只會被列出一次。 UNION ALLUNION ALL 這個指令的目的也是要將兩個 SQL 語句的結(jié)果合并在一起。它的語法是: DELETE FROM 表格名WHERE {條件} 以下我們用個實例說明。 UPDATE我們有時候可能會需要修改表格中的資料。如果您想說,這是不是說資料是從另一個表格來的,那您就想對了。 依照慣例,我們先介紹語法。不過這樣整個表格就消失,而無法再被用了。這可以用以下的指令達成: ALTER table customer add Gender char(1) 這個指令執(zhí)行后的表格架構(gòu)是: customer 表格 欄位名稱資料種類First_Namechar(50)Last_Namechar(50)Addresschar(50)Citychar(50)Countrychar(25)Birth_DatedateGenderchar(1)接下來,我們要把 Address 欄位改名為 Addr。另外,在索引名之內(nèi)包括表格名及欄位名也是一個好的方式。table scan39。這個視觀表包含不同地區(qū)的銷售哦。 SQL Server: ALTER TABLE ORDERS ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(sid)。換句話說,ORDERS表格之中,不能有任何顧客是不存在于 CUSTOMER 表格中的資料。 請注意,在用ALTER TABLE語句來添加主鍵之前,我們需要確認被用來當做主鍵的欄位是設(shè)定為 『NOT NULL』 ;也就是說,那個欄位一定不能沒有資料。當主鍵包含多個欄位時,稱為組合鍵 (Composite Key)。 舉例來說,在以下的語句中, CREATE TABLE Customer (SID integer CHECK (SID 0), Last_Name varchar (30), First_Name varchar(30))。 舉例來說,在以下的語句中, CREATE TABLE Customer (SID integer NOT NULL, Last_Name varchar (30) NOT NULL, First_Name varchar(30))。 (例如 39。當我們對表格下定義時,我們需要注明欄位的標題,以及那個欄位的資料種類。 Sample39。 Sample 39。 LTRIM(字符串): 將所有字符串起頭的空白移除。San Diego39。這個函數(shù)的名稱在不同的數(shù)據(jù)庫中不完全一樣: MySQL: SUBSTR(), SUBSTRING() Oracle: SUBSTR() SQL Server: SUBSTRING() 最常用到的方式如下 (在這里我們用SUBSTR()為例): SUBSTR(str,pos): 由str中,選出所有從第pos位置開始的字符。East Boston39。Boston39。 并不存在于 Store_Information 表格,所以它的 SALES 欄位是 NULL. CONCATENATE有的時候,我們有需要將由不同欄位獲得的資料串連在一起。 假設(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 我們需要知道每一間店的營業(yè)額。如果 WHERE 子句是錯誤的,我們就極可能得到一個笛卡兒連接 (Cartesian join)。我們先將 SQL 句列出,之后再討論每一個子句的意義: SELECT REGION, SUM() SALES FROM Geography A1, Store_Information A2 WHERE = GROUP BY 結(jié)果: REGION SALES East $700 West $2050 在第一行中,我們告訴 SQL 去選出兩個欄位:第一個欄位是 Geography 表格中的 region_name 欄位 (我們?nèi)×艘粋€別名叫做 REGION);第二個欄位是 Store_Information 表格中的 sales 欄位 (別名為 SALES)。很明顯地, Total Sales 能夠比 Sum(Sales) 更精確地闡述這個欄位的含意。這在我們要用 SQL 由數(shù)個不同的表格中獲取資料時是很方便的。 在我們 Store_Information 表格這個例子中, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 若我們要找出 Sales 大于 $1,500 的 store_name,我們就鍵入,SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_nameHAVING SUM(sales) 1500 結(jié)果: store_name SUM(Sales) Los Angeles $1800 ALIAS接下來,我們討論 alias (別名) 在 SQL 上的用處。在這個情況下,我們需要確定我們有 GROUP BY 所有其他的欄位。由于它的使用廣泛,我們在這里特別提出來討論。除了欄位名外,我們也可以用欄位的順序 (依據(jù) SQL 句中的順序)。 ORDER BY 的語法如下: SELECT 欄位名 FROM 表格名 [WHERE 條件]ORDER BY 欄位名 [ASC, DESC] [] 代表 WHERE 子句不是一定需要的。 我們將以上最后一個例子用在我們的 Store_Information 表格上: Store_Information 表格store_name Sales Date LOS ANGELES $1500 Jan051999 SAN DIEGO $250 Jan071999 SAN FRANCISCO $300 Jan081999 BOSTON $700 Jan081999 我們就鍵入,SELECT * FROM Store_Information WHERE store_name LIKE 39。: 所有含有 39。 結(jié)尾的字符串。ABCD39。AKKZ39。 起頭,另一個任何值的字原,且以 39。在這里我們選擇了其中一種儲存法。 AND 39。值一39。在這個用法下,我們事先已知道至少一個我們需要的值,而我們將這些知道的值都放入 IN 這個子句。這個指令的語法如下:SELECT 欄位名 FROM 表格名 WHERE 條件 若我們要由以下的表格抓出營業(yè)額超過 $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在上一頁中,我們看到 WHERE 指令可以被用來由表格中有條件地選取資料。在資料處理中,我們會經(jīng)常碰到需要找出表格內(nèi)的不同資料值的情況。 SQL指令SELECT是用來做什么的呢?一個最常用的方式是將資料從數(shù)據(jù)庫中的表格內(nèi)選出。 ? 表格處理: SQL 如何被用來處理數(shù)據(jù)庫中的表格。 對于每一個指令,我們將會先列出及解釋這個指令的語法,然后用一個例子來讓讀者了解這個指令是如何被運用的。在表格處理這一部分中,我們會提到如何使用 SQL 來設(shè)定表格。我們只要在 SELECT 后加上一個 DISTINCT 就可以了。一個 SQL 語句中可以有無限多個簡單條件的存在。, 39。, 39。 舉例來說,若我們要由 Store_Information 表格中找出所有介于 January 6, 1999 及 January 10, 1999 中的資料, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 San Francisco $300 Jan081999 Boston $700 Jan081999 我們就鍵入,SELECT * FROM Store_Information WHERE Date BETWEEN 39。相對來說,在運用 IN 的時候,我們完全地知道我們需要的條件;在運用 BETWEEN 的時候,我們則是列出一個范圍。 39。ABC%39。 都符合這個模式。 和 39。舉例來說, 39。不過我們尚未提到這些資料要如何排列。如果兩者皆沒有被寫出的話,那我們就會用 ASC。SQL 有提供一些這一類的函數(shù)。 COUNT 和 DISTINCT 經(jīng)常被合起來使用,目的是找出表格中有多少筆不同的資料 (至于這些資料實際上是什么并不重要)。在這個情況下,我們不能使用 WHERE 的指令。在之前的例子中,每當我們有營業(yè)額總合時,欄位名都是 SUM(sales)。我們繼續(xù)使用 Store_Information 這個表格來做例子: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan