SQL語言快速入門(一) SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。 SQL語言的主要功能就是同各種數據庫建立聯系,進行溝通。按照ANSI(美國國家標准協會)的規定,SQL被作為關系型數據庫管理系統的標准語言。SQL語句可以用來執行各種各樣的操作,例如更新數據庫中的數據,從數據庫中提取數據等。目前,絕大多數流行的關系型數據庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語言標准。雖然很多數據庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create, 及Drop在內的標准的SQL命令仍然可以被用來完成幾乎所有的數據庫操作。下面,我們就來詳細介紹一下SQL語言的基本知識。 數據庫表格 一個典型的關系型數據庫通常由一個或多個被稱作表格的對象組成。數據庫 中的所有數據或信息都被保存在這些數據庫表格中。數據庫中的每一個表格都具有 自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數據類型 ,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數據。以下,是一個 名為天氣的數據庫表格的實例。 城市 最高氣溫 最低氣溫 北京 10 5 上海 15 8 天津 8 2 重慶 20 13 該表格中“城市”,“最高氣溫”和“最低氣溫”就是三個不同的列 ,而表格中的每一行則包含了具體的表格數據。 數據查詢 在眾多的SQL命令中,select語句應該算是使用最頻繁的。Select語句主要被用來對數據庫進行查詢並返回符合用戶查詢標准的結果數據。Select語句的語法格式如下: select column1 [, column2,etc] from tablename [where condition]; ([] 表示可選項) Select語句中位於Select關鍵詞之后的列名用來決定那些列將作為查詢結果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“*”來設定返回表格中的所有列。 Select語句中位於from關鍵詞之后的表格名稱用來決定將要進行查詢操作的目 標表格。 Select語句中的where可選從句用來規定哪些數據值或哪些行將被作為查詢結果返回或顯示。在where條件從句中可以使用以下一些運算符來設定查詢標准: = 等於 > 大於 < 小於 >= 大於等於 <= 小於等於 <> 不等於 除了上面所提到的運算符外,LIKE運算符在where條件從句中也非常重要。 LIKE運算符的功能非常強大,通過使用LIKE運算符可以設定只選擇與用戶規定格式相同的記錄。此外,我們還可以使用通配符“%”用來代替任何字符串。舉例如下: Select firstname, lastname, city from employee where firstname LIKE ‘E%’; (注意,字符串必須被包含在單括號內) 上述SQL語句將會查詢所有名稱以E開頭的姓名。或者,通過如下語句: Select * from employee where firstname = ‘May’; 查詢所有名稱為May的行。 SQL語言快速入門(二) 創建表格 SQL語言中的create table語句被用來建立新的數據庫表格。Create table 語句的使用格式如下: create table tablename (column1 data type, column2 data type, column3 data type); 如果用戶希望在建立新表格時規定列的限制條件,可以使用可選的條件 選項: create table tablename (column1 data type [constraint], column2 data type [constraint], column3 data type [constraint]); 舉例如下: create table employee (firstname varchar(15), lastname varchar(20), age number(3), address varchar(30), city varchar(20)); 簡單來說,創建新表格時,在關鍵詞create table后面加入所要建立的表格 的名稱,然后在括號內順次設定各列的名稱,數據類型,以及可選的限制條件 等。注意,所有的SQL語句在結尾處都要使用“;”符號。 使用SQL語句創建的數據庫表格和表格中列的名稱必須以字母開頭,后面 可以使用字母,數字或下划線,名稱的長度不能超過30個字符。注意,用戶在 稱時不要使用SQL語言中的保留關鍵詞,如select, create, insert等,作為表格或 列的名稱。 數據類型用來設定某一個具體列中數據的類型。例如,在姓名列中只能采 用的數據類型,而不能使用number的數據類型。 SQL語言中較為常用的數據類型為: char(size):固定長度字符串,其中括號中的size用來設定字符串的最大 度。Char類型的最大長度為255字節。 varchar(size):可變長度字符串,最大長度由size設定。 number(size):數字類型,其中數字的最大位數由size設定。 Date:日期類型。 number(size,d):數字類型,size決定該數字總的最大位數,而d則用於 設定該數字在小數點后的位數。 最后,在創建新表格時需要注意的一點就是表格中列的限制條件。所謂限 制條件就是當向特定列輸入數據時所必須遵守的規則。 例如,unique這一限制條件要求某一列中不能存在兩個值相同的記錄,所有 記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件 還包括not, null和primary key等。Not null用來規定表格中某一列的值 不能為空.Primary key則為表格中的所有記錄規定了唯一的標識符。 向表格中插入數據 SQL語言使用insert語句向數據庫表格中插入或添加新的數據行。Insert語 句的使用格式如下: insert into tablename (first_column,...last_column) values (first_value,...last_value); 例如: insert into employee (firstname, lastname, age, address, city) values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”); 簡單來說,當向數據庫表格中添加新記錄時,在關鍵詞insert into后面輸 入所要添加的表格名稱,然后在括號中列出將要添加新值的列的名稱。最后 ,在關鍵詞values的后面按照前面輸入的列的順序對應的輸入所有要添加的 記錄值。 更新記錄 SQL語言使用update語句更新或修改滿足規定條件的現有記錄。 Update語句的格式為: update tablename set columnname = newvalue [, nextcolumn = newvalue2...] where columnname OPERATOR value [and|or column OPERATOR value]; 例如: update employee set age = age+1 where first_name= ‘Mary’and last_name= ‘Williams’; 使用update語句時,關鍵一點就是要設定好用於進行判斷的where條件 從句。 刪除記錄 SQL語言使用delete語句刪除數據庫表格中的行或記錄。Delete語句的 格式為: delete from tablename where columnname OPERATOR value [and|or column OPERATOR value]; 例如: delete from employee where lastname = May; 簡單來說,當需要刪除某一行或某個記錄時,在delete from關鍵詞之 后輸入表格名稱,然后在where從句中設定刪除記錄的判斷條件。注意, 如果用戶在使用delete語句時不設定where從句,則表格中的所有記錄將 全部被刪除。 刪除數據庫表格 在SQL語言中使用drop table命令刪除某個表格以及該表格中的所有記 錄。Drop table命令的使用格式為: drop table tablename; 例如: drop table employee; 如果用戶希望將某個數據庫表格完全刪除,只需要在drop table命令后 輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有 記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列 的信息不會改變。而使用drop table命令則會將整個數據庫表格的所有信息 全部刪除。 以上,我們對SQL語言主要的命令和語句進行了較為詳細的介紹。應該說SQL語句的語法結構和風格還是相當簡單和直觀的,只要用戶結合實踐多加練習,一定會在短期內迅速掌握。 SQL語言快速入門(三) 我們日常使用SQL語言的工作過程中,使用最多的還是從已經建立好的數據庫中查詢信息。下面,我們就來詳細介紹一下如何使用SQL語言實現各種數據庫查詢操作。 SELECT…FROM 為方便講解,我們在數據庫中創建名為Store_Information的如下數據表。 Store_Information Store_Name Sales Date Los Angeles 00 Jan-10-2000 San Diego 0 Jan-11-2000 Los Angeles 0 Jan-12-2000 Boston 0 Jan-12-2000 SQL語言中用於數據庫查詢的最簡單的命令就是SELECT…FROM,語法格 式為: SELECT \"column_name\" FROM \"table_name\" 例如,如果我們希望查詢Store_Information數據表中所有的商店名稱時,可 以使用如下命令: SELECT store_name FROM Store_Information 查詢結果顯示為: Store_Name Los Angeles San Diego Los Angeles Boston 如果用戶希望一次查詢多個字段,可以將所要查詢的字段名稱依次加入 SELECT關鍵字之后,中間用“,”隔開即可。 DISTINCT SELECT關鍵字支持用戶查詢數據表中指定字段的所有數據,但是這樣有時 就會不可避免的出現重復信息。如果用戶希望只查詢那些具有不同記錄值的信 息的話,可以使用SQL語言的DISTINCT關鍵字。語法格式如下: SELECT DISTINCT \"column_name\" FROM \"table_name\" 例如,我們可以使用以下命令查詢Store_Information數據表具有不同記錄值 的所有記錄。 SELECT DISTINCT Store_Name FROM Store_Information 查詢結果如下: Store_Name Los Angeles San Diego Boston WHERE 除了選擇具有不同記錄值的記錄之外,有時我們可能還會需要根據某些條 件對數據庫中的數據進行查詢。例如,我們可能需要查詢Store_Information數 據表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE 關鍵字設定查詢條件。語法格式如下: SELECT \"column_name\" FROM \"table_name\" WHERE \"condition\" 由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息: SELECT store_name FROM Store_Information WHERE Sales > 1000 查詢結果顯示為: store_name Los Angeles 運算函數 現在,我們已經了解到在使用SQL語言進行數據庫查詢操作時可以通過對 數值的判斷設定靈活的查詢條件。為了增強對運算的支持能力,SQL提供了眾 多實用的運算函數供廣大用戶使用。例如,我們可以直接在SQL命令中調用 SUM或AVG這兩個分別用於計算總數和平均數的函數。語法格式如下: SELECT \"function type\"(\"column_name\") FROM \"table_name\" 如果我們希望查詢Store_Information數據表中所有商店的總銷售額的話,可 以使用如下命令: SELECT SUM(Sales) FROM Store_Information 查詢結果顯示為: SUM(Sales) 50 COUNT 除了SUM和AVG函數之外,COUNT函數是SQL語言中另一個較為常用 的運算函數。COUNT函數可以用來計算數據表中指定字段所包含的記錄數目。 語法格式為: SELECT COUNT(\"column_name\") FROM \"table_name\" 例如,如果我們希望查詢Store_Information數據表中的有關商店的記錄條數 時,可以使用如下命令: SELECT COUNT(store_name) FROM Store_Information 查詢結果顯示為: Count(store_name) 4 COUNT函數可以和DISTINCT關鍵字一起使用從而可以查詢數據表中指定 字段中所有具有不同記錄值的記錄數目.例如,如果我們希望查詢Store_Information 數據表中不同商店的數目時,可以使用如下命令: SELECT COUNT(DISTINCT store_name) FROM Store_Information 查詢結果顯示為: Count(DISTINCT store_name) 3 GROUP BY 下面我們來進一步看一下SQL語言中的集合函數。上文中,我們曾使用 SUM函數計算所有商店的銷售總額,如果我們希望計算每一家商店各自的總銷 售額時該怎么辦呢?要實現這一目的我們需要做兩件事:首先,我們需要查詢 商店名稱和銷售額兩個字段;然后,我們使用SQL語言的GROUP BY命令將 銷售額按照不同的商店進行分組,從而計算出不同商店的銷售總額。GROUP BY命令的語法格式為: SELECT \"column_name1\", SUM(\"column_name2\") FROM \"table_name\" GROUP BY \"column_name1\" 我們可以使用如下命令實現上述查詢目的: SELECT store_name, SUM(Sales) FROM Store_Information GROUP BY store_name 查詢結果顯示為: store_name SUM(Sales) Los Angeles 00 San Diego 0 Boston 0 小注: GROUP BY關鍵字一般應用於同時查詢多個字段並對字段進行算術運 算的SQL命令中。 HAVING 用戶在使用SQL語言的過程中可能希望解決的另一個問題就是對由sum或 其它集合函數運算結果的輸出進行限制。例如,我們可能只希望看到Store_ Information數據表中銷售總額超過1500美圓的商店的信息,這時我們就需要使 用HAVING從句。語法格式為: SELECT \"column_name1\", SUM(\"column_name2\") FROM \"table_name\" GROUP BY \"column_name1\" HAVING (arithematic function condition) (GROUP BY從句可選) 由此,我們可以使用如下命令實現上述查詢目的: SELECT store_name, SUM(sales) FROM Store_Information GROUP BY store_name HAVING SUM(sales) > 1500 查詢結果顯示為: store_name SUM(Sales) Los Angeles 00 小注: SQL語言中設定集合函數的查詢條件時使用HAVING從句而不是 WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結尾處。 ALIAS 下面,我們重點介紹一下如何在SQL命令中設定別名。SQL語言中一般使 用兩種類型的別名,分別為字段別名和數據表別名。簡單的說,使用字段別名 可以幫助我們有效的組織查詢的輸出結果。例如,上文所列舉的多個實例中, 當我們計算商店銷售總額時,顯示結果中就會出現SUM(sales)。雖然SUM(sales) 並不會對我們理解查詢結果帶來不便,但是如果我們需要在查詢中使用多項復 雜運算時,顯示結果就不會這么直觀了。如果這時我們使用字段別名就會極大 的提高查詢結果的可讀性。 對於數據表別名,我們可以通過將別名直接放置在FROM從句中數據表名 稱的后面設定。數據表別名在我們下面將要講述的連接多個數據表進行查詢的 操作中極為有用。 字段和數據表別名的語法格式如下: SELECT \"table_alias\".\"column_name1\" \"column_alias\" FROM \"table_name\" \"table_alias\" 即別名都直接放置在各自對應名稱的后面,中間用空格分開。 以Store_Information數據表為例,我們可以在GROUP BY一節中所使用的 SQL命令中設置如下字段和數據表別名: SELECT A1.store_name \ "Store\", SUM(Sales) \"Total Sales\" FROM Store_Information A1 GROUP BY A1.store_name 查詢結果顯示為: Store Total Sales Los Angeles 00 San Diego 0 Boston 0 連接多個數據表 最后,我們來看一下如果使用SQL語言連接多個數據表,實現對多個數據 表的查詢。為方便講解,我們在數據庫中分別創建了兩個名為Store_Information 和Region的數據表。 Store_Information Store_Name Sales Date Los Angeles 00 Jan-10-2000 San Diego 0 Jan-11-2000 Los Angeles 0 Jan-12-2000 Boston 0 Jan-12-2000 Region Region_Name Store_Name East Boston East New York West Los Angeles West San Diego 下面,我們就來看一下通過數據表的連接實現按不同區域查詢銷售額。 我們注意到在名為Region的數據表中包含區域和商店兩個字段信息,而在名為 Store_Information的數據表中則包含每一家商店的銷售信息。因此,為了得到按 區域划分的銷售信息,我們需要將兩個不同數據表的信息結合在一起進行查詢. 通過對上述兩個數據表的分析,我們發現每個數據表中都包含一個名為 Store_Name的字段,因此,我們可以使用如下命令實現查詢目的: SELECT A1.region_name REGION, SUM(A2.Sales) SALES FROM Region A1, Store_Information A2 WHERE A1.store_name = A2.store_name GROUP BY A1.region_name 查詢結果顯示為: REGION SALES East 0 West 50 說明: 上述查詢命令的前兩行用於指定所要查詢的目標字段,分別為Region數據 表中的Region_Name字段和Store_Information數據表中Sales字段的記錄值總 數。這里,我們設定兩個字段的別名分別為REGION和SALES,兩個數據表的 別名分別為A1和A2。如果我們只使用字段別名而不設定數據表別名的話,上 述SQL命令的第一行就變成如下形式: SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES 由此我們可以看出有效的使用數據表別名,可以極大的簡化對多個數據表 進行操作的SQL命令。 上述查詢命令的第3行為WHERE從句,正是該從句設定了兩個數據表的 連接條件。因為我們希望確保Region數據表中的Store_Name字段能夠與 Store_Information數據表中的同名字段相對應,所以我們規定兩個字段的記錄 值應當相等。在連接多個數據表時,一定要准確設定數據表的連接條件,如果 WHERE從句設定不正確,則可能導致查詢結果中出現眾多不相關的數據 .