【正文】
0 Jan081999我們就鍵入,SELECT store_name FROM Store_Information WHERE Sales 1000 OR (Sales 500 AND Sales 275) 結(jié)果: store_name Los Angeles San Francisco IN在 SQL 中,在兩個(gè)情況下會(huì)用到 IN 這個(gè)指令;這一頁(yè)將介紹其中之一:與 WHERE 有關(guān)的那一個(gè)情況。值一39。A39。舉例來(lái)說(shuō),39。%AN%39。在這種情況下,我們就可以運(yùn)用 ORDER BY 這個(gè)指令來(lái)達(dá)到我們的目的。 COUNT在上一頁(yè)有提到, COUNT 是函數(shù)之一。HAVING 的語(yǔ)法如下: SELECT 欄位1, SUM(欄位2) FROM 表格名 GROUP BY 欄位1 HAVING (函數(shù)條件) 請(qǐng)讀者注意: 如果被 SELECT 的只有函數(shù)欄, 那就不需要 GROUP BY 子句。在第二個(gè)欄位上,原本我們的標(biāo)題是 Sum(Sales),而現(xiàn)在我們有一個(gè)很清楚的 Total Sales。這個(gè) WHERE 子句是一個(gè)連接的靈魂人物,因?yàn)樗慕巧谴_定兩個(gè)表格之間的連接是正確的。New York39。 結(jié)果: 39。 例2: SELECT SUBSTR(store_name,2,4) FROM Geography WHERE store_name = 39。 例 2: SELECT LTRIM(39。舉例來(lái)說(shuō),如果我們有一個(gè)記載顧客資料的表格,那欄位就有可能包括姓、名、地址、城市、國(guó)家、生日???等等。如果我們不允許一個(gè)欄位含有 NULL 值,我們就需要對(duì)那個(gè)欄位做出 NOT NULL 的指定。主鍵可以包含一或多個(gè)欄位。這樣一來(lái),我們就可以確定所有在 ORDERS 表格中的顧客都存在 CUSTOMER 表格中。假設(shè)有以下的兩個(gè)表格: Store_Information 表格 store_nameSalesDateLos Angeles$1500Jan051999San Diego$250Jan071999Los Angeles$300Jan081999Boston$700Jan081999Geography 表格 region_namestore_nameEastBostonEastNew YorkWestLos AngelesWestSan Diego我們就可以用以下的指令來(lái)建一個(gè)包括每個(gè)地區(qū) (region) 銷售額 (sales) 的視觀表: CREATE VIEW V_REGION_SALESAS SELECT REGION, SUM() SALESFROM Geography A1, Store_Information A2WHERE = GROUP BY 這就給我們有一個(gè)名為 V_REGION_SALES 的視觀表。通常會(huì)用的方式是在名稱前加一個(gè)字首,例如 IDX_ ,來(lái)避免與數(shù)據(jù)庫(kù)中的其他物件混淆。要達(dá)到者個(gè)目的,一種方式是我們?cè)?上一頁(yè)看到 的 DROP TABLE 指令。跟上面剛的例子不同的是,現(xiàn)在我們要用 SELECT 指令來(lái)指明要輸入表格的資料。這可以藉由 DELETE FROM 指令來(lái)達(dá)成。 INTERSECT 的語(yǔ)法如下: [SQL 語(yǔ)句 1]INTERSECT[SQL 語(yǔ)句 2] 假設(shè)我們有以下的兩個(gè)表格, 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)絡(luò)交易。同樣假設(shè)我們有以下兩個(gè)表格, 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íng)業(yè)額以及網(wǎng)絡(luò)營(yíng)業(yè)額的日子。假設(shè)我們有以下的表格: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999我們發(fā)現(xiàn)說(shuō) Los Angeles 在 01/08/1999 的營(yíng)業(yè)額實(shí)際上是 $500,而不是表格中所儲(chǔ)存的 $300,因此我們用以下的 SQL 來(lái)修改那一筆資料: UPDATE Store_InformationSET Sales = 500WHERE store_name = Los Angeles AND Date = Jan081999 現(xiàn)在表格的內(nèi)容變成: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $500 Jan081999 Boston $700 Jan081999 在這個(gè)例子中,只有一筆資料符合 WHERE 子句中的條件。Los Angeles39。這可以用以下的指令達(dá)成: ALTER table customer drop Gender 這個(gè)指令執(zhí)行后的表格架構(gòu)是: customer 表格 欄位名稱資料種類First_Namechar(50)Last_Namechar(50)Addrchar(30)Citychar(50)Countrychar(25)Birth_DatedateDROP TABLE有時(shí)候我們會(huì)決定我們需要從數(shù)據(jù)庫(kù)中清除一個(gè)表格。這樣子速度就快多了。 建立一個(gè)視觀表的語(yǔ)法如下: CREATE VIEW VIEW_NAME AS SQL 語(yǔ)句SQL 語(yǔ)句 可以是任何一個(gè)我們?cè)谶@個(gè)教材中有提到的 SQL。換言之,只有被準(zhǔn)許的資料值才會(huì)被存入數(shù)據(jù)庫(kù)內(nèi)。 主鍵 and 外來(lái)鍵 將于下兩頁(yè)中討論。我們需要注意的一點(diǎn)是不同的數(shù)據(jù)庫(kù)有不同的資料種類,所以在對(duì)表格做出定義之前最好先參考一下數(shù)據(jù)庫(kù)本身的說(shuō)明。雖然許多數(shù)據(jù)庫(kù)工具可以讓您在不需用到 SQL 的情況下建立表格,不過(guò)由于表格是一個(gè)最基本的架構(gòu),我們決定包括 CREATE TABLE 的語(yǔ)法在這個(gè)網(wǎng)站中。 Sample 39。 假設(shè)我們有以下的表格: Geography 表格 region_namestore_nameEastBostonEastNew YorkWestLos AngelesWestSan Diego例1: SELECT SUBSTR(store_name, 3) FROM Geography WHERE store_name = 39。 例子2: Oracle: SELECT region_name || 39。這個(gè)店,因?yàn)樗⒉淮嬖谟?Store_Information 這個(gè)表格。在這里我們可以看到表格別名的功用:它能讓 SQL 句容易被了解,尤其是這個(gè) SQL 句含蓋好幾個(gè)不同的表格時(shí)。我們繼續(xù)使用 Store_Information 這個(gè)表格來(lái)做例子: Store_Information 表格store_name Sales Date Los Angeles $1500 Jan051999 San Diego $250 Jan071999 Los Angeles $300 Jan081999 Boston $700 Jan081999 我們用跟 SQL GROUP BY 那一頁(yè)一樣的例子。在這個(gè)情況下,我們不能使用 WHERE 的指令。SQL 有提供一些這一類的函數(shù)。不過(guò)我們尚未提到這些資料要如何排列。 和 39。ABC%39。相對(duì)來(lái)說(shuō),在運(yùn)用 IN 的時(shí)候,我們完全地知道我們需要的條件;在運(yùn)用 BETWEEN 的時(shí)候,我們則是列出一個(gè)范圍。, 39。一個(gè) SQL 語(yǔ)句中可以有無(wú)限多個(gè)簡(jiǎn)單條件的存在。在表格處理這一部分中,我們會(huì)提到如何使用 SQL 來(lái)設(shè)定表格。 ? 表格處理: SQL 如何被用來(lái)處理數(shù)據(jù)庫(kù)中的表格。在資料處理中,我們會(huì)經(jīng)常碰到需要找出表格內(nèi)的不同資料值的情況。在這個(gè)用法下,我們事先已知道至少一個(gè)我們需要的值,而我們將這些知道的值都放入 IN 這個(gè)子句。 AND 39。 起頭,另一個(gè)任何值的字原,且以 39。ABCD39。: 所有含有 39。 ORDER BY 的語(yǔ)法如下: SELECT 欄位名 FROM 表格名 [WHERE 條件]ORDER BY 欄位名 [ASC, DESC] [] 代表 WHERE 子句不是一定需要的。由于它的使用廣泛,我們?cè)谶@里特別提出來(lái)討論。 在我們 Store_Information 表格這個(gè)例子中, 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接下來(lái),我們討論 alias (別名) 在 SQL 上的用處。很明顯地, Total Sales 能夠比 Sum(Sales) 更精確地闡述這個(gè)欄位的含意。如果 WHERE 子句是錯(cuò)誤的,我們就極可能得到一個(gè)笛卡兒連接 (Cartesian join)。 并不存在于 Store_Information 表格,所以它的 SALES 欄位是 NULL. CONCATENATE有的時(shí)候,我們有需要將由不同欄位獲得的資料串連在一起。East Boston39。San Diego39。 Sample 39。當(dāng)我們對(duì)表格下定義時(shí),我們需要注明欄位的標(biāo)題,以及那個(gè)欄位的資料種類。 舉例來(lái)說(shuō),在以下的語(yǔ)句中, CREATE TABLE Customer (SID integer NOT NULL, Last_Name varchar (30) NOT NULL, First_Name varchar(30))。當(dāng)主鍵包含多個(gè)欄位時(shí),稱為組合鍵 (Composite Key)。換句話說(shuō),ORDERS表格之中,不能有任何顧客是不存在于 CUSTOMER 表格中的資料。這個(gè)視觀表包含不同地區(qū)的銷售哦。另外,在索引名之內(nèi)包括表格名及欄位名也是一個(gè)好的方式。不過(guò)這樣整個(gè)表格就消失,而無(wú)法再被用了。如果您想說(shuō),這是不是說(shuō)資料是從另一個(gè)表格來(lái)的,那您就想對(duì)了。它的語(yǔ)法是: DELETE FROM 表格名WHERE {條件} 以下我們用個(gè)實(shí)例說(shuō)明。要達(dá)到這個(gè)目的,我們用以下的 SQL 語(yǔ)句: SELECT Date FROM Store_InformationINTERSECTSELECT Date FROM Internet_Sales 結(jié)果: Date Jan071999 請(qǐng)注意,在 INTERSECT 指令下,不同的值只會(huì)被列出一次。 UNION ALL 的語(yǔ)法如下: [SQL 語(yǔ)句 1]UNION ALL[SQL 語(yǔ)句 2] 我們用和上一頁(yè)同樣的例子來(lái)顯示出 UNION ALL 和 UNION 的不同。這個(gè)指令的語(yǔ)法是: UPDATE 表格名SET 欄位1 = [新值]WHERE {條件} 最容易了解這個(gè)語(yǔ)法的方式是透過(guò)一個(gè)例子。我們就打入以下的 SQL 語(yǔ)句: