數(shù)據(jù)庫中SQL知識點(diǎn)重點(diǎn)章節(jié)總結(jié)與歸納很全的哦
第一章緒論
1.基本概念
(1)數(shù)據(jù)庫;(2)數(shù)據(jù)庫管理系統(tǒng);(3)數(shù)據(jù)庫系統(tǒng);(4)實(shí)體;(5)屬性;(6)碼;(7)域;(8)實(shí)體型;(9)實(shí)體集;(10)聯(lián)系(1:1)(1:n)(m:n)(11)現(xiàn)實(shí)世界、觀念世界(信息世界)、數(shù)據(jù)世界
2.數(shù)據(jù)管理技術(shù)的發(fā)展階段
人工管理階段、文件系統(tǒng)階段、數(shù)據(jù)庫系統(tǒng)階段和高級數(shù)據(jù)庫技術(shù)階段等各階段的特點(diǎn)。3.數(shù)據(jù)庫系統(tǒng)的特點(diǎn)(1)數(shù)據(jù)結(jié)構(gòu)化
(2)共享性高,冗余度低,易擴(kuò)充(3)獨(dú)立性高
(4)由DBMS統(tǒng)一管理和控制4.DBMS的數(shù)據(jù)控制功能(1)數(shù)據(jù)的安全性保護(hù)(2)數(shù)據(jù)的完整性檢查(3)并發(fā)控制(4)數(shù)據(jù)庫恢復(fù)5.數(shù)據(jù)模型的組成要素
數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作、數(shù)據(jù)的約束條件6.最常用的數(shù)據(jù)模型
層次、網(wǎng)狀、關(guān)系、面向?qū)ο竽P?.關(guān)系模型
關(guān)系:一張表元組:表中的一行屬性:表中的一列
主碼:表中的某個屬性組,它可以唯一確定一個元組域:屬性的取值范圍
分量:元組中的一個屬性值關(guān)系模式:對關(guān)系的描述。
表示為:關(guān)系名(屬性1,屬性2,…屬性n)8.關(guān)系數(shù)據(jù)模型優(yōu)缺點(diǎn)
(1)建立在嚴(yán)格的數(shù)學(xué)概念基礎(chǔ)之上(2)概念單一
(3)存取路徑對用戶透明9.數(shù)據(jù)庫系統(tǒng)的三級模式結(jié)構(gòu)內(nèi)模式、外模式、模式二級映射
10.數(shù)據(jù)庫系統(tǒng)的組成本章重要概念
(1)DB、DBMS和DBS的定義(2)數(shù)據(jù)管理技術(shù)的發(fā)展階段人工管理階段、文件系統(tǒng)階段、數(shù)據(jù)庫系統(tǒng)階段和高級數(shù)據(jù)庫技術(shù)階段等各階段的特點(diǎn)。(3)數(shù)據(jù)描述概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)等各階段中數(shù)據(jù)描述的術(shù)語,概念設(shè)計(jì)中實(shí)體間二元聯(lián)系的描述(1:1,1:N,M:N)。(4)數(shù)據(jù)模型數(shù)據(jù)模型的定義,兩類數(shù)據(jù)模型,邏輯模型的形式定義,ER模型,層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P偷臄?shù)據(jù)結(jié)構(gòu)以及聯(lián)系的實(shí)現(xiàn)方式。(5)DB的體系結(jié)構(gòu)三級結(jié)構(gòu),兩級映象,兩級數(shù)據(jù)獨(dú)立性,體系結(jié)構(gòu)各個層次中記錄的聯(lián)系。(6)DBMS(數(shù)據(jù)庫管理系統(tǒng))DBMS的工作模式、主要功能和模塊組成。
(7)DBS(數(shù)據(jù)庫系統(tǒng))DBS的組成,DBA,DBS的全局結(jié)構(gòu),DBS結(jié)構(gòu)的分類。
第二章關(guān)系數(shù)據(jù)庫
1.基本概念
關(guān)系,候選碼,主碼,主屬性,非主屬性,鍵2.完整性約束
實(shí)體完整性、參照完整性、用戶定義完整性3.笛卡兒積4.關(guān)系的性質(zhì)
列是同質(zhì)的
不同的列可出自同一個域,每一列為一個屬性,不同的屬性要有不同的屬性
名列的順序無所謂
任意兩個元組不能完全相同行的順序無所謂
分量必須取原子值,即每一個分量必須是不可分的數(shù)據(jù)項(xiàng)
5.關(guān)系的完整性
實(shí)體完整性、參照完整性、用戶定義的完整性6.關(guān)系代數(shù)
(1)并、交、差、廣義笛卡兒積(2)選擇(3)投影
(4)連接:等值連接、自然連接
超鍵(SuperKey):在關(guān)系中能惟一標(biāo)識元組的屬性集稱為關(guān)系模式的超鍵。
候選鍵(CandidateKey):不含有多余屬性的超鍵稱為候選鍵。也就是在候選鍵中,若要再刪除屬性,就不是鍵了。
主鍵:(PrimaryKey):用戶選作元組標(biāo)識的一個侯選鍵稱為主鍵。一般,如不加說明,則鍵是指主鍵。
外鍵:(ForeignKey):如果關(guān)系R中屬性K是其他模式的主鍵,那么K在模式R中稱為外鍵
例如:學(xué)生(學(xué)號,姓名,性別,駕駛證號)假定學(xué)生不重名超鍵:(學(xué)號,姓名),(學(xué)號,性別),(學(xué)號,姓名,性別),(姓名,性別)等等候選鍵:學(xué)號,姓名
主鍵:你在數(shù)據(jù)庫定義的時(shí)候,如果選擇學(xué)號作為鍵,那么學(xué)號就是候選鍵外鍵:駕駛證號本章的重要概念(1)基本概念關(guān)系模型,關(guān)鍵鍵(主鍵和外鍵),關(guān)系的定義和性質(zhì),三類完整性規(guī)則,ER模型到關(guān)系模型的轉(zhuǎn)換規(guī)則。(2)關(guān)系代數(shù)五個基本操作,四個組合操作,七個擴(kuò)充操作。
第三章SQL語言
1.SQL的特點(diǎn)
綜合統(tǒng)一
高度非過程化
面向集合的操作方式
以同一種語法結(jié)構(gòu)提供兩種使用方式語言簡潔,易學(xué)易用
2.表
(1)創(chuàng)建表createtablecreatetablestudent(Snochar(5)notnull,Snamechar(20)unique,Ssexchar(1),Sageint,
Sdeptchar(15));(2)createtablecustomer(
customer_namechar(20)notnull,customer_streetchar(30),customer_citychar(30),
primarykey(customer_name));(3)createtableaccount(
account_numberchar(10)notnull,branch_namechar(15),balanceint,
primarykey(account_number),
foreignkey(branch_name)referencebranch(branch_name),check(balance>=0));(2)修改表altertable(3)刪除表droptable3.索引
(1)創(chuàng)建索引createindex(2)刪除dropindex4.查詢select(1)格式
(2)單表查詢:選擇列、滿足條件、排序、分組、集函數(shù)(3)連接查詢(4)嵌套查詢IN、比較、(ANY或ALL)、EXISTS(5)集合查詢
5.更新數(shù)據(jù)INSERT、UPDATE、DELETE6.視圖(1)建立視圖Createview(2)視圖的作用7.數(shù)據(jù)控制
(1)授權(quán)Grant
(2)收回權(quán)限Revoke本章的重要概念
(1)SQL數(shù)據(jù)庫的體系結(jié)構(gòu),SQL的組成。
(2)SQL的數(shù)據(jù)定義:SQL模式、基本表和索引的創(chuàng)建和撤銷。
(3)SQL的數(shù)據(jù)查詢;SELECT語句的句法,SELECT語句的三種形式及各種限定,基本表的聯(lián)接操作,SQL中的遞歸查詢。
(4)SQL的數(shù)據(jù)更新:插入、刪除和修改語句。(5)視圖的創(chuàng)建和撤銷,對視圖更新操作的限制。
(6)嵌入式SQL:預(yù)處理方式,使用規(guī)定,使用技術(shù),卷游標(biāo),動態(tài)SQL語句。
第四章關(guān)系數(shù)據(jù)庫的規(guī)范化設(shè)計(jì)
1.函數(shù)依賴、部分函數(shù)依賴、完全函數(shù)依賴、傳遞依賴2.1NF、2NF、3NF、BCNF模式的分解
關(guān)系模式的分解需要遵循兩個主要原則:
1.滿足無損連接分解的要求。
2.既要滿足無損連接分解的要求,又要滿足保持函數(shù)依賴無損分解的測試方法
算法4.3無損分解的測試的算法:如何判斷是否是無損分解構(gòu)造一張k行n列的表格,每列對應(yīng)一個屬性Aj(1≤j≤n),每行對應(yīng)一個模式Ri(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列處填上符號aj,否則填上bij。
把表格看成模式R的一個關(guān)系,反復(fù)檢查F中每個FD在表格中是否成立,若不成立,則修改表格中的值。修改方法如下:對于F中一個FDX→Y,如果表格中有兩行在X值上相等,在Y值上不相等,那么把這兩行在Y值上也改成相等的值。如果Y值中有一個是aj,那么另一個也改成aj;如果沒有aj,那么用其中一個bij替換另一個值(盡量把下標(biāo)ij改成較小的數(shù))。一直到表格不能修改為止。(這個過程稱為chase過程)
若修改的最后一張表格中有一行是全a,即a1a2…an,那么稱ρ相對于F是無損分解,否則稱損失分解。無損分解的測試方法第一范式(1NF)1NF的定義如果一個關(guān)系模式R的所有屬性都是不可分的基本數(shù)據(jù)項(xiàng),則R∈1NF即不能以集合、序列等作為屬性值。第一范式是對關(guān)系模式的最起碼的要求。不滿足第一范式的數(shù)據(jù)庫模式不能稱為關(guān)系數(shù)據(jù)庫但是滿足第一范式的關(guān)系模式并不一定是一個好的關(guān)系模式第二范式(2NF)
(回顧)定義4.14對于FDW→A,如果存在XW有X→A成立,那么稱W→A是局部依賴(A局部依賴于W);否則稱W→A是完全依賴。完全依賴也稱為“左部不可約依賴”。(回顧)定義4.15如果A是關(guān)系模式R的候選鍵中屬性,那么稱A是R的主屬性;否則稱A是R的非主屬性。
定義4.16如果關(guān)系模式R是1NF,且每個非主屬性完全函數(shù)依賴于候選鍵,那么稱R是第二范式(2NF)的模式。如果數(shù)據(jù)庫模式中每個關(guān)系模式都是2NF,則稱數(shù)據(jù)庫模式為2NF的數(shù)據(jù)庫模式。第三范式(3NF)
(回顧)定義4.17如果X→Y,Y→A,且Y→X和A∈Y,那么稱X→A是傳遞依賴(A傳遞依賴于X)。
定義4.18如果關(guān)系模式R是1NF,且每個非主屬性都不傳遞依賴于R的候選鍵,那么稱R是第三范式(3NF)的模式。如果數(shù)據(jù)庫模式中每個關(guān)系模式都是3NF,則稱其為3NF的數(shù)據(jù)庫模式。
將2NF的關(guān)系模式規(guī)范化為3NF的關(guān)系模式,其方法是消除2NF的關(guān)系
模式中非鍵屬性對鍵的傳遞依賴。
本章重要概念
(1)關(guān)系模式的冗余和異常問題。
(2)FD的定義、邏輯蘊(yùn)涵、閉包、推理規(guī)則、與關(guān)鍵碼的聯(lián)系;平凡的FD;屬性集的閉包;推理規(guī)則的正確性和完備性;FD集的等價(jià)。
(3)無損分解的定義、性質(zhì)、測試;保持依賴集的分解。
(4)關(guān)系模式的范式:1NF,2NF,3NF,BCNF。分解成2NF、3NF模式集的算法。
第五章數(shù)據(jù)庫設(shè)計(jì)
1.數(shù)據(jù)庫設(shè)計(jì)的六個階段
需求分析、概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)物理結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)庫實(shí)施、數(shù)據(jù)庫運(yùn)行和維護(hù)2.需求分析:
數(shù)據(jù)字典:數(shù)據(jù)項(xiàng)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、數(shù)據(jù)存儲和處理過程3.概念結(jié)構(gòu)設(shè)計(jì)
(1)是整個數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵,它通過對用戶需求進(jìn)行綜合、歸納與抽象,形成一個獨(dú)立于具體DBMS的概念模型(2)E-R圖:基本表示方法4.邏輯結(jié)構(gòu)設(shè)計(jì)
是將概念結(jié)構(gòu)轉(zhuǎn)換為某個DBMS所支持的數(shù)據(jù)模型,并對其進(jìn)行優(yōu)化5.物理設(shè)計(jì)
(1)為邏輯數(shù)據(jù)模型選取一個最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)(包括存儲結(jié)構(gòu)和存取方法)6.實(shí)施階段
設(shè)計(jì)人員運(yùn)用DBMS提供的數(shù)據(jù)語言及其宿主語言,建立數(shù)據(jù)庫,編制與調(diào)試程序,組織數(shù)據(jù)入庫,并進(jìn)行試運(yùn)行7.運(yùn)行和維護(hù)階段
數(shù)據(jù)庫應(yīng)用系統(tǒng)經(jīng)過試運(yùn)行后即可投入正式運(yùn)行。重構(gòu),重組織本章重要概念
(1)DBS生存期及其7個階段的任務(wù)和工作,DBD過程的輸入和輸出。(2)概念設(shè)計(jì)的重要性、主要步驟。邏輯設(shè)計(jì)階段的主要步驟。
(3)ER模型的基本元素,屬性的分類,聯(lián)系的元數(shù)、連通詞、基數(shù)。采用ER方法的概念設(shè)計(jì)步驟。
(4)ER模型到關(guān)系模型的轉(zhuǎn)換規(guī)則。采用ER方法的邏輯設(shè)計(jì)步驟。(5)ER模型的擴(kuò)充:弱實(shí)體,超類和子類。
第七章系統(tǒng)實(shí)現(xiàn)技術(shù)
1.事務(wù)(1)概念
(2)特性:原子性、一致性、隔離性、持續(xù)性2.故障種類事務(wù)
內(nèi)部的故障、系統(tǒng)故障、介質(zhì)故障3.恢復(fù)的實(shí)現(xiàn)技術(shù)
(1)數(shù)據(jù)轉(zhuǎn)儲:轉(zhuǎn)儲狀態(tài)、轉(zhuǎn)儲方式
(2)日志:基本格式和內(nèi)容、日志的作用、登記日志文件并發(fā)控制
1.問題:丟失修改、不可重復(fù)讀、讀“臟”數(shù)據(jù)2.封鎖共享鎖、排它鎖3.一級封鎖協(xié)議
(1)事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(wù)結(jié)束才釋放(2)解決的問題:防止丟失修改4.二級封鎖協(xié)議
(1)一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R前必須先對其加S鎖,讀完后即可釋放S鎖(2)解決的問題:防止丟失修改、防止讀“臟”數(shù)據(jù)5.三級封鎖協(xié)議
(1)一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。(2)解決的問題:防止丟失修改、防止讀“臟”數(shù)據(jù)、防止不可重復(fù)讀6.活鎖和死鎖
(1)死鎖的預(yù)防:一次封鎖法,順序封鎖法(2)死鎖的診斷:超時(shí)法,等待圖法(3)死鎖的解除:選擇一個處理死鎖代價(jià)最小的事務(wù),將其撤消,釋放此事務(wù)持有的所有鎖,使其它事務(wù)得以繼續(xù)進(jìn)行下去。本章重要概念
事務(wù)的定義,COMMIT和ROLLBACK的語義,事務(wù)的ACID性質(zhì)
恢復(fù)的定義、基本原則和實(shí)現(xiàn)方法,故障的類型,檢查點(diǎn)技術(shù),REDO和UNDO操作,運(yùn)行記錄優(yōu)先原則。
并發(fā)操作帶來的三個問題,X鎖、S鎖、活鎖、餓死和死鎖
完整性的定義,完整性子系統(tǒng)的功能,完整性規(guī)則的組成。SQL中的三大類完整性約束,SQL3中的觸發(fā)器技術(shù)。
安全性的定義、級別,權(quán)限,SQL中的安全性機(jī)制,幾種常用的安全性措施,自然環(huán)境的安全性。
擴(kuò)展閱讀:數(shù)據(jù)庫中SQL查詢語句習(xí)題含的答案
查詢問題:設(shè)教學(xué)數(shù)據(jù)庫Education有三個關(guān)系:學(xué)生關(guān)系S(SNO,SNAME,AGE,SEX,SDEPT);
(3)檢索選修課程名為“DS”的學(xué)生學(xué)號與姓名學(xué)習(xí)關(guān)系SC(SNO,CNO,GRADE);課程關(guān)系C(CNO,CNAME,CDEPT,TNAME)
(1)檢索計(jì)算機(jī)系的全體學(xué)生的學(xué)號,姓名和性別;(2)檢索學(xué)習(xí)課程號為C2的學(xué)生學(xué)號與姓名;(3)檢索選修課程名為“DS”的學(xué)生學(xué)號與姓名;(4)檢索選修課程號為C2或C4的學(xué)生學(xué)號;(5)檢索至少選修課程號為C2和C4的學(xué)生學(xué)號;(6)檢索不學(xué)C2課的學(xué)生姓名和年齡;(7)檢索學(xué)習(xí)全部課程的學(xué)生姓名;
(8)查詢所學(xué)課程包含學(xué)生S3所學(xué)課程的學(xué)生學(xué)號。
(1)檢索計(jì)算機(jī)系的全體學(xué)生的學(xué)號,姓名和性別;SELECTSno,Sname,SexFROMS
WHERESdept=’CS’;
(2)檢索學(xué)習(xí)課程號為C2的學(xué)生學(xué)號與姓名;1.SELECTSno,SnameFROMS2.SELECTS.Sno,SnameWHERESnoINFROMS,SCWHERES.Sno=SC.Sno(SELECTSnoFROMSCANDSC.Cno=‘C2’;WHERECno=‘C2’)
本查詢涉及到學(xué)號、姓名和課程名三個屬性,分別
存放在S和C表中,但S和C表沒有直接聯(lián)系,必須通過SC表建立它們二者的聯(lián)系。C→SC→S基本思路:
(1)首先在C表中找出“DS”課程的課程號Cno;
(2)然后在SC表中找出Cno等于第一步給出的Cno集合中的某個元素Cno;
(3)最后在S關(guān)系中選出Sno等于第二步中Sno集合中某個元素的元組,取出Sno和Sname送入結(jié)果表列。
SELECTSno,SnameFROMS
WHERESnoIN(SELECTSnoFROMSC
WHERECnoIN(SELECTCnoFROMC
WHERECname=‘DS’));
(4)檢索選修課程號為C2或C4的學(xué)生學(xué)號;SELECTSnoFROMSC
WHERECno=‘C2’ORCno=‘C4’;
(5)檢索至少選修課程號為C2和C4的學(xué)生學(xué)號;SELECTSno
FROMSCX,SCY
WHEREX.Sno=Y.SnoANDX.Cno=‘C2’ANDY.Cno=‘C4’;
(6)檢索不學(xué)C2課的學(xué)生姓名和年齡;
1.SELECTSname2.SELECTSnameFROMSFROMSWHERESnoNOTINWHERENOTEXISTS(SELECTSno(SELECT*FROMSCFROMSCWHERECno=‘C2’);WHERESC.Sno=S.SnoANDCno=‘C2’);
(7)檢索學(xué)習(xí)全部課程的學(xué)生姓名;
在表S中找學(xué)生,要求這個學(xué)生學(xué)了全部課程。換言之,在S表中找學(xué)生,在C中不存在一門課程,這個學(xué)生沒有學(xué)。
SELECTSnameFROMS
WHERENOTEXISTS(SELECT*FROMC
WHERENOTEXISTS(SELECT*FROMSCWHERESC.Sno=S.SnoAND
SC.Cno=C.Cno));
(8)查詢所學(xué)課程包含學(xué)生S3所學(xué)課程的學(xué)生學(xué)號。分析:不存在這樣的課程Y,學(xué)生S3選了Y,而其他學(xué)生沒有選。
SELECTDISTINCTSnoFROMSCASXWHERENOTEXISTS(SELECT*
FROMSCASY
WHEREY.Sno=‘S3’ANDNOTEXISTS(SELECT*
FROMSCASZWHEREZ.Sno=X.SnoANDZ.Cno=Y.Cno));
設(shè)教學(xué)數(shù)據(jù)庫Education有三個關(guān)系:
學(xué)生關(guān)系S(SNO,SNAME,AGE,SEX,SDEPT);學(xué)習(xí)關(guān)系SC(SNO,CNO,GRADE);
課程關(guān)系C(CNO,CNAME,CDEPT,TNAME)
查詢問題:
1:查所有年齡在20歲以下的學(xué)生姓名及年齡。2:查考試成績有不及格的學(xué)生的學(xué)號
3:查所年齡在20至23歲之間的學(xué)生姓名、系別及年齡。
4:查計(jì)算機(jī)系、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。5:查既不是計(jì)算機(jī)系、數(shù)學(xué)系、又不是信息系的學(xué)生姓名、性別
6:查所有姓“劉”的學(xué)生的姓名、學(xué)號和性別。7:查姓“上官”且全名為3個漢字的學(xué)生姓名。8:查所有不姓“張”的學(xué)生的姓名。9:查DB_Design課程的課程號。10:查缺考的學(xué)生的學(xué)號和課程號。11:查年齡為空值的學(xué)生的學(xué)號和姓名。12:查計(jì)算機(jī)系20歲以下的學(xué)生的學(xué)號和姓名。13:查計(jì)算機(jī)系、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。14:查詢選修了C3課程的學(xué)生的學(xué)號和成績,其結(jié)果按分?jǐn)?shù)的降序排列。
15:查詢?nèi)w學(xué)生的情況,查詢結(jié)果按所在系升序排列,對同一系中的學(xué)生按年齡降序排列。16:查詢學(xué)生總?cè)藬?shù)。
17:查詢選修了課程的學(xué)生人數(shù)。18:計(jì)算選修了C1課程的學(xué)生平均成績。19:查詢學(xué)習(xí)C3課程的學(xué)生最高分?jǐn)?shù)。20:查詢各個課程號與相應(yīng)的選課人數(shù)。
21:查詢計(jì)算機(jī)系選修了3門以上課程的學(xué)生的學(xué)號。22:求基本表S中男同學(xué)的每一年齡組(超過50人)有多少人?要求查詢結(jié)果按人數(shù)升序排列,人數(shù)相同按年齡降序排列。
23:查詢每個學(xué)生及其選修課程的情況。
24:查詢選修了C2課程且成績在90分以上的所有學(xué)生。
25:查詢每個學(xué)生選修的課程名及其成績。26:統(tǒng)計(jì)每一年齡選修課程的學(xué)生人數(shù)。27:查詢選修了C2課程的學(xué)生姓名。
28:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。
29:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號和姓名。30:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。
31:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號和姓名。32:查詢選修了C2課程的學(xué)生姓名。33:查詢所有未選修C2課程的學(xué)生姓名。
34:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。
35:查詢選修了全部課程的學(xué)生姓名。
36:查詢所學(xué)課程包含學(xué)生S3所學(xué)課程的學(xué)生學(xué)號(1)比較
例1:查所有年齡在20歲以下的學(xué)生姓名及年齡。SELECTSname,Sage
FROMS
WHERESage=20)
例2:查考試成績有不及格的學(xué)生的學(xué)號SELECTDISTINCTSnoFROMSC
WHEREgradeFROMS
WHERESageBETWEEN20AND23;
(3)確定集合
例4:查計(jì)算機(jī)系、數(shù)學(xué)系、信息系的學(xué)生姓名、性別。SELECTSname,SsexFROMS
WHERESdeptIN(’CS’,‘IS’,‘MATH’);
例5:查既不是計(jì)算機(jī)系、數(shù)學(xué)系、又不是信息系的學(xué)生姓名、性別
SELECTSname,SsexFROMS
WHERESdeptNOTIN(’CS’,‘IS’,‘MATH’);
(4)字符匹配
例6:查所有姓“劉”的學(xué)生的姓名、學(xué)號和性別。SELECTSname,Sno,SsexFROMS
WHERESnameLIKE‘劉%’;
例7:查姓“上官”且全名為3個漢字的學(xué)生姓名。SELECTSnameFROMS
WHERESnameLIKE‘上官__’;
例8:查所有不姓“張”的學(xué)生的姓名。SELECTSname,Sno,SsexFROMS
WHERESnameNOTLIKE‘張%’;例9:查DB_Design課程的課程號。
SELECTCnoFROMC
WHERECnameLIKE‘DB\\_Design’ESCAPE‘\\’;
(5)涉及空值的查詢
例10:查缺考的學(xué)生的學(xué)號和課程號。
SELECTSno,Cno
FROMSC
WHEREGradeISNULL;(不能用=代替){有成績的WHEREGradeISNOTNULLL;}
例11:查年齡為空值的學(xué)生的學(xué)號和姓名。SELECTSno,SnameFROMS
WHERESageISNULL;(6)多重條件查詢
例12:查計(jì)算機(jī)系20歲以下的學(xué)生的學(xué)號和姓名。SELECTSno,SnameFROMS
WHERESdept=‘CS’ANDSage例16:查詢學(xué)生總?cè)藬?shù)。SELECTCOUNT(*)FROMS
例17:查詢選修了課程的學(xué)生人數(shù)。SELECTCOUNT(DISTINCTSno)FROMSC
例18:計(jì)算選修了C1課程的學(xué)生平均成績。SELECTAVG(Grade)FROMSC
WHERECno=‘C1’;
例19:查詢學(xué)習(xí)C3課程的學(xué)生最高分?jǐn)?shù)。SELECTMAX(Grade)FROMSC
WHERECno=‘C3’;
5、對查詢結(jié)果分組
例20:查詢各個課程號與相應(yīng)的選課人數(shù)。SELECTCno,COUNT(Sno)FROMSCGROUPBYCno;
該SELECT語句對SC表按Cno的取值進(jìn)行分組,
所有具有相同Cno值的元組為一組,然后對每一組作用
聚合函數(shù)COUNT以求得該組的學(xué)生人數(shù)。
如果分組后還要求按一定的條件對這些組進(jìn)行篩選,最終只輸出滿足指定條件組,則可以使用HAVING短
語指定篩選條件。
例21:查詢計(jì)算機(jī)系選修了3門以上課程的學(xué)生的學(xué)號。
SELECTSno
FROMSC
WHERESdept=‘CS’GROUPBYSno
HAVINGCOUNT(*)>3;
WHERE子句與HAVING短語的根本區(qū)別在于作用對象不同。WHERE子句作用于基本表或視圖,從中選擇滿足條件的元組。HAVING短語作用于組,從中選擇滿足條件的組。
例22:求基本表S中男同學(xué)的每一年齡組(超過50人)有多少人?要求查詢結(jié)果按人數(shù)升序排列,人數(shù)相同按年齡降序排列。
SELECTSage,COUNT(Sno)FROMSWHERESsex="M"GROUPBYSageHAVINGCOUNT(*)>50ORDERBY2,SageDESC;
二、多表查詢
1、聯(lián)接查詢
例23:查詢每個學(xué)生及其選修課程的情況。
SELECT
S.Sno,Sname,Sage,Ssex,Sdept,Cno,GradeFROMS,SC
WHERES.Sno=SC.Sno;例24:查詢選修了C2課程且成績在90分以上的所有學(xué)生。
SELECTS.Sno,SnameFROMS,SC
WHERES.Sno=SC.SnoANDSC.Cno=‘C2’ANDSC.Grade>90;
例25:查詢每個學(xué)生選修的課程名及其成績。SELECTS.Sno,Sname,Cname,SC.GradeFROMS,SC,C
WHERES.Sno=SC.SnoANDSC.Cno=C.Cno
例26:統(tǒng)計(jì)每一年齡選修課程的學(xué)生人數(shù)。SELECTSage,COUNT(DISTINCTS.Sno)FROMS,SC
WHERES.Sno=SC.SnoGROUPBYS;
由于要統(tǒng)計(jì)每一個年齡的學(xué)生人數(shù),因此要把滿足WHERE子句中條件的查詢結(jié)果按年齡分組,在每一組中的學(xué)生年齡相同。此時(shí)的SELECT子句應(yīng)對每一組分開進(jìn)行操作,在每一組中,年齡只有一個值,統(tǒng)計(jì)的人數(shù)是這一組中的學(xué)生人數(shù)。1、嵌套查詢
(1)帶有IN謂詞的子查詢
指父查詢與子查詢之間用IN進(jìn)行聯(lián)接,判斷某個屬性列值是否在子查詢的結(jié)果中。例27:查詢選修了C2課程的學(xué)生姓名。SELECTSnameFROMS
WHERESnoIN(SELECTSnoFROMSC
WHERECno=‘C2’);
例28:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。分析:
(1)確定“張三”所在的系;(2)查找所有在X系學(xué)習(xí)的學(xué)生。SELECTSdeptFROMS
WHERESname=‘張三’;
SELECTSno,Sname,SdeptFROMS
WHERESdept=‘X’
把第一步查詢嵌入到第二步查詢中,用以構(gòu)造第二步FROMSASS1,SASS2查詢的條件。
WHERES1.Sdept=S2.SdeptANDS2.Sname=‘張三’SELECTSno,Sname,SdeptFROMS
WHERESdeptIN(SELECTSdeptFROMS
WHERESname=‘張三’);
例29:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號和姓名。本查詢涉及到學(xué)號、姓名和課程名三個屬性,分別存放在S和C表中,但S和C表沒有直接聯(lián)系,必須通過SC表建立它們二者的聯(lián)系。C→SC→S基本思路:
(1)首先在C表中找出“DB”課程的課程號Cno;(2)然后在SC表中找出Cno等于第一步給出的Cno
集合中的某個元素Cno;
(3)最后在S關(guān)系中選出Sno等于第二步中Sno集合中某個元素的元組,取出Sno和Sname送入結(jié)果表列。
SELECTSno,SnameFROMS
WHERESnoIN
(SELECTSnoFROMSC
WHERECnoIN(SELECTCnoFROMCWHERECname=
‘DB’));聯(lián)接查詢方式
(2)帶有比較運(yùn)算符的子查詢
例30:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。
SELECTSno,Sname,SdeptFROMS
WHERESdept=
(SELECTSdeptFROMS
WHERESname=‘張三’);
例31:查詢選修課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號和姓名。SELECTSno,SnameFROMS
WHERESnoIN
(SELECTSnoFROMSC
WHERECno=
(SELECTCnoFROMCWHERECname=
‘DB’));
(3)帶有EXISTS謂詞的子查詢
(1)帶有EXISTS謂詞的子查詢不返回任何實(shí)際數(shù)據(jù),它只產(chǎn)生邏輯值。
例32:查詢選修了C2課程的學(xué)生姓名。
1.SELECTSnameFROMS
WHERESnoIN(SELECTSnoFROMSC
WHERECno=‘C2’);2.SELECTSnameFROMS
WHEREEXISTS(SELECT*FROMSC
WHERESC.Sno=S.SnoANDCno=‘C2’);
例33:查詢所有未選修C2課程的學(xué)生姓名。SELECTSnameFROMS
WHERENOTEXISTS(SELECT*FROMSC
WHERESC.Sno=S.SnoANDCno=‘C2’);[NOT]EXISTS實(shí)際上是一種內(nèi)、外層互相關(guān)的嵌套查詢,只有當(dāng)內(nèi)層引用了外層的值,這種查詢才有意義。
例34:查詢與“張三”在同一個系學(xué)習(xí)的學(xué)生學(xué)號、姓名和系別。
SELECTSno,Sname,SdeptFROMSASS1WHEREEXISTS(SELECT*
FROMSASS2
WHERE
S2.Sdept=S1.
Sdept
ANDS2.Sname=‘張三’);相關(guān)子查詢
例35:查詢選修了全部課程的學(xué)生姓名。
在表S中找學(xué)生,要求這個學(xué)生學(xué)了全部課程。換言之,在S表中找學(xué)生,在C中不存在一門課程,這個學(xué)生沒有學(xué)。
SELECTSnameFROMS
WHERENOTEXISTS(SELECT*FROMC
WHERENOTEXISTS
(SELECT*FROMSCWHERESC.Sno=S.Sno
AND
SC.Cno=C.Cno));
例36:查詢所學(xué)課程包含學(xué)生S3所學(xué)課程的學(xué)生學(xué)號
分析:不存在這樣的課程Y,學(xué)生S3選了Y,而其他學(xué)生沒有選。
SELECTDISTINCTSnoFROMSCASXWHERENOTEXISTS(SELECT*FROMSCASY
WHEREY.Sno=‘S3’ANDNOTEXISTS
(SELECT*
FROMSCASZWHEREZ.Sno=X.Sno
AND
Z.Cno=Y.Cno));
友情提示:本文中關(guān)于《數(shù)據(jù)庫中SQL知識點(diǎn)重點(diǎn)章節(jié)總結(jié)與歸納很全的哦》給出的范例僅供您參考拓展思維使用,數(shù)據(jù)庫中SQL知識點(diǎn)重點(diǎn)章節(jié)總結(jié)與歸納很全的哦:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時(shí)刪除。