




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SQL語(yǔ)言入門教程第一課簡(jiǎn)介SQL是英文Structured Query Language的縮寫,意思為結(jié)構(gòu)化查詢語(yǔ)言。SQL語(yǔ)言的主要功能就是同各種數(shù)據(jù)庫(kù)建立聯(lián)系,進(jìn)行溝通。按照ANSI (美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)。SQL語(yǔ)句可以用來(lái)執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫(kù)中的數(shù)據(jù),從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),如Oracle, Sybase, Microsoft SQL Server,Access等都采用了 SQL語(yǔ)言標(biāo)準(zhǔn)。雖然很多數(shù)據(jù)庫(kù)都對(duì) SQL語(yǔ)句進(jìn)行了再開發(fā)和擴(kuò)展,但是包括Select, Insert, Updat
2、e, Delete, Create,以及Drop在內(nèi)的標(biāo)準(zhǔn)的 SQL命令仍然可以被用 來(lái)完成幾乎所有的數(shù)據(jù)庫(kù)操作。下面,我們就來(lái)詳細(xì)介紹一下SQL語(yǔ)言的基本知識(shí)。一個(gè)典型的關(guān)系型數(shù)據(jù)庫(kù)通常由一個(gè)或多個(gè)被稱作表格的對(duì)象組成。數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)或信息都被保存在這些數(shù)據(jù)庫(kù)表格中。數(shù)據(jù)庫(kù)中的每一個(gè)表格都具有自己唯一的表格名 稱,都是由行和列組成,其中每一列包括了該列名稱,數(shù)據(jù)類型,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數(shù)據(jù)。以下,是一個(gè)名為太平洋網(wǎng)絡(luò)學(xué)院的數(shù)據(jù)庫(kù)表格的實(shí)例。欄目用戶群新手上路電腦初學(xué)者軟件教室一般的電腦用戶設(shè)計(jì)教室電腦設(shè)計(jì)愛(ài)好者開發(fā)教室電腦編程人員該表格中“欄目”,“用戶
3、群”就是兩個(gè)不同的列,而表格中的每一行則包含了具體的 表格數(shù)據(jù)。1. 創(chuàng)建表格2. 數(shù)據(jù)查詢3. 向表格中添加、更新、刪除記錄4. 刪除數(shù)據(jù)庫(kù)表格第二課創(chuàng)建表格SQL語(yǔ)言中的create table語(yǔ)句被用來(lái)建立新的數(shù)據(jù)庫(kù)表格。create table語(yǔ)句的使用格式如下:create table table name(colu mn1 data type,column2 data type, column3 data type);create table tablename(column1 data type constraint,column2 data type constraint,co
4、lumn3 data type constraint);create table employee(firstname varchar(15),lastname varchar(20),age number(3),address varchar(30),city varchar(20);create table 后面加入所要建立的表格的名稱,然 后在括號(hào)內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件等。注意,所有的 SQL 語(yǔ)句在結(jié)尾處都要使用“; ”符號(hào)。SQL 語(yǔ)句創(chuàng)建的數(shù)據(jù)庫(kù)表格和表格中列的名稱必須以字母開頭,后面可以使用字 母,數(shù)字或下劃線,名稱的長(zhǎng)度不能超過(guò) 30 個(gè)字符。注意,
5、用戶在選擇表格名稱時(shí)不要使 用 SQL 語(yǔ)言中的保留關(guān)鍵詞,如 select, create, insert 等,作為表格或列的名稱。varchar 或 char 的數(shù)據(jù)類型,而不能使用 number 的數(shù)據(jù)類型。SQL 語(yǔ)言中較為常用的數(shù)據(jù)類型為:char(size):固定長(zhǎng)度字符串,其中括號(hào)中的size用來(lái)設(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ù)字總的
6、最大位數(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 用來(lái)規(guī)定表格中某一列的值不能為空。 primary key 則為表格中的所有記錄規(guī)定了唯一的標(biāo)識(shí)符。第三課 數(shù)據(jù)查詢?cè)诒姸嗟腟QL命令中,select語(yǔ)句應(yīng)該算是使用最頻繁的。select語(yǔ)句主要被用來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢
7、并返回符合用戶查詢標(biāo)準(zhǔn)的結(jié)果數(shù)據(jù)。Select語(yǔ)句的語(yǔ)法格式如下:select column1 , column2,etc from tablenamewhere condition; 表示可選項(xiàng))select 語(yǔ)句中位于 select 關(guān)鍵詞之后的列名用來(lái)決定那些列將作為查詢結(jié)果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“* ”來(lái)設(shè)定返回表格中的所有列。select 語(yǔ)句中位于 from 關(guān)鍵詞之后的表格名稱用來(lái)決定將要進(jìn)行查詢操作的目標(biāo)表格。 Select 語(yǔ)句中的 where 可選從句用來(lái)規(guī)定哪些數(shù)據(jù)值或哪些行將被作為查詢結(jié)果返回或 顯示。where 條件從句中可以使用以下
8、一些運(yùn)算符來(lái)設(shè)定查詢標(biāo)準(zhǔn):= 等于> 大于< 小于>= 大于等于<= 小于等于 <> 不等于LIKE 運(yùn)算符在 where 條件從句中也非常重要。 LIKE 運(yùn)算 符的功能非常強(qiáng)大, 通過(guò)使用 LIKE 運(yùn)算符可以設(shè)定只選擇與用戶規(guī)定格式相同的記錄。 此 外,我們還可以使用通配符“ %”用來(lái)代替任何字符串。舉例如下:select firstname, lastname, cityfrom employeewhere firstname LIKE E%' ;SQL 語(yǔ)句將會(huì)查詢所有名稱以 E 開頭的姓名?;蛘?,通過(guò)如下語(yǔ)句: select * from
9、 employee where firstname = May ';May 的行。第四課 向表格中添加、更新、刪除記錄添加新記錄SQL 語(yǔ)言使用 insert 語(yǔ)句向數(shù)據(jù)庫(kù)表格中插入或添加新的數(shù)據(jù)行。 Insert 語(yǔ)句的使用格 式如下:insert into tablename (first_column,.last_column) values (first_value,.last_value);insert into employee (firstname, lastname, age, address, city) values (Li ','Ming '
10、;,45, No.77 Changan Road','Beijing '); insert into 后面輸入所要添加的 表格名稱,然后在括號(hào)中列出將要添加新值的列的名稱。最后,在關(guān)鍵詞 values 的后面按 照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的記錄值。SQL 語(yǔ)言使用 update 語(yǔ)句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。 update 語(yǔ)句的格式為: update tablenameset columnname = newvalue , nextcolumn = newvalue2. where columnname OPERATOR value and|or
11、 column OPERA TOR value;update employee set age = age+1 where first_name= Mary 'and last_name= Williams 'update 語(yǔ)句時(shí),關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的 where 條件從句。 刪除記錄SQL 語(yǔ)言使用 delete 語(yǔ)句刪除數(shù)據(jù)庫(kù)表格中的行或記錄。 Delete 語(yǔ)句的格式為: delete from tablenamewhere columnname OPERATOR value and|or column OPERA TOR value;delete from
12、 employee where lastname = May;delete from 關(guān)鍵詞之后輸入表格名稱, 然后在where從句中設(shè)定刪除記錄的判斷條件。注意,如果用戶在使用delete語(yǔ)句時(shí)不設(shè)定where 從句,則表格中的所有記錄將全部被刪除。第五課 刪除數(shù)據(jù)庫(kù)表格在SQL語(yǔ)言中使用drop table命令刪除某個(gè)表格以及該表格中的所有記錄。drop table命令的使用格式為:drop table tablename;drop table employee;drop table 命令后輸入希望刪除的 表格名稱即可。 drop table 命令的作用與刪除表格中的所有記錄不同。刪除表格
13、中的全部記 錄之后,該表格仍然存在,而且表格中列的信息不會(huì)改變。而使用drop table 命令則會(huì)將整個(gè)數(shù)據(jù)庫(kù)表格的所有信息全部刪除。我們對(duì) SQL 語(yǔ)言主要的命令和語(yǔ)句進(jìn)行了較為詳細(xì)的介紹。 應(yīng)該說(shuō) SQL 語(yǔ)句的 語(yǔ)法結(jié)構(gòu)和風(fēng)格還是相當(dāng)簡(jiǎn)單和直觀的, 只要用戶結(jié)合實(shí)踐多加練習(xí), 一定會(huì)在短期內(nèi)迅速 掌握。Store_Information 數(shù)據(jù)表為例, 我們可以在 GROUP BY 一節(jié)中所使用的 SQL 命令中 設(shè)置如下字段和數(shù)據(jù)表別名:SELECT A1.store_name Store, SUM(Sales) "Total Sales"FROM Store_In
14、formation A1GROUP BY A1.store_nameStore Total SalesLos Angeles $1800 San Diego $250 Boston $700SQL 循序漸進(jìn)SQL 循序漸進(jìn) (目錄 )SQL 循序漸進(jìn)(1) 介紹 SQLSQL 循序漸進(jìn)(2) 表的基礎(chǔ)知識(shí)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 語(yǔ)句SQL 循序漸進(jìn)( 10) 合計(jì)函數(shù)SQL 循序漸進(jìn)( 1
15、1)GROUP BY 子句SQL 循序漸進(jìn)( 12)HAVING 子句SQL 循序漸進(jìn)( 13)ORDER BY 子句SQL 循序漸進(jìn)( 14) 組合條件和布爾運(yùn)算符SQL 循序漸進(jìn)( 15)IN 和 BETWEEN 條件運(yùn)算符SQL 循序漸進(jìn)(16) 數(shù)學(xué)運(yùn)算符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)
16、(24)-一 嵌入SQL(1)介紹 SQLSQL(Structured Query Language ,結(jié)構(gòu)查詢語(yǔ)言 )是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)語(yǔ)言。SQL 通常使用于數(shù)據(jù)庫(kù)的通訊。 ANSI (美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))聲稱, SQL 是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的 標(biāo)準(zhǔn)語(yǔ)言。 SQL 語(yǔ)句通常用于完成一些數(shù)據(jù)庫(kù)的操作任務(wù),比如在數(shù)據(jù)庫(kù)中更新數(shù)據(jù),或 者從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)。使用 SQL 的常見(jiàn)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)有:Oracle、 Sybase、Microsoft SQL Server 、 Access、 Ingres 等等。雖然絕大多數(shù)的數(shù)據(jù)庫(kù)系統(tǒng)使用 SQL ,但是 它們同樣有它們自立另外的專有擴(kuò)展功能用于
17、它們的系統(tǒng)。但是,標(biāo)準(zhǔn)的SQL 命令,比如"Select"、"Insert"、 "Update"、 "Delete"、 "Create"和"Drop"常常被用于完成絕大多數(shù)數(shù)據(jù)庫(kù)的操作。但是,不象其它的語(yǔ)言,女口 C、Pascal 等, SQL沒(méi)有循環(huán)結(jié)構(gòu)(比如if-then-else、do-while ) 以及函數(shù)定義等等的功能。而且 SQL 只有一個(gè)數(shù)據(jù)類型的固定設(shè)置,換句話說(shuō),你不能在使用其它編程語(yǔ)言的時(shí)候創(chuàng)建你自己的數(shù)據(jù)類型。SQL功能強(qiáng)大,但是概括起來(lái),它可以分成以
18、下幾組:DML ( Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言):用于檢索或者修改數(shù)據(jù);DDL ( Data Definition Language,數(shù)據(jù)定義語(yǔ)言):用于定義數(shù)據(jù)的結(jié)構(gòu),比如創(chuàng)建、修改或者刪除數(shù)據(jù)庫(kù)對(duì)象;DCL ( Data Control Language,數(shù)據(jù)控制語(yǔ)言):用于定義數(shù)據(jù)庫(kù)用戶的權(quán)限。DML組可以細(xì)分為以下的幾個(gè)語(yǔ)句:SELECT :用于檢索數(shù)據(jù);INSERT :用于增加數(shù)據(jù)到數(shù)據(jù)庫(kù);UPDATE :用于從數(shù)據(jù)庫(kù)中修改現(xiàn)存的數(shù)據(jù)DELETE :用于從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)。DDL語(yǔ)句可以用于創(chuàng)建用戶和重建數(shù)據(jù)庫(kù)對(duì)象。下面是DDL命令:CREAT
19、E TABLEALTER TABLEDROP TABLECREATE INDEXDROP INDEXDCL命令用于創(chuàng)建關(guān)系用戶訪問(wèn)以及授權(quán)的對(duì)象。下面是幾個(gè)DCL命令:ALTER PASSWORDGRANTREVOKECREATE SYNONYM為了讓你對(duì)SQL有一個(gè)直觀的認(rèn)識(shí),下面先給出一個(gè)簡(jiǎn)單SQL語(yǔ)句的例子:我們使用 SQL語(yǔ)句來(lái)從 Employees中檢索 Department ID為CS的姓名:SELECT Employees.NameFROM EmployeesWHERE Employees.DeptID = "CS"可能你現(xiàn)在一開始不太理解這些語(yǔ)句,也許你會(huì)一
20、頭霧水,不要緊的,通過(guò)本教程的學(xué)習(xí)后,你會(huì)發(fā)現(xiàn)這段語(yǔ)句是多么的普通。為了不讓你困惑,下面我也進(jìn)行一番解釋:先對(duì)FROM子句吧,語(yǔ)句中的 FROM Employees意思是從 Employees表中檢索數(shù)據(jù)。而語(yǔ)句 WHERE Employees.DeptID = "CS"意思是檢索 Employees 的 DeptID 列為” CS” 的行, 這樣SQL語(yǔ)句檢索的結(jié)果將是 DeptID為CS的列的所有數(shù)據(jù),比如:EmpIDNameDeptID123PurpleCS124ZscCS最后,我們來(lái)解釋一個(gè) SELECT子句,它指定了從 Name列檢索來(lái)的所有數(shù)據(jù),比如好吧,開始我
21、們下一節(jié)的教程 表的基本知識(shí)。(2)表的基礎(chǔ)知識(shí)關(guān)系數(shù)據(jù)庫(kù)通常包含多個(gè)表。 數(shù)據(jù)庫(kù)實(shí)際上是表的集合, 數(shù)據(jù)庫(kù)的數(shù)據(jù)或者信息都是存 儲(chǔ)在表中的。表是對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和操作的一種邏輯結(jié)構(gòu), 每一個(gè)表都代表一個(gè)對(duì)用戶意義 的對(duì)象。例如,一個(gè)公司數(shù)據(jù)庫(kù)中,會(huì)有雇員表、部門表、庫(kù)存表、銷售表、工資表等等。我們經(jīng)常見(jiàn)到的成績(jī)表就是一種表,它是有行和列組成的,我們并且可以通過(guò)名字來(lái)識(shí)別數(shù)據(jù)。列包含了列的名字、數(shù)據(jù)類型以及列的其它屬性;行包含了列的記錄或者數(shù)據(jù)。下面給出一個(gè)成績(jī)單,其中姓名、語(yǔ)文、數(shù)學(xué)、英語(yǔ)都是列,而行包含了這個(gè)表的數(shù)據(jù),即每個(gè)人 的各科成績(jī):姓名語(yǔ)文數(shù)學(xué)英語(yǔ)王小童7810087張柳風(fēng)85929
22、5紫云飛658986黃天龍986775(3)數(shù)據(jù)檢索在SQL中SELECT語(yǔ)句通常用于檢索數(shù)據(jù)庫(kù),或者檢索滿足你設(shè)定條件的數(shù)據(jù),以下 是簡(jiǎn)單的SELECT語(yǔ)句的格式:select "colu mn 1",”colu mn 2",etc from "table name"where "con diti on"=opti onal其中列的名字跟著 SELECT關(guān)鍵字,它決定了哪一列將被作為結(jié)果返回。你可以任意 指定多個(gè)列,或者你可以使用"*"來(lái)選擇所有的列。表的名字是緊跟著 FROM關(guān)鍵字的,它指出了哪個(gè)表格
23、將作為最后結(jié)果被查詢。而WHERE子句(可選)指出哪個(gè)數(shù)據(jù)或者行將被返回或者顯示,它是根據(jù)關(guān)鍵字WHERE后面描述的條件而來(lái)的。在WHERE子句中可以有以下的條件選擇:=等于>大于<小于>=大于等于<=小于等于<>不等于LIKE 參見(jiàn)以下注釋注釋:LIKE模式匹配操作符同樣可以使用在WHERE子句的條件條件中。LIKE是一個(gè)功 能強(qiáng)大的操作符, 它可以讓你選擇你 "喜歡 " 指定的行。 百分號(hào) "%" 可以被用來(lái)匹配任何可能 的字符,它可以出現(xiàn)在指定字符的前面或者后面,例如: select first, last, c
24、ity from empinfo where first LIKE 'Er%'以上這條 SQL 語(yǔ)句將會(huì)匹配任何名字以 'Er' 開始的名字,這里必須使用單引號(hào)。 或者你也可以使用 "%" 在字符的前面,例如:select first, last from empinfo where last LIKE '%s'這條SQL語(yǔ)句將會(huì)匹配任何名字以's'結(jié)尾的名字。這個(gè)""的作用就跟 DOS命令的”衣"號(hào) 很相似。select * from empinfo where first =
25、'Eric'以上的SQL語(yǔ)句只選擇first名字為'Eric'的行。(4)創(chuàng)建表這個(gè) create table 語(yǔ)句是用于創(chuàng)建一個(gè)新的表格。以下是一個(gè)簡(jiǎn)單創(chuàng)建表格語(yǔ)句的格式: create table "tablename"("column1" "data type", "column2" "data type", "column3" "data type");如果你想使用可選的約束,創(chuàng)建表格的格式為: create tab
26、le "tablename"("column1" "data type" constraint, "column2" "data type" constraint, "column3" "data type" constraint); = optional 這里注意:你可以任意創(chuàng)建多列的表格,這個(gè)條件是可選的。 為了更好的理解,下面舉個(gè)例子: create table employee(first varchar(15), last varchar(20)
27、, age number(3), address varchar(30), city varchar(20), state varchar(20);為了創(chuàng)建一個(gè)新表格,你可以在關(guān)鍵字 create table 之后跟著表的名字,然后一個(gè)圓左 括號(hào)” (”,然后是第一列的名字,再是這一列的數(shù)據(jù)類型,接著是任意的可選約束,最后是 圓右括號(hào)” )”。確保在開始表格內(nèi)容之前使用圓左括號(hào)并且在表的最后一列定義之后使用圓 右括號(hào)是相當(dāng)重要的。你還要保證每一個(gè)列定義之間有逗號(hào)分隔。最后在SQL 語(yǔ)句結(jié)束時(shí)候加上分號(hào) ""。表格和列名必須以字母開頭, 第二個(gè)字符開始可以是字母、 數(shù)字或者下
28、劃線, 但是要保證名 字的總長(zhǎng)度不要超過(guò) 30 個(gè)字符。 在定義表格和列名不要使用不要使用 SQL 預(yù)定的用于表格 或者列名的關(guān)鍵字(比如 "select" 、 "create"、 "insert" 等等),以避免錯(cuò)誤的發(fā)生。數(shù)據(jù)類型是指在特定的列使用什么樣數(shù)據(jù)的類型。如果一個(gè)列的名字為 "Last_Name" ,它 是用來(lái)容納人名的,所以這個(gè)特定列就應(yīng)該采用 "varchar" (variable-length character ,變長(zhǎng)度 的字符型 ) 數(shù)據(jù)類型。以下是幾種常見(jiàn)的數(shù)據(jù)類型:c
29、har(size) :固定長(zhǎng)度的字符串型。 Size 是圓括號(hào)中指定的參數(shù),它可以由用戶隨意設(shè)置, 但是不能超過(guò) 255 個(gè)字節(jié)。varchar(size) :變長(zhǎng)度的字符串型。它的最大長(zhǎng)度是由括號(hào)中的參數(shù)size 設(shè)定的。number(size):數(shù)值型。最大數(shù)字的位數(shù)由括號(hào)中的參數(shù)size設(shè)置。date :日期數(shù)值型。number(size,d):數(shù)值型。它的最大數(shù)字的位數(shù)由括號(hào)中的參數(shù)sieze設(shè)定,而括號(hào)中的參數(shù)d 是設(shè)置小數(shù)點(diǎn)的位數(shù)。什么是約束呢?當(dāng)表被創(chuàng)建的時(shí)候, 可以一列也可以多列共用一個(gè)約束。 約束是一個(gè)跟列有 關(guān)的基本準(zhǔn)則, 返回的數(shù)據(jù)必須遵循這個(gè)準(zhǔn)則。 下面舉個(gè)例子, 一個(gè)
30、約束指定在一列中不能 有兩個(gè)記錄共用一個(gè)數(shù)值。它們必須單獨(dú)的。其它兩個(gè)流行的約束是:"not null" ,它設(shè)置了列不能留空白,即一定要有數(shù)據(jù);以及"primary key"(主鍵),主鍵約束定義了表中每一個(gè)記錄(或行)的唯一標(biāo)識(shí)。所有的這些將在以后的教程中再作進(jìn)一步闡述。 好吧,也許你已經(jīng)有躍躍欲試的沖動(dòng)了。作為本節(jié)練習(xí),下面我們自己來(lái)設(shè)計(jì)和創(chuàng)建表格。 你可以開始創(chuàng)建一個(gè)公司的雇員表格。 你需要?jiǎng)?chuàng)建一個(gè)包含 firstname 、lastname、 title、 age 和 salary 的表格。(5)插入數(shù)據(jù)到表Insert 語(yǔ)句用于往表格中插入或
31、者增加一行數(shù)據(jù),它的格式為:insert into "tablename"(first_column,.last_column)values (first_value,.last_value); = optional簡(jiǎn)單舉個(gè)例子:insert into employee(first, last, age, address, city)values ('Luke', 'Duke', 45, '2130 Boars Nest', 'Hazard Co');這里要注意:每一個(gè)字符竄都要用單引號(hào)括起來(lái)。為了往表中插入數(shù)
32、據(jù),要在關(guān)鍵字 insert into 之后緊跟著表名,然后是左圓括號(hào),接著是以 逗號(hào)分開的一系列的列名,再是一個(gè)右圓括號(hào),然后在關(guān)鍵字values 之后跟著一系列用圓括號(hào)括起的數(shù)值。 這些數(shù)值是你要往表格中填入的數(shù)據(jù), 它們必須與指定的列名相匹配。 字 符串筆譯用單引號(hào)括起來(lái),而數(shù)字就不用。在上面的例子中,'Luke' 必須與列 first 相匹配,而45必須與列age相匹配。假如你想往 employee 表格中插入以下數(shù)據(jù);Zhang Weiguo,28,北京 601 信箱,北京那么你要使用以下的 SQL 語(yǔ)句:insert into employee(first, las
33、t, age, address, city)values (' Zhang', ' Weiguo' ,28, ' 北京 601 信箱 ', '北京 ');(6)刪除表Drop table 命令用于刪除一個(gè)表格或者表中的所有行。其語(yǔ)法格式為: drop table "tablename" 下面舉個(gè)例子: drop table employee;為了刪除整個(gè)表(包括所有的行),可以使用 drop table 命令后加上 tablename。 Drop table 命令跟從表中刪除所有記錄是不一樣的:刪除表中的所有記
34、錄是留下表格(只是它是空的)以及約束信息;而 drop table 是刪除 表的所有信息,包括所有行、表格以及約束信息等等。(7)更新記錄Update 語(yǔ)句用于更新或者改變匹配指定條件的記錄,它是通過(guò)構(gòu)造一個(gè) where 語(yǔ)句來(lái) 實(shí)現(xiàn)的。其語(yǔ)句格式如下: update "tablename"set "columnname" = "newvalue","nextcolumn" = "newvalue2".where "columnname" OPERATOR "val
35、ue" and|or "column" OPERATOR "value" = optional 下面舉個(gè)例子來(lái)說(shuō)明: update phone_book set area_code = 623 where prefix = 979;以上語(yǔ)句是在 phone_book 表中,在 prefix=979 的行中將 area_code 設(shè)置為 623。 update phone_bookset last_name = 'Smith', prefix=555, suffix=9292 where last_name = 'Jone
36、s'而以上的這段語(yǔ)句是在phone_book中,在last_name= 'Jones的行中將last_name設(shè)置為'Smith', prefix 為 555, suffix 為 9292。update employee set age = age+1 where first_name='Mary' and last_name='Williams'這段語(yǔ)句是在 employee 表中,在 first_name='Mary'和 last_name='Williams'的行中將 age加 1。 作為每課
37、一練,你在結(jié)束本教程之后要好好作以下的練習(xí):1 因?yàn)?Jonie Weber 已經(jīng)跟 Bob Williams 結(jié)婚,所以它需要將它的 last 名更新為 Weber-Williams 。2 Dirk Smith 的生日是今天,所以他的年齡應(yīng)該加 1。3 所有的秘書都叫做 "Administrative Assistant". 所以要將所有的標(biāo)題標(biāo)題都相應(yīng)地修改。 就作這幾個(gè)練習(xí),千萬(wàn)不可大意喲。(8)刪除記錄Delete 語(yǔ)句是用來(lái)從表中刪除記錄或者行,其語(yǔ)句格式為:delete from "tablename"where "columnna
38、me" OPERATOR "value" and|or "column" OPERATOR "value" = optional 下面還是舉個(gè)例子: delete from employee;這條語(yǔ)句沒(méi)有 where語(yǔ)句,所以它將刪除所有的記錄,因此如果沒(méi)有使用 where的時(shí)候,要千萬(wàn)小心。如果你只要?jiǎng)h除其中一行或者幾行,可以參考以下的語(yǔ)句:delete from employeewhere lastname = 'May'這條語(yǔ)句是從 emplyee表中刪除last name為'May'的
39、行。delete from employeewhere firstname = 'Mike' or firstname = 'Eric'這條語(yǔ)句是從 emplyee表中刪除firs tn ame為'Mike'或者'Eric'的行。為了從表中刪除一個(gè)完整的記錄或者行,就直接在 "delete from" 后面加上表的名字,并 且利用 where 指明符合什么條件的行要?jiǎng)h除即可。 如果你沒(méi)有使用 where 子句, 那么表中的 所有記錄或者行將被刪除。(9)SELECT 語(yǔ)句在上面的教程中已經(jīng)有用到 SELECT
40、語(yǔ)句。在本節(jié)教程中將詳細(xì)對(duì)它進(jìn)行闡述。SELECT 語(yǔ)句是 SQL 的核心, 在你的 SQL 語(yǔ)句中可能用的最多的就是 SELECT 語(yǔ)句了。 由 于大量的選項(xiàng)可以用于 SELECT 語(yǔ)句,所以整個(gè)教程好象就是圍這 SELECT 語(yǔ)句轉(zhuǎn)。當(dāng)我 們構(gòu)造 SQL 查詢語(yǔ)句(利用了 SELECT 語(yǔ)句)的時(shí)候,認(rèn)識(shí)所有的可能選項(xiàng)和最好的或者 最有效率的方法來(lái)實(shí)現(xiàn)是很有用的。這個(gè)教程將為你提供這些技能。SELECT 語(yǔ)句用于查詢數(shù)據(jù)庫(kù)并檢索匹配你指定條件的選擇數(shù)據(jù)。SELECT 語(yǔ)句有五個(gè)主要的子句子你可以選擇,而 FROM 是唯一必須的子句。每一個(gè)子句有大量的選擇項(xiàng)、參 數(shù)等等。這些子句將羅列在下面
41、,而且它們每一個(gè)都將在以后的教程有更為詳細(xì)的描述。 以下是 SELECT 語(yǔ)句的格式:SELECT ALL | DISTINCT column1,column2FROM table1,table2WHERE "conditions"GROUP BY "column-list"HAVING "conditionsORDER BY "column-list" ASC | DESC 下面舉個(gè)例子:SELECT name, age, salaryFROM employeeWHERE age > 50;上面的這個(gè)語(yǔ)句將從 emp
42、loyee表中選擇age大于50的所有的name、age和salary列的數(shù)值。 注意:一定要在SQL語(yǔ)句末尾加上一個(gè)分號(hào)。 這個(gè)分號(hào)提示 SQL語(yǔ)句已經(jīng)結(jié)束并準(zhǔn)備被解 釋。以下的表格給出了各種比較運(yùn)算符號(hào):=等于>大于<小于>=大于等于<=小于等于<>不等于LIKE字符串比較測(cè)驗(yàn)舉個(gè)例子吧:SELECT name, title, deptFROM employeeWHERE title LIKE 'Pro%'上面的語(yǔ)句是從 employee表中選擇title是以'Pro'為開頭的name、title和dept列中的所有行 或
43、者數(shù)值。另外ALL和DISTINCT也是SQL中的關(guān)鍵字,它們用于在你的查詢結(jié)果中選擇ALL (缺省)或者"distinet"或者單一記錄。如果你想在指定的列中檢索單一記錄,你可以使用"DISTINCT" 關(guān)鍵子。因?yàn)镈ISTNCT將會(huì)丟棄所有你在 SELECT指定的列復(fù)制的記錄, 比如:SELECT DISTINCT ageFROM employeenfo;這條語(yǔ)句將返回所有在 employee_info表中單一的age數(shù)據(jù)。而ALL就將顯示所有指定的類,包括所有的復(fù)制數(shù)據(jù)。在沒(méi)有指定的時(shí)候,這個(gè)ALL關(guān)鍵字是缺省的。(10)合計(jì)函數(shù)所有的合計(jì)函數(shù)如下
44、表所示:MIN返回一個(gè)給定列中最小的數(shù)值MAX返回一個(gè)給定列中最大的數(shù)值SUM返回一個(gè)給定列中所有數(shù)值的總和AVG返回一個(gè)給定列中所有數(shù)值的平均值COUNT返回一個(gè)給定列中所有數(shù)值的個(gè)數(shù)COUNT(*)返回一個(gè)表中的行數(shù)合計(jì)函數(shù)用于從 SELECT語(yǔ)句中計(jì)算一個(gè)”返回列的數(shù)據(jù)”。它們是總結(jié)了所選數(shù)據(jù) 列的結(jié)果。雖然它們需要 "GROUP BY"子句(后面一個(gè)教程介紹),但是這些函數(shù)也可以在 不用使用"GROUP BY"子句的情況被使用,比如 :SELECT AVG(salary) FROM employee;這條語(yǔ)句將返回單一的結(jié)果,它包含了從emplo
45、yee表中所有salary列數(shù)據(jù)的平均值。為了更好的理解,我們?cè)倥e個(gè)例子:SELECT AVG(salary)FROM employee;WHERE title = 'Programmer'以上這條語(yǔ)句將返回 employee表中所有title列為'Programmer'的數(shù)據(jù)的平均值。下面的例子中使用的語(yǔ)句跟其它合計(jì)函數(shù)有點(diǎn)不用,因?yàn)闆](méi)有一個(gè)類被指定給COUNT函數(shù)。這條語(yǔ)句實(shí)際上將返回employee表的行數(shù),如下:SELECT Coun t(*) FROM employees;最后給出本節(jié)教程的配套練習(xí):1) 作一個(gè)公司的銷售表 items_ordered
46、,里面有 price、product 禾口 amount。 從items_ordered表中選擇price最大的數(shù)據(jù)。這里提示:使用 MAX函數(shù)。2) 計(jì)算items_ordered表中的行數(shù)。(11) GROUP BY 子句GROUP BY 子句 首先講講 GROUP BY 子句語(yǔ)法:SELECT colu mn1, SUM(colum n2)FROM "list-of-tables"GROUP BY "colum n-list"這個(gè)GROUP BY子句將集中所有的行在一起,它包含了指定列的數(shù)據(jù)以及允許合計(jì)函數(shù)來(lái) 計(jì)算一個(gè)或者多個(gè)列。當(dāng)然最好解釋的方法
47、是給出一個(gè)例子啦:假設(shè)我們將從employee表中搜索工資最高的列,可以使用以下的SQL語(yǔ)句:SELECT max(salary), dept FROM employee GROUP BY dept;這條語(yǔ)句將在每一個(gè)單獨(dú)的部門中選擇工資最高的工資。結(jié)果他們的 salary 和 dept 將被返 回。(12) HA VING 子句HAVING 子句下面先給出 HAVING 子句的語(yǔ)法:SELECT column1, SUM(column2)FROM "list-of-tables"GROUP BY "column-list"HAVING "co
48、ndition"這個(gè) HAVING 子句允許你為每一個(gè)組指定條件,換句話說(shuō),可以根據(jù)你指定的條件來(lái)選擇 行。如果你想使用 HAVING 子句的話,它應(yīng)該處再 GROUP BY 子句之后。 下面將以一個(gè)例子來(lái)解釋 HAVING 子句。假設(shè)我們的 employee 表中包含雇員的 name、 departmen、salary和age.如果你想為每個(gè)部門中每個(gè)雇員選擇平均工資的話,你可以使用 下面的 SQL 語(yǔ)句:SELECT dept, avg(salary)FROM employeeGROUP BY dept;當(dāng)然,如果你還想只計(jì)算和顯示 salary大于20000的平均工資的話,你還
49、可以加上HAVING 子句:SELECT dept, avg(salary)FROM employeeGROUP BY deptHAVING avg(salary) > 20000;(13) ORDER BY 子句ORDER BY 子句ORDER BY 子句的語(yǔ)法為:SELECT column1, SUM(column2)FROM "list-of-tables"ORDER BY "column-list" ASC | DESC; = optionalORDER BY 是一個(gè)可選的子句,它允許你根據(jù)指定要 order by 的列來(lái)以上升或者下降的順
50、 序來(lái)顯示查詢的結(jié)果.例如:ASC = Ascending Order - 這個(gè)是缺省的DESC = Descending Order下面舉個(gè)例子:SELECT employee_id, dept, name, age, salaryFROM employee_infoWHERE dept = 'Sales' ORDER BY salary;這條 SQL 語(yǔ)句將從 employeenfo 表中列 dept 等于'Sales選擇 employee_id,、dept、 name、 age和salary,并且根據(jù)他們的 salary按升序的順序來(lái)列出檢索結(jié)果。如果你想對(duì)多列排
51、序的話,那么在列與列之間要加上逗號(hào),比如:SELECT employee_id, dept, name, age, salary FROM employee_infoWHERE dept = 'Sales'ORDER BY salary, age DESC;(14) 組合條件和布爾運(yùn)算符以下的 SQL 語(yǔ)句中就含有組合條件:SELECT column1, SUM(column2)FROM "list-of-tables"WHERE "condition1" AND "condition2"AND 運(yùn)算符可以在 WHER
52、E 子句中連接兩個(gè)或者多個(gè)條件。 AND 條件的兩旁必須都為 true (真),即兩個(gè)條件都同時(shí)滿足的時(shí)候,這些行才將被顯示。當(dāng)然,你也可以使用 OR 運(yùn)算符, 它也可以在 WHERE 子句中連接兩個(gè)或者多個(gè)條件。 但是, 只要 OR 運(yùn)算符兩旁有一個(gè)為 true 的時(shí)候條件就滿足了,因此行才會(huì)被顯示。所以你使用 OR 運(yùn)算符的時(shí)候,可以是 OR 運(yùn)算符兩旁只有一個(gè)為 true 或者兩旁都為 true。 下面舉個(gè)例子吧:SELECT employeeid, firstname, lastname, title, salaryFROM employee_infoWHERE salary >
53、= 50000.00 AND title = 'Programmer'這條 SQL 語(yǔ)句是從 employee_info 表中選擇 salary 大于等于 50000.00 并且 title 等于 'Programmer'的歹 U employeeid、 firs tn ame、 last name、 title 禾口 salary。此時(shí)必須 AND 運(yùn)算 符兩旁的條件都為真, 行才會(huì)最為檢索結(jié)果返回。 如果其中有一個(gè)條件為假, 那么就什么都 沒(méi)有顯示。你可以使用圓括號(hào)將條件括起來(lái), 雖然它們也不一定是必須的, 但是括起來(lái)看起來(lái)更清晰一 些,這是一個(gè)編程習(xí)慣的問(wèn)
54、題。比如 :SELECT employeeid, firstname, lastname, title, salary FROM employee_infoWHERE (salary >= 50000.00) AND (title = 'Programmer'); 下面再舉個(gè)例子:SELECT firstname, lastname, title, salary FROM employee_infoWHERE (title = 'Sales') OR (title = 'Programmer');這條語(yǔ)句將從 employee_i nfo表
55、中選擇title等于'Sales'或者等于'Programmer'的列first name、 lastname, title 和 salary。(15)IN 和 BETWEEN 條件運(yùn)算符面是 IN 條件運(yùn)算符的 SQL 語(yǔ)句:SELECT colu mn1, SUM(colum n2)FROM "list-of-tables"WHERE colu mn3 IN (list-of-values);下面是BETWEEN條件運(yùn)算符的 SQL語(yǔ)句:SELECT colu mn1, SUM(colum n2)FROM "list-of-ta
56、bles"WHERE colu mn3 BETWEEN value1 AND value2;實(shí)際上,IN條件運(yùn)算符是一個(gè)設(shè)置成員測(cè)試運(yùn)算符,也就是說(shuō),它用于測(cè)試是否一個(gè)數(shù)值 處在IN關(guān)鍵字之后提供的數(shù)值之中。舉個(gè)例子如下:SELECT employeeid, last name, salaryFROM employeenfoWHERE last name IN ('Herna ndez', 'Jo nes', 'Roberts', 'Ruiz');這條語(yǔ)句是從 employeenfo 表中選擇 last name 等于
57、Hernandez、Jones、Roberts 或者 Ruiz名字之一的列 employeeid、 last name和salary。如果它在其中就將返回行。IN條件運(yùn)算符可以使用混合條件來(lái)替代,比如你可以使用等號(hào)運(yùn)算符或者使用OR運(yùn)算符等等,但是結(jié)果是一樣的,例如:SELECT employeeid, last name, salaryFROM employee_i nfoWHERE last name = 'Her nan dez' OR last name = 'Jon es' OR last name = 'Roberts' OR las
58、t name ='Ruiz'你可以觀察到,利用IN運(yùn)算符時(shí)語(yǔ)句會(huì)更加簡(jiǎn)短并且容易讀,特別是在你測(cè)試兩個(gè)或者三 個(gè)數(shù)值以上的時(shí)候尤為突出。當(dāng)然你也可以使用 NOT IN來(lái)在你的列表中排除行的。而BETWEEN條件運(yùn)算符是用與測(cè)試一個(gè)數(shù)值是否處在BETWEEN關(guān)鍵字兩邊指定數(shù)值的中間,比如:SELECT employeeid, age, last name, salaryFROM employee_i nfoWHERE age BETWEEN 30 AND 40;這條SQL語(yǔ)句是從employee_info表中選擇age處于30到40歲之間(包括 30歲和40歲) 的歹U empl
59、oyeeid > age last name 禾口 salary。這條語(yǔ)句同樣可以不用BETWEEN運(yùn)算符,而使用混合條件來(lái)替代,例如:SELECT employeeid, age, last name, salaryFROM employee_i nfoWHERE age >= 30 AND age <= 40;當(dāng)然,你也可以類似于NOT IN的方法,使用 NOT BETWEEN來(lái)排除一些數(shù)據(jù)。(16)數(shù)學(xué)運(yùn)算符標(biāo)準(zhǔn)的ANSI SQL-92支持下面四個(gè)基本的算術(shù)運(yùn)算符:+加-減*乘p除%求余其中求余運(yùn)算符決定除法的余數(shù)。這個(gè)運(yùn)算符不是ANSI SQL支持的,但是,絕大多數(shù)的數(shù)據(jù)庫(kù)支持他。 下面是一些有用的數(shù)學(xué)函數(shù),因?yàn)榭赡芤玫剿?所以我這里要集中提一下。在ANSI SQL-92中不支持這些函數(shù), 但是它們可能對(duì)于某些特殊的RDBMS是有效的。然而它們對(duì)于幾個(gè)主要的數(shù)據(jù)庫(kù)系統(tǒng)都是有效的。下面就說(shuō)說(shuō)這些數(shù)學(xué)函數(shù)吧:ABS(x)返回x的絕對(duì)值SIGN(x)當(dāng)x為負(fù)數(shù)、零、正數(shù)的時(shí)候分別返回x的符號(hào)-1、0或者1MOD(x,y)返回x除以y的余數(shù),跟x%y作用一樣FLOOR(x)返回小于等于x的最大整數(shù)CEILING(x)或 CEIL(x)返回大于
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024質(zhì)檢員考試復(fù)習(xí)試題及答案
- 2025年小學(xué)語(yǔ)文生動(dòng)練習(xí)試題及答案
- 2025年小學(xué)一年級(jí)語(yǔ)文革新試題及答案
- 計(jì)算機(jī)基礎(chǔ)基礎(chǔ)知識(shí)提升技巧試題及答案
- 2024年古代文學(xué)史理論試題及答案
- 如何制定寵物營(yíng)養(yǎng)計(jì)劃考題及答案
- 汽車美容師團(tuán)隊(duì)發(fā)展策略試題及答案
- 小學(xué)六年級(jí)語(yǔ)文理解能力測(cè)驗(yàn)題及答案
- 汽車美容行業(yè)品牌建設(shè)知識(shí)試題及答案
- 旅游項(xiàng)目進(jìn)度表
- DB32∕T 3916-2020 建筑地基基礎(chǔ)檢測(cè)規(guī)程
- 華能國(guó)際電力股份有限公司本質(zhì)安全體系管理手冊(cè)
- 中青劇院管理手冊(cè)
- 《對(duì)話大千世界-繪畫創(chuàng)意與實(shí)踐》 第1課時(shí) 定格青春-向藝術(shù)家學(xué)創(chuàng)作
- 文化人類學(xué)完整版
- 《劉姥姥人物形象分析》課件-部編版語(yǔ)文九年級(jí)上冊(cè)
- 年產(chǎn)萬(wàn)噸丁二烯畢業(yè)設(shè)計(jì)
- 《林海雪原》知識(shí)點(diǎn) 整理
- 收款賬戶確認(rèn)書
- 防火巡查記錄
- oracle系統(tǒng)表詳解(中文)
評(píng)論
0/150
提交評(píng)論