【正文】
表格。 DROP TABLE 的語法是: DROP TABLE 表格名 我們如果要清除在上一頁中建立的顧客表格,我們就鍵入: DROP TABLE customer. TRUNCATE TABLE 有時候我們會需要清除一個表格中的所有資料。要達到者個目的,一種方式是我們在 上一頁看到 的 DROP TABLE 指令。不過這樣整個表格就消失,而無法再被用了。另一種方式就是運用 TRUNCATE TABLE 的指令。在這個指令之下,表格中的資料會完全消失,可是表格本身會繼續(xù)存在。 TRUNCATE TABLE 的語法為下: TRUNCATE TABLE 表格名 所以,我們如果要清除在 SQL Create Table 那一頁建立的顧客表格之內的資料,我們就鍵入: TRUNCATE TABLE customer. INSERT INTO到目前為止,我們學到了將如何把資料由表格中取出。但是這些資料是如果進入這些表格的呢?這就是這一頁 (INSERT INTO) 和下一頁 (UPDATE) 要討論的。 基本上,我們有兩種作法可以將資料輸入表格中內。一種是一次輸入一筆,另一種是一次輸入好幾筆。我們先來看一次輸入一筆的方式。 依照慣例,我們先介紹語法。一次輸入一筆資料的語法如下: INSERT INTO 表格名 (欄位1, 欄位2, ...)VALUES (值1, 值2, ...) 假設我們有一個架構如下的表格: Store_Information 表格Column Name Data Type store_name char(50) Sales float Date datetime 而我們要加以下的這一筆資料進去這個表格:在 January 10, 1999,Los Angeles 店有 $900 的營業(yè)額。我們就打入以下的 SQL 語句: INSERT INTO Store_Information (store_name, Sales, Date)VALUES (39。Los Angeles39。, 900, 39。Jan10199939。) 第二種 INSERT INTO 能夠讓我們一次輸入多筆的資料。跟上面剛的例子不同的是,現(xiàn)在我們要用 SELECT 指令來指明要輸入表格的資料。如果您想說,這是不是說資料是從另一個表格來的,那您就想對了。一次輸入多筆的資料的語法是: INSERT INTO 表格1 (欄位1, 欄位2, ...)SELECT 欄位3, 欄位4, ...FROM 表格2 以上的語法是最基本的。這整句 SQL 也可以含有 WHERE、 GROUP BY、及 HAVING 等子句,以及表格連接及別名等等。 舉例來說,若我們想要將 1998 年的營業(yè)額資料放入 Store_Information 表格,而我們知道資料的來源是可以由 Sales_Information 表格取得的話,那我們就可以鍵入以下的 SQL: INSERT INTO Store_Information (store_name, Sales, Date)SELECT store_name, Sales, DateFROM Sales_InformationWHERE Year(Date) = 1998 在這里,我用了 SQL Server 中的函數(shù)來由日期中找出年。不同的數(shù)據(jù)庫會有不同的語法。舉個例來說,在 Oracle 上,您將會使用 WHERE to_char(date,39。yyyy39。)=1998。 UPDATE我們有時候可能會需要修改表格中的資料。在這個時候,我們就需要用到 UPDATE 指令。這個指令的語法是: UPDATE 表格名SET 欄位1 = [新值]WHERE {條件} 最容易了解這個語法的方式是透過一個例子。假設我們有以下的表格: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999我們發(fā)現(xiàn)說 Los Angeles 在 01/08/1999 的營業(yè)額實際上是 $500,而不是表格中所儲存的 $300,因此我們用以下的 SQL 來修改那一筆資料: UPDATE Store_InformationSET Sales = 500WHERE store_name = Los Angeles AND Date = Jan081999 現(xiàn)在表格的內容變成: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $500 Jan081999 Boston $700 Jan081999 在這個例子中,只有一筆資料符合 WHERE 子句中的條件。如果有多筆資料符合條件的話,每一筆符合條件的資料都會被修改的。 我們也可以同時修改好幾個欄位。這語法如下: UPDATE 表格SET 欄位1 = [值1], 欄位2 = [值2]WHERE {條件} DELETE FROM在某些情況下,我們會需要直接由數(shù)據(jù)庫中去除一些資料。這可以藉由 DELETE FROM 指令來達成。它的語法是: DELETE FROM 表格名WHERE {條件} 以下我們用個實例說明。假設我們有以下這個表格: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999而我們需要將有關 Los Angeles 的資料全部去除。在這里我們可以用以下的 SQL 來達到這個目的: DELETE FROM Store_InformationWHERE store_name = Los Angeles 現(xiàn)在表格的內容變成: Store_Information 表格store_name Sales Date San Diego $250 Jan071999 Boston $700 Jan081999進階SQL在這一部分,我們將介紹以下的 SQL 概念及關鍵字: 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 語句的結果合并起來。從這個角度來看, UNION 跟 JOIN 有些許類似,因為這兩個指令都可以由多個表格中擷取資料。 UNION 的一個限制是兩個 SQL 語句所產生的欄位需要是同樣的資料種類。另外,當我們用 UNION 這個指令時,我們只會看到不同的資料值 (類似 SELECT DISTINCT)。 UNION 的語法如下: [SQL 語句 1]UNION[SQL 語句 2] 假設我們有以下的兩個表格, Store_Information 表格 store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999Internet_Sales 表格 Date Sales Jan071999 $250 Jan101999 $535 Jan111999 $320 Jan121999 $750而我們要找出來所有有營業(yè)額 (sales) 的日子。要達到這個目的,我們用以下的 SQL 語句: SELECT Date FROM Store_InformationUNIONSELECT Date FROM Internet_Sales 結果: Date Jan051999 Jan071999 Jan081999 Jan101999 Jan111999 Jan121999 有一點值得注意的是,如果我們在任何一個 SQL 語句 (或是兩句都一起) 用 SELECT DISTINCT Date 的話,那我們會得到完全一樣的結果。 UNION ALLUNION ALL 這個指令的目的也是要將兩個 SQL 語句的結果合并在一起。 UNION ALL 和 UNION 不同之處在于 UNION ALL 會將每一筆符合條件的資料都列出來,無論資料值有無重復。 UNION ALL 的語法如下: [SQL 語句 1]UNION ALL[SQL 語句 2] 我們用和上一頁同樣的例子來顯示出 UNION ALL 和 UNION 的不同。同樣假設我們有以下兩個表格, Store_Information 表格 store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999Internet_Sales 表格 Date Sales Jan071999 $250 Jan101999 $535 Jan111999 $320 Jan121999 $750而我們要找出有店面營業(yè)額以及網(wǎng)絡營業(yè)額的日子。要達到這個目的,我們用以下的 SQL 語句: SELECT Date FROM Store_InformationUNION ALLSELECT Date FROM Internet_Sales 結果: Date Jan051999 Jan071999 Jan081999 Jan081999 Jan071999 Jan101999 Jan111999 Jan121999 INTERSECT 和 UNION 指令類似, INTERSECT 也是對兩個 SQL 語句所產生的結果做處理的。不同的地方是, UNION 基本上是一個 OR (如果這個值存在于第一句或是第二句,它就會被選出),而 INTERSECT 則比較像 AND (這個值要存在于第一句和第二句才會被選出)。 UNION 是聯(lián)集,而 INTERSECT 是交集。 INTERSECT 的語法如下: [SQL 語句 1]INTERSECT[SQL 語句 2] 假設我們有以下的兩個表格, Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999Internet_Sales 表格 Date Sales Jan071999 $250 Jan101999 $535 Jan111999 $320 Jan121999 $750而我們要找出哪幾天有店面交易和網(wǎng)絡交易。要達到這個目的,我們用以下的 SQL 語句: SELECT Date FROM Store_InformationINTERSECTSELECT Date FROM Internet_Sales 結果: Date Jan071999 請注意,在 INTERSECT 指令下,不同的值只會被列出一次。 MINUSMINUS 指令是運用在兩個 SQL 語句上。它先找出第一個 SQL 語句所產生的結果,然后看這些結果有沒有在第二個 SQL 語句的結果中。如果有的話,那這一筆資料就被去除,而不會在最后的結果中出現(xiàn)。如果第二個 SQL 語句所產生的結果并沒有存在于第一個 SQL 語句所產生的結果內,那這筆資料就被拋棄。 MINUS 的語法如下: [SQL 語句 1]