SQL非常全面的入門教程.doc
《SQL非常全面的入門教程.doc》由會員分享,可在線閱讀,更多相關《SQL非常全面的入門教程.doc(83頁珍藏版)》請在裝配圖網上搜索。
1、SQL語言快速入門 入門教程 2 SQL語言快速入門之一 2 SQL語言快速入門之二 3 SQL語言快速入門之三 6 基礎教程 11 SQL數據操作基礎(初級)1 11 SQL數據操作基礎(初級)2 14 SQL數據操作基礎(初級)3 17 SQL數據操作基礎(初級)4 20 SQL數據操作基礎(初級)5 25 SQL數據操作基礎(中級) 27 SQL數據操作基礎(中級)1 27 SQL數據操作基礎(中級)2 29 SQL數據操作基礎(中級)3 32 SQL數據操作基礎(中級)4 36 SQL數據操作基礎(中級)5 39 全面接觸SQL 45 全面接
2、觸SQL語法(1) 45 全面接觸SQL語法(2) 46 全面接觸SQL語法(3) 48 全面接觸SQL語法(4) 49 全面接觸SQL語法(5) 51 全面接觸SQL語法(6) 54 全面接觸SQL語法(7) 55 SQL語法詳解 59 主要SQL語句詳解(1) 59 主要SQL語句詳解(2) 63 SQL語法參考手冊 67 SQL實踐 71 SQL實踐(1) 71 SQL實踐(2) 75 Sql連接查詢 80 入門教程 SQL語言快速入門之一 SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言
3、的主要功能就是同各種數據庫建立聯(lián)系,進行溝通。按照ANSI(美國國家標準協(xié)會)的規(guī)定,SQL被作為關系型數據庫管理系統(tǒng)的標準語言。SQL語句可以用來執(zhí)行各種各樣的操作,例如更新數據庫中的數據,從數據庫中提取數據等。目前,絕大多數流行的關系型數據庫管理系統(tǒng),如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語言標準。雖然很多數據庫都對SQL語句進行了再開發(fā)和擴展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的數據庫操作。下面,我們就來詳細介
4、紹一下SQL語言的基本知識。 數據庫表格 一個典型的關系型數據庫通常由一個或多個被稱作表格的對象組成。數據庫中的所有數據或信息都被保存在這些數據庫表格中。數據庫中的每一個表格都具有自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數據類型,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數據。以下,是一個名為天氣的數據庫表格的實例。 城市 最高氣溫 最低氣溫 北京 10 5 上海 15 8 天津 8 2 重慶 20 13 該表格中“城市”, “最高氣溫”和“最低氣溫”就是三個不同的列,而表格中的每一行則包含了具體的表格數據。
5、 數據查詢 在眾多的SQL命令中,select語句應該算是使用最頻繁的。Select語句主要被用來對數據庫進行查詢并返回符合用戶查詢標準的結果數據。Select語句的語法格式如下: select column1 [, column2,etc] from tablename [where condition]; ([]表示可選項) select語句中位于select關鍵詞之后的列名用來決定那些列將作為查詢結果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“*”來設定返回表格中的所有列。 select語句中位于from關鍵詞之后的表格名稱用來決定將要進行查詢操作的目標表格。
6、 Select語句中的where可選從句用來規(guī)定哪些數據值或哪些行將被作為查詢結果返回或顯示。 在where條件從句中可以使用以下一些運算符來設定查詢標準: =等于 >大于 <小于 >=大于等于 <=小于等于 <>不等于 除了上面所提到的運算符外,LIKE運算符在where條件從句中也非常重要。LIKE運算符的功能非常強大,通過使用LIKE運算符可以設定只選擇與用戶規(guī)定格式相同的記錄。此外,我們還可以使用通配符“%”用來代替任何字符串。舉例如下: select firstname, lastname, city from employee where firstname
7、LIKE ‘E%’; (注意,字符串必須被包含在單括號內) 上述SQL語句將會查詢所有名稱以E開頭的姓名。或者,通過如下語句: select * from employee where firstname = ‘May’; 查詢所有名稱為May的行。 SQL語言快速入門之二 創(chuàng)建表格 SQL語言中的create table語句被用來建立新的數據庫表格。Create table語句的使用格式如下: create table tablename (column1 data type, column2 data type, column3 data type); 如果用戶希
8、望在建立新表格時規(guī)定列的限制條件,可以使用可選的條件選項: 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)); 簡單來說,創(chuàng)建新
9、表格時,在關鍵詞create table后面加入所要建立的表格的名稱,然后在括號內順次設定各列的名稱,數據類型,以及可選的限制條件等。注意,所有的SQL語句在結尾處都要使用“;”符號。 使用SQL語句創(chuàng)建的數據庫表格和表格中列的名稱必須以字母開頭,后面可以使用字母,數字或下劃線,名稱的長度不能超過30個字符。注意,用戶在選擇表格名稱時不要使用SQL語言中的保留關鍵詞,如select, create, insert等,作為表格或列的名稱。 數據類型用來設定某一個具體列中數據的類型。例如,在姓名列中只能采用varchar或char的數據類型,而不能使用number的數據類型。 SQL語言中較
10、為常用的數據類型為: char(size):固定長度字符串,其中括號中的size用來設定字符串的最大長度。Char類型的最大長度為255字節(jié)。 varchar(size):可變長度字符串,最大長度由size設定。 number(size):數字類型,其中數字的最大位數由size設定。 Date:日期類型。 number(size,d):數字類型,size決定該數字總的最大位數,而d則用于設定該數字在小數點后的位數。 最后,在創(chuàng)建新表格時需要注意的一點就是表格中列的限制條件。所謂限制條件就是當向特定列輸入數據時所必須遵守的規(guī)則。例如,unique這一限制條件要求某一列中不能存在兩個值
11、相同的記錄,所有記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件還包括not null和primary key等。Not null用來規(guī)定表格中某一列的值不能為空。Primary key則為表格中的所有記錄規(guī)定了唯一的標識符。 向表格中插入數據 SQL語言使用insert語句向數據庫表格中插入或添加新的數據行。Insert語句的使用格式如下: insert into tablename (first_column,...last_column) values (first_value,...last_value); 例如: insert into employe
12、e (firstname, lastname, age, address, city) values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”); 簡單來說,當向數據庫表格中添加新記錄時,在關鍵詞insert into后面輸入所要添加的表格名稱,然后在括號中列出將要添加新值的列的名稱。最后,在關鍵詞values的后面按照前面輸入的列的順序對應的輸入所有要添加的記錄值。 更新記錄 SQL語言使用update語句更新或修改滿足規(guī)定條件的現有記錄。Update語句的格式為: update tablename set colum
13、nname = 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語句的格式為: delet
14、e 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
15、 table命令的使用格式為: drop table tablename; 例如: drop table employee; 如果用戶希望將某個數據庫表格完全刪除,只需要在drop table命令后輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會改變。而使用drop table命令則會將整個數據庫表格的所有信息全部刪除。 以上,我們對SQL語言主要的命令和語句進行了較為詳細的介紹。應該說SQL語句的語法結構和風格還是相當簡單和直觀的,只要用戶結合實踐多加練習,一定會在短期內迅速掌握。
16、 SQL語言快速入門之三 我們日常使用SQL語言的工作過程中,使用最多的還是從已經建立好的數據庫中查詢信息。下面,我們就來詳細介紹一下如何使用SQL語言實現各種數據庫查詢操作。 SELECT…FROM 為方便講解,我們在數據庫中創(chuàng)建名為Store_Information的如下數據表。 Store_Information Store_Name Sales Date Los Angeles $1500 Jan-10-2000 San Diego $250 Jan-11-2000 Los Angeles $300 Jan-12-2000 Boston $700
17、 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關鍵字之后,
18、中間用“,”隔開即可。 DISTINCT SELECT關鍵字支持用戶查詢數據表中指定字段的所有數據,但是這樣有時就會不可避免的出現重復信息。如果用戶希望只查詢那些具有不同記錄值的信息的話,可以使用SQL語言的DISTINCT關鍵字。語法格式如下: SELECT DISTINCT "column_name" FROM "table_name" 例如,我們可以使用以下命令查詢Store_Information數據表具有不同記錄值的所有記錄。 SELECT DISTINCT Store_Name FROM Store_Information 查詢結果如下: Store_Name L
19、os Angeles San Diego Boston WHERE 除了選擇具有不同記錄值的記錄之外,有時我們可能還會需要根據某些條件對數據庫中的數據進行查詢。例如,我們可能需要查詢Store_Information數據表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE關鍵字設定查詢條件。語法格式如下: SELECT "column_name" FROM "table_name" WHERE "condition" 由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息: SELECT store_name FROM Store_Informa
20、tion WHERE Sales > 1000 查詢結果顯示為: store_name Los Angeles 運算函數 現在,我們已經了解到在使用SQL語言進行數據庫查詢操作時可以通過對數值的判斷設定靈活的查詢條件。為了增強對運算的支持能力,SQL提供了眾多實用的運算函數供廣大用戶使用。例如,我們可以直接在SQL命令中調用SUM或AVG這兩個分別用于計算總數和平均數的函數。語法格式如下: SELECT "function type"("column_name") FROM "table_name" 如果我們希望查詢Store_Information數據表中所有商店的總銷售額的
21、話,可以使用如下命令: SELECT SUM(Sales) FROM Store_Information 查詢結果顯示為: SUM(Sales) $2750 COUNT 除了SUM和AVG函數之外,COUNT函數是SQL語言中另一個較為常用的運算函數。COUNT函數可以用來計算數據表中指定字段所包含的記錄數目。語法格式為: SELECT COUNT("column_name") FROM "table_name" 例如,如果我們希望查詢Store_Information數據表中的有關商店的記錄條數時,可以使用如下命令: SELECT COUNT(store_name) F
22、ROM 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語言中的集合函數。上文中,我
23、們曾使用SUM函數計算所有商店的銷售總額,如果我們希望計算每一家商店各自的總銷售額時該怎么辦呢?要實現這一目的我們需要做兩件事:首先,我們需要查詢商店名稱和銷售額兩個字段;然后,我們使用SQL語言的GROUP BY命令將銷售額按照不同的商店進行分組,從而計算出不同商店的銷售總額。GROUP BY命令的語法格式為: SELECT "column_name1", SUM("column_name2") FROM "table_name" GROUP BY "column_name1" 我們可以使用如下命令實現上述查詢目的: SELECT store_name, SUM(Sales) F
24、ROM Store_Information GROUP BY store_name 查詢結果顯示為: store_name SUM(Sales) Los Angeles $1800 San Diego $250 Boston $700 小注: GROUP BY關鍵字一般應用于同時查詢多個字段并對字段進行算術運算的SQL命令中。 HAVING 用戶在使用SQL語言的過程中可能希望解決的另一個問題就是對由sum或其它集合函數運算結果的輸出進行限制。例如,我們可能只希望看到Store_Information數據表中銷售總額超過1500美圓的商店的信息,這時我們就需要使用HAVIN
25、G從句。語法格式為: 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_n
26、ame SUM(Sales) Los Angeles $1800 小注: SQL語言中設定集合函數的查詢條件時使用HAVING從句而不是WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結尾處。 ALIAS 下面,我們重點介紹一下如何在SQL命令中設定別名。SQL語言中一般使用兩種類型的別名,分別為字段別名和數據表別名。 簡單的說,使用字段別名可以幫助我們有效的組織查詢的輸出結果。例如,上文所列舉的多個實例中,當我們計算商店銷售總額時,顯示結果中就會出現SUM(sales)。雖然SUM(sales)并不會對我們理解查詢結果帶來不便,但是如果我們需要在查詢中使用多項復雜
27、運算時,顯示結果就不會這么直觀了。如果這時我們使用字段別名就會極大的提高查詢結果的可讀性。 對于數據表別名,我們可以通過將別名直接放置在FROM從句中數據表名稱的后面設定。數據表別名在我們下面將要講述的連接多個數據表進行查詢的操作中極為有用。 字段和數據表別名的語法格式如下: SELECT "table_alias"."column_name1" "column_alias" FROM "table_name" "table_alias" 即別名都直接放置在各自對應名稱的后面,中間用空格分開。 以Store_Information數據表為例,我們可以在GROUP BY一節(jié)中所使用的
28、SQL命令中設置如下字段和數據表別名: SELECT A1.store_name Store, SUM(Sales) "Total Sales" FROM Store_Information A1 GROUP BY A1.store_name 查詢結果顯示為: Store Total Sales Los Angeles $1800 San Diego $250 Boston $700 連接多個數據表 最后,我們來看一下如果使用SQL語言連接多個數據表,實現對多個數據表的查詢。為方便講解,我們在數據庫中分別創(chuàng)建了兩個名為Store_Information和Region的數據表
29、。 Store_Information Store_Name Sales Date Los Angeles $1500 Jan-10-2000 San Diego $250 Jan-11-2000 Los Angeles $300 Jan-12-2000 Boston $700 Jan-12-2000 Region Region_Name Store_Name East Boston East New York West Los Angeles West San Diego 下面,我們就來看一下通過數據表的連接實現按不同區(qū)域查詢銷售額。
30、 我們注意到在名為Region的數據表中包含區(qū)域和商店兩個字段信息,而在名為Store_Information的數據表中則包含每一家商店的銷售信息。因此,為了得到按區(qū)域劃分的銷售信息,我們需要將兩個不同數據表的信息結合在一起進行查詢。通過對上述兩個數據表的分析,我們發(fā)現每個數據表中都包含一個名為Store_Name的字段,因此,我們可以使用如下命令實現查詢目的: SELECT A1.region_name REGION, SUM(A2.Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1.store_name = A2
31、.store_name GROUP BY A1.region_name 查詢結果顯示為: REGION SALES East $700 West $2050 說明: 上述查詢命令的前兩行用于指定所要查詢的目標字段,分別為Region數據表中的Region_Name字段和Store_Information數據表中Sales字段的記錄值總數。這里,我們設定兩個字段的別名分別為REGION和SALES,兩個數據表的別名分別為A1和A2。如果我們只使用字段別名而不設定數據表別名的話,上述SQL命令的第一行就變成 如下形式: SELECT Region.Region_Name REGIO
32、N, SUM(Store_Information.Sales) SALES 由此我們可以看出有效的使用數據表別名,可以極大的簡化對多個數據表進行操作的SQL命令。 上述查詢命令的第3行為WHERE從句,正是該從句設定了兩個數據表的連接條件。因為我們希望確保Region數據表中的Store_Name字段能夠與Store_Information數據表中的同名字段相對應,所以我們規(guī)定兩個字段的記錄值應當相等。在連接多個數據表時,一定要準確設定數據表的連接條件,如果WHERE從句設定不正確,則可能導致查詢結果中出現眾多不相關的數據 基礎教程 SQL數據操作基礎(初級)1 為了建立交互站點,你
33、需要使用數據庫來存儲來自訪問者的信息。例如,你要建立一個職業(yè)介紹服務的站點,你就需要存儲諸如個人簡歷,所感興趣的工作等等這樣的信息。創(chuàng)建動態(tài)網葉也需要使用數據庫,如果你想顯示符合來訪者要求的最好的工作,你就需要從數據庫中取出這份工作的信息。你將會發(fā)現,在許多情況下需要使用數據庫。 在這一章里,你將學會怎樣使用“結構化查詢語言”(SQL〕來操作數據庫。SQL語言是數據庫的標準語言。在Active SeverPages中,無論何時你要訪問一個數據庫,你就要使用SQL語言。因此,掌握好SQL對ASP編程是非常重要的。 注意: 你可以把“SQL”讀作“sequel”,也可以按單個字母的讀音讀作S
34、-Q-L。 兩種發(fā)音都是正確的,每種發(fā)音各有大量的支持者。在本書里,認為“SQL”讀作“sequel”。 通過這一章的學習,你將理解怎樣用SQL實現數據庫查詢,你將學會怎樣使用這種查詢從數據表中取出信息,最后,你將學會怎樣設計和建立自己的數據庫。 注意: 通過下面幾章對SQL的介紹,你將對SQL有足夠的了解,從而可以有效地使用Active Sever Pages。但是,SQL是一種復雜的語言,本書不可能包括它的全部細節(jié)。要全面掌握SQL語言,你需要學習在Microsoft SQL Sever中使用SQL。你可以到附近的書店去買一本Microsoft SQL Sever 6.5。 SQL
35、介紹: 本書假設你是在SQL操作Microsoft SQL Sever的數據庫。你也可以用SQL操作許多其它類型的數據庫。SQL是操作數據庫的標準語言。(事實上,關于SQL語言有一個專門的ANSI標準〕 注意: 不要在你的站點上試圖用Microsoft Access代替Microsoft SQL Sever。SQL Sever可以同時服務于許多用戶,如果你希望你的站點有較高的訪問率,MS Access是不能勝任的。 在學習SQL的細節(jié)之前,你需要理解它的兩大特點。一個特點容易掌握,另一個掌握起來有點困難。 第一個特點是所有SQL數據庫中的數據都存儲在表中。一個表由行和列組成。例如,下
36、面這個簡單的表包括name和e-mail address: Name Email Address ................................................................ Bill Gates billg@ president Clinton president@ Stephen Walther swalther@ 這個表有兩列(列也稱為字段,域〕:Name和Email Address。有三行,每一行包含一組數據。一行中的數據組合在一起稱為一條記錄。 無論何時你向表中添加新數據,你就添加了一條新記錄。一個數據表可以有幾十
37、個記錄,也可以有幾千甚至幾十億個記錄。雖然你也許永遠不需要存儲十億個Email地址,但知道你能這樣做總是好的,也許有一天你會有這樣的需要。 你的數據庫很有可能包含幾十個表,所有存儲在你數據庫中的信息都被存儲在這些表中。當你考慮怎樣把信息存儲在數據庫中時,你應該考慮怎樣把它們存儲在表中。 SQL的第二個特點有些難于掌握。這種語言被設計為不允許你按照某種特定的順序來取出記錄,因為這樣做會降低SQL Sever取記錄的效率。使用SQL,你只能按查詢條件來讀取記錄。 當考慮如何從表中取出記錄時,自然會想到按記錄的位置讀取它們。例如,也許你會嘗試通過一個循環(huán),逐個記錄地掃描,來選出特定的記錄。在使
38、用SQL時,你必須訓練自己,不要有這種思路。 假如你想選出所有的名字是“Bill Gates”的記錄,如果使用傳統(tǒng)的編程語言,你也許會構造一個循環(huán),逐個查看表中的記錄,看名字域是否是“Bill Gates”。 這種選擇記錄的方法是可行的,但是效率不高。使用SQL,你只要說,“選擇所有名字域等于Bill Gates的記錄”,SQL就會為你選出所有符合條件的記錄。SQL會確定實現查詢的最佳方法。 建設你想取出表中的前十個記錄。使用傳統(tǒng)的編程語言,你可以做一個循環(huán),取出前十個記錄后結束循環(huán)。但使用標準的SQL查詢,這是不可能實現的。從SQL的角度來說,在一個表中不存在前十個記錄這種概念。 開
39、始時,當你知道你不能用SQL實現某些你感覺應該能實現的功能,你會受到挫折。你也許會以頭撞墻甚至想寫惡毒的信件給SQL的設計者們。但后來你會認識到,SQL的這個特點不僅不是個限制,反而是其長處。因為SQL不根據位置來讀取記錄,它讀取記錄可以很快。 綜上所述,SQL有兩個特點:所有數據存儲在表中,從SQL的角度來說,表中的記錄沒有順序。在下一節(jié),你將學會怎樣用SQL從表中選擇特殊的記錄。 使用SQL從表中取記錄。 SQL的主要功能之一是實現數據庫查詢。如果你熟悉Internet引擎,那么你已經熟悉查詢了。你使用查詢來取得滿足特定條件的信息。例如,如果你想找到有ASP信息的全部站點,你可以連接
40、到 Yahoo!并執(zhí)行一個對Active Sever Pages的搜索。在你輸入這個查詢后,你會收到一個列表,表中包括所有其描述中包含搜索表達式的站點。 多數Internet引擎允許邏輯查詢。在邏輯查詢中,你可以包括特殊的運算符如AND、OR和NOT,你使用這些運算符來選擇特定的記錄。例如,你可以用AND來限制查詢結果。如果你執(zhí)行一個對Active Sever Pages AND SQL的搜索。你將得到其描述中同時包含Active Sever Pages和SQL的記錄。當你需要限制查詢結果時,你可以使用AND。 如果你需要擴展查詢的結果,你可以使用邏輯操作符OR。例如,如果你執(zhí)行一個搜索,
41、搜索所有的其描述中包含Active Sever Pages OR SQL的站點,你收到的列表中將包括所有其描述中同時包含兩個表達式或其中任何一個表達式的站點。 如果你想從搜索結果中排除特定的站點,你可以使用NOT。例如,查詢“Active Sever Pages ”AND NOT “SQL”將返回一個列表,列表中的站點包含Active Sever Pages,但不包含SQL。當必須排除特定的記錄時,你可以使用NOT。 用SQL執(zhí)行的查詢與用Internet搜索引擎執(zhí)行的搜索非常相似。當你執(zhí)行一個SQL查詢時,通過使用包括邏輯運算符的查詢條件,你可以得到一個記錄列表。此時查詢結果是來自一個或
42、多個表。 SQL查詢的句法非常簡單。假設有一個名為email_table的表,包含名字和地址兩個字段,要得到Bill Gates的e_mail地址,你可以使用下面的查詢: SELECT email from email_table WHERE name="Bill Gates" 當這個查詢執(zhí)行時,就從名為email_table的表中讀取Bill Gates的e_mail地址。這個簡單的語句包括三部分: ■ SELECT語句的第一部分指名要選取的列。在此例中,只有email列被選取。當執(zhí)行 時,只顯示email列的值 billg@。 ■ SELECTT語句的第二部份指明要從哪個(些)表
43、中查詢數據。在此例中,要查詢的表名為email_table。 ■最后,SELECT語句的WHERE子句指明要選擇滿足什么條件的記錄。在此例中,查詢條件為只有name列的值為Bill Gates的記錄才被選取。 Bill Gates很有可能擁有不止一個email地址。如果表中包含Bill Gates的多個email地址。用上述的SELECT語句可以讀取他所有的email地址。SELECT語句從表中取出所有name字段值為Bill Gates的記錄的email字段的值。 前面說過,查詢可以在查詢條件中包含邏輯運算符。假如你想讀取Bill Gates或Clinton總統(tǒng)的所有email地址,你
44、可以使用下面的查詢語句: SELECT email FROM email_table WHERE name="Bill Gates" OR name="president Clinton" 此例中的查詢條件比前一個復雜了一點。這個語句從表email_table中選出所有name列為Bill Gates或president Clinton的記錄。如果表中含有Bill Gates或president Clinton的多個地址,所有的地址都被讀取。 SELECT語句的結構看起來很直觀。如果你請一個朋友從一個表中為你選擇一組記錄,你也許以非常相似的方式提出你的要求。在SQL SELECT語句
45、中,你“SELECT特定的列FROM一個表WHERE某些列滿足一個特定的條件”。 下一節(jié)將介紹怎樣執(zhí)行SQL查詢來選取記錄。這將幫助你熟悉用SELECT語句從表中取數據的各種不同方法。 SQL數據操作基礎(初級)2 使用ISQL執(zhí)行SELECT查詢 當你安裝SQL Sever時,你同時安裝了一個叫作ISQL/w的應用程序。ISQL/w允許你執(zhí)行交互的SQL查詢。在把查詢包括到你的ASP網頁中之前,用ISQL/w對其進行測試是非常有用的。 注意: 在這本書的第一部份,你學習了怎樣安裝和配置Microsoft SQL Sever。如果沒有安裝SQL Sever或者SQL Sever
46、不能運行,請參閱第三章“安裝和使用SQL Sever”。 選擇任務上SQL Sever程序組中的ISQL_w以啟動該程序。程序啟動時,首先會出現一個對話框,要求輸入服務器信息和登錄信息。在Sever框中,輸入你的SQL服務器的名字。如果服務器正運行在本地計算機上,服務器名字就是你計算機的名字。在登錄信息框中,輸入一個登錄帳號和密碼或選擇使用“可信連接”,然后單擊Connect按鈕。 注意: 如果你將SQL Sever配置為使用完整安全或混合安全,那么你可以使用可信連接。如果你使用標準安全,你則需要提供用戶帳號和密碼。要了解更多信息,參見第三章。 如果一切正常,在你單擊連接按鈕后會出現
47、一個查詢窗口。(如果有異常,請參考第三章) 在執(zhí)行查詢之前,你需要選擇數據庫。安裝 SQL Sever時你已為自己創(chuàng)建了一個數據庫,SQL Sever還有許多系統(tǒng)數據庫,如master,model,msdb,和tempdb。 方便的是,SQL Sever帶有一個特殊的名為pubs的例子數據庫。庫 pubs中包含供一個虛擬的出版商使用的各個表。文檔中所有的例子程序都是針對這個庫來設計的。本書中的許多例子也使用這個數據庫。 在查詢窗口頂部的DB下拉框中選擇數據庫pubs,這樣你就選擇了數據庫。你所有的查詢都將針對這個庫中的各個表來執(zhí)行。現在你可以執(zhí)行你的第一個查詢了。這真讓人興奮! 你的
48、第一個查詢將針對一個名為autrors的表,表中包含所有為某個虛擬出版商工作的作者的相關數據。單擊查詢窗口并輸入以下的語句: SELECT phone FROM authors WHERE au_name="Ringer" 輸入完成后,單擊執(zhí)行查詢按鈕(一個綠色三角形,看起來像VCR播放鍵)。單擊此按鈕后,任何出現在查詢窗口中的語句均會被執(zhí)行。查詢窗口會自動變成結果顯示窗口,你可以看到查詢的結果。 在SQL Sever的不同版本中,庫pubs中的數據會有所不同。對SQL Sever 6.5來說,將會找到兩條記錄。結果顯示窗口中應顯示如下內容: phone ………………. 801 8
49、26_0752 801 826_0752 (2 row(s) affected) 你所執(zhí)行的SELECT語句從表authors中取出所有名字為Ringer的作者的電話號碼。你通過在WHERE子句中使用特殊的選擇條件來限制查詢的結果。你也可以忽略選擇條件,從表中取出所有作者的電話號碼。要做到這一點,單擊Query標簽,返回到查詢窗口,輸入以下的SELECT語句: SELECT Phone FROM authors 這個查詢執(zhí)行后,會取出表authors中的所有電話號碼(沒有特定的順序)。如果表authors中包含一百個電話號碼,會有一百個記錄被取出,如果表中有十億個電話號碼,這十億條記
50、錄都會被取出(這也許需要一些時間)。 表authrs的字段包括姓,名字,電話號碼,地址,城市,州和郵政編碼。通過在SELECT語句的第一部份指定它們,你可以從表中取出任何一個字段。你可以在一個SELECT語句中一次取出多個字段,比如: SELECT au_fname ,au_lname, phone FROM authors 這個SELECT語句執(zhí)行后,將取出這三個列的所有值。下面是這個查詢的結果的一個示例(為了節(jié)省紙張,只顯示查詢結果的一部分,其余記錄用省略號代替): au_fname au_lname phone …………………………………………………………………………. J
51、ohnson White 408 496_7223 Marjorie Green 415 986_7020 Cheryl Carson 415 548_7723 Michael O’Leary 408 286_2428 … (23 row(s) affected) 在SELECT語句中,你需要列出多少個字段,你就可以列出多少。不要忘了把字段名用逗號隔開。你也可以用星號(*)從一個表中取出所有的字段。這里有一個使用星號的例子: SELECT * FROM authors 這個SELECT語句執(zhí)行后,表中的所有字段的值都被取出。你會發(fā)現你將在SQL查詢中頻繁使用星號。 技巧:
52、 你可以使用星號來查看一個表的所有列的名字。要做到這一點,只需要在執(zhí)行完SELECT語句后看一下查詢結果的列標題。 操作多個表 到現在為止,你只嘗試了用一句SQL查詢從一個表中取出數據。你也可以用一個SELECT語句同時從多個表中取出數據,只需在SELECT語句的FROM從句中列出要從中取出數據的表名稱即可: SELECT au_lname ,title FROM authors, titles 這個SELECT語句執(zhí)行時,同時從表authors和表titles中取出數據。從表authors中取出所有的作者名字,從表titles中取出所有的書名。在ISQL/w程序中執(zhí)行這個查詢,看一
53、下查詢結果。你會發(fā)現一些奇怪的出乎意料的情況:作者的名字并沒有和它們所著的書相匹配,而是出現了作者名字和書名的所有可能的組合,這也許不是你所希望見到的。 出了什么差錯?問題在于你沒有指明這兩個表之間的關系。你沒有通過任何方式告訴SQL如何把表和表關聯(lián)在一起。由于不知道如何關聯(lián)兩個表,服務器只能簡單地返回取自兩個表中的記錄的所有可能組合。 要從兩個表中選出有意義的記錄組合,你需要通過建立兩表中字段的關系來關聯(lián)兩個表。要做到這一點的途徑之一是創(chuàng)建第三個表,專門用來描述另外兩個表的字段之間的關系。 表authors有一個名為au_id的字段,包含有每個作者的唯一標識。表titles有一個名為t
54、itle_id的字段,包含每個書名的唯一標識。如果你能在字段au_id和字段title_id之間建立一個關系,你就可以關聯(lián)這兩個表。數據庫pubs中有一個名為titleauthor的表,正是用來完成這個工作。表中的每個記錄包括兩個字段,用來把表titles和表authors關聯(lián)在一起。下面的SELECT語句使用了這三個表以得到正確的結果: SELECT au_name,title FROM authors,titles,titleauthor WHERE authors.au_id=titleauthor.au_id AND titles.title_id=titleauthor.ti
55、tle_id 當這個SELECT語句執(zhí)行時,每個作者都將與正確的書名相匹配。表titleauthor指明了表authors和表titles的關系,它通過包含分別來自兩個表的各一個字段實現這一點。第三個表的唯一目的是在另外兩個表的字段之間建立關系。它本身不包含任何附加數據。 注意在這個例子中字段名是如何書寫的。為了區(qū)別表authors和表titles中相同的字段名au_id,每個字段名前面都加上了表名前綴和一個句號。名為author.au_id的字段屬于表authors,名為titleauthor.au_id的字段屬于表titleauthor,兩者不會混淆。 通過使用第三個表,你可以在兩
56、個表的字段之間建立各種類型的關系。例如,一個作者也許寫了許多不同的書,或者一本書也許由許多不同的作者共同完成。當兩個表的字段之間有這種“多對多”的關系時,你需要使用第三個表來指明這種關系。 但是,在許多情況下,兩個表之間的關系并不復雜。比如你需要指明表titles和表publishers之間的關系。因為一個書名不可能與多個出版商相匹配,你不需要通過第三個表來指明這兩個表之間的關系。要指明表titles和表publishers之間的關系,你只要讓這兩個表有一個公共的字段就可以了。在數據庫pubs中,表titles和表publishers都有一個名為pub_id的字段。如果你想得到書名及其出版商
57、的一個列表,你可以使用如下的語句: SELECT title,pub_name FROM titles,publishers WHERE titles.pub_id=publishers.pub_id 當然,如果一本書是由兩個出版商聯(lián)合出版的,那么你需要第三個表來代表這種關系。 通常,當你予先知道兩個表的字段間存在“多對多”關系時,就使用第三個表來關聯(lián)這兩個表。反之,如果兩個表的字段間只有“一對一”或“一對多”關系,你可以使用公共字段來關聯(lián)它門。 SQL數據操作基礎(初級)3 操作字段 通常,當你從一個表中取出字段值時,該值與創(chuàng)建該表時所定義的字段名聯(lián)系在一起。如果你從表auth
58、ors中選擇所有的作者名字,所有的值將會與字段名au_lname相聯(lián)系。但是在某些情況下,你需要對字段名進行操作。在SELECT語句中,你可以在缺省字段名后面僅跟一個新名字來取代它。例如,可以用一個更直觀易讀的名字Author Last Name來代替字段名au_lname: SELECT au_lname "Author Last Name" FROM authors 當這個SELECT語句執(zhí)行時,來自字段au_lname的值會與“Author Last Name”相聯(lián)系。查詢結果可能是這樣: Author Last Name …………………………………………………………………….
59、. White Green Carson O’Leary Straight … (23 row(s) affected) 注意字段標題不再是au_lname,而是被Author Last Name所取代。 你也可以通過執(zhí)行運算,來操作從一個表返回的字段值。例如,如果你想把表titles中的所有書的價格加倍,你可以使用下面的SELECT語句: SELECT price*2 FROM titles 當這個查詢執(zhí)行時,每本書的價格從表中取出時都會加倍。但是,通過這種途徑操作字段不會改變存儲在表中的書價。對字段的運算只會影響SELECT語句的輸出,而不會影響表中的數據。為了
60、同時顯示書的原始價格和漲價后的新價格,你可以使用下面的查詢: SELECT price "Original price", price*2 "New price" FROM titles 當數據從表titles中取出時,原始價格顯示在標題Original price下面,加倍后的價格顯示在標題New price下面。結果可能是這樣: original price new price ………………………………………………………………. 39.98 11.95 23.90 5.98 39.98 … (18 row(s) affected) 你可以使用大多數標準的數學運
61、算符來操作字段值,如加(+),減(-),乘(*)和除(/)。你也可以一次對多個字段進行運算,例如: SELECT price*ytd_sales "total revenue" FROM titles 在這個例子中,通過把價格與銷售量相乘,計算出了每種書的總銷售額。這個SELECT語句的結果將是這樣的: total revenue …………………………………………….. 81,859,05 46,318,20 55,978,78 81,859,05 40,619,68 … (18 row(s) affected) 最后,你還可以使用連接運算符(它看起來像個加號)來連接兩
62、個字符型字段: SELECT au_fname+" "+au_lname "author name" FROM authors 在這個例子中,你把字段au_fname和字段au_lname粘貼在一起,中間用一個逗號隔開,并把查詢結果的標題指定為author name。這個語句的執(zhí)行結果將是這樣的: author names ………………………………………………………… Johnson White Marjorie Green Cheryl Carson Michael O’Leary Dean Straight … (23 row(s) affected) 可以看到,S
63、QL為你提供了對查詢結果的許多控制。你應該在ASP編程過程中充分利用這些優(yōu)點。使用SQL來操作查詢結果幾乎總是比使用有同樣作用的腳本效率更高。 排序查詢結果 本章的介紹中曾強調過,SQL表沒有內在的順序。例如,從一個表中取第二個記錄是沒有意義的。從SQL的角度看來,沒有一個記錄在任何其他記錄之前。 然而,你可以操縱一個SQL查詢結果的順序。在缺省情況下,當記錄從表中取出時,記錄不以特定的順序出現。例如,當從表authors中取出字段au_lname時,查詢結果顯示成這樣: au_lname ……………………………………. White Green Carson O’Leary
64、 Straight … (23 row(s) affected) 看一列沒有特定順序的名字是很不方便的。如果把這些名字按字母順序排列,讀起來就會容易得多。通過使用ORDER BY子句,你可以強制一個查詢結果按升序排列,就像這樣: SELECT au_lname FROM authors ORDER BY au_lname 當這個SELECT語句執(zhí)行時,作者名字的顯示將按字母順序排列。ORDER BY子句將作者名字按升序排列。 你也可以同時對多個列使用ORDER BY子句。例如,如果你想同時按升序顯示字段au_lname和字段au_fname,你需要對兩個字段都進行排序: SELE
65、CT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname 這個查詢首先把結果按au_lname字段進行排序,然后按字段au_fname排序。記錄將按如下的順序取出: au_lname au_fname ……………………………………………………………………. Bennet Abraham Ringer Albert Ringer Anne Smith Meander … (23 row(s) affected) 注意有兩個作者有相同的名字Ringer。名為Albert Ringer的作者出現名為Anne Rin
66、ger的作者之前,這是因為姓Albert按字母順序應排在姓Anne之前。 如果你想把查詢結果按相反的順序排列,你可以使用關鍵字DESC。關鍵字DESC把查詢結果按降序排列,如下例所示: SELECT au_lname,au_fname FROM authors WHERE au_lname=”Ringer” ORDER BY au_lname ,au_fname DESC 這個查詢從表authors中取出所有名字為Ringer的作者記錄。ORDER BY子句根據作者的名字和姓,將查詢結果按降序排列。結果是這樣的: au_lname au_fname ………………………………………………………………………………………. Ringer Anne Ringer Albert (2 row(s) affectec) 注意在這個表中,姓Anne出現在姓Albert之前。作者名字按降序顯示。 你也可以按數值型字段對一個查詢結果進行排序。例如,如果你想按降序取出所有書的價
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工重大危險源安全管理制度
- 安全培訓資料:典型建筑火災的防治基本原則與救援技術
- 企業(yè)雙重預防體系應知應會知識問答
- 8 各種煤礦安全考試試題
- 9 危險化學品經營單位安全生產管理人員模擬考試題庫試卷附答案
- 加壓過濾機司機技術操作規(guī)程
- 樹脂砂混砂工藝知識總結
- XXXXX現場安全應急處置預案
- 某公司消防安全檢查制度總結
- 1 煤礦安全檢查工(中級)職業(yè)技能理論知識考核試題含答案
- 4.燃氣安全生產企業(yè)主要負責人模擬考試題庫試卷含答案
- 工段(班組)級安全檢查表
- D 氯化工藝作業(yè)模擬考試題庫試卷含答案-4
- 建筑起重司索信號工安全操作要點
- 實驗室計量常見的30個問問答題含解析