歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

SQL非常全面的入門教程.doc

  • 資源ID:16807407       資源大小:785.51KB        全文頁數(shù):83頁
  • 資源格式: DOC        下載積分:5積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要5積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

SQL非常全面的入門教程.doc

SQL語言快速入門入門教程2SQL語言快速入門之一2SQL語言快速入門之二3SQL語言快速入門之三6基礎(chǔ)教程11SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))111SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))214SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))317SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))420SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))525SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))27SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))127SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))229SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))332SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))436SQL數(shù)據(jù)操作基礎(chǔ)(中級(jí))539全面接觸SQL45全面接觸SQL語法(1)45全面接觸SQL語法(2)46全面接觸SQL語法(3)48全面接觸SQL語法(4)49全面接觸SQL語法(5)51全面接觸SQL語法(6)54全面接觸SQL語法(7)55SQL語法詳解59主要SQL語句詳解(1)59主要SQL語句詳解(2)63SQL語法參考手冊67SQL實(shí)踐71SQL實(shí)踐(1)71SQL實(shí)踐(2)75Sql連接查詢80入門教程SQL語言快速入門之一SQL是英文Structured Query Language的縮寫,意思為結(jié)構(gòu)化查詢語言。SQL語言的主要功能就是同各種數(shù)據(jù)庫建立聯(lián)系,進(jìn)行溝通。按照ANSI(美國國家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言。SQL語句可以用來執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫中的數(shù)據(jù),從數(shù)據(jù)庫中提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語言標(biāo)準(zhǔn)。雖然很多數(shù)據(jù)庫都對(duì)SQL語句進(jìn)行了再開發(fā)和擴(kuò)展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內(nèi)的標(biāo)準(zhǔn)的SQL命令仍然可以被用來完成幾乎所有的數(shù)據(jù)庫操作。下面,我們就來詳細(xì)介紹一下SQL語言的基本知識(shí)。數(shù)據(jù)庫表格一個(gè)典型的關(guān)系型數(shù)據(jù)庫通常由一個(gè)或多個(gè)被稱作表格的對(duì)象組成。數(shù)據(jù)庫中的所有數(shù)據(jù)或信息都被保存在這些數(shù)據(jù)庫表格中。數(shù)據(jù)庫中的每一個(gè)表格都具有自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數(shù)據(jù)類型,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數(shù)據(jù)。以下,是一個(gè)名為天氣的數(shù)據(jù)庫表格的實(shí)例。城市 最高氣溫 最低氣溫 北京 10 5 上海 15 8 天津 8 2 重慶 20 13 該表格中“城市”, “最高氣溫”和“最低氣溫”就是三個(gè)不同的列,而表格中的每一行則包含了具體的表格數(shù)據(jù)。數(shù)據(jù)查詢在眾多的SQL命令中,select語句應(yīng)該算是使用最頻繁的。Select語句主要被用來對(duì)數(shù)據(jù)庫進(jìn)行查詢并返回符合用戶查詢標(biāo)準(zhǔn)的結(jié)果數(shù)據(jù)。Select語句的語法格式如下:select column1 , column2,etc from tablenamewhere condition;(表示可選項(xiàng))select語句中位于select關(guān)鍵詞之后的列名用來決定那些列將作為查詢結(jié)果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“*”來設(shè)定返回表格中的所有列。select語句中位于from關(guān)鍵詞之后的表格名稱用來決定將要進(jìn)行查詢操作的目標(biāo)表格。Select語句中的where可選從句用來規(guī)定哪些數(shù)據(jù)值或哪些行將被作為查詢結(jié)果返回或顯示。在where條件從句中可以使用以下一些運(yùn)算符來設(shè)定查詢標(biāo)準(zhǔn):=等于>大于<小于>=大于等于<=小于等于<>不等于除了上面所提到的運(yùn)算符外,LIKE運(yùn)算符在where條件從句中也非常重要。LIKE運(yùn)算符的功能非常強(qiáng)大,通過使用LIKE運(yùn)算符可以設(shè)定只選擇與用戶規(guī)定格式相同的記錄。此外,我們還可以使用通配符“%”用來代替任何字符串。舉例如下:select firstname, lastname, cityfrom employeewhere firstname LIKE E%;(注意,字符串必須被包含在單括號(hào)內(nèi))上述SQL語句將會(huì)查詢所有名稱以E開頭的姓名?;蛘撸ㄟ^如下語句:select * from employeewhere firstname = May;查詢所有名稱為May的行。SQL語言快速入門之二創(chuàng)建表格SQL語言中的create table語句被用來建立新的數(shù)據(jù)庫表格。Create table語句的使用格式如下:create table tablename(column1 data type,column2 data type,column3 data type);如果用戶希望在建立新表格時(shí)規(guī)定列的限制條件,可以使用可選的條件選項(xiàng):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)建新表格時(shí),在關(guān)鍵詞create table后面加入所要建立的表格的名稱,然后在括號(hào)內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的SQL語句在結(jié)尾處都要使用“;”符號(hào)。使用SQL語句創(chuàng)建的數(shù)據(jù)庫表格和表格中列的名稱必須以字母開頭,后面可以使用字母,數(shù)字或下劃線,名稱的長度不能超過30個(gè)字符。注意,用戶在選擇表格名稱時(shí)不要使用SQL語言中的保留關(guān)鍵詞,如select, create, insert等,作為表格或列的名稱。數(shù)據(jù)類型用來設(shè)定某一個(gè)具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采用varchar或char的數(shù)據(jù)類型,而不能使用number的數(shù)據(jù)類型。SQL語言中較為常用的數(shù)據(jù)類型為:char(size):固定長度字符串,其中括號(hào)中的size用來設(shè)定字符串的最大長度。Char類型的最大長度為255字節(jié)。varchar(size):可變長度字符串,最大長度由size設(shè)定。number(size):數(shù)字類型,其中數(shù)字的最大位數(shù)由size設(shè)定。Date:日期類型。number(size,d):數(shù)字類型,size決定該數(shù)字總的最大位數(shù),而d則用于設(shè)定該數(shù)字在小數(shù)點(diǎn)后的位數(shù)。最后,在創(chuàng)建新表格時(shí)需要注意的一點(diǎn)就是表格中列的限制條件。所謂限制條件就是當(dāng)向特定列輸入數(shù)據(jù)時(shí)所必須遵守的規(guī)則。例如,unique這一限制條件要求某一列中不能存在兩個(gè)值相同的記錄,所有記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件還包括not null和primary key等。Not null用來規(guī)定表格中某一列的值不能為空。Primary key則為表格中的所有記錄規(guī)定了唯一的標(biāo)識(shí)符。向表格中插入數(shù)據(jù)SQL語言使用insert語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。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”);簡單來說,當(dāng)向數(shù)據(jù)庫表格中添加新記錄時(shí),在關(guān)鍵詞insert into后面輸入所要添加的表格名稱,然后在括號(hào)中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞values的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。更新記錄SQL語言使用update語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。Update語句的格式為:update tablenameset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR value;例如:update employeeset age = age+1where first_name= Maryand last_name= Williams;使用update語句時(shí),關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的where條件從句。刪除記錄SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete語句的格式為:delete from tablenamewhere columnname OPERATOR value and|or column OPERATOR value;例如:delete from employeewhere lastname = May;簡單來說,當(dāng)需要?jiǎng)h除某一行或某個(gè)記錄時(shí),在delete from關(guān)鍵詞之后輸入表格名稱,然后在where從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用delete語句時(shí)不設(shè)定where從句,則表格中的所有記錄將全部被刪除。刪除數(shù)據(jù)庫表格在SQL語言中使用drop table命令刪除某個(gè)表格以及該表格中的所有記錄。Drop table命令的使用格式為:drop table tablename;例如:drop table employee;如果用戶希望將某個(gè)數(shù)據(jù)庫表格完全刪除,只需要在drop table命令后輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會(huì)改變。而使用drop table命令則會(huì)將整個(gè)數(shù)據(jù)庫表格的所有信息全部刪除。以上,我們對(duì)SQL語言主要的命令和語句進(jìn)行了較為詳細(xì)的介紹。應(yīng)該說SQL語句的語法結(jié)構(gòu)和風(fēng)格還是相當(dāng)簡單和直觀的,只要用戶結(jié)合實(shí)踐多加練習(xí),一定會(huì)在短期內(nèi)迅速掌握。SQL語言快速入門之三我們?nèi)粘J褂肧QL語言的工作過程中,使用最多的還是從已經(jīng)建立好的數(shù)據(jù)庫中查詢信息。下面,我們就來詳細(xì)介紹一下如何使用SQL語言實(shí)現(xiàn)各種數(shù)據(jù)庫查詢操作。SELECTFROM為方便講解,我們在數(shù)據(jù)庫中創(chuàng)建名為Store_Information的如下數(shù)據(jù)表。Store_InformationStore_NameSalesDateLos Angeles$1500Jan-10-2000San Diego$250Jan-11-2000Los Angeles$300Jan-12-2000Boston$700Jan-12-2000SQL語言中用于數(shù)據(jù)庫查詢的最簡單的命令就是SELECTFROM,語法格式為:SELECT "column_name" FROM "table_name"例如,如果我們希望查詢Store_Information數(shù)據(jù)表中所有的商店名稱時(shí),可以使用如下命令:SELECT store_name FROM Store_Information查詢結(jié)果顯示為:Store_NameLos AngelesSan DiegoLos AngelesBoston如果用戶希望一次查詢多個(gè)字段,可以將所要查詢的字段名稱依次加入SELECT關(guān)鍵字之后,中間用“,”隔開即可。DISTINCTSELECT關(guān)鍵字支持用戶查詢數(shù)據(jù)表中指定字段的所有數(shù)據(jù),但是這樣有時(shí)就會(huì)不可避免的出現(xiàn)重復(fù)信息。如果用戶希望只查詢那些具有不同記錄值的信息的話,可以使用SQL語言的DISTINCT關(guān)鍵字。語法格式如下:SELECT DISTINCT "column_name"FROM "table_name"例如,我們可以使用以下命令查詢Store_Information數(shù)據(jù)表具有不同記錄值的所有記錄。SELECT DISTINCT Store_Name FROM Store_Information查詢結(jié)果如下:Store_NameLos AngelesSan DiegoBostonWHERE除了選擇具有不同記錄值的記錄之外,有時(shí)我們可能還會(huì)需要根據(jù)某些條件對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢。例如,我們可能需要查詢Store_Information數(shù)據(jù)表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE關(guān)鍵字設(shè)定查詢條件。語法格式如下:SELECT "column_name"FROM "table_name"WHERE "condition"由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息:SELECT store_name FROM Store_Information WHERE Sales > 1000查詢結(jié)果顯示為:store_nameLos Angeles運(yùn)算函數(shù)現(xiàn)在,我們已經(jīng)了解到在使用SQL語言進(jìn)行數(shù)據(jù)庫查詢操作時(shí)可以通過對(duì)數(shù)值的判斷設(shè)定靈活的查詢條件。為了增強(qiáng)對(duì)運(yùn)算的支持能力,SQL提供了眾多實(shí)用的運(yùn)算函數(shù)供廣大用戶使用。例如,我們可以直接在SQL命令中調(diào)用SUM或AVG這兩個(gè)分別用于計(jì)算總數(shù)和平均數(shù)的函數(shù)。語法格式如下:SELECT "function type"("column_name")FROM "table_name"如果我們希望查詢Store_Information數(shù)據(jù)表中所有商店的總銷售額的話,可以使用如下命令:SELECT SUM(Sales) FROM Store_Information查詢結(jié)果顯示為:SUM(Sales)$2750COUNT除了SUM和AVG函數(shù)之外,COUNT函數(shù)是SQL語言中另一個(gè)較為常用的運(yùn)算函數(shù)。COUNT函數(shù)可以用來計(jì)算數(shù)據(jù)表中指定字段所包含的記錄數(shù)目。語法格式為:SELECT COUNT("column_name")FROM "table_name"例如,如果我們希望查詢Store_Information數(shù)據(jù)表中的有關(guān)商店的記錄條數(shù)時(shí),可以使用如下命令:SELECT COUNT(store_name)FROM Store_Information查詢結(jié)果顯示為:Count(store_name)4COUNT函數(shù)可以和DISTINCT關(guān)鍵字一起使用從而可以查詢數(shù)據(jù)表中指定字段中所有具有不同記錄值的記錄數(shù)目。例如,如果我們希望查詢Store_Information數(shù)據(jù)表中不同商店的數(shù)目時(shí),可以使用如下命令:SELECT COUNT(DISTINCT store_name)FROM Store_Information查詢結(jié)果顯示為:Count(DISTINCT store_name)3GROUP BY下面我們來進(jìn)一步看一下SQL語言中的集合函數(shù)。上文中,我們曾使用SUM函數(shù)計(jì)算所有商店的銷售總額,如果我們希望計(jì)算每一家商店各自的總銷售額時(shí)該怎么辦呢?要實(shí)現(xiàn)這一目的我們需要做兩件事:首先,我們需要查詢商店名稱和銷售額兩個(gè)字段;然后,我們使用SQL語言的GROUP BY命令將銷售額按照不同的商店進(jìn)行分組,從而計(jì)算出不同商店的銷售總額。GROUP BY命令的語法格式為:SELECT "column_name1", SUM("column_name2")FROM "table_name"GROUP BY "column_name1"我們可以使用如下命令實(shí)現(xiàn)上述查詢目的:SELECT store_name, SUM(Sales)FROM Store_InformationGROUP BY store_name查詢結(jié)果顯示為:store_name SUM(Sales)Los Angeles $1800San Diego $250Boston $700小注:GROUP BY關(guān)鍵字一般應(yīng)用于同時(shí)查詢多個(gè)字段并對(duì)字段進(jìn)行算術(shù)運(yùn)算的SQL命令中。HAVING用戶在使用SQL語言的過程中可能希望解決的另一個(gè)問題就是對(duì)由sum或其它集合函數(shù)運(yùn)算結(jié)果的輸出進(jìn)行限制。例如,我們可能只希望看到Store_Information數(shù)據(jù)表中銷售總額超過1500美圓的商店的信息,這時(shí)我們就需要使用HAVING從句。語法格式為:SELECT "column_name1", SUM("column_name2")FROM "table_name"GROUP BY "column_name1"HAVING (arithematic function condition)(GROUP BY從句可選)由此,我們可以使用如下命令實(shí)現(xiàn)上述查詢目的:SELECT store_name, SUM(sales)FROM Store_InformationGROUP BY store_nameHAVING SUM(sales) > 1500查詢結(jié)果顯示為:store_name SUM(Sales)Los Angeles $1800小注:SQL語言中設(shè)定集合函數(shù)的查詢條件時(shí)使用HAVING從句而不是WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結(jié)尾處。ALIAS下面,我們重點(diǎn)介紹一下如何在SQL命令中設(shè)定別名。SQL語言中一般使用兩種類型的別名,分別為字段別名和數(shù)據(jù)表別名。簡單的說,使用字段別名可以幫助我們有效的組織查詢的輸出結(jié)果。例如,上文所列舉的多個(gè)實(shí)例中,當(dāng)我們計(jì)算商店銷售總額時(shí),顯示結(jié)果中就會(huì)出現(xiàn)SUM(sales)。雖然SUM(sales)并不會(huì)對(duì)我們理解查詢結(jié)果帶來不便,但是如果我們需要在查詢中使用多項(xiàng)復(fù)雜運(yùn)算時(shí),顯示結(jié)果就不會(huì)這么直觀了。如果這時(shí)我們使用字段別名就會(huì)極大的提高查詢結(jié)果的可讀性。對(duì)于數(shù)據(jù)表別名,我們可以通過將別名直接放置在FROM從句中數(shù)據(jù)表名稱的后面設(shè)定。數(shù)據(jù)表別名在我們下面將要講述的連接多個(gè)數(shù)據(jù)表進(jìn)行查詢的操作中極為有用。字段和數(shù)據(jù)表別名的語法格式如下:SELECT "table_alias"."column_name1" "column_alias"FROM "table_name" "table_alias"即別名都直接放置在各自對(duì)應(yīng)名稱的后面,中間用空格分開。以Store_Information數(shù)據(jù)表為例,我們可以在GROUP BY一節(jié)中所使用的SQL命令中設(shè)置如下字段和數(shù)據(jù)表別名:SELECT A1.store_name Store, SUM(Sales) "Total Sales"FROM Store_Information A1GROUP BY A1.store_name查詢結(jié)果顯示為:Store Total SalesLos Angeles $1800San Diego $250Boston $700連接多個(gè)數(shù)據(jù)表最后,我們來看一下如果使用SQL語言連接多個(gè)數(shù)據(jù)表,實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)表的查詢。為方便講解,我們在數(shù)據(jù)庫中分別創(chuàng)建了兩個(gè)名為Store_Information和Region的數(shù)據(jù)表。Store_InformationStore_NameSalesDateLos Angeles$1500Jan-10-2000San Diego$250Jan-11-2000Los Angeles$300Jan-12-2000Boston$700Jan-12-2000RegionRegion_NameStore_NameEastBostonEastNew YorkWestLos AngelesWestSan Diego下面,我們就來看一下通過數(shù)據(jù)表的連接實(shí)現(xiàn)按不同區(qū)域查詢銷售額。我們注意到在名為Region的數(shù)據(jù)表中包含區(qū)域和商店兩個(gè)字段信息,而在名為Store_Information的數(shù)據(jù)表中則包含每一家商店的銷售信息。因此,為了得到按區(qū)域劃分的銷售信息,我們需要將兩個(gè)不同數(shù)據(jù)表的信息結(jié)合在一起進(jìn)行查詢。通過對(duì)上述兩個(gè)數(shù)據(jù)表的分析,我們發(fā)現(xiàn)每個(gè)數(shù)據(jù)表中都包含一個(gè)名為Store_Name的字段,因此,我們可以使用如下命令實(shí)現(xiàn)查詢目的:SELECT A1.region_name REGION, SUM(A2.Sales) SALESFROM Geography A1, Store_Information A2WHERE A1.store_name = A2.store_nameGROUP BY A1.region_name查詢結(jié)果顯示為:REGION SALESEast $700West $2050說明:上述查詢命令的前兩行用于指定所要查詢的目標(biāo)字段,分別為Region數(shù)據(jù)表中的Region_Name字段和Store_Information數(shù)據(jù)表中Sales字段的記錄值總數(shù)。這里,我們設(shè)定兩個(gè)字段的別名分別為REGION和SALES,兩個(gè)數(shù)據(jù)表的別名分別為A1和A2。如果我們只使用字段別名而不設(shè)定數(shù)據(jù)表別名的話,上述SQL命令的第一行就變成 如下形式:SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES由此我們可以看出有效的使用數(shù)據(jù)表別名,可以極大的簡化對(duì)多個(gè)數(shù)據(jù)表進(jìn)行操作的SQL命令。上述查詢命令的第3行為WHERE從句,正是該從句設(shè)定了兩個(gè)數(shù)據(jù)表的連接條件。因?yàn)槲覀兿M_保Region數(shù)據(jù)表中的Store_Name字段能夠與Store_Information數(shù)據(jù)表中的同名字段相對(duì)應(yīng),所以我們規(guī)定兩個(gè)字段的記錄值應(yīng)當(dāng)相等。在連接多個(gè)數(shù)據(jù)表時(shí),一定要準(zhǔn)確設(shè)定數(shù)據(jù)表的連接條件,如果WHERE從句設(shè)定不正確,則可能導(dǎo)致查詢結(jié)果中出現(xiàn)眾多不相關(guān)的數(shù)據(jù)基礎(chǔ)教程SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))1為了建立交互站點(diǎn),你需要使用數(shù)據(jù)庫來存儲(chǔ)來自訪問者的信息。例如,你要建立一個(gè)職業(yè)介紹服務(wù)的站點(diǎn),你就需要存儲(chǔ)諸如個(gè)人簡歷,所感興趣的工作等等這樣的信息。創(chuàng)建動(dòng)態(tài)網(wǎng)葉也需要使用數(shù)據(jù)庫,如果你想顯示符合來訪者要求的最好的工作,你就需要從數(shù)據(jù)庫中取出這份工作的信息。你將會(huì)發(fā)現(xiàn),在許多情況下需要使用數(shù)據(jù)庫。在這一章里,你將學(xué)會(huì)怎樣使用“結(jié)構(gòu)化查詢語言”(SQL來操作數(shù)據(jù)庫。SQL語言是數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。在Active SeverPages中,無論何時(shí)你要訪問一個(gè)數(shù)據(jù)庫,你就要使用SQL語言。因此,掌握好SQL對(duì)ASP編程是非常重要的。注意:你可以把“SQL”讀作“sequel”,也可以按單個(gè)字母的讀音讀作SQL。 兩種發(fā)音都是正確的,每種發(fā)音各有大量的支持者。在本書里,認(rèn)為“SQL”讀作“sequel”。通過這一章的學(xué)習(xí),你將理解怎樣用SQL實(shí)現(xiàn)數(shù)據(jù)庫查詢,你將學(xué)會(huì)怎樣使用這種查詢從數(shù)據(jù)表中取出信息,最后,你將學(xué)會(huì)怎樣設(shè)計(jì)和建立自己的數(shù)據(jù)庫。注意:通過下面幾章對(duì)SQL的介紹,你將對(duì)SQL有足夠的了解,從而可以有效地使用Active Sever Pages。但是,SQL是一種復(fù)雜的語言,本書不可能包括它的全部細(xì)節(jié)。要全面掌握SQL語言,你需要學(xué)習(xí)在Microsoft SQL Sever中使用SQL。你可以到附近的書店去買一本Microsoft SQL Sever 6.5。SQL介紹:本書假設(shè)你是在SQL操作Microsoft SQL Sever的數(shù)據(jù)庫。你也可以用SQL操作許多其它類型的數(shù)據(jù)庫。SQL是操作數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。(事實(shí)上,關(guān)于SQL語言有一個(gè)專門的ANSI標(biāo)準(zhǔn)注意:不要在你的站點(diǎn)上試圖用Microsoft Access代替Microsoft SQL Sever。SQL Sever可以同時(shí)服務(wù)于許多用戶,如果你希望你的站點(diǎn)有較高的訪問率,MS Access是不能勝任的。在學(xué)習(xí)SQL的細(xì)節(jié)之前,你需要理解它的兩大特點(diǎn)。一個(gè)特點(diǎn)容易掌握,另一個(gè)掌握起來有點(diǎn)困難。第一個(gè)特點(diǎn)是所有SQL數(shù)據(jù)庫中的數(shù)據(jù)都存儲(chǔ)在表中。一個(gè)表由行和列組成。例如,下面這個(gè)簡單的表包括name和e-mail address:Name Email Address.Bill Gates billgmicrosoft.compresident Clinton presidentwhitehouse.comStephen Walther swalthersomewhere.com這個(gè)表有兩列(列也稱為字段,域:Name和Email Address。有三行,每一行包含一組數(shù)據(jù)。一行中的數(shù)據(jù)組合在一起稱為一條記錄。無論何時(shí)你向表中添加新數(shù)據(jù),你就添加了一條新記錄。一個(gè)數(shù)據(jù)表可以有幾十個(gè)記錄,也可以有幾千甚至幾十億個(gè)記錄。雖然你也許永遠(yuǎn)不需要存儲(chǔ)十億個(gè)Email地址,但知道你能這樣做總是好的,也許有一天你會(huì)有這樣的需要。你的數(shù)據(jù)庫很有可能包含幾十個(gè)表,所有存儲(chǔ)在你數(shù)據(jù)庫中的信息都被存儲(chǔ)在這些表中。當(dāng)你考慮怎樣把信息存儲(chǔ)在數(shù)據(jù)庫中時(shí),你應(yīng)該考慮怎樣把它們存儲(chǔ)在表中。SQL的第二個(gè)特點(diǎn)有些難于掌握。這種語言被設(shè)計(jì)為不允許你按照某種特定的順序來取出記錄,因?yàn)檫@樣做會(huì)降低SQL Sever取記錄的效率。使用SQL,你只能按查詢條件來讀取記錄。當(dāng)考慮如何從表中取出記錄時(shí),自然會(huì)想到按記錄的位置讀取它們。例如,也許你會(huì)嘗試通過一個(gè)循環(huán),逐個(gè)記錄地掃描,來選出特定的記錄。在使用SQL時(shí),你必須訓(xùn)練自己,不要有這種思路。假如你想選出所有的名字是“Bill Gates”的記錄,如果使用傳統(tǒng)的編程語言,你也許會(huì)構(gòu)造一個(gè)循環(huán),逐個(gè)查看表中的記錄,看名字域是否是“Bill Gates”。這種選擇記錄的方法是可行的,但是效率不高。使用SQL,你只要說,“選擇所有名字域等于Bill Gates的記錄”,SQL就會(huì)為你選出所有符合條件的記錄。SQL會(huì)確定實(shí)現(xiàn)查詢的最佳方法。建設(shè)你想取出表中的前十個(gè)記錄。使用傳統(tǒng)的編程語言,你可以做一個(gè)循環(huán),取出前十個(gè)記錄后結(jié)束循環(huán)。但使用標(biāo)準(zhǔn)的SQL查詢,這是不可能實(shí)現(xiàn)的。從SQL的角度來說,在一個(gè)表中不存在前十個(gè)記錄這種概念。開始時(shí),當(dāng)你知道你不能用SQL實(shí)現(xiàn)某些你感覺應(yīng)該能實(shí)現(xiàn)的功能,你會(huì)受到挫折。你也許會(huì)以頭撞墻甚至想寫惡毒的信件給SQL的設(shè)計(jì)者們。但后來你會(huì)認(rèn)識(shí)到,SQL的這個(gè)特點(diǎn)不僅不是個(gè)限制,反而是其長處。因?yàn)镾QL不根據(jù)位置來讀取記錄,它讀取記錄可以很快。綜上所述,SQL有兩個(gè)特點(diǎn):所有數(shù)據(jù)存儲(chǔ)在表中,從SQL的角度來說,表中的記錄沒有順序。在下一節(jié),你將學(xué)會(huì)怎樣用SQL從表中選擇特殊的記錄。使用SQL從表中取記錄。SQL的主要功能之一是實(shí)現(xiàn)數(shù)據(jù)庫查詢。如果你熟悉Internet引擎,那么你已經(jīng)熟悉查詢了。你使用查詢來取得滿足特定條件的信息。例如,如果你想找到有ASP信息的全部站點(diǎn),你可以連接到 Yahoo!并執(zhí)行一個(gè)對(duì)Active Sever Pages的搜索。在你輸入這個(gè)查詢后,你會(huì)收到一個(gè)列表,表中包括所有其描述中包含搜索表達(dá)式的站點(diǎn)。多數(shù)Internet引擎允許邏輯查詢。在邏輯查詢中,你可以包括特殊的運(yùn)算符如AND、OR和NOT,你使用這些運(yùn)算符來選擇特定的記錄。例如,你可以用AND來限制查詢結(jié)果。如果你執(zhí)行一個(gè)對(duì)Active Sever Pages AND SQL的搜索。你將得到其描述中同時(shí)包含Active Sever Pages和SQL的記錄。當(dāng)你需要限制查詢結(jié)果時(shí),你可以使用AND。如果你需要擴(kuò)展查詢的結(jié)果,你可以使用邏輯操作符OR。例如,如果你執(zhí)行一個(gè)搜索,搜索所有的其描述中包含Active Sever Pages OR SQL的站點(diǎn),你收到的列表中將包括所有其描述中同時(shí)包含兩個(gè)表達(dá)式或其中任何一個(gè)表達(dá)式的站點(diǎn)。如果你想從搜索結(jié)果中排除特定的站點(diǎn),你可以使用NOT。例如,查詢“Active Sever Pages ”AND NOT “SQL”將返回一個(gè)列表,列表中的站點(diǎn)包含Active Sever Pages,但不包含SQL。當(dāng)必須排除特定的記錄時(shí),你可以使用NOT。用SQL執(zhí)行的查詢與用Internet搜索引擎執(zhí)行的搜索非常相似。當(dāng)你執(zhí)行一個(gè)SQL查詢時(shí),通過使用包括邏輯運(yùn)算符的查詢條件,你可以得到一個(gè)記錄列表。此時(shí)查詢結(jié)果是來自一個(gè)或多個(gè)表。SQL查詢的句法非常簡單。假設(shè)有一個(gè)名為email_table的表,包含名字和地址兩個(gè)字段,要得到Bill Gates的e_mail地址,你可以使用下面的查詢:SELECT email from email_table WHERE name="Bill Gates"當(dāng)這個(gè)查詢執(zhí)行時(shí),就從名為email_table的表中讀取Bill Gates的e_mail地址。這個(gè)簡單的語句包括三部分: SELECT語句的第一部分指名要選取的列。在此例中,只有email列被選取。當(dāng)執(zhí)行 時(shí),只顯示email列的值 billgmicrosoft.com。 SELECTT語句的第二部份指明要從哪個(gè)(些)表中查詢數(shù)據(jù)。在此例中,要查詢的表名為email_table。最后,SELECT語句的WHERE子句指明要選擇滿足什么條件的記錄。在此例中,查詢條件為只有name列的值為Bill Gates的記錄才被選取。Bill Gates很有可能擁有不止一個(gè)email地址。如果表中包含Bill Gates的多個(gè)email地址。用上述的SELECT語句可以讀取他所有的email地址。SELECT語句從表中取出所有name字段值為Bill Gates的記錄的email字段的值。前面說過,查詢可以在查詢條件中包含邏輯運(yùn)算符。假如你想讀取Bill Gates或Clinton總統(tǒng)的所有email地址,你可以使用下面的查詢語句:SELECT email FROM email_table WHERE name="Bill Gates" OR name="president Clinton"此例中的查詢條件比前一個(gè)復(fù)雜了一點(diǎn)。這個(gè)語句從表email_table中選出所有name列為Bill Gates或president Clinton的記錄。如果表中含有Bill Gates或president Clinton的多個(gè)地址,所有的地址都被讀取。SELECT語句的結(jié)構(gòu)看起來很直觀。如果你請一個(gè)朋友從一個(gè)表中為你選擇一組記錄,你也許以非常相似的方式提出你的要求。在SQL SELECT語句中,你“SELECT特定的列FROM一個(gè)表WHERE某些列滿足一個(gè)特定的條件”。下一節(jié)將介紹怎樣執(zhí)行SQL查詢來選取記錄。這將幫助你熟悉用SELECT語句從表中取數(shù)據(jù)的各種不同方法。SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))2使用ISQL執(zhí)行SELECT查詢當(dāng)你安裝SQL Sever時(shí),你同時(shí)安裝了一個(gè)叫作ISQL/w的應(yīng)用程序。ISQL/w允許你執(zhí)行交互的SQL查詢。在把查詢包括到你的ASP網(wǎng)頁中之前,用ISQL/w對(duì)其進(jìn)行測試是非常有用的。注意:在這本書的第一部份,你學(xué)習(xí)了怎樣安裝和配置Microsoft SQL Sever。如果沒有安裝SQL Sever或者SQL Sever不能運(yùn)行,請參閱第三章“安裝和使用SQL Sever”。選擇任務(wù)上SQL Sever程序組中的ISQL_w以啟動(dòng)該程序。程序啟動(dòng)時(shí),首先會(huì)出現(xiàn)一個(gè)對(duì)話框,要求輸入服務(wù)器信息和登錄信息。在Sever框中,輸入你的SQL服務(wù)器的名字。如果服務(wù)器正運(yùn)行在本地計(jì)算機(jī)上,服務(wù)器名字就是你計(jì)算機(jī)的名字。在登錄信息框中,輸入一個(gè)登錄帳號(hào)和密碼或選擇使用“可信連接”,然后單擊Connect按鈕。 注意:如果你將SQL Sever配置為使用完整安全或混合安全,那么你可以使用可信連接。如果你使用標(biāo)準(zhǔn)安全,你則需要提供用戶帳號(hào)和密碼。要了解更多信息,參見第三章。如果一切正常,在你單擊連接按鈕后會(huì)出現(xiàn)一個(gè)查詢窗口。(如果有異常,請參考第三章) 在執(zhí)行查詢之前,你需要選擇數(shù)據(jù)庫。安裝 SQL Sever時(shí)你已為自己創(chuàng)建了一個(gè)數(shù)據(jù)庫,SQL Sever還有許多系統(tǒng)數(shù)據(jù)庫,如master,model,msdb,和tempdb。方便的是,SQL Sever帶有一個(gè)特殊的名為pubs的例子數(shù)據(jù)庫。庫 pubs中包含供一個(gè)虛擬的出版商使用的各個(gè)表。文檔中所有的例子程序都是針對(duì)這個(gè)庫來設(shè)計(jì)的。本書中的許多例子也使用這個(gè)數(shù)據(jù)庫。在查詢窗口頂部的DB下拉框中選擇數(shù)據(jù)庫pubs,這樣你就選擇了數(shù)據(jù)庫。你所有的查詢都將針對(duì)這個(gè)庫中的各個(gè)表來執(zhí)行?,F(xiàn)在你可以執(zhí)行你的第一個(gè)查詢了。這真讓人興奮!你的第一個(gè)查詢將針對(duì)一個(gè)名為autrors的表,表中包含所有為某個(gè)虛擬出版商工作的作者的相關(guān)數(shù)據(jù)。單擊查詢窗口并輸入以下的語句:SELECT phone FROM authors WHERE au_name="Ringer"輸入完成后,單擊執(zhí)行查詢按鈕(一個(gè)綠色三角形,看起來像VCR播放鍵)。單擊此按鈕后,任何出現(xiàn)在查詢窗口中的語句均會(huì)被執(zhí)行。查詢窗口會(huì)自動(dòng)變成結(jié)果顯示窗口,你可以看到查詢的結(jié)果。在SQL Sever的不同版本中,庫pubs中的數(shù)據(jù)會(huì)有所不同。對(duì)SQL Sever 6.5來說,將會(huì)找到兩條記錄。結(jié)果顯示窗口中應(yīng)顯示如下內(nèi)容:phone.801 826_0752801 826_0752(2 row(s) affected)你所執(zhí)行的SELECT語句從表authors中取出所有名字為Ringer的作者的電話號(hào)碼。你通過在WHERE子句中使用特殊的選擇條件來限制查詢的結(jié)果。你也可以忽略選擇條件,從表中取出所有作者的電話號(hào)碼。要做到這一點(diǎn),單擊Query標(biāo)簽,返回到查詢窗口,輸入以下的SELECT語句:SELECT Phone FROM authors這個(gè)查詢執(zhí)行后,會(huì)取出表authors中的所有電話號(hào)碼(沒有特定的順序)。如果表authors中包含一百個(gè)電話號(hào)碼,會(huì)有一百個(gè)記錄被取出,如果表中有十億個(gè)電話號(hào)碼,這十億條記錄都會(huì)被取出(這也許需要一些時(shí)間)。表authrs的字段包括姓,名字,電話號(hào)碼,地址,城市,州和郵政編碼。通過在SELECT語句的第一部份指定它們,你可以從表中取出任何一個(gè)字段。你可以在一個(gè)SELECT語句中一次取出多個(gè)字段,比如:SELECT au_fname ,au_lname, phone FROM authors這個(gè)SELECT語句執(zhí)行后,將取出這三個(gè)列的所有值。下面是這個(gè)查詢的結(jié)果的一個(gè)示例(為了節(jié)省紙張,只顯示查詢結(jié)果的一部分,其余記錄用省略號(hào)代替):au_fname au_lname phone .Johnson White 408 496_7223Marjorie Green 415 986_7020Cheryl Carson 415 548_7723Michael OLeary 408 286_2428 (23 row(s) affected)在SELECT語句中,你需要列出多少個(gè)字段,你就可以列出多少。不要忘了把字段名用逗號(hào)隔開。你也可以用星號(hào)(*)從一個(gè)表中取出所有的字段。這里有一個(gè)使用星號(hào)的例子:SELECT * FROM authors這個(gè)SELECT語句執(zhí)行后,表中的所有字段的值都被取出。你會(huì)發(fā)現(xiàn)你將在SQL查詢中頻繁使用星號(hào)。技巧:你可以使用星號(hào)來查看一個(gè)表的所有列的名字。要做到這一點(diǎn),只需要在執(zhí)行完SELECT語句后看一下查詢結(jié)果的列標(biāo)題。操作多個(gè)表到現(xiàn)在為止,你只嘗試了用一句SQL查詢從一個(gè)表中取出數(shù)據(jù)。你也可以用一個(gè)SELECT語句同時(shí)從多個(gè)表中取出數(shù)據(jù),只需在SELECT語句的FROM從句中列出要從中取出數(shù)據(jù)的表名稱即可:SELECT au_lname ,title FROM authors, titles 這個(gè)SELECT語句執(zhí)行時(shí),同時(shí)從表authors和表titles中取出數(shù)據(jù)。從表authors中取出所有的作者名字,從表titles中取出所有的書名。在ISQL/w程序中執(zhí)行這個(gè)查詢,看一下查詢結(jié)果。你會(huì)發(fā)現(xiàn)一些奇怪的出乎意料的情況:作者的名字并沒有和它們所著的書相匹配,而是出現(xiàn)了作者名字和書名的所有可能的組合,這也許不是你所希望見到的。出了什么差錯(cuò)?問題在于你沒有指明這兩個(gè)表之間的關(guān)系。你沒有通過任何方式告訴SQL如何把表和表關(guān)聯(lián)在一起。由于不知道如何關(guān)聯(lián)兩個(gè)表,服務(wù)器只能簡單地返回取自兩個(gè)表中的記錄的所有可能組合。要從兩個(gè)表中選出有意義的記錄組合,你需要通過建立兩表中字段的關(guān)系來關(guān)聯(lián)兩個(gè)表。要做到這一點(diǎn)的途徑之一是創(chuàng)建第三個(gè)表,專門用來描述另外兩個(gè)表的字段之間的關(guān)系。表authors有一個(gè)名為au_id的字段,包含有每個(gè)作者的唯一標(biāo)識(shí)。表titles有一個(gè)名為title_id的字段,包含每個(gè)書名的唯一標(biāo)識(shí)。如果你能在字段au_id和字段title_id之間建立一個(gè)關(guān)系,你就可以關(guān)聯(lián)這兩個(gè)表。數(shù)據(jù)庫pubs中有一個(gè)名為titleauthor的表,正是用來完成這個(gè)工作。表中的每個(gè)記錄包括兩個(gè)字段,用來把表titles和表authors關(guān)聯(lián)在一起。下面的SELECT語句使用了這三個(gè)表以得到正確的結(jié)果:SELECT au_name,title FROM authors,titles,titleauthor WHERE authors.au_id=titleauthor.au_idAND titles.title_id=titleauthor.title_id 當(dāng)這個(gè)SELECT語句執(zhí)行時(shí),每個(gè)作者都將與正確的書名相匹配。表titleauthor指明了表authors和表titles的關(guān)系,它通過包含分別來自兩個(gè)表的各一個(gè)字段實(shí)現(xiàn)這一點(diǎn)。第三個(gè)表的唯一目的是在另外兩個(gè)表的字段之間建立關(guān)系。它本身不包含任何附加數(shù)據(jù)。注意在這個(gè)例子中字段名是如何書寫的。為了區(qū)別表authors和表titles中相同的字段名au_id,每個(gè)字段名前面都加上了表名前綴和一個(gè)句號(hào)。名為author.au_id的字段屬于表authors,名為titleauthor.au_id的字段屬于表titleauthor,兩者不會(huì)混淆。通過使用第三個(gè)表,你可以在兩個(gè)表的字段之間建立各種類型的關(guān)系。例如,一個(gè)作者也許寫了許多不同的書,或者一本書也許由許多不同的作者共同完成。當(dāng)兩個(gè)表的字段之間有這種“多對(duì)多”的關(guān)系時(shí),你需要使用第三個(gè)表來指明這種關(guān)系。但是,在許多情況下,兩個(gè)表之間的關(guān)系并不復(fù)雜。比如你需要指明表titles和表publishers之間的關(guān)系。因?yàn)橐粋€(gè)書名不可能與多個(gè)出版商相匹配,你不需要通過第三個(gè)表來指明這兩個(gè)表之間的關(guān)系。要指明表titles和表publishers之間的關(guān)系,你只要讓這兩個(gè)表有一個(gè)公共的字段就可以了。在數(shù)據(jù)庫pubs中,表titles和表publishers都有一個(gè)名為pub_id的字段。如果你想得到書名及其出版商的一個(gè)列表,你可以使用如下的語句:SELECT title,pub_name FROM titles,publishersWHERE titles.pub_id=publishers.pub_id當(dāng)然,如果一本書是由兩個(gè)出版商聯(lián)合出版的,那么你需要第三個(gè)表來代表這種關(guān)系。通常,當(dāng)你予先知道兩個(gè)表的字段間存在“多對(duì)多”關(guān)系時(shí),就使用第三個(gè)表來關(guān)聯(lián)這兩個(gè)表。反之,如果兩個(gè)表的字段間只有“一對(duì)一”或“一對(duì)多”關(guān)系,你可以使用公共字段來關(guān)聯(lián)它門。SQL數(shù)據(jù)操作基礎(chǔ)(初級(jí))3操作字段通常,當(dāng)你從一個(gè)表中取出字段值時(shí),該值與創(chuàng)建該表時(shí)所定義的字段名聯(lián)系在一起。如果你從表authors中選擇所有的作者名字,所有的值將會(huì)與字段名au_lname相聯(lián)系。但是在某些情況下,你需要對(duì)字段名進(jìn)行操作。在SELECT語句中,你可以在缺省字段名后面僅跟一個(gè)新名字來取代它。例如,可以用一個(gè)更直觀易讀的名字Author Last Name來代替字段名au_lname:SELECT au_lname "Author Last Name" FROM authors當(dāng)這個(gè)SELECT語句執(zhí)行時(shí),來自字段au_lname的值會(huì)與“Author Last Name”相聯(lián)系。查詢結(jié)果可能是這樣:Author Last Name . WhiteGreenCarsonOLearyStraight (23 row(s) affected)注意字段標(biāo)題不再是au_lname,而是被Author Last Name所取代。你也可以通過執(zhí)行運(yùn)算,來操作從一個(gè)表返回的字段值。例如,如果你想把表titles中的所有書的價(jià)格加倍,你可以使用下面的SELECT語句:SELECT price*2 FROM titles 當(dāng)這個(gè)查詢執(zhí)行時(shí),每本書的價(jià)格從表中取出時(shí)都會(huì)加倍。但是,通過這種途徑操作字段不會(huì)改變存儲(chǔ)在表中的書價(jià)。對(duì)字段的運(yùn)算只會(huì)影響SELECT語句的輸出,而不會(huì)影響表中的數(shù)據(jù)。為了同時(shí)顯示書的原始價(jià)格和漲價(jià)后的新價(jià)格,你可以使用下面的查詢:SELECT price "Original price", price*2 "New price" FROM titles當(dāng)數(shù)據(jù)從表titles中取出時(shí),原始價(jià)格顯示在標(biāo)題Original price下面,加倍后的價(jià)格顯示在標(biāo)題New price下面。結(jié)果可能是這樣:original price new price.39.98 11.95 23.90 5.98 39.98 (18 row(s) affected)你可以使用大多數(shù)標(biāo)準(zhǔn)的數(shù)學(xué)運(yùn)算符來操作字段值,如加(+),減(-),乘(*)和除(/)。你也可以一次對(duì)多個(gè)字段進(jìn)行運(yùn)算,例如:SELECT price*ytd_sales "total revenue" FROM titles在這個(gè)例子中,通過把價(jià)格與銷售量相乘,計(jì)算出了每種書的總銷售額。這個(gè)SELECT語句的結(jié)果將是這樣的:total revenue.81,859,0546,318,2055,978,7881,859,0540,619,68(18 row(s) affected)最后,你還可以使用連接運(yùn)算符(它看起來像個(gè)加號(hào))來連接兩個(gè)字符型字段:SELECT au_fname+" "+au_lname "author name" FROM authors在這個(gè)例子中,你把字段au_fname和字段au_lname粘貼在一起,中間用一個(gè)逗號(hào)隔開,并把查詢結(jié)果的標(biāo)題指定為author name。這個(gè)語句的執(zhí)行結(jié)果將是這樣的:author namesJohnson WhiteMarjorie GreenCheryl CarsonMichael OLearyDean Straight(23 row(s) affected)可以看到,SQL為你提供了對(duì)查詢結(jié)果的許多控制。你應(yīng)該在ASP編程過程中充分利用這些優(yōu)點(diǎn)。使用SQL來操作查詢結(jié)果幾乎總是比使用有同樣作用的腳本效率更高。排序查詢結(jié)果本章的介紹中曾強(qiáng)調(diào)過,SQL表沒有內(nèi)在的順序。例如,從一個(gè)表中取第二個(gè)記錄是沒有意義的。從SQL的角度看來,沒有一個(gè)記錄在任何其他記錄之前。然而,你可以操縱一個(gè)SQL查詢結(jié)果的順序。在缺省情況下,當(dāng)記錄從表中取出時(shí),記錄不以特定的順序出現(xiàn)。例如,當(dāng)從表authors中取出字段au_lname時(shí),查詢結(jié)果顯示成這樣:au_lname.WhiteGreenCarsonOLearyStraight(23 row(s) affected)看一列沒有特定順序的名字是很不方便的。如果把這些名字按字母順序排列,讀起來就會(huì)容易得多。通過使用ORDER BY子句,你可以強(qiáng)制一個(gè)查詢結(jié)果按升序排列,就像這樣:SELECT au_lname FROM authors ORDER BY au_lname當(dāng)這個(gè)SELECT語句執(zhí)行時(shí),作者名字的顯示將按字母順序排列。ORDER BY子句將作者名字按升序排列。你也可以同時(shí)對(duì)多個(gè)列使用ORDER BY子句。例如,如果你想同時(shí)按升序顯示字段au_lname和字段au_fname,你需要對(duì)兩個(gè)字段都進(jìn)行排序:SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname這個(gè)查詢首先把結(jié)果按au_lname字段進(jìn)行排序,然后按字段au_fname排序。記錄將按如下的順序取出:au_lname au_fname.Bennet AbrahamRinger AlbertRinger AnneSmith Meander(23 row(s) affected)注意有兩個(gè)作者有相同的名字Ringer。名為Albert Ringer的作者出現(xiàn)名為Anne Ringer的作者之前,這是因?yàn)樾誂lbert按字母順序應(yīng)排在姓Anne之前。如果你想把查詢結(jié)果按相反的順序排列,你可以使用關(guān)鍵字DESC。關(guān)鍵字DESC把查詢結(jié)果按降序排列,如下例所示:SELECT au_lname,au_fname FROM authors WHERE au_lname=”Ringer” ORDER BY au_lname ,au_fname DESC這個(gè)查詢從表authors中取出所有名字為Ringer的作者記錄。ORDER BY子句根據(jù)作者的名字和姓,將查詢結(jié)果按降序排列。結(jié)果是這樣的:au_lname au_fname.Ringer AnneRinger Albert(2 row(s) affectec)注意在這個(gè)表中,姓Anne出現(xiàn)在姓Albert之前。作者名字按降序顯示。你也可以按數(shù)值型字段對(duì)一個(gè)查詢結(jié)果進(jìn)行排序。例如,如果你想按降序取出所有書的價(jià)

注意事項(xiàng)

本文(SQL非常全面的入門教程.doc)為本站會(huì)員(小**)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!