




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第8章結構化查詢語言SQL
主要內容SQL概述SQL的數據定義SQL的數據查詢數據更新嵌入式SQLTransactSQL語言概述
2本章概述
結構化查詢語言SQL(StructuredQueryLanguage)是關系數據庫的標準語言,對關系模型的發展和商用DBMS的研制起著重要的作用。SQL語言是介乎于關系代數和元組演算之間的一種語言。本章詳細介紹SQL的核心部分內容:數據定義、數據查詢、數據更新和嵌入式SQL。34.1SQL概述
主要內容SQL的產生與發展SQL的組成及特點44.1.1SQL的產生與發展
1972年,IBM公司開始研制實驗型關系數據庫管理系統SYSTEMR,其配備的查詢語言稱為SQUARE(SpecifyingQueriesAsRelationalExpression)語言,語言中使用了較多的數學符號。1974年,Boyce和Chamberlin把SQUARE修改為SEQUEL(StructuredEnglishQueryLanguage)語言。后來SEQUEL簡稱為SQL(StructuredQueryLanguage),即“結構式查詢語言”,SQL的發音仍“sequel”。現在SQL已經成為一個標準。
SQL有兩個標準:ANSISQL和1992年通過的修改版本SQL-92(簡稱
SQL2)。還有一個新的標準SQL3,它擴充了SQL2,引入了遞歸、觸發器和對象等概念和機制。SQL簡介SQL語言是應用于數據庫的語言,本身是不能獨立存在的。它是一種非過程性(non-procedural)語言,與一般的高級語言(如C、JAVA)不同。一般的高級語言在存取數據庫時,需要依照每一行程序的順序處理許多的動作。但是使用SQL時,只需告訴數據庫需要什么數據,怎么顯示就可以了。具體的內部操作則由數據庫系統來完成。64.1.2SQL的組成及特點
SQL語言從功能上可以分為四部分:數據查詢(DataQuery)、數據操縱(DataManipulation)、數據定義(DataDefinition)和數據控制(DataControl)。數據定義語言,即SQLDDL,用于定義SQL模式、基本表、視圖、索引等結構。數據操縱語言,即SQLDML。數據操縱分成數據查詢和數據更新兩類。其中數據更新又分成插入、刪除和修改三種操作。數據控制語言,即SQLDCL,這一部分包括對基本表和視圖的授權、完整性規則的描述、事務控制等內容。
SQL的核心部分相當于關系代數,同時又具有關系代數所沒有的許多特點,如聚集、數據庫更新等。7特點:綜合統一高度非過程化SQL是一種第四代語言(4GL),用戶只需提出“干什么”,無需具體指明“怎么干”,像存取路徑選擇和具體處理操作等,均有系統自動完成。統一的語法結構SQL有兩種使用方式:一是聯機交互使用,另一種是嵌入到某種高級語言程序設計語言中去使用。語言簡潔8SQL的核心動詞
功能動詞數據庫查詢SELECT數據定義CREATE,DROP數據操縱INSERT,UPDATE,DELECT數據控制GRANT,REVOKE9操作對象操作方式創建刪除修改數據庫CREATEDATABASEDROPDATABASE表CREATETABLEDROPTABLEALTERTABLE索引CREATEINDEXDROPINDEX視圖CREATEVIEWDROPVIEWSQL的數據定義功能包括數據庫定義、表定義、視圖和索引的定義。
10學號SNO姓名SNAME性別SEX年齡AGE所在系SDEPT200915121200915122200915123200915125李小勇劉晨王洪敏張力MFFM20191819CSCSMAIS學生表:S(SNO,SNAME,SEX,AGE,SDEPT)課程表:C(CNO,CNAME,CPNO,CCREDIT)學生選課表:SC(SNO,CNO,GRADE)學生表實例例4.1
定義一個教務管理數據庫JWGL,它包含3個表:本章數據庫示例(教務管理數據庫)11課程號CNO課程名CNAME先修課CPNO學分CCREDIT1234567數據庫數學信息系統操作系統數據結構數據處理C語言516764243424課程表實例學生表選課表實例學號SNO課程號CNO成績GRADE200915121200915121200915121200915122200915122123239285889080124.3SQL的數據查詢
主要內容SELECT語句格式單表查詢聚集函數數據分組多表查詢集合操作134.3.1SELECT語句格式1、SELECT—FROM—WHERE句型 在關系代數中最常用的式子是下列表達式:
πA1,…,An(σF(R1×…×Rm))
這里R1、…、Rm為關系,F是公式,A1、…、An為屬性。 針對上述表達式,SQL為此設計了SELECT—FROM—WHERE句型:
SELECTA1,…,An FROMR1,…,Rm WHEREF
這個句型是從關系代數表達式演變來的,但WHERE子句中的條件表達式F要比關系代數中公式更靈活。14在WHERE子句的條件表達式F中可使用下列運算符算術比較運算符:<、<=、>、>=、<>、!=邏輯運算符:AND、OR、NOT集合成員資格運算符:IN、NOTIN謂詞:EXISTS、ALL、SOME、UNIQUE 聚合函數:AVG、MIN、MAX、SUM、COUNTF中運算對象還可以是另一個SELECT語句,即SELECT句型可以嵌套2、SELECT語句完整的句法如下:
SELECT
目標表的列名或列表達式序列
FROM
基本表名和(或)視圖序列
[WHERE
行條件表達式][GROUPBY
列名序列
[HAVING
組條件表達式]][ORDERBY
列名[ASC|DESC],…]
主語句SELECT-FROM-WHERE的含義是:
根據WHERE子句的條件表達式,從FROM子句指定的基本表或視圖中找出滿足條件的元組,再按SELECT子句中的目標列表達式,選出元組中的屬性值形成結果表。16整個語句的執行過程如下:(1)讀取FROM子句中基本表、視圖的數據,執行笛卡爾積操作。(2)選取滿足WHERE子句中給出的條件表達式的元組。(3)按GROUP子句中指定列的值分組,同時提取滿足HAVING子句中組條件表達式的那些組。(4)按SELECT子句中給出的列名或列表達式求值輸出。(5)ORDER子句對輸出的目標表進行排序,按附加說明ASC升序排列,或按DESC降序排列。17根據查詢條件不同,可分為:單表查詢連接查詢嵌套查詢集合查詢184.3.2單表查詢查詢僅涉及一個表,是一種最簡單的查詢操作。一、選擇表中的若干列二、選擇表中的若干元組三、對查詢結果排序四、使用聚合函數五、對查詢結果分組
191、查詢表中的若干列⑴查詢指定列
在很多情況下,用戶只對表中的一部分屬性列感興趣,這時可以通過在SELECT子句的<目標列表達式>中指定要查詢的屬性列。 例4.21查詢全體學生的學號與姓名。
SELECTSNO,SNAMEFROMS;
執行過程:從S表中取出一個元組,再取出該元組在屬性SNO和SNAME上的值,形成一個新的元組作為輸出。對S表中的所有元組做相同的處理,最后形成一個結果關系作為輸出。20⑵查詢全部列
將表中的所有屬性列都選出來,可以有兩種方法。一種方法就是在SELECT關鍵字后面列出所有列名;另一種方法是如果列的顯示順序與其在基表中的順序相同,也可以簡單地將<目標列表達式>指定為“*”。
例4.23查詢全體學生的詳細記錄。
SELECT*FROMS;
等價于:
SELECTSNO,SNAME,SEX,AGE,SDEPTFROMS;21(3)查詢經過計算的值
SELECT子句的<目標列表達式>不僅可以是表中的屬性列,也可以是表達式。例4.24查詢全體學生的姓名及其出生年份。
SELECTSNAME,2009-AGEFROMS;
輸出結果:
Sname_________________
李小勇1989
劉晨1990
王名1991
張立1990222、選擇表中的若干元組
⑴消除取值重復的行
兩個本來并不完全相同的元組,投影到指定的某些列上后,可能變成相同的行了,可以用DISTINCT取消它們。例4.26查詢選修了課程的學生學號。
SELECTSNOFROMSC;該查詢結果里包含了許多重復的行。如果想去掉結果表中的重復行,必須指定DISTINCT關鍵詞:
SELECTDISTINCTSNOFROMSC;23例(1)SELECTSnoFROMSC;
或(默認ALL)SELECTALLSnoFROMSC;
結果:Sno-------9500195001950019500295002(2)SELECTDISTINCTSnoFROMSC;
結果:
Sno-------950019500224
⑵查詢滿足條件的元組查詢滿足指定條件的元組可以通過WHERE子句實現。查詢條件謂詞比較確定范圍確定集合字符匹配空值多重條件(邏輯運算)=,>,<,>=,<=,!=,<>,!>,!<,NOT+上述運算符BETWEENAND,NOTBETWEENANDIN,NOTINLIKE,NOTLIKEISNULL,ISNOTNULLAND,OR,NOT
例4.27查詢計算機科學系全體學生的名單。
SELECTSNAMEFROMSWHERESDEPT=’CS’;25范圍查詢謂詞BETWEEN…AND…和NOTBETWEEN…AND…可以用來查找屬性值在(或不在)指定范圍內的元組,其中BETWEEN后是范圍的下限(即低值),AND后是范圍的上限(即高值)。例4.30
查詢年齡在20~23歲(包括20歲和23歲)之間的學生的姓名、系別和年齡。SELECTSNAME,SDEPT,AGEFROMSWHEREAGEBETWEEN20AND23;與BETWEEN…AND…相對的謂詞是NOTBETWEEN…AND…。例4.31
查詢年齡不在20~23歲之間的學生姓名、系別和年齡。SELECTSNAME,SDEPT,AGEFROMSWHEREAGENOTBETWEEN20AND23;26
例4.30可改寫為:
SELECTSNAME,SDEPT,AGEFROMSWHEREAGE>=20ANDAGE<=23;27確定集合謂詞IN可以用來查找屬性值屬于指定集合的元組。
例4.32
查詢計算機科學系(CS)、數學系(MA)和信息系(IS)學生的姓名和性別。
SELECTSNAME,SEXFROMSWHERESDEPTIN(’CS’,’MA’,’IS’);
與IN相對的謂詞是NOTIN,用于查找屬性值不屬于指定集合的元組。
例4.33
查詢既不是計算機科學系、數學系,也不是信息系的學生的姓名和性別。
SELECTSNAME,SEXFROMSWHERESDEPTNOTIN(’CS’,’MA’,’IS’);28字符匹配謂詞LIKE可以用來進行字符串的匹配。其一般語法格式如下:
[NOT]LIKE‘<匹配串>’[ESCAPE‘<換碼字符>’]其含義是查找指定的屬性列值與<匹配串>相匹配的元組。<匹配串>可以是一個完整的字符串,也可以含有通配符%和_。其中:%(百分號)代表任意長度(長度可以為0)的字符串。例如a%b表示以a開頭,以b結尾的任意長度的字符串。如acb,addgb,ab等都滿足該匹配串。_(下劃線)代表任意單個字符。例如a_b表示以a開頭,以b結尾的長度為3的任意字符串。如acb,afb等都滿足該匹配串。29例4.34
查詢學號為200915121的學生的詳細情況。
SELECT*FROMSWHERESNOLIKE’200915121’;
等價于:
SELECT*FROMSWHERESNO=’200915121’;如果LIKE后面的匹配串中不含通配符,則可以用=(等于)運算符取代LIKE謂詞,用!=或<>(不等于)運算符取代NOTLIKE謂詞。例4.35
查詢所有姓劉的學生的姓名、學號和性別。
SELECTSNAME,SNO,SEXFROMSWHERESNAMELIKE’劉%’;30
涉及空值的查詢例例4.41
某些學生選修課程后沒有參加考試,所以有選課記錄,但沒有考試成績。查詢缺少成績的學生的學號和相應的課程號。
SELECTSNO,CNOFROMSCWHEREGRADEISNULL;/*分數GRADE是空值*/多重條件查詢可用邏輯運算符AND和OR來聯結多個查詢條件。AND的優先級高于OR,但可以用括號改變優先級。例4.43
查詢計算機科學系年齡在20歲以下的學生姓名。
SELECTSNAMEFROMSWHERESDEPT=’CS’ANDAGE<20;313、ORDERBY子句(對查詢結果排序)使用ORDERBY子句可以按一個或多個屬性列排序升序:ASC;降序:DESC;缺省值為升序當排序列含空值時ASC:排序列為空值的元組最后顯示DESC:排序列為空值的元組最先顯示32
例4.44
查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列。
SELECTSNO,GRADEFROMSCWHERECNO=’3’ORDERBYGRADEDESC;
SnoGrade--------------9501095024950079295003829501082950097595014619500255查詢結果33
聚合函數是涉及整個關系的另一類運算操作,通過聚合函數,可以把某一列中的值形成單個值。
5類主要聚合函數:計數COUNT([DISTINCT|ALL]*)COUNT([DISTINCT|ALL]<列名>)計算總和SUM([DISTINCT|ALL]<列名>) 計算平均值AVG([DISTINCT|ALL]<列名>)4.3.3聚合函數34求最大值MAX([DISTINCT|ALL]<列名>) 求最小值
MIN([DISTINCT|ALL]<列名>)
DISTINCT短語:在計算時要取消指定列中的重復值ALL短語:不取消重復值ALL為缺省值35例4.47
查詢選修了課程的學生人數。
SELECTCOUNT(DISTINCTSNO)FROMSC;學生每選修一門課,在SC中都有一條相應的記錄。一個學生要選修多門課程,為避免重復計算學生人數,必須在COUNT函數中用DISTINCT短語。例4.48
計算選修l號課程的學生平均成績。
SELECTAVG(GRADE)FROMSCWHERECNO=’1’;例4.49
查詢選修l號課程的學生最高分數。
SELECTMAX(GRADE)FROMSCWHERCNO=’1’;36使用GROUPBY子句分組 細化集函數的作用對象未對查詢結果分組,聚合函數將作用于整個查詢結果對查詢結果分組后,聚合函數將分別作用于每個組4.3.4對查詢結果分組37這三個數取平均值第4-6分數取平均值最后三個數取平均值有一個學員參加考試例如,求每門課的平均成績。38分組查詢—GROUPBYSELECT
Cours
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧地質工程職業學院《平法設計與施工規則》2023-2024學年第一學期期末試卷
- 上海市同濟大附屬存志校2025年初三畢業班第一次質量檢測試題物理試題模擬試題含解析
- 華東交通大學《空間數據挖掘與知識發現》2023-2024學年第二學期期末試卷
- 三江學院《德語會話》2023-2024學年第一學期期末試卷
- 重慶科技職業學院《移動開發》2023-2024學年第二學期期末試卷
- 貴州城市職業學院《航海氣象學與海洋學》2023-2024學年第一學期期末試卷
- 云南省文山市重點中學2025年高三下學期第二次質檢物理試題理試題含解析
- 2024年陜西寶雞市新華書店有限責任公司公開招聘員工23人筆試參考題庫附帶答案詳解
- 荊州學院《藝術展覽策劃》2023-2024學年第一學期期末試卷
- 2024年北京銷售分公司秋季高校畢業生招聘15人筆試參考題庫附帶答案詳解
- GB/T 6003.2-2024試驗篩技術要求和檢驗第2部分:金屬穿孔板試驗篩
- 人工智能大模型
- HIV感染者精神障礙管理專家共識(2024版)解讀
- 舌尖上的植物學學習通超星期末考試答案章節答案2024年
- 中國鐵路南昌局集團有限公司招聘筆試題庫2024
- 藝術品保存狀態對價格的考量
- 四年級信息技術下冊 第2課 美化調查圖表教案 粵教版
- 2024年四川省瀘州市江陽區小升初數學試卷
- 招投標法對簽訂合同的規定(2024版)
- 2024字畫裝裱合同范本
- 宋詞概況完整版本
評論
0/150
提交評論