《sql語言入門教程》word版.doc
《《sql語言入門教程》word版.doc》由會員分享,可在線閱讀,更多相關(guān)《《sql語言入門教程》word版.doc(50頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、SQL語言入門教程第一課 簡介SQL是英文Structured Query Language的縮寫,意思為結(jié)構(gòu)化查詢語言。 SQL語言的主要功能就是同各種數(shù)據(jù)庫建立聯(lián)系,進(jìn)行溝通。按照ANSI(美國國家標(biāo)準(zhǔn)協(xié)會)的規(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ù)庫都對SQL語句進(jìn)行了再開發(fā)和擴(kuò)展,但是包括Select, Insert, Up
2、date, Delete, Create, 以及Drop在內(nèi)的標(biāo)準(zhǔn)的SQL命令仍然可以被用來完成幾乎所有的數(shù)據(jù)庫操作。 下面,我們就來詳細(xì)介紹一下SQL語言的基本知識。一個典型的關(guān)系型數(shù)據(jù)庫通常由一個或多個被稱作表格的對象組成。數(shù)據(jù)庫中的所有數(shù)據(jù)或信息都被保存在這些數(shù)據(jù)庫表格中。數(shù)據(jù)庫中的每一個表格都具有自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數(shù)據(jù)類型,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數(shù)據(jù)。以下,是一個名為太平洋網(wǎng)絡(luò)學(xué)院的數(shù)據(jù)庫表格的實例。欄目用戶群新手上路電腦初學(xué)者軟件教室一般的電腦用戶設(shè)計教室電腦設(shè)計愛好者開發(fā)教室電腦編程人員該表格中“欄目”,
3、“用戶群”就是兩個不同的列,而表格中的每一行則包含了具體的表格數(shù)據(jù)。1. 創(chuàng)建表格2. 數(shù)據(jù)查詢3. 向表格中添加、更新、刪除記錄4. 刪除數(shù)據(jù)庫表格第二課 創(chuàng)建表格SQL語言中的create table語句被用來建立新的數(shù)據(jù)庫表格。create table語句的使用格式如下:create table tablename(column1 data type,column2 data type,column3 data type);如果用戶希望在建立新表格時規(guī)定列的限制條件,可以使用可選的條件選項:create table tablename(column1 data type constrai
4、nt,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)建新表格時,在關(guān)鍵詞create table后面加入所要建立的表格的名稱,然后在括號內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的SQL語句在結(jié)尾處都要使用“;”符號。使用SQL語句創(chuàng)建的數(shù)據(jù)庫表格和表
5、格中列的名稱必須以字母開頭,后面可以使用字母,數(shù)字或下劃線,名稱的長度不能超過30個字符。注意,用戶在選擇表格名稱時不要使用SQL語言中的保留關(guān)鍵詞,如select, create, insert等,作為表格或列的名稱。數(shù)據(jù)類型用來設(shè)定某一個具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采用varchar或char的數(shù)據(jù)類型,而不能使用number的數(shù)據(jù)類型。SQL語言中較為常用的數(shù)據(jù)類型為:char(size):固定長度字符串,其中括號中的size用來設(shè)定字符串的最大長度。Char類型的最大長度為255字節(jié)。varchar(size):可變長度字符串,最大長度由size設(shè)定。number(size
6、):數(shù)字類型,其中數(shù)字的最大位數(shù)由size設(shè)定。Date:日期類型。number(size,d):數(shù)字類型,size決定該數(shù)字總的最大位數(shù),而d則用于設(shè)定該數(shù)字在小數(shù)點后的位數(shù)。最后,在創(chuàng)建新表格時需要注意的一點就是表格中列的限制條件。所謂限制條件就是當(dāng)向特定列輸入數(shù)據(jù)時所必須遵守的規(guī)則。例如,unique這一限制條件要求某一列中不能存在兩個值相同的記錄,所有記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件還包括not null和primary key等。not null用來規(guī)定表格中某一列的值不能為空。primary key則為表格中的所有記錄規(guī)定了唯一的標(biāo)識符。第三課 數(shù)
7、據(jù)查詢在眾多的SQL命令中,select語句應(yīng)該算是使用最頻繁的。select語句主要被用來對數(shù)據(jù)庫進(jìn)行查詢并返回符合用戶查詢標(biāo)準(zhǔn)的結(jié)果數(shù)據(jù)。Select語句的語法格式如下:select column1 , column2,etc from tablenamewhere condition;( 表示可選項)select語句中位于select關(guān)鍵詞之后的列名用來決定那些列將作為查詢結(jié)果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“*”來設(shè)定返回表格中的所有列。select語句中位于from關(guān)鍵詞之后的表格名稱用來決定將要進(jìn)行查詢操作的目標(biāo)表格。Select語句中的where可選從句用
8、來規(guī)定哪些數(shù)據(jù)值或哪些行將被作為查詢結(jié)果返回或顯示。在where條件從句中可以使用以下一些運算符來設(shè)定查詢標(biāo)準(zhǔn):= 等于 大于= 大于等于= 小于等于 不等于除了上面所提到的運算符外,LIKE運算符在where條件從句中也非常重要。LIKE運算符的功能非常強(qiáng)大,通過使用LIKE運算符可以設(shè)定只選擇與用戶規(guī)定格式相同的記錄。此外,我們還可以使用通配符“%”用來代替任何字符串。舉例如下:select firstname, lastname, cityfrom employeewhere firstname LIKE E%;(注意,字符串必須被包含在單括號內(nèi))上述SQL語句將會查詢所有名稱以E開頭的
9、姓名?;蛘?,通過如下語句:select * from employeewhere firstname = May;查詢所有名稱為May的行。第四課 向表格中添加、更新、刪除記錄添加新記錄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,Mi
10、ng,45, No.77 Changan Road,Beijing);簡單來說,當(dāng)向數(shù)據(jù)庫表格中添加新記錄時,在關(guān)鍵詞insert into后面輸入所要添加的表格名稱,然后在括號中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞values的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。更新記錄SQL語言使用update語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。update語句的格式為:update tablenameset columnname = newvalue , nextcolumn = newvalue2.where columnname OPERATOR value and|or
11、 column OPERATOR value;例如:update employeeset age = age+1where first_name= Maryand last_name= Williams;使用update語句時,關(guān)鍵一點就是要設(shè)定好用于進(jìn)行判斷的where條件從句。刪除記錄SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete語句的格式為:delete from tablenamewhere columnname OPERATOR value and|or column OPERATOR value;例如:delete from employeewhere la
12、stname = May;簡單來說,蕩需要刪除某一行或某個記錄時,在delete from關(guān)鍵詞之后輸入表格名稱,然后在where從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用delete語句時不設(shè)定where從句,則表格中的所有記錄將全部被刪除。第五課 刪除數(shù)據(jù)庫表格在SQL語言中使用drop table命令刪除某個表格以及該表格中的所有記錄。drop table命令的使用格式為:drop table tablename;例如:drop table employee;如果用戶希望將某個數(shù)據(jù)庫表格完全刪除,只需要在drop table命令后輸入希望刪除的表格名稱即可。drop table命
13、令的作用與刪除表格中的所有記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列的信息不會改變。而使用drop table命令則會將整個數(shù)據(jù)庫表格的所有信息全部刪除。以上,我們對SQL語言主要的命令和語句進(jìn)行了較為詳細(xì)的介紹。應(yīng)該說SQL語句的語法結(jié)構(gòu)和風(fēng)格還是相當(dāng)簡單和直觀的,只要用戶結(jié)合實踐多加練習(xí),一定會在短期內(nèi)迅速掌握。以Store_Information數(shù)據(jù)表為例,我們可以在GROUP BY一節(jié)中所使用的SQL命令中設(shè)置如下字段和數(shù)據(jù)表別名:SELECT A1.store_name Store, SUM(Sales) Total SalesFROM Store_Inform
14、ation A1GROUP BY A1.store_name查詢結(jié)果顯示為:Store Total SalesLos Angeles $1800San Diego $250Boston $700SQL循序漸進(jìn)SQL循序漸進(jìn)(目錄)SQL循序漸進(jìn)(1)-介紹SQLSQL循序漸進(jìn)(2)-表的基礎(chǔ)知識SQL循序漸進(jìn)(3)-數(shù)據(jù)檢索SQL循序漸進(jìn)(4)-創(chuàng)建表SQL循序漸進(jìn)(5)-插入數(shù)據(jù)到表SQL循序漸進(jìn)(6)-刪除表SQL循序漸進(jìn)(7)-更新記錄SQL循序漸進(jìn)(8)-刪除記錄SQL循序漸進(jìn)(9)-SELECT語句SQL循序漸進(jìn)(10)-合計函數(shù)SQL循序漸進(jìn)(11)-GROUP BY子句SQL循序
15、漸進(jìn)(12)-HAVING子句SQL循序漸進(jìn)(13)-ORDER BY子句SQL循序漸進(jìn)(14)-組合條件和布爾運算符SQL循序漸進(jìn)(15)-IN 和 BETWEEN 條件運算符SQL循序漸進(jìn)(16)-數(shù)學(xué)運算符SQL循序漸進(jìn)(17)-JOIN子句SQL循序漸進(jìn)(18)-索引SQL循序漸進(jìn)(19)-DISTINCT和排除復(fù)制SQL循序漸進(jìn)(20)-Aliases 、In以及子查詢SQL循序漸進(jìn)(21)-更多的子查詢SQL循序漸進(jìn)(22)-EXISTS 和 ALLSQL循序漸進(jìn) (23) -UNION 和 外部連接SQL循序漸進(jìn) (24) -嵌入SQL (1)介紹SQLSQL(Structure
16、d Query Language,結(jié)構(gòu)查詢語言)是一個功能強(qiáng)大的數(shù)據(jù)庫語言。SQL通常使用于數(shù)據(jù)庫的通訊。ANSI(美國國家標(biāo)準(zhǔn)學(xué)會)聲稱,SQL是關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言。SQL語句通常用于完成一些數(shù)據(jù)庫的操作任務(wù),比如在數(shù)據(jù)庫中更新數(shù)據(jù),或者從數(shù)據(jù)庫中檢索數(shù)據(jù)。使用SQL的常見關(guān)系數(shù)據(jù)庫管理系統(tǒng)有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres等等。雖然絕大多數(shù)的數(shù)據(jù)庫系統(tǒng)使用SQL,但是它們同樣有它們自立另外的專有擴(kuò)展功能用于它們的系統(tǒng)。但是,標(biāo)準(zhǔn)的SQL命令,比如Select、 Insert、 Update、 Delete、
17、 Create和 Drop常常被用于完成絕大多數(shù)數(shù)據(jù)庫的操作。但是,不象其它的語言,如C、Pascal等,SQL沒有循環(huán)結(jié)構(gòu)(比如if-then-else、do-while)以及函數(shù)定義等等的功能。而且SQL只有一個數(shù)據(jù)類型的固定設(shè)置,換句話說,你不能在使用其它編程語言的時候創(chuàng)建你自己的數(shù)據(jù)類型。SQL功能強(qiáng)大,但是概括起來,它可以分成以下幾組:DML(Data Manipulation Language,數(shù)據(jù)操作語言):用于檢索或者修改數(shù)據(jù); DDL(Data Definition Language,數(shù)據(jù)定義語言): 用于定義數(shù)據(jù)的結(jié)構(gòu),比如 創(chuàng)建、修改或者刪除數(shù)據(jù)庫對象; DCL(Data
18、 Control Language,數(shù)據(jù)控制語言):用于定義數(shù)據(jù)庫用戶的權(quán)限。DML組可以細(xì)分為以下的幾個語句:SELECT:用于檢索數(shù)據(jù); INSERT:用于增加數(shù)據(jù)到數(shù)據(jù)庫; UPDATE:用于從數(shù)據(jù)庫中修改現(xiàn)存的數(shù)據(jù) DELETE:用于從數(shù)據(jù)庫中刪除數(shù)據(jù)。DDL語句可以用于創(chuàng)建用戶和重建數(shù)據(jù)庫對象。下面是DDL命令:CREATE TABLE ALTER TABLE DROP TABLE CREATE INDEX DROP INDEXDCL命令用于創(chuàng)建關(guān)系用戶訪問以及授權(quán)的對象。下面是幾個DCL命令: ALTER PASSWORD GRANT REVOKE CREATE SYNONYM為了
19、讓你對SQL有一個直觀的認(rèn)識,下面先給出一個簡單SQL語句的例子:我們使用SQL語句來從Employees中檢索Department ID為CS的姓名:SELECT Employees.NameFROM EmployeesWHERE Employees.DeptID = CS可能你現(xiàn)在一開始不太理解這些語句,也許你會一頭霧水,不要緊的,通過本教程的學(xué)習(xí)后,你會發(fā)現(xiàn)這段語句是多么的普通。為了不讓你困惑,下面我也進(jìn)行一番解釋:先對FROM子句吧,語句中的FROM Employees意思是從Employees表中檢索數(shù)據(jù)。而語句WHERE Employees.DeptID = CS意思是檢索Empl
20、oyees的DeptID列為”CS”的行,這樣SQL語句檢索的結(jié)果將是DeptID為CS的列的所有數(shù)據(jù),比如:EmpIDNameDept123PurpleCS124ZscCS最后,我們來解釋一個SELECT子句,它指定了從Name列檢索來的所有數(shù)據(jù),比如NamePurpleZsc好吧,開始我們下一節(jié)的教程-表的基本知識。(2)表的基礎(chǔ)知識關(guān)系數(shù)據(jù)庫通常包含多個表。數(shù)據(jù)庫實際上是表的集合,數(shù)據(jù)庫的數(shù)據(jù)或者信息都是存儲在表中的。表是對數(shù)據(jù)進(jìn)行存儲和操作的一種邏輯結(jié)構(gòu),每一個表都代表一個對用戶意義的對象。例如,一個公司數(shù)據(jù)庫中,會有雇員表、部門表、庫存表、銷售表、工資表等等。我們經(jīng)常見到的成績表就是
21、一種表,它是有行和列組成的,我們并且可以通過名字來識別數(shù)據(jù)。列包含了列的名字、數(shù)據(jù)類型以及列的其它屬性;行包含了列的記錄或者數(shù)據(jù)。下面給出一個成績單,其中姓名、語文、數(shù)學(xué)、英語都是列,而行包含了這個表的數(shù)據(jù),即每個人的各科成績:姓名語文數(shù)學(xué)英語王小童7810087張柳風(fēng)859295紫云飛658986黃天龍986775(3)數(shù)據(jù)檢索在SQL中SELECT語句通常用于檢索數(shù)據(jù)庫,或者檢索滿足你設(shè)定條件的數(shù)據(jù),以下是簡單的SELECT語句的格式:select column1,column2,etc from tablenamewhere condition; = optional 其中列的名字跟著S
22、ELECT關(guān)鍵字,它決定了哪一列將被作為結(jié)果返回。你可以任意指定多個列,或者你可以使用*來選擇所有的列。表的名字是緊跟著FROM關(guān)鍵字的,它指出了哪個表格將作為最后結(jié)果被查詢。而WHERE子句(可選)指出哪個數(shù)據(jù)或者行將被返回或者顯示,它是根據(jù)關(guān)鍵字WHERE后面描述的條件而來的。在WHERE子句中可以有以下的條件選擇:= 等于 大于= 大于等于= 小于等于 不等于LIKE 參見以下注釋注釋:LIKE 模式匹配操作符同樣可以使用在WHERE子句的條件條件中。LIKE是一個功能強(qiáng)大的操作符,它可以讓你選擇你喜歡指定的行。百分號% 可以被用來匹配任何可能的字符,它可以出現(xiàn)在指定字符的前面或者后面,
23、例如:select first, last, cityfrom empinfowhere first LIKE Er%; 以上這條SQL語句將會匹配任何名字以Er開始的名字,這里必須使用單引號。或者你也可以使用%在字符的前面,例如: select first, last from empinfowhere last LIKE %s; 這條SQL語句將會匹配任何名字以s結(jié)尾的名字。這個%的作用就跟DOS命令的號很相似。select * from empinfowhere first = Eric; 以上的SQL語句只選擇first名字為Eric的行。(4)創(chuàng)建表這個create table語句是
24、用于創(chuàng)建一個新的表格。以下是一個簡單創(chuàng)建表格語句的格式: create table tablename(column1 data type,column2 data type, column3 data type);如果你想使用可選的約束,創(chuàng)建表格的格式為: create table tablename(column1 data type constraint,column2 data type constraint,column3 data type constraint); = optional 這里注意:你可以任意創(chuàng)建多列的表格,這個條件是可選的。為了更好的理解,下面舉個例子:creat
25、e table employee(first varchar(15),last varchar(20),age number(3),address varchar(30),city varchar(20),state varchar(20);為了創(chuàng)建一個新表格,你可以在關(guān)鍵字create table之后跟著表的名字,然后一個圓左括號”(”,然后是第一列的名字,再是這一列的數(shù)據(jù)類型,接著是任意的可選約束,最后是圓右括號”)”。確保在開始表格內(nèi)容之前使用圓左括號并且在表的最后一列定義之后使用圓右括號是相當(dāng)重要的。你還要保證每一個列定義之間有逗號分隔。最后在SQL語句結(jié)束時候加上分號;。表格和列名必
26、須以字母開頭,第二個字符開始可以是字母、數(shù)字或者下劃線,但是要保證名字的總長度不要超過30個字符。在定義表格和列名不要使用不要使用SQL預(yù)定的用于表格或者列名的關(guān)鍵字(比如select、create、 insert等等),以避免錯誤的發(fā)生。數(shù)據(jù)類型是指在特定的列使用什么樣數(shù)據(jù)的類型。如果一個列的名字為Last_Name,它是用來容納人名的,所以這個特定列就應(yīng)該采用varchar (variable-length character,變長度的字符型) 數(shù)據(jù)類型。以下是幾種常見的數(shù)據(jù)類型:char(size) :固定長度的字符串型。Size是圓括號中指定的參數(shù),它可以由用戶隨意設(shè)置,但是不能超過2
27、55個字節(jié)。varchar(size) :變長度的字符串型。它的最大長度是由括號中的參數(shù)size設(shè)定的。number(size):數(shù)值型。最大數(shù)字的位數(shù)由括號中的參數(shù)size設(shè)置。date :日期數(shù)值型。number(size,d) :數(shù)值型。它的最大數(shù)字的位數(shù)由括號中的參數(shù)sieze設(shè)定,而括號中的參數(shù)d是設(shè)置小數(shù)點的位數(shù)。什么是約束呢?當(dāng)表被創(chuàng)建的時候,可以一列也可以多列共用一個約束。約束是一個跟列有關(guān)的基本準(zhǔn)則,返回的數(shù)據(jù)必須遵循這個準(zhǔn)則。下面舉個例子,一個約束指定在一列中不能有兩個記錄共用一個數(shù)值。它們必須單獨的。其它兩個流行的約束是:not null,它設(shè)置了列不能留空白,即一定要有
28、數(shù)據(jù);以及primary key(主鍵),主鍵約束定義了表中每一個記錄(或行)的唯一標(biāo)識。所有的這些將在以后的教程中再作進(jìn)一步闡述。好吧,也許你已經(jīng)有躍躍欲試的沖動了。作為本節(jié)練習(xí),下面我們自己來設(shè)計和創(chuàng)建表格。你可以開始創(chuàng)建一個公司的雇員表格。你需要創(chuàng)建一個包含firstname、lastname、 title、 age和 salary的表格。(5)插入數(shù)據(jù)到表Insert語句用于往表格中插入或者增加一行數(shù)據(jù),它的格式為:insert into tablename(first_column,.last_column)values (first_value,.last_value); = op
29、tional 簡單舉個例子:insert into employee(first, last, age, address, city)values (Luke, Duke, 45, 2130 Boars Nest, Hazard Co); 這里要注意:每一個字符竄都要用單引號括起來。為了往表中插入數(shù)據(jù),要在關(guān)鍵字insert into之后緊跟著表名,然后是左圓括號,接著是以逗號分開的一系列的列名,再是一個右圓括號,然后在關(guān)鍵字values之后跟著一系列用圓括號括起的數(shù)值。這些數(shù)值是你要往表格中填入的數(shù)據(jù),它們必須與指定的列名相匹配。字符串筆譯用單引號括起來,而數(shù)字就不用。在上面的例子中,Luk
30、e必須與列first相匹配,而45必須與列age相匹配。假如你想往employee表格中插入以下數(shù)據(jù);Zhang Weiguo,28,北京601信箱,北京那么你要使用以下的SQL語句:insert into employee(first, last, age, address, city)values ( Zhang, Weiguo ,28, 北京601信箱, 北京);(6)刪除表Drop table命令用于刪除一個表格或者表中的所有行。其語法格式為:drop table tablename 下面舉個例子:drop table employee; 為了刪除整個表(包括所有的行),可以使用dro
31、p table命令后加上tablename。Drop table命令跟從表中刪除所有記錄是不一樣的:刪除表中的所有記錄是留下表格(只是它是空的)以及約束信息;而drop table是刪除表的所有信息,包括所有行、表格以及約束信息等等。(7)更新記錄Update語句用于更新或者改變匹配指定條件的記錄,它是通過構(gòu)造一個where語句來實現(xiàn)的。其語句格式如下:update tablenameset columnname = newvalue,nextcolumn = newvalue2.where columnname OPERATOR value and|or column OPERATOR va
32、lue; = optional 下面舉個例子來說明:update phone_bookset area_code = 623where prefix = 979;以上語句是在phone_book表中,在prefix=979的行中將area_code設(shè)置為623。update phone_bookset last_name = Smith, prefix=555, suffix=9292where last_name = Jones;而以上的這段語句是在phone_book中,在last_name= Jones的行中將last_name 設(shè)置為 Smith, prefix為555, suffix
33、為9292。update employeeset age = age+1where first_name=Mary and last_name=Williams;這段語句是在employee表中,在first_name=Mary 和last_name=Williams的行中將age加1。作為每課一練,你在結(jié)束本教程之后要好好作以下的練習(xí):1 因為Jonie Weber 已經(jīng)跟Bob Williams結(jié)婚,所以它需要將它的last名更新為Weber-Williams。2 Dirk Smith的生日是今天,所以他的年齡應(yīng)該加1。3 所有的秘書都叫做Administrative Assistant.
34、所以要將所有的標(biāo)題標(biāo)題都相應(yīng)地修改。就作這幾個練習(xí),千萬不可大意喲。(8)刪除記錄Delete語句是用來從表中刪除記錄或者行,其語句格式為:delete from tablenamewhere columnname OPERATOR value and|or column OPERATOR value; = optional 下面還是舉個例子:delete from employee;這條語句沒有where語句,所以它將刪除所有的記錄,因此如果沒有使用where的時候,要千萬小心。如果你只要刪除其中一行或者幾行,可以參考以下的語句:delete from employeewhere lastn
35、ame = May; 這條語句是從emplyee表中刪除lastname為May的行。delete from employeewhere firstname = Mike or firstname = Eric; 這條語句是從emplyee表中刪除firstname為Mike或者Eric的行。為了從表中刪除一個完整的記錄或者行,就直接在delete from后面加上表的名字,并且利用where指明符合什么條件的行要刪除即可。如果你沒有使用where子句,那么表中的所有記錄或者行將被刪除。(9)SELECT語句在上面的教程中已經(jīng)有用到SELECT語句。在本節(jié)教程中將詳細(xì)對它進(jìn)行闡述。SELECT
36、語句是SQL的核心,在你的SQL語句中可能用的最多的就是SELECT語句了。由于大量的選項可以用于SELECT語句,所以整個教程好象就是圍這SELECT語句轉(zhuǎn)。當(dāng)我們構(gòu)造SQL查詢語句(利用了SELECT語句)的時候,認(rèn)識所有的可能選項和最好的或者最有效率的方法來實現(xiàn)是很有用的。這個教程將為你提供這些技能。SELECT語句用于查詢數(shù)據(jù)庫并檢索匹配你指定條件的選擇數(shù)據(jù)。SELECT語句有五個主要的子句子你可以選擇,而FROM是唯一必須的子句。每一個子句有大量的選擇項、參數(shù)等等。這些子句將羅列在下面,而且它們每一個都將在以后的教程有更為詳細(xì)的描述。以下是SELECT語句的格式:SELECT ALL
37、 | DISTINCT column1,column2FROM table1,table2WHERE conditionsGROUP BY column-listHAVING conditionsORDER BY column-list ASC | DESC 下面舉個例子:SELECT name, age, salaryFROM employeeWHERE age 50; 上面的這個語句將從employee表中選擇age大于50的所有的name、age和salary列的數(shù)值。注意:一定要在SQL語句末尾加上一個分號。這個分號提示SQL語句已經(jīng)結(jié)束并準(zhǔn)備被解釋。以下的表格給出了各種比較運算符號:
38、=等于大于=大于等于=小于等于不等于LIKE字符串比較測驗舉個例子吧:SELECT name, title, deptFROM employeeWHERE title LIKE Pro%;上面的語句是從employee表中選擇title是以Pro為開頭的name、title和dept列中的所有行或者數(shù)值。另外ALL和DISTINCT也是SQL中的關(guān)鍵字,它們用于在你的查詢結(jié)果中選擇ALL(缺?。┗蛘遜istinct或者單一記錄。如果你想在指定的列中檢索單一記錄,你可以使用DISTINCT 關(guān)鍵子。 因為DISTNCT 將會丟棄所有你在SELECT指定的列復(fù)制的記錄,比如 : SELECT DI
39、STINCT age FROM employee_info; 這條語句將返回所有在employee_info表中單一的age數(shù)據(jù)。而ALL就將顯示所有指定的類,包括所有的復(fù)制數(shù)據(jù)。在沒有指定的時候,這個ALL關(guān)鍵字是缺省的。(10)合計函數(shù)所有的合計函數(shù)如下表所示:MIN返回一個給定列中最小的數(shù)值MAX返回一個給定列中最大的數(shù)值SUM返回一個給定列中所有數(shù)值的總和AVG返回一個給定列中所有數(shù)值的平均值COUNT返回一個給定列中所有數(shù)值的個數(shù)COUNT(*)返回一個表中的行數(shù)合計函數(shù)用于從SELECT語句中計算一個”返回列的數(shù)據(jù)”。它們是總結(jié)了所選數(shù)據(jù)列的結(jié)果。雖然它們需要GROUP BY子句(
40、后面一個教程介紹),但是這些函數(shù)也可以在不用使用GROUP BY子句的情況被使用,比如 :SELECT AVG(salary)FROM employee;這條語句將返回單一的結(jié)果,它包含了從employee表中所有salary列數(shù)據(jù)的平均值。為了更好的理解,我們再舉個例子:SELECT AVG(salary)FROM employee;WHERE title = Programmer; 以上這條語句將返回employee表中所有title列為Programmer的數(shù)據(jù)的平均值。下面的例子中使用的語句跟其它合計函數(shù)有點不用,因為沒有一個類被指定給COUNT函數(shù)。這條語句實際上將返回employe
41、e表的行數(shù),如下:SELECT Count(*)FROM employees;最后給出本節(jié)教程的配套練習(xí):1)作一個公司的銷售表items_ordered,里面有price、product和amount。從items_ordered表中選擇price最大的數(shù)據(jù)。這里提示:使用MAX函數(shù)。 2) 計算items_ordered表中的行數(shù)。(11)GROUP BY子句GROUP BY子句首先講講GROUP BY 子句語法: SELECT column1, SUM(column2)FROM list-of-tablesGROUP BY column-list; 這個GROUP BY子句將集中所有的行
42、在一起,它包含了指定列的數(shù)據(jù)以及允許合計函數(shù)來計算一個或者多個列。當(dāng)然最好解釋的方法是給出一個例子啦:假設(shè)我們將從employee表中搜索工資最高的列,可以使用以下的SQL語句:SELECT max(salary), deptFROM employee GROUP BY dept; 這條語句將在每一個單獨的部門中選擇工資最高的工資。結(jié)果他們的salary和dept將被返回。(12)HAVING子句HAVING子句下面先給出HAVING子句的語法:SELECT column1, SUM(column2)FROM list-of-tablesGROUP BY column-listHAVING c
43、ondition; 這個HAVING子句允許你為每一個組指定條件,換句話說,可以根據(jù)你指定的條件來選擇行。如果你想使用HAVING子句的話,它應(yīng)該處再GROUP BY子句之后。下面將以一個例子來解釋HAVING子句。假設(shè)我們的employee表中包含雇員的name、departmen、salary和age。如果你想為每個部門中每個雇員選擇平均工資的話,你可以使用下面的SQL語句:SELECT dept, avg(salary)FROM employeeGROUP BY dept; 當(dāng)然,如果你還想只計算和顯示salary大于20000的平均工資的話,你還可以加上HAVING子句:SELECT
44、dept, avg(salary)FROM employeeGROUP BY deptHAVING avg(salary) 20000;(13)ORDER BY子句ORDER BY子句ORDER BY子句的語法為:SELECT column1, SUM(column2)FROM list-of-tablesORDER BY column-list ASC | DESC; = optional ORDER BY是一個可選的子句,它允許你根據(jù)指定要order by的列來以上升或者下降的順序來顯示查詢的結(jié)果。例如: ASC = Ascending Order 這個是缺省的DESC = Descend
45、ing Order 下面舉個例子:SELECT employee_id, dept, name, age, salaryFROM employee_infoWHERE dept = SalesORDER BY salary; 這條SQL語句將從employee_info表中列dept等于Sales選擇employee_id,、dept、 name、 age和 salary,并且根據(jù)他們的salary按升序的順序來列出檢索結(jié)果。如果你想對多列排序的話,那么在列與列之間要加上逗號,比如 :SELECT employee_id, dept, name, age, salaryFROM employe
46、e_infoWHERE dept = SalesORDER BY salary, age DESC;(14)組合條件和布爾運算符以下的SQL語句中就含有組合條件:SELECT column1, SUM(column2)FROM list-of-tablesWHERE condition1 AND condition2; AND運算符可以在WHERE子句中連接兩個或者多個條件。AND條件的兩旁必須都為true(真),即兩個條件都同時滿足的時候,這些行才將被顯示。當(dāng)然,你也可以使用OR運算符,它也可以在WHERE子句中連接兩個或者多個條件。但是,只要OR運算符兩旁有一個為true的時候條件就滿足了
47、,因此行才會被顯示。所以你使用OR運算符的時候,可以是OR運算符兩旁只有一個為true或者兩旁都為true。下面舉個例子吧:SELECT employeeid, firstname, lastname, title, salaryFROM employee_infoWHERE salary = 50000.00 AND title = Programmer; 這條SQL語句是從employee_info表中選擇salary大于等于50000.00并且title等于Programmer的列employeeid、 firstname、 lastname、 title和 salary。此時必須AND
48、運算符兩旁的條件都為真,行才會最為檢索結(jié)果返回。如果其中有一個條件為假,那么就什么都沒有顯示。你可以使用圓括號將條件括起來,雖然它們也不一定是必須的,但是括起來看起來更清晰一些,這是一個編程習(xí)慣的問題。比如 :SELECT employeeid, firstname, lastname, title, salaryFROM employee_infoWHERE (salary = 50000.00) AND (title = Programmer); 下面再舉個例子:SELECT firstname, lastname, title, salaryFROM employee_infoWHERE
49、 (title = Sales) OR (title = Programmer); 這條語句將從employee_info表中選擇title等于Sales或者等于Programmer的列firstname、 lastname, title和 salary。(15)IN 和 BETWEEN 條件運算符下面是IN條件運算符的SQL語句:SELECT column1, SUM(column2)FROM list-of-tablesWHERE column3 IN (list-of-values); 下面是BETWEEN條件運算符的SQL語句:SELECT column1, SUM(column2)F
50、ROM list-of-tablesWHERE column3 BETWEEN value1 AND value2; 實際上,IN條件運算符是一個設(shè)置成員測試運算符,也就是說,它用于測試是否一個數(shù)值處在IN關(guān)鍵字之后提供的數(shù)值之中。舉個例子如下:SELECT employeeid, lastname, salaryFROM employee_infoWHERE lastname IN (Hernandez, Jones, Roberts, Ruiz); 這條語句是從employee_info表中選擇lastname等于Hernandez、Jones、 Roberts或者 Ruiz名字之一的列e
51、mployeeid、 lastname和 salary。如果它在其中就將返回行。IN條件運算符可以使用混合條件來替代,比如你可以使用等號運算符或者使用OR運算符等等,但是結(jié)果是一樣的,例如:SELECT employeeid, lastname, salaryFROM employee_infoWHERE lastname = Hernandez OR lastname = Jones OR lastname = Roberts OR lastname = Ruiz; 你可以觀察到,利用IN運算符時語句會更加簡短并且容易讀,特別是在你測試兩個或者三個數(shù)值以上的時候尤為突出。當(dāng)然你也可以使用NO
52、T IN 來在你的列表中排除行的。而BETWEEN條件運算符是用與測試一個數(shù)值是否處在BETWEEN關(guān)鍵字兩邊指定數(shù)值的中間,比如:SELECT employeeid, age, lastname, salaryFROM employee_infoWHERE age BETWEEN 30 AND 40; 這條SQL語句是從employee_info表中選擇age處于30到40歲之間(包括30歲和40歲)的列employeeid、age、 lastname和salary。這條語句同樣可以不用BETWEEN運算符,而使用混合條件來替代,例如:SELECT employeeid, age, last
53、name, salaryFROM employee_infoWHERE age = 30 AND age = 40; 當(dāng)然,你也可以類似于NOT IN的方法,使用NOT BETWEEN來排除一些數(shù)據(jù)。(16)數(shù)學(xué)運算符標(biāo)準(zhǔn)的ANSI SQL-92支持下面四個基本的算術(shù)運算符:+加-減*乘/除%求余其中求余運算符決定除法的余數(shù)。這個運算符不是ANSI SQL支持的,但是,絕大多數(shù)的數(shù)據(jù)庫支持他。下面是一些有用的數(shù)學(xué)函數(shù),因為可能要用到它,所以我這里要集中提一下。在ANSI SQL-92中不支持這些函數(shù),但是它們可能對于某些特殊的RDBMS是有效的。然而它們對于幾個主要的數(shù)據(jù)庫系統(tǒng)都是有效的。下面
54、就說說這些數(shù)學(xué)函數(shù)吧:ABS(x)返回x的絕對值SIGN(x)當(dāng)x為負(fù)數(shù)、零、正數(shù)的時候分別返回x的符號-1、0或者1MOD(x,y)返回x除以y的余數(shù),跟x%y作用一樣FLOOR(x)返回小于等于x的最大整數(shù)CEILING(x) 或 CEIL(x)返回大于等于x的最小整數(shù)POWER(x,y)返回x的y次方的數(shù)值ROUND(x)返回最接近于x的數(shù)ROUND(x,d)返回小數(shù)點數(shù)為4的接近于x的數(shù)SQRT(x)返回x的平方根下面舉個例子:SELECT round(salary), firstnameFROM employee_info 上面這條語句將從employee_info表中選擇salar
55、y最接近的數(shù)以及firstname列。(17)JOIN子句不知你有沒有發(fā)現(xiàn)直到現(xiàn)在我們利用SELECT語句來檢索的時候只能從一個表中進(jìn)行。如果你想從兩個表或者更多的表中進(jìn)行檢索,該怎么辦呢?好在我們可以使用SQL和關(guān)系數(shù)據(jù)庫系統(tǒng)的一個很有用的特性,即Join。為了簡單說明,實際上Join就是使得關(guān)系數(shù)據(jù)庫系統(tǒng)相關(guān)的東東。Join允許你從兩個表或者更多的表連接數(shù)據(jù)進(jìn)行數(shù)據(jù)檢索,而只需要利用一個SELECT語句。如果在FROM關(guān)鍵字之后有多個表的話,Join可以在SQL SELECT語句中識別它們。下面舉個例子:SELECT list-of-columnsFROM table1,table2WHE
56、RE search-condition(s) Join通過示范當(dāng)你只處理一個表的時候會發(fā)生什么事情可以使得Join的解釋更簡單,所以這里我沒有使用Join。這個單一的數(shù)據(jù)庫有事也被稱為flat table(平表)?,F(xiàn)在你有一個表的數(shù)據(jù)庫用來檢索所有顧客的信息以及他們從你的商店買了什么,下面就是這個表的所有列:每次一個新行被插入到表中,所有的列都將被更新,這樣就導(dǎo)致了不必要的”多余數(shù)據(jù)”。比如,每次Jenny買東西,下面的行都將被插入到表中:為了避免”多余數(shù)據(jù)”,一個最好的方法:讓數(shù)據(jù)庫有兩個表: 其中一個用來對顧客保持跟蹤;另外一個用來對他們買什么東西保持跟蹤。 即有Customer_info
57、 表和Purchases 表:Customer_info 表為:customer_number firstname lastname address city state zip Purchases 表為:customer_number date item price 現(xiàn)在開始,不管顧客什么時候進(jìn)行重復(fù)的購物,只有第二個表Purchases 需要更新。這樣我們就減少了多余的數(shù)據(jù),也就是說我們規(guī)格化了這個數(shù)據(jù)庫。你仔細(xì)點就會發(fā)現(xiàn)兩個表中還是有一個cusomer_number列是相同的。這個列包含了單獨的顧客號,它將用來JOIN(連接)兩個表。下面舉個例子來使用這兩個表,假如你想搜索顧客的名字以及
58、他們所買的東西,你可以使用以下的語句來實現(xiàn):SELECT customer_info.firstname, customer_info.lastname, purchases.itemFROM customer_info, purchasesWHERE customer_info.customer_number = purchases.customer_number; 特殊的Join有為Inner Join 或者Equijoin,這是一個最常見的Join類型,以后我們經(jīng)常用使用到或者看到。這里要注意每列總是在表名之前,這卻也不是必需的。這是一個好的練習(xí)對于幫助你澄清列后面跟著表的認(rèn)識有很大幫助
59、。如果兩個表之間有一個相同的列,它就是必須的。我這里推薦在使用JOIN的時候最好在所有列之后加上表名。注意;上面描述的這個語法將在絕大多數(shù)的數(shù)據(jù)庫系統(tǒng)起作用,本教程的也是一樣。但是結(jié)果你會發(fā)現(xiàn)你上面的語句并不起作用,請仔細(xì)檢查一下吧。當(dāng)然你可以試一試修改以上的代碼,你可以使用JOIN(ANSI SQL-92語法規(guī)范中的INNER JOIN):SELECT customer_info.firstname, customer_info.lastname, purchases.itemFROM customer_info INNER JOIN purchasesON customer_info.cu
60、stomer_number = purchases.customer_number; 再舉另外一個例子:SELECT employee_info.employeeid, employee_info.lastname, employee_issionFROM employee_info, employee_salesWHERE employee_info.employeeid = employee_sales.employeeid; 這個例子將從employee_info和employee_sales表中選擇當(dāng)employee_info表的employeeid等于employee_sales表的employeeid的employeeid 、emply
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案