




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、SQL語言入門教程第一課簡介SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言的主要功能就是同各種數據庫建立聯系,進行溝通。按照ANSI (美國國家標準協會)的規定,SQL被作為關系型數據庫管理系統的標準。SQL語句可以用來執行各種各樣的操作,例如更新數據庫中的數據,從數據庫中提取數據等。目前,絕大多數流行的關系型數據庫管理系統,如Oracle, Sybase, Microsoft SQL Server,Access等都采用了 SQL語言標準。雖然很多數據庫都對 SQL語句進行了再開發和擴展,但是包括Select, Insert, Updat
2、e, Delete, Create,以及Drop在內的標準的 SQL命令仍然可以被用 來完成幾乎所有的數據庫操作。下面,我們就來詳細介紹一下SQL語言的基本知識。一個典型的關系型數據庫通常由一個或多個被稱作表格的對象組成。數據庫中的所有數據或信息都被保存在這些數據庫表格中。數據庫中的每一個表格都具有自己唯一的表格名 稱,都是由行和列組成,其中每一列包括了該列名稱,數據類型,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數據。以下,是一個名為太平洋網絡學院的數據庫表格的實例。欄目用戶群新手上路電腦初學者軟件教室一般的電腦用戶設計教室電腦設計愛好者開發教室電腦編程人員該表格中“欄目”,“用戶
3、群”就是兩個不同的列,而表格中的每一行則包含了具體的 表格數據。1. 創建表格2. 數據查詢3. 向表格中添加、更新、刪除記錄4. 刪除數據庫表格第二課創建表格SQL語言中的create table語句被用來建立新的數據庫表格。create table語句的使用格式如下: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 后面加入所要建立的表格的名稱,然 后在括號內順次設定各列的名稱,數據類型,以及可選的限制條件等。注意,所有的 SQL 語句在結尾處都要使用“; ”符號。SQL 語句創建的數據庫表格和表格中列的名稱必須以字母開頭,后面可以使用字 母,數字或下劃線,名稱的長度不能超過 30 個字符。注意,
5、用戶在選擇表格名稱時不要使 用 SQL 語言中的保留關鍵詞,如 select, create, insert 等,作為表格或列的名稱。varchar 或 char 的數據類型,而不能使用 number 的數據類型。SQL 語言中較為常用的數據類型為:char(size):固定長度字符串,其中括號中的size用來設定字符串的最大長度。Char類型的最大長度為 255 字節。varchar(size):可變長度字符串,最大長度由size設定。number(size):數字類型,其中數字的最大位數由size設定。Date:日期類型。number(size,d) :數字類型, size 決定該數字總的
6、最大位數,而 d 則用于設定該數字在 小數點后的位數。在創建新表格時需要注意的一點就是表格中列的限制條件。所謂限制條件就是當向特定列輸入數據時所必須遵守的規則。例如,unique這一限制條件要求某一列中不能存在兩個值相同的記錄,所有記錄的值都必須是唯一的。除 unique 之外,較為常用的列的限制 條件還包括 not null 和 primary key 等。 not null 用來規定表格中某一列的值不能為空。 primary key 則為表格中的所有記錄規定了唯一的標識符。第三課 數據查詢在眾多的SQL命令中,select語句應該算是使用最頻繁的。select語句主要被用來對數據庫進行查詢
7、并返回符合用戶查詢標準的結果數據。Select語句的語法格式如下:select column1 , column2,etc from tablenamewhere condition; 表示可選項)select 語句中位于 select 關鍵詞之后的列名用來決定那些列將作為查詢結果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“* ”來設定返回表格中的所有列。select 語句中位于 from 關鍵詞之后的表格名稱用來決定將要進行查詢操作的目標表格。 Select 語句中的 where 可選從句用來規定哪些數據值或哪些行將被作為查詢結果返回或 顯示。where 條件從句中可以使用以下
8、一些運算符來設定查詢標準:= 等于> 大于< 小于>= 大于等于<= 小于等于 <> 不等于LIKE 運算符在 where 條件從句中也非常重要。 LIKE 運算 符的功能非常強大, 通過使用 LIKE 運算符可以設定只選擇與用戶規定格式相同的記錄。 此 外,我們還可以使用通配符“ %”用來代替任何字符串。舉例如下:select firstname, lastname, cityfrom employeewhere firstname LIKE E%' ;SQL 語句將會查詢所有名稱以 E 開頭的姓名。或者,通過如下語句: select * from
9、 employee where firstname = May ';May 的行。第四課 向表格中添加、更新、刪除記錄添加新記錄SQL 語言使用 insert 語句向數據庫表格中插入或添加新的數據行。 Insert 語句的使用格 式如下: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 后面輸入所要添加的 表格名稱,然后在括號中列出將要添加新值的列的名稱。最后,在關鍵詞 values 的后面按 照前面輸入的列的順序對應的輸入所有要添加的記錄值。SQL 語言使用 update 語句更新或修改滿足規定條件的現有記錄。 update 語句的格式為: 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 語句時,關鍵一點就是要設定好用于進行判斷的 where 條件從句。 刪除記錄SQL 語言使用 delete 語句刪除數據庫表格中的行或記錄。 Delete 語句的格式為: delete from tablenamewhere columnname OPERATOR value and|or column OPERA TOR value;delete from
12、 employee where lastname = May;delete from 關鍵詞之后輸入表格名稱, 然后在where從句中設定刪除記錄的判斷條件。注意,如果用戶在使用delete語句時不設定where 從句,則表格中的所有記錄將全部被刪除。第五課 刪除數據庫表格在SQL語言中使用drop table命令刪除某個表格以及該表格中的所有記錄。drop table命令的使用格式為:drop table tablename;drop table employee;drop table 命令后輸入希望刪除的 表格名稱即可。 drop table 命令的作用與刪除表格中的所有記錄不同。刪除表格
13、中的全部記 錄之后,該表格仍然存在,而且表格中列的信息不會改變。而使用drop table 命令則會將整個數據庫表格的所有信息全部刪除。我們對 SQL 語言主要的命令和語句進行了較為詳細的介紹。 應該說 SQL 語句的 語法結構和風格還是相當簡單和直觀的, 只要用戶結合實踐多加練習, 一定會在短期內迅速 掌握。Store_Information 數據表為例, 我們可以在 GROUP BY 一節中所使用的 SQL 命令中 設置如下字段和數據表別名: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 循序漸進SQL 循序漸進 (目錄 )SQL 循序漸進(1) 介紹 SQLSQL 循序漸進(2) 表的基礎知識SQL 循序漸進(3) 數據檢索SQL 循序漸進(4) 創建表SQL 循序漸進(5) 插入數據到表SQL 循序漸進(6) 刪除表SQL 循序漸進(7) 更新記錄SQL 循序漸進(8) 刪除記錄SQL 循序漸進( 9) SELECT 語句SQL 循序漸進( 10) 合計函數SQL 循序漸進( 1
15、1)GROUP BY 子句SQL 循序漸進( 12)HAVING 子句SQL 循序漸進( 13)ORDER BY 子句SQL 循序漸進( 14) 組合條件和布爾運算符SQL 循序漸進( 15)IN 和 BETWEEN 條件運算符SQL 循序漸進(16) 數學運算符SQL 循序漸進(17)JOIN 子句SQL 循序漸進(18) 索引SQL 循序漸進(19)DISTINCT 和排除復制SQL 循序漸進( 20)Aliases 、In 以及子查詢SQL 循序漸進( 21) 更多的子查詢SQL 循序漸進( 22)EXISTS 和 ALLSQL 循序漸進 (23) UNION 和 外部連接SQL循序漸進
16、(24)-一 嵌入SQL(1)介紹 SQLSQL(Structured Query Language ,結構查詢語言 )是一個功能強大的數據庫語言。SQL 通常使用于數據庫的通訊。 ANSI (美國國家標準學會)聲稱, SQL 是關系數據庫管理系統的 標準語言。 SQL 語句通常用于完成一些數據庫的操作任務,比如在數據庫中更新數據,或 者從數據庫中檢索數據。使用 SQL 的常見關系數據庫管理系統有:Oracle、 Sybase、Microsoft SQL Server 、 Access、 Ingres 等等。雖然絕大多數的數據庫系統使用 SQL ,但是 它們同樣有它們自立另外的專有擴展功能用于
17、它們的系統。但是,標準的SQL 命令,比如"Select"、"Insert"、 "Update"、 "Delete"、 "Create"和"Drop"常常被用于完成絕大多數數據庫的操作。但是,不象其它的語言,女口 C、Pascal 等, SQL沒有循環結構(比如if-then-else、do-while ) 以及函數定義等等的功能。而且 SQL 只有一個數據類型的固定設置,換句話說,你不能在使用其它編程語言的時候創建你自己的數據類型。SQL功能強大,但是概括起來,它可以分成以
18、下幾組:DML ( Data Manipulation Language,數據操作語言):用于檢索或者修改數據;DDL ( Data Definition Language,數據定義語言):用于定義數據的結構,比如創建、修改或者刪除數據庫對象;DCL ( Data Control Language,數據控制語言):用于定義數據庫用戶的權限。DML組可以細分為以下的幾個語句:SELECT :用于檢索數據;INSERT :用于增加數據到數據庫;UPDATE :用于從數據庫中修改現存的數據DELETE :用于從數據庫中刪除數據。DDL語句可以用于創建用戶和重建數據庫對象。下面是DDL命令:CREAT
19、E TABLEALTER TABLEDROP TABLECREATE INDEXDROP INDEXDCL命令用于創建關系用戶訪問以及授權的對象。下面是幾個DCL命令:ALTER PASSWORDGRANTREVOKECREATE SYNONYM為了讓你對SQL有一個直觀的認識,下面先給出一個簡單SQL語句的例子:我們使用 SQL語句來從 Employees中檢索 Department ID為CS的姓名:SELECT Employees.NameFROM EmployeesWHERE Employees.DeptID = "CS"可能你現在一開始不太理解這些語句,也許你會一
20、頭霧水,不要緊的,通過本教程的學習后,你會發現這段語句是多么的普通。為了不讓你困惑,下面我也進行一番解釋:先對FROM子句吧,語句中的 FROM Employees意思是從 Employees表中檢索數據。而語句 WHERE Employees.DeptID = "CS"意思是檢索 Employees 的 DeptID 列為” CS” 的行, 這樣SQL語句檢索的結果將是 DeptID為CS的列的所有數據,比如:EmpIDNameDeptID123PurpleCS124ZscCS最后,我們來解釋一個 SELECT子句,它指定了從 Name列檢索來的所有數據,比如好吧,開始我
21、們下一節的教程 表的基本知識。(2)表的基礎知識關系數據庫通常包含多個表。 數據庫實際上是表的集合, 數據庫的數據或者信息都是存 儲在表中的。表是對數據進行存儲和操作的一種邏輯結構, 每一個表都代表一個對用戶意義 的對象。例如,一個公司數據庫中,會有雇員表、部門表、庫存表、銷售表、工資表等等。我們經常見到的成績表就是一種表,它是有行和列組成的,我們并且可以通過名字來識別數據。列包含了列的名字、數據類型以及列的其它屬性;行包含了列的記錄或者數據。下面給出一個成績單,其中姓名、語文、數學、英語都是列,而行包含了這個表的數據,即每個人 的各科成績:姓名語文數學英語王小童7810087張柳風85929
22、5紫云飛658986黃天龍986775(3)數據檢索在SQL中SELECT語句通常用于檢索數據庫,或者檢索滿足你設定條件的數據,以下 是簡單的SELECT語句的格式:select "colu mn 1",”colu mn 2",etc from "table name"where "con diti on"=opti onal其中列的名字跟著 SELECT關鍵字,它決定了哪一列將被作為結果返回。你可以任意 指定多個列,或者你可以使用"*"來選擇所有的列。表的名字是緊跟著 FROM關鍵字的,它指出了哪個表格
23、將作為最后結果被查詢。而WHERE子句(可選)指出哪個數據或者行將被返回或者顯示,它是根據關鍵字WHERE后面描述的條件而來的。在WHERE子句中可以有以下的條件選擇:=等于>大于<小于>=大于等于<=小于等于<>不等于LIKE 參見以下注釋注釋:LIKE模式匹配操作符同樣可以使用在WHERE子句的條件條件中。LIKE是一個功 能強大的操作符, 它可以讓你選擇你 "喜歡 " 指定的行。 百分號 "%" 可以被用來匹配任何可能 的字符,它可以出現在指定字符的前面或者后面,例如: select first, last, c
24、ity from empinfo where first LIKE 'Er%'以上這條 SQL 語句將會匹配任何名字以 'Er' 開始的名字,這里必須使用單引號。 或者你也可以使用 "%" 在字符的前面,例如:select first, last from empinfo where last LIKE '%s'這條SQL語句將會匹配任何名字以's'結尾的名字。這個""的作用就跟 DOS命令的”衣"號 很相似。select * from empinfo where first =
25、'Eric'以上的SQL語句只選擇first名字為'Eric'的行。(4)創建表這個 create table 語句是用于創建一個新的表格。以下是一個簡單創建表格語句的格式: create table "tablename"("column1" "data type", "column2" "data type", "column3" "data type");如果你想使用可選的約束,創建表格的格式為: create tab
26、le "tablename"("column1" "data type" constraint, "column2" "data type" constraint, "column3" "data type" constraint); = optional 這里注意:你可以任意創建多列的表格,這個條件是可選的。 為了更好的理解,下面舉個例子: create table employee(first varchar(15), last varchar(20)
27、, age number(3), address varchar(30), city varchar(20), state varchar(20);為了創建一個新表格,你可以在關鍵字 create table 之后跟著表的名字,然后一個圓左 括號” (”,然后是第一列的名字,再是這一列的數據類型,接著是任意的可選約束,最后是 圓右括號” )”。確保在開始表格內容之前使用圓左括號并且在表的最后一列定義之后使用圓 右括號是相當重要的。你還要保證每一個列定義之間有逗號分隔。最后在SQL 語句結束時候加上分號 ""。表格和列名必須以字母開頭, 第二個字符開始可以是字母、 數字或者下
28、劃線, 但是要保證名 字的總長度不要超過 30 個字符。 在定義表格和列名不要使用不要使用 SQL 預定的用于表格 或者列名的關鍵字(比如 "select" 、 "create"、 "insert" 等等),以避免錯誤的發生。數據類型是指在特定的列使用什么樣數據的類型。如果一個列的名字為 "Last_Name" ,它 是用來容納人名的,所以這個特定列就應該采用 "varchar" (variable-length character ,變長度 的字符型 ) 數據類型。以下是幾種常見的數據類型:c
29、har(size) :固定長度的字符串型。 Size 是圓括號中指定的參數,它可以由用戶隨意設置, 但是不能超過 255 個字節。varchar(size) :變長度的字符串型。它的最大長度是由括號中的參數size 設定的。number(size):數值型。最大數字的位數由括號中的參數size設置。date :日期數值型。number(size,d):數值型。它的最大數字的位數由括號中的參數sieze設定,而括號中的參數d 是設置小數點的位數。什么是約束呢?當表被創建的時候, 可以一列也可以多列共用一個約束。 約束是一個跟列有 關的基本準則, 返回的數據必須遵循這個準則。 下面舉個例子, 一個
30、約束指定在一列中不能 有兩個記錄共用一個數值。它們必須單獨的。其它兩個流行的約束是:"not null" ,它設置了列不能留空白,即一定要有數據;以及"primary key"(主鍵),主鍵約束定義了表中每一個記錄(或行)的唯一標識。所有的這些將在以后的教程中再作進一步闡述。 好吧,也許你已經有躍躍欲試的沖動了。作為本節練習,下面我們自己來設計和創建表格。 你可以開始創建一個公司的雇員表格。 你需要創建一個包含 firstname 、lastname、 title、 age 和 salary 的表格。(5)插入數據到表Insert 語句用于往表格中插入或
31、者增加一行數據,它的格式為:insert into "tablename"(first_column,.last_column)values (first_value,.last_value); = optional簡單舉個例子:insert into employee(first, last, age, address, city)values ('Luke', 'Duke', 45, '2130 Boars Nest', 'Hazard Co');這里要注意:每一個字符竄都要用單引號括起來。為了往表中插入數
32、據,要在關鍵字 insert into 之后緊跟著表名,然后是左圓括號,接著是以 逗號分開的一系列的列名,再是一個右圓括號,然后在關鍵字values 之后跟著一系列用圓括號括起的數值。 這些數值是你要往表格中填入的數據, 它們必須與指定的列名相匹配。 字 符串筆譯用單引號括起來,而數字就不用。在上面的例子中,'Luke' 必須與列 first 相匹配,而45必須與列age相匹配。假如你想往 employee 表格中插入以下數據;Zhang Weiguo,28,北京 601 信箱,北京那么你要使用以下的 SQL 語句:insert into employee(first, las
33、t, age, address, city)values (' Zhang', ' Weiguo' ,28, ' 北京 601 信箱 ', '北京 ');(6)刪除表Drop table 命令用于刪除一個表格或者表中的所有行。其語法格式為: drop table "tablename" 下面舉個例子: drop table employee;為了刪除整個表(包括所有的行),可以使用 drop table 命令后加上 tablename。 Drop table 命令跟從表中刪除所有記錄是不一樣的:刪除表中的所有記
34、錄是留下表格(只是它是空的)以及約束信息;而 drop table 是刪除 表的所有信息,包括所有行、表格以及約束信息等等。(7)更新記錄Update 語句用于更新或者改變匹配指定條件的記錄,它是通過構造一個 where 語句來 實現的。其語句格式如下: update "tablename"set "columnname" = "newvalue","nextcolumn" = "newvalue2".where "columnname" OPERATOR "val
35、ue" and|or "column" OPERATOR "value" = optional 下面舉個例子來說明: update phone_book set area_code = 623 where prefix = 979;以上語句是在 phone_book 表中,在 prefix=979 的行中將 area_code 設置為 623。 update phone_bookset last_name = 'Smith', prefix=555, suffix=9292 where last_name = 'Jone
36、s'而以上的這段語句是在phone_book中,在last_name= 'Jones的行中將last_name設置為'Smith', prefix 為 555, suffix 為 9292。update employee set age = age+1 where first_name='Mary' and last_name='Williams'這段語句是在 employee 表中,在 first_name='Mary'和 last_name='Williams'的行中將 age加 1。 作為每課
37、一練,你在結束本教程之后要好好作以下的練習:1 因為 Jonie Weber 已經跟 Bob Williams 結婚,所以它需要將它的 last 名更新為 Weber-Williams 。2 Dirk Smith 的生日是今天,所以他的年齡應該加 1。3 所有的秘書都叫做 "Administrative Assistant". 所以要將所有的標題標題都相應地修改。 就作這幾個練習,千萬不可大意喲。(8)刪除記錄Delete 語句是用來從表中刪除記錄或者行,其語句格式為:delete from "tablename"where "columnna
38、me" OPERATOR "value" and|or "column" OPERATOR "value" = optional 下面還是舉個例子: delete from employee;這條語句沒有 where語句,所以它將刪除所有的記錄,因此如果沒有使用 where的時候,要千萬小心。如果你只要刪除其中一行或者幾行,可以參考以下的語句:delete from employeewhere lastname = 'May'這條語句是從 emplyee表中刪除last name為'May'的
39、行。delete from employeewhere firstname = 'Mike' or firstname = 'Eric'這條語句是從 emplyee表中刪除firs tn ame為'Mike'或者'Eric'的行。為了從表中刪除一個完整的記錄或者行,就直接在 "delete from" 后面加上表的名字,并 且利用 where 指明符合什么條件的行要刪除即可。 如果你沒有使用 where 子句, 那么表中的 所有記錄或者行將被刪除。(9)SELECT 語句在上面的教程中已經有用到 SELECT
40、語句。在本節教程中將詳細對它進行闡述。SELECT 語句是 SQL 的核心, 在你的 SQL 語句中可能用的最多的就是 SELECT 語句了。 由 于大量的選項可以用于 SELECT 語句,所以整個教程好象就是圍這 SELECT 語句轉。當我 們構造 SQL 查詢語句(利用了 SELECT 語句)的時候,認識所有的可能選項和最好的或者 最有效率的方法來實現是很有用的。這個教程將為你提供這些技能。SELECT 語句用于查詢數據庫并檢索匹配你指定條件的選擇數據。SELECT 語句有五個主要的子句子你可以選擇,而 FROM 是唯一必須的子句。每一個子句有大量的選擇項、參 數等等。這些子句將羅列在下面
41、,而且它們每一個都將在以后的教程有更為詳細的描述。 以下是 SELECT 語句的格式:SELECT ALL | DISTINCT column1,column2FROM table1,table2WHERE "conditions"GROUP BY "column-list"HAVING "conditionsORDER BY "column-list" ASC | DESC 下面舉個例子:SELECT name, age, salaryFROM employeeWHERE age > 50;上面的這個語句將從 emp
42、loyee表中選擇age大于50的所有的name、age和salary列的數值。 注意:一定要在SQL語句末尾加上一個分號。 這個分號提示 SQL語句已經結束并準備被解 釋。以下的表格給出了各種比較運算符號:=等于>大于<小于>=大于等于<=小于等于<>不等于LIKE字符串比較測驗舉個例子吧:SELECT name, title, deptFROM employeeWHERE title LIKE 'Pro%'上面的語句是從 employee表中選擇title是以'Pro'為開頭的name、title和dept列中的所有行 或
43、者數值。另外ALL和DISTINCT也是SQL中的關鍵字,它們用于在你的查詢結果中選擇ALL (缺省)或者"distinet"或者單一記錄。如果你想在指定的列中檢索單一記錄,你可以使用"DISTINCT" 關鍵子。因為DISTNCT將會丟棄所有你在 SELECT指定的列復制的記錄, 比如:SELECT DISTINCT ageFROM employeenfo;這條語句將返回所有在 employee_info表中單一的age數據。而ALL就將顯示所有指定的類,包括所有的復制數據。在沒有指定的時候,這個ALL關鍵字是缺省的。(10)合計函數所有的合計函數如下
44、表所示:MIN返回一個給定列中最小的數值MAX返回一個給定列中最大的數值SUM返回一個給定列中所有數值的總和AVG返回一個給定列中所有數值的平均值COUNT返回一個給定列中所有數值的個數COUNT(*)返回一個表中的行數合計函數用于從 SELECT語句中計算一個”返回列的數據”。它們是總結了所選數據 列的結果。雖然它們需要 "GROUP BY"子句(后面一個教程介紹),但是這些函數也可以在 不用使用"GROUP BY"子句的情況被使用,比如 :SELECT AVG(salary) FROM employee;這條語句將返回單一的結果,它包含了從emplo
45、yee表中所有salary列數據的平均值。為了更好的理解,我們再舉個例子:SELECT AVG(salary)FROM employee;WHERE title = 'Programmer'以上這條語句將返回 employee表中所有title列為'Programmer'的數據的平均值。下面的例子中使用的語句跟其它合計函數有點不用,因為沒有一個類被指定給COUNT函數。這條語句實際上將返回employee表的行數,如下:SELECT Coun t(*) FROM employees;最后給出本節教程的配套練習:1) 作一個公司的銷售表 items_ordered
46、,里面有 price、product 禾口 amount。 從items_ordered表中選擇price最大的數據。這里提示:使用 MAX函數。2) 計算items_ordered表中的行數。(11) GROUP BY 子句GROUP BY 子句 首先講講 GROUP BY 子句語法:SELECT colu mn1, SUM(colum n2)FROM "list-of-tables"GROUP BY "colum n-list"這個GROUP BY子句將集中所有的行在一起,它包含了指定列的數據以及允許合計函數來 計算一個或者多個列。當然最好解釋的方法
47、是給出一個例子啦:假設我們將從employee表中搜索工資最高的列,可以使用以下的SQL語句:SELECT max(salary), dept FROM employee GROUP BY dept;這條語句將在每一個單獨的部門中選擇工資最高的工資。結果他們的 salary 和 dept 將被返 回。(12) HA VING 子句HAVING 子句下面先給出 HAVING 子句的語法:SELECT column1, SUM(column2)FROM "list-of-tables"GROUP BY "column-list"HAVING "co
48、ndition"這個 HAVING 子句允許你為每一個組指定條件,換句話說,可以根據你指定的條件來選擇 行。如果你想使用 HAVING 子句的話,它應該處再 GROUP BY 子句之后。 下面將以一個例子來解釋 HAVING 子句。假設我們的 employee 表中包含雇員的 name、 departmen、salary和age.如果你想為每個部門中每個雇員選擇平均工資的話,你可以使用 下面的 SQL 語句:SELECT dept, avg(salary)FROM employeeGROUP BY dept;當然,如果你還想只計算和顯示 salary大于20000的平均工資的話,你還
49、可以加上HAVING 子句:SELECT dept, avg(salary)FROM employeeGROUP BY deptHAVING avg(salary) > 20000;(13) ORDER BY 子句ORDER BY 子句ORDER BY 子句的語法為:SELECT column1, SUM(column2)FROM "list-of-tables"ORDER BY "column-list" ASC | DESC; = optionalORDER BY 是一個可選的子句,它允許你根據指定要 order by 的列來以上升或者下降的順
50、 序來顯示查詢的結果.例如:ASC = Ascending Order - 這個是缺省的DESC = Descending Order下面舉個例子:SELECT employee_id, dept, name, age, salaryFROM employee_infoWHERE dept = 'Sales' ORDER BY salary;這條 SQL 語句將從 employeenfo 表中列 dept 等于'Sales選擇 employee_id,、dept、 name、 age和salary,并且根據他們的 salary按升序的順序來列出檢索結果。如果你想對多列排
51、序的話,那么在列與列之間要加上逗號,比如:SELECT employee_id, dept, name, age, salary FROM employee_infoWHERE dept = 'Sales'ORDER BY salary, age DESC;(14) 組合條件和布爾運算符以下的 SQL 語句中就含有組合條件:SELECT column1, SUM(column2)FROM "list-of-tables"WHERE "condition1" AND "condition2"AND 運算符可以在 WHER
52、E 子句中連接兩個或者多個條件。 AND 條件的兩旁必須都為 true (真),即兩個條件都同時滿足的時候,這些行才將被顯示。當然,你也可以使用 OR 運算符, 它也可以在 WHERE 子句中連接兩個或者多個條件。 但是, 只要 OR 運算符兩旁有一個為 true 的時候條件就滿足了,因此行才會被顯示。所以你使用 OR 運算符的時候,可以是 OR 運算符兩旁只有一個為 true 或者兩旁都為 true。 下面舉個例子吧:SELECT employeeid, firstname, lastname, title, salaryFROM employee_infoWHERE salary >
53、= 50000.00 AND title = 'Programmer'這條 SQL 語句是從 employee_info 表中選擇 salary 大于等于 50000.00 并且 title 等于 'Programmer'的歹 U employeeid、 firs tn ame、 last name、 title 禾口 salary。此時必須 AND 運算 符兩旁的條件都為真, 行才會最為檢索結果返回。 如果其中有一個條件為假, 那么就什么都 沒有顯示。你可以使用圓括號將條件括起來, 雖然它們也不一定是必須的, 但是括起來看起來更清晰一 些,這是一個編程習慣的問
54、題。比如 :SELECT employeeid, firstname, lastname, title, salary FROM employee_infoWHERE (salary >= 50000.00) AND (title = 'Programmer'); 下面再舉個例子:SELECT firstname, lastname, title, salary FROM employee_infoWHERE (title = 'Sales') OR (title = 'Programmer');這條語句將從 employee_i nfo表
55、中選擇title等于'Sales'或者等于'Programmer'的列first name、 lastname, title 和 salary。(15)IN 和 BETWEEN 條件運算符面是 IN 條件運算符的 SQL 語句:SELECT colu mn1, SUM(colum n2)FROM "list-of-tables"WHERE colu mn3 IN (list-of-values);下面是BETWEEN條件運算符的 SQL語句:SELECT colu mn1, SUM(colum n2)FROM "list-of-ta
56、bles"WHERE colu mn3 BETWEEN value1 AND value2;實際上,IN條件運算符是一個設置成員測試運算符,也就是說,它用于測試是否一個數值 處在IN關鍵字之后提供的數值之中。舉個例子如下:SELECT employeeid, last name, salaryFROM employeenfoWHERE last name IN ('Herna ndez', 'Jo nes', 'Roberts', 'Ruiz');這條語句是從 employeenfo 表中選擇 last name 等于
57、Hernandez、Jones、Roberts 或者 Ruiz名字之一的列 employeeid、 last name和salary。如果它在其中就將返回行。IN條件運算符可以使用混合條件來替代,比如你可以使用等號運算符或者使用OR運算符等等,但是結果是一樣的,例如: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運算符時語句會更加簡短并且容易讀,特別是在你測試兩個或者三 個數值以上的時候尤為突出。當然你也可以使用 NOT IN來在你的列表中排除行的。而BETWEEN條件運算符是用與測試一個數值是否處在BETWEEN關鍵字兩邊指定數值的中間,比如:SELECT employeeid, age, last name, salaryFROM employee_i nfoWHERE age BETWEEN 30 AND 40;這條SQL語句是從employee_info表中選擇age處于30到40歲之間(包括 30歲和40歲) 的歹U empl
59、oyeeid > age last name 禾口 salary。這條語句同樣可以不用BETWEEN運算符,而使用混合條件來替代,例如:SELECT employeeid, age, last name, salaryFROM employee_i nfoWHERE age >= 30 AND age <= 40;當然,你也可以類似于NOT IN的方法,使用 NOT BETWEEN來排除一些數據。(16)數學運算符標準的ANSI SQL-92支持下面四個基本的算術運算符:+加-減*乘p除%求余其中求余運算符決定除法的余數。這個運算符不是ANSI SQL支持的,但是,絕大多數的數據庫支持他。 下面是一些有用的數學函數,因為可能要用到它, 所以我這里要集中提一下。在ANSI SQL-92中不支持這些函數, 但是它們可能對于某些特殊的RDBMS是有效的。然而它們對于幾個主要的數據庫系統都是有效的。下面就說說這些數學函數吧:ABS(x)返回x的絕對值SIGN(x)當x為負數、零、正數的時候分別返回x的符號-1、0或者1MOD(x,y)返回x除以y的余數,跟x%y作用一樣FLOOR(x)返回小于等于x的最大整數CEILING(x)或 CEIL(x)返回大于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 種子種苗國際貿易與市場分析考核試卷
- 紡織設備操作安全風險評估與控制考核試卷
- 窗簾行業的綠色服務模式創新實踐與案例分析考核試卷
- 維綸纖維在高端服裝面料中的應用考核試卷
- 紡織行業供應鏈管理策略考試考核試卷
- 木材采伐與可持續經營考核試卷
- 濾波器設計與實現考核試卷
- 電氣安裝施工環境保障措施考核試卷
- 礦山環境保護與污染防治考核試卷
- 山西省長治市三校2025年高三元月三診一模摸底診斷測試英語試題文試題含解析
- 大學生創新創業基礎(創新創業課程)完整全套教學課件
- (高職)經濟數學電子課件完整版PPT全書電子教案
- 2020年國家義務教育質量測查德育科目模塊一模擬試題含參考答案
- (完整版)老人健康智能手環可行性分析報告 (1)
- 低鈉血癥鑒別診斷-杜斌PPT課件
- 《歷史文獻學》教學大綱
- 村田數控沖床安裝步驟_圖文
- 農村信用社助農金融服務終端管理辦法
- 語法填空題教案
- 白油安全技術說明書(共2頁)
- 北京市政府網站集約化建設策略的探討
評論
0/150
提交評論