SQL非常全面的入門教程
《SQL非常全面的入門教程》由會(huì)員分享,可在線閱讀,更多相關(guān)《SQL非常全面的入門教程(83頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
SQL語言快速入門入門教程 ......................................................................................................................2SQL 語言快速入門之一 .........................................................................................2SQL 語言快速入門之二 .........................................................................................3SQL 語言快速入門之三 .........................................................................................5基礎(chǔ)教程 ....................................................................................................................10SQL 數(shù)據(jù)操作基礎(chǔ)(初級(jí))1 ..................................................................................10SQL 數(shù)據(jù)操作基礎(chǔ)(初級(jí))2 ..................................................................................13SQL 數(shù)據(jù)操作基礎(chǔ)(初級(jí))3 ..................................................................................16SQL 數(shù)據(jù)操作基礎(chǔ)(初級(jí))4 ..................................................................................20SQL 數(shù)據(jù)操作基礎(chǔ)(初級(jí))5 ..................................................................................25SQL 數(shù)據(jù)操作基礎(chǔ)(中級(jí)) ...........................................................................................27SQL 數(shù)據(jù)操作基礎(chǔ)(中級(jí))1 ..................................................................................27SQL 數(shù)據(jù)操作基礎(chǔ)(中級(jí))2 ..................................................................................28SQL 數(shù)據(jù)操作基礎(chǔ)(中級(jí))3 ..................................................................................31SQL 數(shù)據(jù)操作基礎(chǔ)(中級(jí))4 ..................................................................................35SQL 數(shù)據(jù)操作基礎(chǔ)(中級(jí))5 ..................................................................................39全面接觸 SQL............................................................................................................44全面接觸 SQL 語法(1) ........................................................................................44全面接觸 SQL 語法(2) ........................................................................................46全面接觸 SQL 語法(3) ........................................................................................47全面接觸 SQL 語法(4) ........................................................................................49全面接觸 SQL 語法(5) ........................................................................................51全面接觸 SQL 語法(6) ........................................................................................53全面接觸 SQL 語法(7) ........................................................................................55SQL 語法詳解 ............................................................................................................59主要 SQL 語句詳解 (1) ........................................................................................59主要 SQL 語句詳解 (2) ........................................................................................63SQL 語法參考手冊(cè) ..............................................................................................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(美國(guó)國(guó)家標(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ù)查詢?cè)诒姸嗟?SQL 命令中,select 語句應(yīng)該算是使用最頻繁的。Select 語句主要被用來對(duì)數(shù)據(jù)庫進(jìn)行查詢并返回符合用戶查詢標(biāo)準(zhǔn)的結(jié)果數(shù)據(jù)。Select 語句的語法格式如下:select column1 [, column2,etc] from tablename[where 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));簡(jiǎn)單來說,創(chuàng)建新表格時(shí),在關(guān)鍵詞 create table 后面加入所要建立的表格的名稱,然后在括號(hào)內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的 SQL 語句在結(jié)尾處都要使用“;”符號(hào)。使用 SQL 語句創(chuàng)建的數(shù)據(jù)庫表格和表格中列的名稱必須以字母開頭,后面可以使用字母,數(shù)字或下劃線,名稱的長(zhǎng)度不能超過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):固定長(zhǎng)度字符串,其中括號(hào)中的 size 用來設(shè)定字符串的最大長(zhǎng)度。Char 類型的最大長(zhǎng)度為255字節(jié)。varchar(size):可變長(zhǎng)度字符串,最大長(zhǎng)度由 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”);簡(jiǎn)單來說,當(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= ‘Mary’and 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;簡(jiǎn)單來說,當(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ǎn)單和直觀的,只要用戶結(jié)合實(shí)踐多加練習(xí),一定會(huì)在短期內(nèi)迅速掌握。SQL 語言快速入門之三我們?nèi)粘J褂?SQL 語言的工作過程中,使用最多的還是從已經(jīng)建立好的數(shù)據(jù)庫中查詢信息。下面,我們就來詳細(xì)介紹一下如何使用 SQL 語言實(shí)現(xiàn)各種數(shù)據(jù)庫查詢操作。SELECT…FROM為方便講解,我們?cè)跀?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ù)庫查詢的最簡(jiǎn)單的命令就是 SELECT…FROM,語法格式為: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ù)。上文中,我們?cè)褂肧UM 函數(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ǎn)單的說,使用字段別名可以幫助我們有效的組織查詢的輸出結(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ù)表的查詢。為方便講解,我們?cè)跀?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ù)。這里,我們?cè)O(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ù)表別名,可以極大的簡(jiǎn)化對(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è)人簡(jiǎn)歷,所感興趣的工作等等這樣的信息。創(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è)字母的讀音讀作S-Q-L。 兩種發(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è)簡(jiǎn)單的表包括 name 和 e-mail address:Name Email Address................................................................Bill Gates billg@microsoft.compresident Clinton president@whitehouse.comStephen Walther swalther@somewhere.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è)限制,反而是其長(zhǎng)處。因?yàn)?SQL 不根據(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 查詢的句法非常簡(jiǎn)單。假設(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è)簡(jiǎn)單的語句包括三部分:■ SELECT 語句的第一部分指名要選取的列。在此例中,只有 email 列被選取。當(dāng)執(zhí)行 時(shí),只顯示 email 列的值 billg@microsoft.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)看起來很直觀。如果你請(qǐng)一個(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)行測(cè)試是非常有用的。注意:在這本書的第一部份,你學(xué)習(xí)了怎樣安裝和配置 Microsoft SQL Sever。如果沒有安裝 SQL Sever 或者 SQL Sever 不能運(yùn)行,請(qǐng)參閱第三章“安裝和使用 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è)查詢窗口。 (如果有異常,請(qǐng)參考第三章) 在執(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 O’Leary 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ù)器只能簡(jiǎn)單地返回取自兩個(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)系。- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- SQL 非常 全面 入門教程
鏈接地址:http://m.italysoccerbets.com/p-324281.html