版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 SQL概述 SQL的全稱為structured query language(結(jié)構(gòu)化查詢語言)。最早是在1974年,IBM的San Jose實(shí)驗(yàn)室的研究人員D.Chamberlin定義了“結(jié)構(gòu)化英語查詢語言”,簡稱SEQUEL。1976年,Chamberlin將其改稱為SQL,正確的發(fā)音為s_q_l。SQL是一種類英語的語言,用一些簡單的英語句子構(gòu)成基本的語法結(jié)構(gòu),具有簡單易學(xué)、功能較強(qiáng)、操作靈活的特點(diǎn)。 1976年,在IBM公司研制的關(guān)系數(shù)據(jù)庫管理系統(tǒng)System R上,實(shí)現(xiàn)了這種用英語描述關(guān)系代數(shù)運(yùn)算的語言的研究。在20世紀(jì)70年代末,ORACLE公司開發(fā)出基于SQL商業(yè)化的關(guān)系數(shù)據(jù)庫
2、管理系統(tǒng)。 11 SQL概述 SQL的全稱為structured 1 SQL概述 SQL是一種非過程化的語言,它與通常的高級語言不同,使用SQL時,只要說明做什么,不需要說明怎么做,具體的操作全部由DBMS自動完成。例如,要查詢所有女同學(xué)的姓名,只要寫出SQL語句: SELECT 姓名 FROM 學(xué)生 WHERE 性別=女 2 1 SQL概述 SQL是一種非過程化的語言,它與通常的高1 SQL概述 SQL語言按用途可劃分為三個組成部分:數(shù)據(jù)定義語言(DDL):在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫、表、視圖、索引等都是對象,用于定義這些對象的SQL語句稱為DDL。數(shù)據(jù)處理語言(DML):用于插入、修改、刪除和
3、查詢數(shù)據(jù)的SQL語句稱為DML。數(shù)據(jù)控制語言(DCL):用于實(shí)現(xiàn)數(shù)據(jù)完整性、安全性、一致性等控制的SQL語句稱為DCL。 31 SQL概述 SQL語言按用途可劃分為三個組成部分2 數(shù)據(jù)定義本章將結(jié)合下面一組關(guān)系模式和樣本數(shù)據(jù)說明SQL語言的應(yīng)用實(shí)例。關(guān)系和樣本數(shù)據(jù)如圖1所示。 系(系編號,系名稱) 教工(教工號,姓名,性別,職稱,工資,系編號) 學(xué)生(學(xué)號,姓名,性別,出生年月,專業(yè),家庭地址,系編號) 課程(課程編號,課程名稱,學(xué)時,系編號) 成績(學(xué)號,課程編號,分?jǐn)?shù)) 42 數(shù)據(jù)定義本章將結(jié)合下面一組關(guān)系模式和樣本數(shù)據(jù)說明SQL2 數(shù)據(jù)定義系課程圖1 一組關(guān)系模式和樣本數(shù)據(jù)(a)系編號系
4、名稱101數(shù)學(xué)102計(jì)算機(jī)103外語104經(jīng)濟(jì)課程號課程名學(xué)時系編號C1數(shù)學(xué)681C2英語853C3計(jì)算機(jī)682C4經(jīng)濟(jì)學(xué)51452 數(shù)據(jù)定義系課程圖1 一組關(guān)系模式和樣本數(shù)據(jù)(a)系編號 2 數(shù)據(jù)定義 圖1 一組關(guān)系模式和樣本數(shù)據(jù)(b)教工號姓 名性別職稱工 資系編號2101葛小平女教授3420.001012203李長江男副教授3190.001022405姜立偉男副教授3140.001042104張麗麗女講師224001012302康立華女教授3740.001032205王偉平男講師2130.00102教工 6 2 數(shù)據(jù)定義 圖1 一組關(guān)系模式和樣本數(shù)據(jù)(b)教工號姓 2 數(shù)據(jù)定義 學(xué) 號課
5、程編號分?jǐn)?shù)1022C1881022C2672124C1772124C2952124C3454021C4874021C2784021C3671223C1661223C2893012C2933012C384成績 圖1 一組關(guān)系模式和樣本數(shù)據(jù)(c)72 數(shù)據(jù)定義 學(xué) 號課程編號分?jǐn)?shù)1022C18810222 數(shù)據(jù)定義 圖1 一組關(guān)系模式和樣本數(shù)據(jù)(d)學(xué) 號姓 名性別出生年月系編號1022田平平女08/05/19801012124郭黎明男03/04/19811024021何明慧女04/12/19821041223姜明明男12/05/19801013012何漓江男10/05/19791032104康紀(jì)
6、平女03/04/19811024125康嘉家男07/05/19801041134包立琪女03/14/19811014115王海洋男04/13/19821041354王立平女12/05/1981101學(xué)生 82 數(shù)據(jù)定義 圖1 一組關(guān)系模式和樣本數(shù)據(jù)(d)學(xué) 號2 數(shù)據(jù)定義說明:本書選用SQL Server2000系統(tǒng)作為上機(jī)實(shí)驗(yàn)平臺,所有例題和上機(jī)操作實(shí)驗(yàn)案例都在SQL Server2000查詢分析器中運(yùn)行通過,并且所選用的題目盡量符合SQL的標(biāo)準(zhǔn)格式,如果讀者選用其他數(shù)據(jù)庫管理系統(tǒng)作為實(shí)驗(yàn)環(huán)境,可能有微小的區(qū)別。 92 數(shù)據(jù)定義說明:本書選用SQL Server2000系統(tǒng)2 數(shù)據(jù)定義2.1
7、 建立數(shù)據(jù)庫 絕大多數(shù)關(guān)系DBMS,使用CREATE DATABASE命令建立數(shù)據(jù)庫,其語法格式:CREATE DATABASE 102 數(shù)據(jù)定義2.1 建立數(shù)據(jù)庫 絕大多數(shù)關(guān)系DBMS,2 數(shù)據(jù)定義2.1 建立數(shù)據(jù)庫例1 根據(jù)圖1給出的實(shí)例,用SQL語言創(chuàng)建一個教學(xué)數(shù)據(jù)庫。 CREATE DATABASE 教學(xué) 當(dāng)進(jìn)入SQL_Server2000系統(tǒng)的查詢分析器后,如圖2所示,在查詢窗口中輸入命令:CREATE DATABASE 教學(xué),然后,點(diǎn)擊綠色的按鈕執(zhí)行命令,在窗格中顯示運(yùn)行的結(jié)果,創(chuàng)建了教學(xué)數(shù)據(jù)庫。 112 數(shù)據(jù)定義2.1 建立數(shù)據(jù)庫例1 根據(jù)圖1給出的實(shí)2 數(shù)據(jù)定義2.1 建立數(shù)據(jù)
8、庫 圖2 用SQL語句創(chuàng)建數(shù)據(jù)庫 122 數(shù)據(jù)定義2.1 建立數(shù)據(jù)庫 122 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 在SQL語言中,利用CREATE TABLE語句創(chuàng)建表,其基本語法格式是: CREATE TABLE ( , , , PRIMARY KEY (), FOREIGN KEY () REFERENCES 表名()) 注:PRIMARY KEY子句定義主碼,實(shí)現(xiàn)實(shí)體完整性定義;FOREIGN KEY子句定義外碼,實(shí)現(xiàn)參照完整性定義。 132 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 在SQL語言中,利用C2 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 表1 常見的數(shù)據(jù)類型 數(shù)據(jù)類型說明范例CHAR(N)固定長度的字符串CH
9、AR(8):長度是8個字節(jié)INT整數(shù)類型SMALLINT短整型數(shù)類型NUMERIC(P,D)共P位,其中小數(shù)位占d位NUMERIC(8,2):整數(shù)6位,小數(shù)2位DATE日期型,包括年(4位)月日2001/10/13:2001年10月13日142 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)數(shù)據(jù)類型說明范例CHAR2 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)舉例說明CREATE TABLE語句的使用方法。 例2 創(chuàng)建一個簡單的表,該表的關(guān)系模式是:系(系編號,系名稱)。 CREATE TABLE 系 ( 系編號 SMALLINT,系名稱 CHAR(12) 152 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)舉例說明CREATE T2 數(shù)據(jù)定義2
10、.2 定義表結(jié)構(gòu)例3 在創(chuàng)建系表的定義中包括實(shí)體完整性定義。 CREATE TABLE 系 ( 系編號 SMALLINT NOT NULL, 系名稱 CHAR(12), PRIMARY KEY(系編號) 162 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)例3 在創(chuàng)建系表的定義2 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 說明:在SQL-89中,規(guī)定PRIMARY KEY子句定義主碼,NOT NULL關(guān)鍵詞定義屬性非空,所以,要用這兩個定義來實(shí)現(xiàn)實(shí)體完整性規(guī)則。在SQL-92中,規(guī)定PRIMARY KEY子句定義主碼且主碼非空,所以,用一個子句就可以定義實(shí)體完整性。172 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 說明:在SQL-89中2
11、 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)例4 在創(chuàng)建教工表的定義中包括實(shí)體完整性和參照完整性的定義。 CREATE TABLE 教工 (教工號 SMALLINT NOT NULL, 姓名 CHAR(8) NOT NULL, 性別 CHAR(2), 職稱 CHAR(8), 工資 NUMERIC(8,2), 系編號 SMALLINT, PRIMARY KEY (教工號), FOREIGN KEY (系編號) REFERENCES 系(系編號) 182 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)例4 在創(chuàng)建教工表的定2 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 例5 創(chuàng)建成績表,包括實(shí)體完整性和參照完整性的定義。 CREATE TABLE
12、成績 ( 學(xué)號 CHAR(6) NOT NULL, 課程編號 CHAR(8) NOT NULL, 分?jǐn)?shù) NUMERIC(4,1), PRIMARY KEY (學(xué)號,課程編號), FOREIGN KEY (學(xué)號) REFERENCES 學(xué)生(學(xué)號), FOREIGN KEY (課程編號) REFERENCES 課程(課程編號) 192 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu) 例5 創(chuàng)建成績表,2 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)注意:在上機(jī)操作時,創(chuàng)建表的順序是先創(chuàng)建被參照關(guān)系,再創(chuàng)建參照關(guān)系,即“先父后子”。如果要反復(fù)練習(xí)創(chuàng)建表的過程,需要刪除已經(jīng)建立的表時,刪除的順序與創(chuàng)建表的順序正相反,即“先子后父”。 2
13、02 數(shù)據(jù)定義2.2 定義表結(jié)構(gòu)注意:在上機(jī)操作時,創(chuàng)建2 數(shù)據(jù)定義2.3 修改表結(jié)構(gòu) 用SQL語言的ALTER TABLE 語句可以修改表的結(jié)構(gòu)。下面結(jié)合實(shí)例說明ALTER TABLE 語句的使用方法。 1.增加新的屬性,所有元組在這個新屬性上都將賦值NULL。 語句格式是: ALTER TABLE ADD 例6 在系表中添加一個電話號碼屬性。 ALTER TABLE 系 ADD 電話號碼 CHAR(8) 212 數(shù)據(jù)定義2.3 修改表結(jié)構(gòu) 用SQL語言的ALTE2 數(shù)據(jù)定義2.3 修改表結(jié)構(gòu) 2.修改屬性的性質(zhì),語句格式是: ALTER TABLE MODIFY 注意:在SQL SERVE
14、R 2000系統(tǒng)中規(guī)定修改屬性的性質(zhì),語句格式為: ALTER TABLE ALTER COLUMN 例7 修改系表中電話號碼屬性的寬度。 ALTER TABLE 系 ALTER COLUMN 電話號碼 CHAR(13) 222 數(shù)據(jù)定義2.3 修改表結(jié)構(gòu) 2.修改屬性的性質(zhì),語2 數(shù)據(jù)定義2.3 修改表結(jié)構(gòu) 刪除一個屬性,語句格式是: ALTER TABLE DROP 注意:在SQL SERVER 2000系統(tǒng)中應(yīng)該寫成: ALTER TABLE DROP COLUMN 例8 刪除系表中電話號碼屬性。SQL 語句是: ALTER TABLE 系 DROP COLUMN 電話號碼 232 數(shù)據(jù)
15、定義2.3 修改表結(jié)構(gòu) 刪除一個屬性,語句格2 數(shù)據(jù)定義2.4 刪除表 SQL語言中,刪除表的語句格式是: DROP TABLE 242 數(shù)據(jù)定義2.4 刪除表 242 數(shù)據(jù)定義2.4 刪除表 例9 刪除教工表。 DROP TABLE 教工 注意:系統(tǒng)不允許刪除已由REFERENCES子句定義的被參照表。假設(shè)在教工表中定義外碼參照系表,若要刪除系表,就必須先刪除教工表,否則系統(tǒng)拒絕刪除操作。 252 數(shù)據(jù)定義2.4 刪除表 例9 刪除教工表。22 數(shù)據(jù)定義2.4 刪除表例10 假設(shè)在教學(xué)數(shù)據(jù)庫中創(chuàng)建了系、教工、學(xué)生、課程、成績5個表,并且定義了參照完整性規(guī)則。如果要刪除學(xué)生表,則必須先刪除成績
16、表。 DROP TABLE 成績 DROP TABLE 學(xué)生 262 數(shù)據(jù)定義2.4 刪除表例10 假設(shè)在教學(xué)數(shù)據(jù)庫中2 數(shù)據(jù)定義2.4 刪除表同理,要刪除系表,必須先刪除參照系表的其他表。即先刪除成績表,再刪除學(xué)生、教工和課程表(這三個表之間的刪除順序無關(guān)緊要),最后刪除系表。 DROP TABLE 成績 DROP TABLE 學(xué)生 DROP TABLE 教工 DROP TABLE 課程 DROP TABLE 系272 數(shù)據(jù)定義2.4 刪除表同理,要刪除系表,必須先刪除2 數(shù)據(jù)定義2.5 創(chuàng)建索引 在表的屬性項(xiàng)上創(chuàng)建索引,可以加快查詢速度。SQL語言中,創(chuàng)建索引的語句格式: CREATE I
17、NDEX ON () 282 數(shù)據(jù)定義2.5 創(chuàng)建索引 282 數(shù)據(jù)定義2.5 創(chuàng)建索引例11 對教授表的教工號屬性建立一個名為SCODEX的索引。 CREATE INDEX SCODEX ON 教授(教工號) SQL語言允許建立唯一性索引。對侯選碼建立唯一性索引,可以防止輸入重復(fù)的數(shù)據(jù)。 292 數(shù)據(jù)定義2.5 創(chuàng)建索引例11 對教授表的教工號屬2 數(shù)據(jù)定義2.5 創(chuàng)建索引 例12 對學(xué)生表的學(xué)號屬性建立唯一性索引。 CREATE UNIQUE INDEX SCODEX ON 學(xué)生(學(xué)號) 說明:建立了唯一性索引之后,若輸入一個重復(fù)的學(xué)號時,系統(tǒng)將產(chǎn)生錯誤提示: duplicate valu
18、e in index. 302 數(shù)據(jù)定義2.5 創(chuàng)建索引 例12 對學(xué)生表的學(xué)號3 數(shù)據(jù)的基本操作 本節(jié)將介紹SQL語言的數(shù)據(jù)操作功能,包括插入、更新和刪除數(shù)據(jù)的操作命令。 313 數(shù)據(jù)的基本操作 本節(jié)將介紹SQL語言的數(shù)據(jù)操作功能,3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 在SQL 語言中,數(shù)據(jù)插入語句有三種格式。第一種格式是在表中插入一個元組,語法格式是:INSERT INTO VALUES (,.,) 323 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 323 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 例13 在系表中插入一行數(shù)據(jù)。 INSERT INTO 系 VALUES (102,管理科學(xué)) 顯示所插入的數(shù)據(jù) : S
19、ELECT * FROM 系 顯示結(jié)果: 系編號系名稱102管理科學(xué)333 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 例13 在系表中插3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 例14 向教工表中插入一行數(shù)據(jù)。 INSERT INTO 教工 VALUES (2001,葛小平,女,教授,3420.00,102) 顯示所插入的數(shù)據(jù) : SELECT * FROM 教工 顯示結(jié)果: 教工號姓名性別職稱工資系編號2001葛小平女教授3420.00102343 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 例14 向教工表中插入3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)說明:這種格式適合向表中插入一整行數(shù)據(jù)。值得注意的是所列值的順序必須與屬性的順序
20、和類型一致。 353 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)說明:這種格式適合向表3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 第二種格式用于在表中插入部分屬性的值,語法格式是: INSERT INTO ()VALUES () 363 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)363 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)例15 向教工表中插入一個教工號、姓名和工資。 INSERT INTO 教工(教工號,姓名,工資) VALUES (2109,田新民,2650) 顯示所插入的數(shù)據(jù): SELECT * FROM 教工 顯示結(jié)果: 教工號姓名性別職稱工資系編號2001葛小平女教授3420.001022109田新民2650.00373 數(shù)據(jù)的
21、基本操作 1 插入數(shù)據(jù)例15 向教工表中插入3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 說明:這種格式適合在表的部分屬性上插入數(shù)據(jù)。應(yīng)注意的是值的順序應(yīng)該與所列屬性的順序和類型相一致。 383 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 說明:這種格式適合在3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 第三種格式是將VALUES子句換成一個查詢語句, 語法格式是: INSERT INTO () SELECT 一個查詢語句 FROM 393 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 第三種格3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 例16 將教工表的姓名和工資拷貝到一個酬金表中。 403 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) 例16 將教工表的姓名3 數(shù)據(jù)的
22、基本操作 1 插入數(shù)據(jù) (1) 創(chuàng)建一個酬金表。 CREATE TABLE 酬金 (教工姓名 CHAR(8), 工資 NUMERIC(8,2) 413 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù) (1) 創(chuàng)3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)(2) 將教工表中姓名和工資兩列數(shù)據(jù)拷貝到酬金表中。 INSERT INTO 酬金 (教工姓名,工資) SELECT 姓名,工資 FROM 教工 423 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)(2) 將教工表中姓名和3 數(shù)據(jù)的基本操作 1 插入數(shù)據(jù)(3)顯示操作的結(jié)果: SELECT * FROM 酬金 顯示結(jié)果: 教工姓名工資葛小平3420.00田新民2650.00433 數(shù)據(jù)的基
23、本操作 1 插入數(shù)據(jù)(3)顯示操作的結(jié)果:教3 數(shù)據(jù)的基本操作 2 更新數(shù)據(jù) SQL語言的數(shù)據(jù)更新語句的格式是: UPDATE SET =,=, WHERE 443 數(shù)據(jù)的基本操作 2 更新數(shù)據(jù) SQL語言的數(shù)3 數(shù)據(jù)的基本操作 2 更新數(shù)據(jù) 例17 將教工表中職稱為“教授”的工資增加10%。 UPDATE 教工 SET 工資=工資*1.1 WHERE 職稱=教授 只修改職稱為教授的元組的工資屬性值。 453 數(shù)據(jù)的基本操作 2 更新數(shù)據(jù) 例17 將教工3 數(shù)據(jù)的基本操作 2 更新數(shù)據(jù) 例18 將教工表中所有人的工資增加5%。 UPDATE 教工 SET 工資=工資*1.05 修改所有元組的工
24、資屬性的值。 463 數(shù)據(jù)的基本操作 2 更新數(shù)據(jù) 例18 將教3 數(shù)據(jù)的基本操作 3 刪除數(shù)據(jù) SQL語言中,刪除數(shù)據(jù)語句的格式是: DELETE FROM WHERE 473 數(shù)據(jù)的基本操作 3 刪除數(shù)據(jù) 473 數(shù)據(jù)的基本操作 3 刪除數(shù)據(jù) 例19 從教工表中刪除教工號為2001的教工。 DELETE FROM 教工 WHERE 教工號=2001 查看刪除的結(jié)果: SELECT * FROM 教工 顯示結(jié)果: 教工號姓名性別職稱工資系編號2109田新民2650.00483 數(shù)據(jù)的基本操作 3 刪除數(shù)據(jù) 例19 從教工3 數(shù)據(jù)的基本操作 3 刪除數(shù)據(jù) 例20 刪除酬金表的所有數(shù)據(jù)。 DEL
25、ETE FROM 酬金 查看刪除的結(jié)果: SELECT * FROM 酬金 顯示結(jié)果: 說明:這個語句只刪除酬金表的數(shù)據(jù),不刪除表的結(jié)構(gòu),此時,酬金表是一個空表。 教工姓名工資493 數(shù)據(jù)的基本操作 3 刪除數(shù)據(jù) 例20 刪除酬金表4 數(shù)據(jù)的查詢操作 本節(jié)將介紹SQL語言的數(shù)據(jù)查詢的基本功能。其中包括查詢語句的基本結(jié)構(gòu)、更名運(yùn)算、元組變量、字符串操作、排序操作和分組操作。 504 數(shù)據(jù)的查詢操作 本節(jié)將介紹SQL語言的數(shù)據(jù)查詢的基本4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) SQL查詢語句的一般格式: SELECT , FROM , WHERE 514 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)
26、構(gòu) 4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu)查詢語句的三個子句分別實(shí)現(xiàn)關(guān)系代數(shù)的一種運(yùn)算:SELECT子句對應(yīng)關(guān)系代數(shù)中的投影運(yùn)算,列出查詢結(jié)果中的屬性。FROM子句對應(yīng)關(guān)系代數(shù)中的笛卡兒積,列出查詢需要搜索的關(guān)系。WHERE子句對應(yīng)關(guān)系代數(shù)中的選擇運(yùn)算,條件表達(dá)式中所涉及的屬性將屬于FROM子句所列的關(guān)系。 524 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu)查詢語句的三4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 查詢語句等價于關(guān)系代數(shù)表達(dá)式:A1,A2,.An(p(R1R2Rm) 其中:Ai表示屬性i,Rj表示關(guān)系j,P表示選擇條件。 這個表達(dá)式的含義是:首先計(jì)算R1、R2到Rm的笛卡兒
27、乘積,然后,選擇滿足條件P的元組,最后對選擇的結(jié)果進(jìn)行投影。 534 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 查詢4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 從查詢語句等價的關(guān)系代數(shù)表達(dá)式,可以分析SQL查詢語句的執(zhí)行過程:構(gòu)造FROM子句中關(guān)系的笛卡兒積。根據(jù)WHERE子句中的條件表達(dá)式,進(jìn)行選擇操作。根據(jù)SELECT子句給出的列名進(jìn)行投影操作。 544 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 從查詢語4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 假設(shè)有關(guān)系R、S和一個SQL查詢語句,如圖3所示。分析SQL查詢語句與關(guān)系代數(shù)運(yùn)算的對應(yīng)關(guān)系。 R S 圖3 關(guān)系R、S和一個SQL查詢語句
28、 A B C a1 b1 c2 a2 b2 c2 a3 b1 c4 A D E a1 d1 e2 a2 d2 e3查詢語句:SELECT R.A, B, D, E FROM R , SWHERE R.A=S.A554 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 假設(shè)有4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu)分析這個查詢語句執(zhí)行的過程:1.先計(jì)算 RS ABCADEa1b1c2a1d1e2a1b1c2a2d2e3a2b2c2a1d1e2a2b2c2a2d2e3a3b1c4a1d1e2a3b1c4a2d2e3564 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu)分析這個查詢4 數(shù)據(jù)的查詢操作 4.1查
29、詢語句的基本結(jié)構(gòu) 2.依據(jù)條件 進(jìn)行選擇操作 ABCADEa1b1c2a1d1e2A2b2c2a2d2e3574 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 2.依4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 進(jìn)行投影操作 R.ABDEa1b1d1e2a2b2d2e3584 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 進(jìn)行投4 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 說明:實(shí)際上,SQL不一定完全按照這個步驟進(jìn)行操作。通常是采取某種等價的算法,例如,先選擇,再做笛卡兒乘積,最后投影,用減少笛卡兒乘積次數(shù)的方法,來提高查詢效率。 594 數(shù)據(jù)的查詢操作 4.1查詢語句的基本結(jié)構(gòu) 說明:實(shí)4 數(shù)據(jù)的
30、查詢操作 4.2 SELECT 子句 SQL查詢語句的運(yùn)算結(jié)果仍然是一個關(guān)系,這個關(guān)系的屬性由SELECT子句的列名表給出。SELECT子句的參數(shù)有多種形式。 604 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 1. 指定某個或某一些屬性。 例21 列出所有教授的姓名。 SELECT 姓名 FROM 教工 WHERE 職稱=教授 查詢結(jié)果:姓名葛小平康立華614 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 例22 列出所有教授的姓名和工資: SELECT 姓名,工資 FROM 教工 WHERE 職稱
31、=教授 查詢結(jié)果:姓名工資葛小平3420.00康立華3740.00624 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 例24 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 2. 指定FROM子句中所有關(guān)系的屬性都將出現(xiàn)在查詢結(jié)果中。 例23 列出教授的所有信息。 SELECT * FROM 教工 WHERE 職稱=教授 查詢結(jié)果: 教工號姓名性別職稱工資系編號2001葛小平女教授3420.001022302康立華女教授3740.00103634 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 利用關(guān)鍵詞DISTINCT消除重復(fù)出現(xiàn)的元組。 例24 列出
32、教工表中的系編號。(注意有重復(fù)的系編號) SELECT 系編號 FROM 教工 查詢結(jié)果:系編號101102104101103102644 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 例25 列出教工表中的系編號并消除重復(fù)的元組。 SELECT DISTINCT 系編號 FROM 教工 查詢結(jié)果: 系編號101102104103654 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 例4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4. 在SELECT子句中還可以對輸出的屬性重命名。 例26 已知學(xué)分=學(xué)時/17,計(jì)算每一門課程的學(xué)分?jǐn)?shù)。 SELEC
33、T 課程名,學(xué)時/17 AS 學(xué)分 FROM 課程 查詢結(jié)果: 課程名學(xué)分?jǐn)?shù)學(xué)4英語5計(jì)算機(jī)6經(jīng)濟(jì)學(xué)3664 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 5. SELECT子句中可以包含表達(dá)式 例27 顯示教授的工資和提高10%的工資額。SELECT 姓名,工資,工資*1.1 AS 工資*1.1FROM 教工 WHERE 職稱=教授 查詢結(jié)果: 姓名工資工資*1.1葛小平3420.003762.00康立華3740.002915.00674 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 例28 顯示田平
34、平同學(xué)出生100天的日期。 SELECT 姓名, 出生年月+100 AS 出生年月+100 FROM 學(xué)生 WHERE 姓名=田平平 查詢結(jié)果: 姓名出生年月出生年月+100田平平08/05/198011/13/1980684 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 4 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 在后面的章節(jié)還會介紹SELECT子句的一些用法,例如,SELECT子句的參數(shù)還可以是算術(shù)函數(shù)。 694 數(shù)據(jù)的查詢操作 4.2 SELECT 子句 在后4 數(shù)據(jù)的查詢操作 4.3 WHERE子句 WHERE子句中將給出查詢語句的選擇條件,條件表達(dá)式中可使用邏輯運(yùn)算符、比較運(yùn)算符和
35、算術(shù)運(yùn)算符。WHERE子句中使用的運(yùn)算符如下: 1. 比較運(yùn)算符 、=、=、,用于字符串表達(dá)式、算術(shù)表達(dá)式,以及特殊的類型(如日期類型)的比較。比較表達(dá)式運(yùn)算的結(jié)果是邏輯值真(T)或假(F),即表達(dá)式成立為真,否則為假。 704 數(shù)據(jù)的查詢操作 4.3 WHERE子句 4 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例29 列出教工表中工資在3000元以上的名單。 SELECT 姓名 FROM 教工 WHERE 工資= 3000 714 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例4 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例30 列出學(xué)生表中1980年1月1日之后出生的學(xué)生名單。 SELECT 姓
36、名 FROM 學(xué)生 WHERE 出生年月= 1980-1-1 注意:進(jìn)行比較的數(shù)據(jù)類型必須一致。 724 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例30 4 數(shù)據(jù)的查詢操作 4.3 WHERE子句 2. 邏輯運(yùn)算符AND(邏輯與)、OR(邏輯或)、NOT(邏輯非),可將多個比較表達(dá)式連接起來,構(gòu)成復(fù)雜的邏輯表達(dá)式,表示復(fù)雜的條件。邏輯表達(dá)式運(yùn)算的結(jié)果仍是邏輯值真(T)或假(F)。 734 數(shù)據(jù)的查詢操作 4.3 WHERE子句 24 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例31 列出學(xué)生表中在1980年1月1日之后出生的男同學(xué)名單。 SELECT 姓名 FROM 學(xué)生 WHERE 出生年月=
37、 1980-1-1 AND 性別=男 744 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例31 4 數(shù)據(jù)的查詢操作 4.3 WHERE子句 例32 列出教工表中教授或副教授中工資低于3000元的名單。 SELECT 姓名 FROM 教工 WHERE (職稱=教授 OR 職稱=副教授)AND 工資=1000 AND 工資=2000 885 字符串操作 例38檢索工資在1000元到2000元范圍6 排列元組的顯示順序 在SQL的查詢語句中,可以利用ORDER BY子句,對查詢結(jié)果進(jìn)行排序。ORDER BY子句是查詢語句的可選項(xiàng),語法格式是: SELECT , FROM , WHERE ORDER B
38、Y DESC ASC 其中:DESC 表示降序,ASC表示升序,若缺省默認(rèn)為升序。 896 排列元組的顯示順序 在SQL的查詢語句中,可以利用O6 排列元組的顯示順序 例39 按學(xué)號的升序,顯示系編號等于101的學(xué)生信息: SELECT * FROM 學(xué)生 WHERE 系編號=101 ORDER BY 學(xué)號 查詢結(jié)果: 學(xué)號姓名性別出生年月系編號1022田平平女08/05/801011134包立琪女03/14/811011223姜明明男12/05/801011354王立平女12/05/81101906 排列元組的顯示順序 例39 按學(xué)號的升序,顯示系編號等7 集合查詢 在第2章介紹了關(guān)系代數(shù)并
39、、交和差運(yùn)算的概念。本節(jié)將用SQL語言實(shí)現(xiàn)這些關(guān)系代數(shù)的運(yùn)算。SQL-92在關(guān)系上的UNION、INTERSECT和EXCEPT操作對應(yīng)于關(guān)系代數(shù)中并()、交()、差()運(yùn)算。 917 集合查詢 在第2章介紹了關(guān)系代數(shù)并、交和差運(yùn)算的概7 集合查詢 設(shè)有關(guān)系R和S如圖4所示。 R S 圖4 關(guān)系R和S 下面舉例說明在SQL語言中,實(shí)現(xiàn)并、交、差運(yùn)算的方法。 ABCDa1b1c1d1a2b2c2d2a3b2c3d1a4b4c4d3ABCa1b1c1a5b1c2a6b3c3a4b4c4927 集合查詢 設(shè)有關(guān)系R和S如圖4所示。ABCDa1b17 集合查詢7.1 并操作 例40 求R和S在屬性A、
40、B、C上投影的并集, 其關(guān)系代數(shù)表達(dá)式是: A , B,C(R) A , B,C(S) SQL語句是: ( SELECT A,B,C FROM R ) UNION ( SELECT A,B,C FROM S ) 937 集合查詢7.1 并操作 例40 求R和S在屬性A、B7 集合查詢7.1 并操作 運(yùn)行結(jié)果: 說明:與SELECT語句不同,UNION操作自動消除重復(fù)的元組。如果想保留所有重復(fù),可以用UNION ALL代替UNION。 ABCa1b1c1a2b2c2a3b2c3a4b4c4a5b1c2a6b3c3947 集合查詢7.1 并操作 運(yùn)行結(jié)果:ABC7 集合查詢7.1 并操作 例41求
41、關(guān)系R和S在屬性B上投影的并操作,要保留重復(fù)元組。關(guān)系代數(shù)表達(dá)式是: B(R)B(S) SQL語句是: ( SELECT B FROM R) UNION ALL ( SELECT B FROM S) 957 集合查詢7.1 并操作 例41求關(guān)系R和S在屬性B7 集合查詢7.1 并操作 運(yùn)行結(jié)果: 說明:UNION ALL操作可以保留重復(fù)的元組。 Bb1b2b2b4b1b1b3b4967 集合查詢7.1 并操作 運(yùn)行結(jié)果:Bb1b2b27 集合查詢7.2 交操作 例42 求關(guān)系R和S在屬性A、B、C上投影的交集。 關(guān)系代數(shù)表達(dá)式是: A,B,C(R) A,B,C(S) SQL語句: ( SELE
42、CT A,B,C FROM R ) INTERSECT ( SELECT A,B,C FROM S )977 集合查詢7.2 交操作 例42 求關(guān)系R和S7 集合查詢7.2 交操作 運(yùn)行結(jié)果: 說明:INTERSECT操作自動消除重復(fù)。如果想保留所有重復(fù),可以用INTERSECT ALL代替INTERSECT。 ABCa1b1c1a4b4c4987 集合查詢7.2 交操作 運(yùn)行結(jié)果:ABCa1b17 集合查詢7.2 交操作 例43 求屬于R且也屬于S的B值,要求保留重復(fù)值。 關(guān)系代數(shù)表達(dá)式是: B(R) B(S)) SQL語句是: ( SELECT B FROM R ) INTERSECT A
43、LL ( SELECT B FROM S ) 997 集合查詢7.2 交操作 例43 求屬于R且也屬于S7 集合查詢7.2 交操作 運(yùn)行結(jié)果: 說明:INTERSECT ALL操作可以保留重復(fù)的元組。注:SQL SERVER2000的T-SQL語言并不直接支持INTERSECT操作符,可用EXISTS可以模擬INTERSECT操作。 Bb1b4b1b1b41007 集合查詢7.2 交操作 運(yùn)行結(jié)果:Bb1b4b7 集合查詢7.3 差操作 例44 求關(guān)系R和S在屬性A、B、C上投影的差集。 關(guān)系代數(shù)表達(dá)式是: A,B,C(R)-A,B,C(S) SQL語句是: ( SELECT A , B, C
44、 FROM R ) EXCEPT ( SELECT A , B, C FROM S ) 1017 集合查詢7.3 差操作 例44 求關(guān)系R和S在屬7 集合查詢 7.3 差操作 運(yùn)行結(jié)果是: 說明:EXCEPT操作能夠自動消除重復(fù)。 如果想保留所有重復(fù),可以用EXCEPT ALL 代替EXCEPT。 ABCa2b2c2a3b2c31027 集合查詢 7.3 差操作 運(yùn)行結(jié)果是:ABCa27 集合查詢 7.3 差操作 例45 找出屬于R,且不屬于S的B值,要求保留重復(fù)值。關(guān)系代數(shù)表達(dá)式: B(R)-B(S) SQL語句: ( SELECT B FROM R ) EXCEPT ALL ( SELEC
45、T B FROM S ) 1037 集合查詢 7.3 差操作 例45 找出屬于R,且7 集合查詢 7.3 差操作運(yùn)行結(jié)果: 說明:EXCEPT ALL將保留重復(fù)。在SQL SERVER2000的TRANSACTION_SQL語言并不直接支持EXCEPT操作符,可以用NOT EXISTS模擬EXCEPT操作。 Bb2b21047 集合查詢 7.3 差操作運(yùn)行結(jié)果:Bb2b21048 聚集函數(shù) 聚集函數(shù)是對一組值進(jìn)行計(jì)算,并返回單個值的函數(shù)。聚集函數(shù)經(jīng)常與查詢語句的GROUP BY子句一同使用,在查詢結(jié)果中生成匯總值。表2 中列舉SQL的聚集函數(shù)。 1058 聚集函數(shù) 聚集函數(shù)是對一組值進(jìn)行計(jì)算,
46、并返回單個值的函8 聚集函數(shù) 表2 SQL的聚集函數(shù) 函數(shù)名功能參數(shù)類型AVG求平均值數(shù)值SUM求總和數(shù)值MAX求最大值數(shù)值、其他類型MIN求最小值數(shù)值、其他類型COUNT計(jì)數(shù)數(shù)值、其他類型1068 聚集函數(shù) 表2 SQL的聚集8 聚集函數(shù) 其中AVG和SUM函數(shù)的參數(shù)必須是數(shù)值型,其他函數(shù)的參數(shù)還可以是非數(shù)值型,如字符串。聚集函數(shù)只能作為SELECT和HAVING子句的參數(shù)。除了COUNT函數(shù)之外,其他聚集函數(shù)忽略空值。 1078 聚集函數(shù) 其中AVG和SUM函數(shù)的參數(shù)必須是數(shù)值型,8 聚集函數(shù) 1. 求平均值函數(shù) 聚集函數(shù)AVG用于計(jì)算列中數(shù)值的平均值,所以函數(shù)AVG的參數(shù)必須是數(shù)值型。
47、1088 聚集函數(shù) 1. 求平均值函數(shù)1088 聚集函數(shù) 例46 求教工表中教授工資的平均值。 SELECT AVG (工資) AS 平均工資 FROM 教工 WHERE 職稱=教授 查詢結(jié)果: 平均工資35801098 聚集函數(shù) 例46 求教工表中教授工資的平均值。 平均工8 聚集函數(shù) 2. 求總和函數(shù) 聚集函數(shù)SUM用于計(jì)算列中數(shù)值的總和,函數(shù)SUM的參數(shù)必須是數(shù)值型。1108 聚集函數(shù) 2. 求總和函數(shù)1108 聚集函數(shù) 例47 求所有教工的工資總和。 SELECT SUM (工資) AS 工資總和 FROM 教工 查詢結(jié)果:工資總和1786001118 聚集函數(shù) 例47 求所有教工的工
48、資總和。工資總和17868 聚集函數(shù) 求最大值和最小值函數(shù) 聚集函數(shù)MAX用于求列中的最大值,MIN求列中的最小值,這兩個的參數(shù)允許是數(shù)值型的,也可以是其他數(shù)據(jù)類型(如字符型和時間型的數(shù)據(jù))。 1128 聚集函數(shù) 求最大值和最小值函數(shù)1128 聚集函數(shù) 例48 找出教工中最高工資和最低工資。 SELECT MAX(工資),MIN(工資) FROM 教工 查詢結(jié)果: MAX (工資)MIN (工資)3740.002130.001138 聚集函數(shù) 例48 找出教工中最高工資和最低工資。8 聚集函數(shù) 例49 顯示學(xué)生中最早和最晚的出生日期。 SELECT MIN (出生日期), MAX (出生日期)
49、 FROM 學(xué)生 查詢結(jié)果: 注意:出生日期是日期型數(shù)據(jù),日期型數(shù)據(jù)的特點(diǎn), 最大數(shù)據(jù)恰好是最小年齡。 MIN(出生日期)MAX (出生日期)10/05/197904/13/19821148 聚集函數(shù) 例49 顯示學(xué)生中最早和最晚的出生日期。MI8 聚集函數(shù) 4. 計(jì)數(shù)器函數(shù)聚集函數(shù)COUNT統(tǒng)計(jì)表中的行數(shù)。COUNT函數(shù)有3種格式: COUNT(*)統(tǒng)計(jì)所有行數(shù),包括含有空值的行。COUNT(表達(dá)式)計(jì)算每一行中表達(dá)式的值,并返回非空值的行數(shù)。COUNT(DISTINCT (表達(dá)式)計(jì)算每一行表達(dá)式的值,并返回唯一值且非空值的行數(shù)。 1158 聚集函數(shù) 4. 計(jì)數(shù)器函數(shù)1158 聚集函數(shù) 例
50、50 查詢學(xué)生的總?cè)藬?shù)。 SELECT COUNT(*)AS 人數(shù) FROM 學(xué)生 查詢結(jié)果: 人數(shù)101168 聚集函數(shù) 例50 查詢學(xué)生的總?cè)藬?shù)。 人數(shù)1018 聚集函數(shù) 例51 假設(shè)在學(xué)生表中增加一名新生,只插入該生的學(xué)號和姓名。執(zhí)行下列插入語句: INSERT INTO STUDENT(SNO,SNAME) VALUES(991033,葛小燕) 分別利用COUNT()函數(shù)的三種格式, 觀察COUNT()函數(shù)的使用方法。 1178 聚集函數(shù) 例51 假設(shè)在學(xué)生表中增加一名新8 聚集函數(shù) (1) 如果要統(tǒng)計(jì)學(xué)生表的行數(shù),即包括系編號為空值的行在內(nèi),則使用第一種格式。 SELECT COUN
51、T (*) FROM 學(xué)生 查詢結(jié)果: COUNT(*)111188 聚集函數(shù) (1) 如果要統(tǒng)計(jì)學(xué)生表的行數(shù),即包括系編8 聚集函數(shù)(2)如果要統(tǒng)計(jì)學(xué)生表中系編號非空值的行數(shù),即不包括系編號為空值的行,則使用第二種格式。 SELECT COUNT(系編號) FROM 學(xué)生 查詢結(jié)果: COUNT(系編號) 101198 聚集函數(shù)(2)如果要統(tǒng)計(jì)學(xué)生表中系編號非空值的行數(shù),即不8 聚集函數(shù)(3)如果要統(tǒng)計(jì)成績表中所有選課的學(xué)生人數(shù),即不管一名學(xué)生選了幾門課程,都只計(jì)算一次,則使用第三種格式。 SELECT COUNT (DISTINCT (學(xué)號) AS 人數(shù) FROM 成績 查詢結(jié)果: 人數(shù)5
52、1208 聚集函數(shù)(3)如果要統(tǒng)計(jì)成績表中所有選課的學(xué)生人數(shù),即不9 GROUP BY 和HAVING子句 在SQL語言的查詢語句中,可以用GROUP BY子句實(shí)現(xiàn)對元組的分組功能。還可以利用HAVING子句對GROUP BY分組的結(jié)果進(jìn)行篩選,保留滿足條件的分組。GROUP BY子句HAVING子句是查詢語句的可選項(xiàng),語法格式是: SELECT , FROM , WHERE GROUP BY HAVING 1219 GROUP BY 和HAVING子句 在SQL語言9 GROUP BY 和HAVING子句 9.1 GROUP BY子句 在GROUP BY子句中的分組表達(dá)式可以是一個屬性或者多
53、個屬性,其功能是將在分組表達(dá)式上具有相同值的元組放在一個組內(nèi)。 1229 GROUP BY 和HAVING子句 9.1 G9 GROUP BY 和HAVING子句 9.1 GROUP BY子句例52 統(tǒng)計(jì)學(xué)生表中男生和女生的人數(shù)。 SELECT 性別, COUNT (*) FROM 學(xué)生 GROUP BY 性別 查詢結(jié)果: 性別COUNT (*)男5女51239 GROUP BY 和HAVING子句 9.1 G9 GROUP BY 和HAVING子句 9.1 GROUP BY子句 例52 統(tǒng)計(jì)成績表中,每一門課程的平均成績。 SELECT 課程編號,AVG (分?jǐn)?shù)) FROM 成績 GROUP
54、 BY 課程編號 查詢結(jié)果: 注意:帶有GROUP BY子句的查詢語句中,SELECT子句的列名中必須包括分組表達(dá)式,還可以包括集聚函數(shù),除此而外不能有其他列名。 課程編號AVG (分?jǐn)?shù))C170C284C365C4871249 GROUP BY 和HAVING子句 9.1 G9 GROUP BY 和HAVING子句 9.1 GROUP BY子句 例53 查詢教工表中每一種職稱的最高工資和最低工資。 SELECT 職稱, MAX (工資), MIN (工資) FROM 教工 GROUP BY 職稱 查詢結(jié)果: 職稱MAX(工資)MIN(工資)教授3740.003420.00副教授3190.00
55、3140.00講師224002130.001259 GROUP BY 和HAVING子句 9.1 G9 GROUP BY 和HAVING子句 9.2 HAVING子句 使用GROUP BY子句時,可以利用HAVING子句對GROUP BY分組的結(jié)果進(jìn)行篩選,保留滿足條件的分組。HAVING子句的格式: HAVING 1269 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句 HAVING與WHERE子句都有,注意兩者之間的區(qū)別。WHERE子句中的是在GROUP BY分組之前起作用,而HAVING子句的是在形成分組后起作用,所以
56、,在HAVING的條件表達(dá)式中可以使用聚集函數(shù)(這一點(diǎn)與WHERE不同)。 1279 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句 例54 對于成績表中分?jǐn)?shù)在60以上的行按照學(xué)號分組,其中只包含選課數(shù)大于2且平均分超過70的學(xué)號、選課數(shù)和平均分。 SELECT 學(xué)號,COUNT(課程編號 ), AVG (分?jǐn)?shù)) FROM 成績 WHERE 分?jǐn)?shù)=60 GROUP BY 學(xué)號 HAVING COUNT(課程編號)2 AND AVG(分?jǐn)?shù)) 70 分析這個語句的WHERE、GROUP BY和HAVING子句執(zhí)行的順序。已知成績
57、表如圖4所示。 1289 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句 成績 圖4 成績表 學(xué)號課程號分?jǐn)?shù)1022C101881022C102672124C101562124C102952124C103454021C104874021C102784021C103671223C101661223C102893012C102933012C103841299 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句(1) 這個語句首先執(zhí)行WHERE子句,選擇滿足條件的1
58、0行(去除不及格的2行)。 學(xué)號課程號分?jǐn)?shù)1022C101881022C102672124C102954021C104874021C102784021C103671223C101661223C102893012C102933012C103841309 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句(2) 然后執(zhí)行GROUP BY子句,將10行按照學(xué)號分成5組。 學(xué)號課程號分?jǐn)?shù)1022C101881022C102672124C102954021C104874021C102784021C103671223C101661223C1
59、02893012C102933012C103841319 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句 (3)最后執(zhí)行HAVING子句,以“選課數(shù)大于2且平均分超過70”為條件篩選分組的結(jié)果,最后滿足條件的組只有1組。 運(yùn)行結(jié)果 : 學(xué)號課程號分?jǐn)?shù)4021C104874021C102784021C10367學(xué)號COUNT(課程號) AVG(分?jǐn)?shù)) 4021377.331329 GROUP BY 和HAVING子句 9.2 HA9 GROUP BY 和HAVING子句 9.2 HAVING子句 例55 統(tǒng)計(jì)成績表中選修人數(shù)超
60、過2以上的課程編號和人數(shù)。 SELECT 課程編號,COUNT (*) FROM 成績 GROUP BY 課程編號 HAVING COUNT(*)2 首先,按照課程編號分成4組,再過濾掉選修人數(shù)小于或等于2的組。 1339 GROUP BY 和HAVING子句 9.2 HA10 空值 在SQL語言中,允許使用NULL值表示某個屬性的值為空(即沒有值)。對于空值的處理方法和原則是一個容易混淆的問題。 13410 空值 在SQL語言中,允許使用NULL值表示某個屬10 空值 10.1 IS NULL和IS NOT NULL運(yùn)算符 在SQL語言中,允許在條件表達(dá)式中使用特殊的運(yùn)算符號IS NULL測
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家居宣傳印刷合同模板
- 活動供餐合同模板
- 經(jīng)營入股合同模板
- 熱量合同模板
- 單位外包專車合同模板
- 房產(chǎn)贈予父母合同模板
- 機(jī)械人工合同模板
- 農(nóng)用田種植服務(wù)合同模板
- 食品訂貨采購合同模板
- 杭州物業(yè)合同模板
- 定期清洗消毒空調(diào)及通風(fēng)設(shè)施的制度
- 護(hù)理質(zhì)量改善項(xiàng)目申報(bào)書
- 熱軋H型鋼理論重量表
- 鈑金件生產(chǎn)過程全流程控制計(jì)劃
- 鉆桿,套管,單根吊卡說明書
- 輔助洞室綜合技術(shù)交底
- 一般企業(yè)所有者權(quán)益變動表excel模版
- 水利工程施工課程設(shè)計(jì)計(jì)算說明書
- 火災(zāi)事故現(xiàn)場處置方案
- 淺談如何有效地進(jìn)行工程造價管理論文.doc
評論
0/150
提交評論