版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程介紹
數(shù)據(jù)庫概論1.課程內(nèi)容本課程的理論教學(xué)內(nèi)容有:第1章麒麟操作系統(tǒng)的安裝與使用第2章openGauss數(shù)據(jù)庫系統(tǒng)的安裝第3章openGauss數(shù)據(jù)庫初步使用
*(教材第3章)
第4章高級(jí)SQL語言
*(教材第3章)
第5章關(guān)系數(shù)據(jù)庫系統(tǒng)模型(教材第1,2章)
第6章數(shù)據(jù)庫的保護(hù)技術(shù)(教材第二部分)
第7章關(guān)系數(shù)據(jù)庫的設(shè)計(jì)理論*(教材第11章)
第8章數(shù)據(jù)庫設(shè)計(jì)與實(shí)現(xiàn)(教材第12章)實(shí)驗(yàn)教學(xué)中,通過對(duì)數(shù)據(jù)庫及數(shù)據(jù)庫對(duì)象的各種操作實(shí)踐,加深對(duì)數(shù)據(jù)庫基礎(chǔ)理論、基礎(chǔ)知識(shí)以及SQL語言的理解。2.課程目標(biāo)能夠利用數(shù)據(jù)庫系統(tǒng)的基本理論和數(shù)據(jù)庫設(shè)計(jì)方法,針對(duì)實(shí)際問題的需求,合理地對(duì)數(shù)據(jù)進(jìn)行建模,具有正確表達(dá)軟件工程問題的能力;能夠?qū)⒏拍钅P娃D(zhuǎn)換為關(guān)系模式、并用數(shù)據(jù)庫規(guī)范化理論、關(guān)系模式分解算法等關(guān)系數(shù)據(jù)庫設(shè)計(jì)理論,正確地設(shè)計(jì)出合理的關(guān)系數(shù)據(jù)庫模式;能夠利用數(shù)據(jù)庫完整性約束、安全性控制機(jī)制以及數(shù)據(jù)庫恢復(fù)技術(shù)設(shè)計(jì)符合實(shí)際應(yīng)用需求的數(shù)據(jù)庫;能夠使用關(guān)系型數(shù)據(jù)庫管理和開發(fā)工具,依據(jù)實(shí)際應(yīng)用場(chǎng)景在數(shù)據(jù)庫軟件上進(jìn)行數(shù)據(jù)庫的創(chuàng)建與管理,并了解關(guān)系型數(shù)據(jù)庫軟件在處理大規(guī)模數(shù)據(jù)以及半結(jié)構(gòu)和非結(jié)構(gòu)數(shù)據(jù)的局限性;3.課程地位《數(shù)據(jù)庫概論》是計(jì)算機(jī)、軟件工程等專業(yè)的一門核心課程。這是一門理論聯(lián)系實(shí)際,實(shí)踐性非常強(qiáng)的課程。通過本門課程的學(xué)習(xí),為今后開展數(shù)據(jù)管理和信息系統(tǒng)開發(fā)等相關(guān)工作奠定基礎(chǔ)。網(wǎng)盤(所需組件)地址:
4.課程考核方式
課程總成績(jī)采用百分制,包括平時(shí)成績(jī)和期末筆試成績(jī)兩部分,各占50%。平時(shí)成績(jī)(50%)隨堂測(cè)試成績(jī)(20%)作業(yè)成績(jī)(15%)實(shí)驗(yàn)成績(jī)(15%)期末筆試成績(jī)(50%)U+班級(jí)碼:NQ0TCY5.課程配套教學(xué)資源西安電子科技大學(xué)出版社官網(wǎng)()第1章麒麟操作系統(tǒng)的安裝與使用1.1麒麟操作系統(tǒng)的安裝(詳見附件1)1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展圖0數(shù)據(jù)存儲(chǔ)硬件的簡(jiǎn)史1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展一、數(shù)據(jù)管理:指對(duì)數(shù)據(jù)進(jìn)行收集、組織、編碼、存儲(chǔ)、檢索和維護(hù)等活動(dòng)。二、數(shù)據(jù)管理技術(shù)的發(fā)展動(dòng)力應(yīng)用需求的推動(dòng)計(jì)算機(jī)硬件的發(fā)展計(jì)算機(jī)軟件的發(fā)展三、數(shù)據(jù)管理技術(shù)的發(fā)展過程1、手工管理階段(20世紀(jì)40年代中--50年代中)2、文件系統(tǒng)階段(20世紀(jì)50年代末--60年代中)3、數(shù)據(jù)庫系統(tǒng)階段(20世紀(jì)60年代末--現(xiàn)在)時(shí)期
20世紀(jì)40年代中--50年代中產(chǎn)生的背景應(yīng)用需求 科學(xué)計(jì)算 硬件水平 無直接存取的存儲(chǔ)設(shè)備軟件水平 沒有操作系統(tǒng)1.手工管理階段1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展圖1-1人工管理階段的數(shù)據(jù)管理模型1.手工管理階段1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展特點(diǎn)數(shù)據(jù)的管理者:用戶(程序員),數(shù)據(jù)不保存數(shù)據(jù)面向的對(duì)象:某一應(yīng)用程序數(shù)據(jù)的共享程度:無共享、冗余度極大數(shù)據(jù)的獨(dú)立性:不獨(dú)立,完全依賴于程序數(shù)據(jù)的結(jié)構(gòu)化:無結(jié)構(gòu)數(shù)據(jù)控制能力:應(yīng)用程序自己控制1.手工管理階段1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展2.文件系統(tǒng)管理階段時(shí)期
20世紀(jì)50年代末--60年代中產(chǎn)生的背景應(yīng)用需求 科學(xué)計(jì)算、管理 硬件水平 磁盤、磁鼓 軟件水平 有文件系統(tǒng) 1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展圖1-2文件管理階段的數(shù)據(jù)管理模型
2.文件系統(tǒng)管理階段1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展3.?dāng)?shù)據(jù)庫系統(tǒng)管理階段時(shí)期
20世紀(jì)60年代末以來產(chǎn)生的背景應(yīng)用背景 大規(guī)模管理 硬件背景 大容量磁盤、磁盤陣列 軟件背景 有數(shù)據(jù)庫管理系統(tǒng)(DBMS)1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展圖1-3數(shù)據(jù)庫系統(tǒng)階段的數(shù)據(jù)管理模型3.?dāng)?shù)據(jù)庫系統(tǒng)管理階段1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展特點(diǎn)它將過去在文件系統(tǒng)中以程序設(shè)計(jì)為核心、數(shù)據(jù)服從程序設(shè)計(jì)的數(shù)據(jù)管理模式改變?yōu)橐詳?shù)據(jù)庫設(shè)計(jì)為核心、應(yīng)用程序設(shè)計(jì)退居次位的數(shù)據(jù)管理模式。3.?dāng)?shù)據(jù)庫系統(tǒng)管理階段1.2數(shù)據(jù)管理技術(shù)的產(chǎn)生和發(fā)展2.1openGauss數(shù)據(jù)庫系統(tǒng)的安裝Linux常用命令介紹(詳見附件2)第2章openGauss數(shù)據(jù)庫系統(tǒng)的安裝2.1openGauss數(shù)據(jù)庫系統(tǒng)的安裝(詳見附件3)2.2其他常見數(shù)據(jù)庫管理系統(tǒng)2.2其他常見數(shù)據(jù)庫管理系統(tǒng)1.Oracle2.SQLServer3.DB24.Sybase5.MySQL6.Access思考內(nèi)容
第3章openGauss數(shù)據(jù)庫初步使用
(2025秋季學(xué)期)
數(shù)據(jù)庫概論第3章openGauss數(shù)據(jù)庫初步使用3.1數(shù)據(jù)庫表的基本操作3.2SQL語言3.3單表查詢3.4排序操作3.1數(shù)據(jù)庫表的基本操作3.1.1基本表的創(chuàng)建、修改與刪除3.1.2建立與刪除索引3.1.1基本表的創(chuàng)建、修改與刪除首先需要使用su命令切換到omm用戶,然后啟動(dòng)openGauss數(shù)據(jù)庫服務(wù),最后使用默認(rèn)的postgres數(shù)據(jù)庫,命令如下:su-ommgs_om-tstartgsql-dpostgres-p154003.1.1基本表的創(chuàng)建、修改與刪除圖3-1進(jìn)入數(shù)據(jù)庫系統(tǒng)1.創(chuàng)建基本表圖3-2創(chuàng)建Student表3.1.1基本表的創(chuàng)建、修改與刪除1.創(chuàng)建基本表
CREATETABLE<表名>
(<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束條件>][,<列名><數(shù)據(jù)類型>[<列級(jí)完整性約束條件>]]…[,<表級(jí)完整性約束條件>]);
如果完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)上,否則既可以定義在列級(jí)也可以定義在表級(jí)。【例3-1】建立一個(gè)“學(xué)生”表Student,它由學(xué)號(hào)Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個(gè)屬性組成。其中學(xué)號(hào)不能為空,值是唯一的,并且姓名取值也唯一。
CREATETABLEStudent(SnoCHAR(5)UNIQUENOTNULL,/*列級(jí)完整性約束,Sno取值唯一*/
SnameCHAR(18)UNIQUE,
SsexCHAR(2),SageINT,
SdeptCHAR(15));
1.創(chuàng)建基本表3.1.1基本表的創(chuàng)建、修改與刪除【例3-2】建立一個(gè)“課程”表Course,它由課程號(hào)Cno、課程名Cname、先修課Cpno、學(xué)分CCredit四個(gè)屬性組成,其中先修課的取值參照課程號(hào)的取值。CREATETABLECourse(CnoCHAR(5),
CnameCHAR(20),
CpnoCHAR(5),
CCreditSMALLINT,FOREIGNKEY(Cpno)REFERENCESCourse(Cno)/*表級(jí)完整性約束,Cpno的取值參照被參照關(guān)系Course中Cno的值*/);1.創(chuàng)建基本表3.1.1基本表的創(chuàng)建、修改與刪除【例3-3】建立一個(gè)“成績(jī)”表SC,它由學(xué)號(hào)Sno、課程號(hào)Cno和成績(jī)Grade共33個(gè)屬性組成,其中學(xué)號(hào)和課程號(hào)的組合不能為空。其SQL語句如下:createtableSC(Snochar(5),Cnochar(5),Gradeint,primarykey(Sno,Cno));--學(xué)號(hào)和課程號(hào)的組合是主鍵1.創(chuàng)建基本表3.1.1基本表的創(chuàng)建、修改與刪除數(shù)據(jù)類型描述Char(n)長度為n的定長字符串Varchar(n)長度為n的變長字符串INT長整數(shù)(也可以寫作INTEGER)SMALLINT短整數(shù)NUMERIC(p,d)定點(diǎn)數(shù),由p位數(shù)字(不包括符號(hào)、小數(shù)點(diǎn))組成,小數(shù)后面有d位數(shù)字REAL取決于機(jī)器精度的浮點(diǎn)數(shù)DoublePrecision取決于機(jī)器精度的雙精度浮點(diǎn)數(shù)FLOAT(n)浮點(diǎn)數(shù),精度至少為n位數(shù)字DATE日期,包含年、月、日,格式為YYYY-MM-DDTIME時(shí)間,包含時(shí)、分、秒,格式為HH:MM:SS表3-1SQL中的主要數(shù)據(jù)類型3.1.1基本表的創(chuàng)建、修改與刪除2.修改基本表
ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束]][DROP<完整性約束名>][ALTERCOLUMN<列名><數(shù)據(jù)類型>];3.1.1基本表的創(chuàng)建、修改與刪除圖3-5修改列的長度2.修改基本表3.1.1基本表的創(chuàng)建、修改與刪除圖3-6
插入數(shù)據(jù)圖3-7
查詢?nèi)w學(xué)生2.修改基本表--引例
3.1.1基本表的創(chuàng)建、修改與刪除【例3-4】向Student表增加“聯(lián)系電話”列,其數(shù)據(jù)類型為字符型。
ALTERTABLEStudentADDSphoneCHAR(10);
在基本表中,新增加的列一律為空值?!纠?-5】將年齡的數(shù)據(jù)類型改為短整數(shù)。
ALTERTABLEStudentALTERCOLUMNSageTYPESMALLINT;
修改原有的列定義有可能會(huì)破壞已有數(shù)據(jù)。
【例3-6】刪除學(xué)生姓名必須取唯一值的約束。
ALTERTABLEStudentDROPUNIQUE(Sname);2.修改基本表3.1.1基本表的創(chuàng)建、修改與刪除3.刪除基本表DROPTABLE<表名>[RESTRICT|CASCADE];RESTRICT:刪除表是有限制的。欲刪除的基本表不能被其他表的約束所引用如果存在依賴該表的對(duì)象,則此表不能被刪除CASCADE:刪除該表沒有限制。在刪除基本表的同時(shí),相關(guān)的依賴對(duì)象一起刪除3.1.1基本表的創(chuàng)建、修改與刪除【例3-7】刪除Student表。
DROPTABLEStudent;
在SQL基本表定義一旦刪除,表中的數(shù)據(jù)、此表上建立的索引和視圖都將自動(dòng)被刪除掉。因此執(zhí)行刪除基本表的操作一定要格外小心。
3.刪除基本表3.1.1基本表的創(chuàng)建、修改與刪除3.1.2建立與刪除索引
1.建立索引
2.刪除索引1.建立索引語句格式
CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);關(guān)鍵字UNIQUE表示為表或視圖創(chuàng)建唯一索引,即不允許存在索引值相同的兩行,如果對(duì)已存在數(shù)據(jù)的表創(chuàng)建唯一索引,必須保證索引對(duì)應(yīng)的值無重復(fù)值。關(guān)鍵字CLUSTER用于指定創(chuàng)建聚簇索引。在最經(jīng)常查詢的列上建立聚簇索引以提高查詢效率。一個(gè)基本表上最多只能建立一個(gè)聚簇索引。經(jīng)常更新的列不宜建立聚簇索引。3.1.2建立與刪除索引【例3-8】為學(xué)生-課程數(shù)據(jù)庫中的Student,Course,SC三個(gè)表建立索引。其中Student表按學(xué)號(hào)升序建唯一索引,Couse表按課程號(hào)升序建唯一索引,SC表按學(xué)號(hào)降序和課程號(hào)升序建唯一索引。CREATEUNIQUEINDEXStsnoONStudent(Sno);CREATEUNIQUEINDEXCocnoONCourse(Cno);CREATEUNIQUEINDEXSCnoONSC(SnoDESC,Cno);1.建立索引3.1.2建立與刪除索引
DROPINDEX<索引名>;
刪除索引時(shí),系統(tǒng)會(huì)從數(shù)據(jù)字典中刪去有關(guān)該索引的描述。【例3-9】刪除Student表的Ssname索引。
DROPINDEXstudent.Ssname;2.刪除索引3.1.2建立與刪除索引3.2SQL語言SQL(StructuredQueryLanguage)是結(jié)構(gòu)化查詢語言的簡(jiǎn)稱。是一種介于關(guān)系代數(shù)和關(guān)系演算之間的結(jié)構(gòu)化非過程查詢語言,是專為數(shù)據(jù)庫而建立的指令集,其功能包括數(shù)據(jù)的定義、查詢、更新和數(shù)據(jù)控制等多個(gè)方面。關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。3.2.1SQL的產(chǎn)生與發(fā)展
標(biāo)準(zhǔn)
發(fā)布日期
SQL/861986.10SQL/891989年
SQL/921992年
SQL991999年
SQL20032003年3.2.2SQL的特點(diǎn)1.綜合統(tǒng)一2.高度非過程化3.面向集合的操作方式4.以同一種語法結(jié)構(gòu)提供多種使用方式5.語言簡(jiǎn)潔,易學(xué)易用1.綜合統(tǒng)一數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)查詢語言(DQL)、數(shù)據(jù)操縱語言(DML)、數(shù)據(jù)控制語言(DCL)功能于一體??梢元?dú)立完成數(shù)據(jù)庫生命周期中的全部活動(dòng):定義關(guān)系模式,插入數(shù)據(jù),建立數(shù)據(jù)庫;對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢和更新;數(shù)據(jù)庫重構(gòu)和維護(hù);數(shù)據(jù)庫安全性、完整性控制等。3.2.2SQL的特點(diǎn)2.高度非過程化
SQL只要提出“做什么”,無須了解存取路徑。存取路徑的選擇以及SQL的操作過程由系統(tǒng)自動(dòng)完成。3.2.2SQL的特點(diǎn)3.面向集合的操作方式SQL采用集合操作方式操作對(duì)象、查詢結(jié)果可以是元組的集合一次插入、刪除、更新操作的對(duì)象可以是元組的集合3.2.2SQL的特點(diǎn)4.以同一種語法結(jié)構(gòu)提供多種使用方式SQL是自含式語言能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式SQL又是嵌入式語言
SQL能夠嵌入到高級(jí)語言(例如C、C++、Java)程序中,供程序員設(shè)計(jì)程序時(shí)使用3.2.2SQL的特點(diǎn)5.語言簡(jiǎn)潔,易學(xué)易用SQL功能極強(qiáng),完成核心功能只用了9個(gè)動(dòng)詞。表3.2SQL語言的動(dòng)詞
SQL
功
能
動(dòng)
詞
數(shù)
據(jù)
查
詢
SELECT
數(shù)
據(jù)
定
義
CREATE,DROP,ALTER
數(shù)
據(jù)
操
縱
INSERT,UPDATE
DELETE
數(shù)
據(jù)
控
制
GRANT,REVOKE
3.2.2SQL的特點(diǎn)3.2.3SQL的體系結(jié)構(gòu)用戶視圖2視圖1基本表2基本表1基本表3基本表4存儲(chǔ)文件2存儲(chǔ)文件1外模式模式內(nèi)模式SQL支持關(guān)系數(shù)據(jù)庫三級(jí)模式結(jié)構(gòu)3.2.3SQL的體系結(jié)構(gòu)基本表本身獨(dú)立存在的表SQL中一個(gè)關(guān)系就對(duì)應(yīng)一個(gè)基本表一個(gè)(或多個(gè))基本表對(duì)應(yīng)一個(gè)存儲(chǔ)文件一個(gè)表可以帶若干索引存儲(chǔ)文件邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式物理結(jié)構(gòu)是任意的,對(duì)用戶透明視圖從一個(gè)或幾個(gè)基本表導(dǎo)出的表數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對(duì)應(yīng)的數(shù)據(jù)視圖是一個(gè)虛表用戶可以在視圖上再定義視圖3.2.4SQL的組成數(shù)據(jù)定義語言(DataDefinitionLanguage,
DDL)數(shù)據(jù)操縱語言(DataManipulationLanguage,DML)數(shù)據(jù)控制語言(DataControlLanguage,DCL)數(shù)據(jù)查詢語言(DataQueryLanguage,DQL)1.?dāng)?shù)據(jù)定義語言DDL是SQL中負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)定義與數(shù)據(jù)庫對(duì)象定義的語言,用于執(zhí)行數(shù)據(jù)庫的任務(wù),對(duì)數(shù)據(jù)庫以及數(shù)據(jù)庫中的各種對(duì)象進(jìn)行創(chuàng)建、刪除、修改等操作。
語句功能說明CREATE
創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象不同數(shù)據(jù)庫對(duì)象,其CREATE語句的語法形式不同ALTER對(duì)數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象進(jìn)行修改不同數(shù)據(jù)庫對(duì)象,其ALTER語句的語法形式不同DROP刪除數(shù)據(jù)庫或數(shù)據(jù)庫對(duì)象不同數(shù)據(jù)庫對(duì)象,其DROP語句的語法形式不同表4-2DDL主要語句及功能3.2.4SQL的組成2.?dāng)?shù)據(jù)操縱語言實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的基本操作,可對(duì)數(shù)據(jù)庫中各種對(duì)象中的數(shù)據(jù)進(jìn)行插入、刪除和修改。
語句功能說明INSERT將數(shù)據(jù)插入到表或視圖中UPDATE修改表或視圖中的數(shù)據(jù)既可修改表或視圖的一行數(shù)據(jù),也可修改一組或全部數(shù)據(jù)DELETE從表或視圖中刪除數(shù)據(jù)可根據(jù)條件刪除指定的數(shù)據(jù)表4-3DML主要語句及功能3.2.4SQL的組成3.?dāng)?shù)據(jù)控制語言用于安全管理,確定哪些用戶可以查看或修改數(shù)據(jù)庫中的數(shù)據(jù)。語句功能說明GRANT
授予權(quán)限
可把語句許可或?qū)ο笤S可的權(quán)限授予其他用戶和角色REVOKE
收回權(quán)限
與GRANT的功能相反,但不影響該用戶或角色從其他角色中作為成員繼承許可權(quán)限D(zhuǎn)ENY
收回權(quán)限,并禁止從其他角色繼承許可權(quán)限
功能與REVOKE相似,不同之處:除收回權(quán)限外,還禁止從其他角色繼承許可權(quán)限表4-4DCL主要語句及功能3.2.4SQL的組成4.?dāng)?shù)據(jù)查詢語言用來檢索數(shù)據(jù)庫表中的數(shù)據(jù)。語句功能說明SELECT
從表或視圖中檢索數(shù)據(jù)是使用最頻繁的SQL語句之一表4-5DQL主要語句及功能
3.2.4SQL的組成3.3單表查詢語句格式
SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…
FROM
<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];
學(xué)生-課程模式:
學(xué)生表:Student(Sno,Sname,Ssex,Sage,Sdept)
課程表:Course(Cno,Cname,Ccredit)
學(xué)生選課表:SC(Sno,Cno,Grade)
3.3單表查詢3.3單表查詢?nèi)绻鸖sex需要用兩個(gè)字符表示(如'男'或'女'),那么需要修改表定義,將Ssex
列的類型從
CHAR(2)
改為
CHAR(3)
或更長,以適應(yīng)數(shù)據(jù)。其SQL語句如下:altertableStudentaltercolumnSsextypechar(3);3.3單表查詢圖3-6
插入數(shù)據(jù)3.3單表查詢查詢僅涉及一個(gè)表:1、選擇表中的若干列2、選擇表中的若干元組1.選擇表中的若干列(1)查詢指定列
在SELECT子句指定<目標(biāo)列表達(dá)式>中指定要查詢的屬性列?!纠?-10】查詢?nèi)w學(xué)生的姓名、所在系。
SELECTSname,SdeptFROMStudent;
<目標(biāo)列表達(dá)式>中各個(gè)列的先后順序可以與數(shù)據(jù)庫表中的列順序不一致。用戶可以根據(jù)應(yīng)用的需要改變列的顯示順序。3.3單表查詢(2)查詢?nèi)苛?/p>
兩種方法:一種方法就是在SELECT命令字后面列出所有的列名;另一種方法是可以簡(jiǎn)單地將<目標(biāo)列表達(dá)式>指定為*,這樣做列的顯示順序與其在基表中的順序相同?!纠?-11】查詢選修課的情況。
SELECTSno,Cno,GradeFROMSC;
等價(jià)于:SELECT*FROMSC;1.選擇表中的若干列3.3單表查詢(3)查詢經(jīng)過計(jì)算的列
【例3-12】查找全體學(xué)生的學(xué)號(hào),姓名以及出生年份。
SELECTSno,Sname,2021-SageFROMStudent;【例3-13】查詢?nèi)w學(xué)生的姓名、出生年份和所有系,要求用小寫字母表示所有系名。
SELECTSname,2021-Sage,LOWER(Sdept)FROMStudent;
用戶可以通過指定別名來改變查詢結(jié)果的列標(biāo)題。
【例3-14】SELECTSnameNAME,2021-SageBIRTHDAY,LOWER(Sdept)DEPARTMENTFROMStudent;1.選擇表中的若干列3.3單表查詢2.選擇表中的若干元組
SELECT語句中使用“*”查詢所有列以及使用WHERE子句指定選擇的條件來實(shí)現(xiàn)的。(1)消除取值重復(fù)的行如果沒有指定DISTINCT關(guān)鍵詞,則缺省為ALL;指定DISTINCT關(guān)鍵詞,去掉表中重復(fù)的行?!纠?-15】查詢學(xué)生所在的系名
SELECTDISTINCTSdeptFROMStudent;3.3單表查詢通過WHERE子句實(shí)現(xiàn)對(duì)滿足指定條件的元組進(jìn)行查詢。
查詢條件謂詞比較=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比較運(yùn)算符確定范圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重條件AND,OR,NOT表3-7常用的查詢條件3.3單表查詢2.選擇表中的若干元組(WHERE子句)【例3-16】查詢所在系是“網(wǎng)絡(luò)工程系”全體學(xué)生的名單。SELECTSnameFROMStudentWHERESdept=‘網(wǎng)絡(luò)工程系';【例3-17】查詢所有年齡不小于22歲的學(xué)生學(xué)號(hào),姓名及其年齡。SELECTSno,Sname,SageFROMStudentWHERESage>=22;或SELECTSno,Sname,SageFROMStudentWHERENOTSage<22;【例3-18】查詢考試成績(jī)有不及格的學(xué)生的學(xué)號(hào)及課程號(hào)。
SELECTSno,CnoFROMSCWHEREGrade<60;或SELECTSno,CnoFROMSCWHERENOTGrade>=60;2.選擇表中的若干元組(比較大小)3.3單表查詢【例3-19】查詢年齡在18-20歲(包括18歲和20歲)之間的學(xué)生的學(xué)號(hào)、姓名、系別和年齡。
SELECTSno,Sname,Sdept,SageFROMStudentWHERESageBETWEEN18AND20;或SELECTSno,Sname,Sdept,SageFROMStudentWHERESage>=18ANDSage<=20;
【例3-20】查詢年齡不在18-20歲之間的學(xué)生的學(xué)號(hào)、姓名、系別和年齡。
SELECTSno,Sname,Sdept,SageFROMStudentWHERESageNOTBETWEEN18AND20;2.選擇表中的若干元組(確定范圍)3.3單表查詢【例3-21】查詢“網(wǎng)絡(luò)工程系”、“信息工程系”和“計(jì)算機(jī)系”學(xué)生的姓名和年齡。
SELECTSname,SageFROMStudentWHERESdeptIN(‘網(wǎng)絡(luò)工程系',‘計(jì)算機(jī)系',‘信息工程系');【例3-22】查詢不是“網(wǎng)絡(luò)工程系”也不是“軟件工程系”和“計(jì)算機(jī)系”的學(xué)生的姓名和年齡。
SELECTSname,SageFROMStudentWHERESdeptNOTIN(‘網(wǎng)絡(luò)工程系',‘計(jì)算機(jī)系',‘軟件工程系');2.選擇表中的若干元組(確定集合)3.3單表查詢【例3-23】查詢學(xué)號(hào)為“0906064201”的學(xué)生的詳細(xì)情況。
SELECT*FROMStudentWHERESnoLIKE
‘0906064201';【例3-24】查詢學(xué)號(hào)不是“0906064201”的學(xué)生的詳細(xì)情況。
SELECT*FROMStudentWHERESno
NOTLIKE
‘0906064201';
等價(jià)于:
SELECT*FROMStudentWHERESno!=‘0906064201'2.選擇表中的若干元組(字符匹配)3.3單表查詢【例3-25】查詢所有姓“王”的學(xué)生的學(xué)號(hào)、姓名和年齡。
SELECTSno,Sname,SageFROMStudent
WHERESnameLIKE
‘王%';【例3-26】查詢姓“皇甫”且全名為三個(gè)漢字的學(xué)生的姓名。
SELECTSnameFROMStudentWHERESnameLIKE
‘皇甫__'
注意:由于一個(gè)漢字占兩個(gè)字符的位置,所以匹配串“皇甫”后面需要跟兩個(gè)“_”。2.選擇表中的若干元組(字符匹配)3.3單表查詢【例3-27】查詢名字中帶“麗”字的學(xué)生的姓名和學(xué)號(hào)。
SELECTSname,SnoFROMStudentWHERESnameLIKE
‘%麗%';【例3-28】查詢所有非“王”姓的學(xué)生的姓名及學(xué)號(hào)。
SELECTSno,SnameFROMStudentWHERESnameNOTLIKE‘王%';
2.選擇表中的若干元組(字符匹配)3.3單表查詢
查詢的字符串本身就含有%或_,這時(shí)就要使用ESCAPE‘<換碼字符>’?!纠?-29】查詢“網(wǎng)絡(luò)編程_2”這門課程的課程號(hào)。
SELECTCnoFROMCourseWHERECnameLIKE‘網(wǎng)絡(luò)編程\_2'ESCAPE‘\';
注意:ESCAPE‘\’中的‘\’為換碼字符,表示匹配串“網(wǎng)絡(luò)編程\_2”中,跟在‘\’后面的‘_’不再具有通配符的含義,而轉(zhuǎn)義為普通的“_”匹配字符。2.選擇表中的若干元組(字符匹配)3.3單表查詢【例3-30】查詢?nèi)鄙俪煽?jī)的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)。
SELECTSno,CnoFROMSCWHEREGradeISNULL;【例3-31】查詢所有有成績(jī)的學(xué)生課程號(hào)和學(xué)號(hào)。
SELECTCno,SnoFROMSCWHEREGradeISNOTNULL;2.選擇表中的若干元組(涉及空值的查詢)3.3單表查詢【例3-32】查詢“網(wǎng)絡(luò)工程系”年齡大于18歲的學(xué)生的學(xué)號(hào)。
SELECTSnoFROMStudentWHERESdept=‘網(wǎng)絡(luò)工程'ANDSage>18;2.選擇表中的若干元組(多重條件查詢)3.3單表查詢3.4排序操作ORDERBY子句可以按一個(gè)或多個(gè)屬性列排序升序:ASC;降序:DESC;缺省值為升序當(dāng)排序列含空值時(shí)ASC:排序列為空值的元組最后顯示DESC:排序列為空值的元組最先顯示【例3-33】查詢“計(jì)算機(jī)系”學(xué)生的學(xué)號(hào)及其年齡,并且查詢結(jié)果按年齡的降序排列。
SELECTSno,SageFROMStudentWHERESdept=‘計(jì)算機(jī)系'
ORDERBYSageDESC;
注意:對(duì)于空值,若按降序排列,含空值的元素將最先顯示。若按升序排,空值的元素將最后顯示。
【例3-34】
查詢?nèi)w學(xué)生的選課情況,查詢結(jié)果按所選課的課程號(hào)升序排列,同一門課程的元組按成績(jī)的降序排列。
SELECT*FROMSCORDERBYCno,GradeDESC;3.4排序操作
介紹了SQL的發(fā)展、組成、特點(diǎn)及SQL的基本功能和基本語法,其中重點(diǎn)是SQL的基本功能和基本語法。SQL的基本功能包括數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)更新和數(shù)據(jù)控制4個(gè)方面。數(shù)據(jù)定義部分介紹了數(shù)據(jù)庫及基本表、索引創(chuàng)建、修改和刪除;數(shù)據(jù)查詢部分介紹了單表查詢與排序操作。其他部分將在后續(xù)章節(jié)中介紹。本章小結(jié)思考內(nèi)容
第4章高級(jí)SQL語言
(2025秋季學(xué)期)
數(shù)據(jù)庫概論第4章高級(jí)SQL語言4.1數(shù)據(jù)庫應(yīng)用系統(tǒng)配置4.2聚集函數(shù)4.3分組查詢4.4多表查詢4.5集合查詢4.6嵌套查詢4.7數(shù)據(jù)更新4.8SQL數(shù)據(jù)控制4.9視圖的定義及操作4.10嵌入式SQL4.11動(dòng)態(tài)SQL簡(jiǎn)介4.1數(shù)據(jù)庫應(yīng)用系統(tǒng)配置1.安裝前準(zhǔn)備安裝數(shù)據(jù)庫執(zhí)行系統(tǒng)前需要準(zhǔn)備的組件如下:(1)虛擬化軟件:建議安裝VMwareWorkstationPro17。(2)麒麟操作系統(tǒng):Kylin-Server-V10-SP3-General-Release-2303-X86_64。(3)數(shù)據(jù)庫系統(tǒng):openGauss-5.0.2。(4)數(shù)據(jù)庫執(zhí)行器源代碼包:openGauss_performer.rar。(5)eclipse集成開發(fā)環(huán)境軟件:eclipse-jee-2022-12-R-linux-gtk-x86_64.tar.gz。(6)數(shù)據(jù)庫連接器:openGauss-6.0.0-RC1-JDBC.tar.gz。4.1數(shù)據(jù)庫應(yīng)用系統(tǒng)配置2.數(shù)據(jù)庫執(zhí)行器的應(yīng)用(詳見附件3)圖4-17執(zhí)行器運(yùn)行成功界面4.2聚集函數(shù)聚集函數(shù):計(jì)數(shù)COUNT([DISTINCT|ALL]*)COUNT([DISTINCT|ALL]<列名>)計(jì)算總和SUM([DISTINCT|ALL]<列名>)
計(jì)算平均值A(chǔ)VG([DISTINCT|ALL]<列名>)最大最小值
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)4.2聚集函數(shù)【例4-1】求選修課程號(hào)是“01”課程的學(xué)生的平均成績(jī)。
SELECTAVG(Grade)
課程01平均成績(jī)
FROMSCWHERECno=‘01';【例4-2】查詢選修了“01”課程的學(xué)生的最高分和最低分。
SELECTMAX(Grade)
課程01的最高分,MIN(Grade)
課程01的最低分
FROMSCWHERECno=‘01';4.2聚集函數(shù)【例4-3】查詢學(xué)生的總?cè)藬?shù)。
SELECTCOUNT(*)
學(xué)生總?cè)藬?shù)
FROMStudent;【例4-4】查詢選修了課程的學(xué)生總?cè)藬?shù)。
SELECTCOUNT(DISTINCTSno)FROMSC
注意:學(xué)生每選修一門課,在SC中都有一條相應(yīng)的記錄。一個(gè)學(xué)生要選修多門課程,為避免重復(fù)計(jì)算學(xué)生人數(shù),必須在COUNT函數(shù)中用DISTINCT短語。4.3分組查詢GROUPBY子句:細(xì)化聚集函數(shù)的作用對(duì)象未對(duì)查詢結(jié)果分組,聚集函數(shù)將作用于整個(gè)查詢結(jié)果對(duì)查詢結(jié)果分組后,聚集函數(shù)將分別作用于每個(gè)組
作用對(duì)象是查詢的中間結(jié)果表按指定的一列或多列值分組,值相等的為一組4.3分組查詢【例4-5】查詢各系的學(xué)生人數(shù)。
SELECTSdept,COUNT(*)學(xué)生數(shù)
FROMStudentGROUPBYSdept;【例4-6】查詢選修各門課程的平均成績(jī)和選修該課程的人數(shù)。
SELECTCno,AVG(Grade)平均成績(jī),COUNT(Sno)選修人數(shù)
FROMSCGROUPBYCno;4.3分組查詢【例4-7】查詢平均成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。
SELECTSno,AVG(Grade)平均成績(jī)
FROMSCGROUPBYSno
HAVINGAVG(Grade)>=80;【例4-8】查詢選修課程超過3門且成績(jī)都在75分以上的學(xué)生的學(xué)號(hào)。
SELECTSnoFROMSCWHEREGrade>=75
GROUPBYSnoHAVINGCOUNT(*)>34.4多表查詢1.等值與非等值連接查詢2.自身連接查詢3.外連接1.等值與非等值連接查詢連接條件一般格式:
[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>連接字段:連接條件中的列名稱,各連接字段類型必須是可比的,但名字不必是相同的當(dāng)比較運(yùn)算符為“=”時(shí),稱為等值連接,否則稱為非等值連接。當(dāng)?shù)戎颠B接字段相同,并且在SELECT子句中去除重復(fù)字段時(shí),則稱為自然連接。4.4多表查詢連接操作的執(zhí)行過程(嵌套循環(huán)法)首先在表1中找到第一個(gè)元組,然后從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第一個(gè)元組與該元組拼接起來,形成結(jié)果表中一個(gè)元組。表2全部查找完后,再找表1中第二個(gè)元組,然后再從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第二個(gè)元組與該元組拼接起來,形成結(jié)果表中一個(gè)元組。重復(fù)上述操作,直到表1中的全部元組都處理完畢。4.4多表查詢【例4-9】查詢每個(gè)學(xué)生的基本信息及學(xué)生選修課的情況。
SELECTStudent.*,SC.*
FROMStudent,SC
WHEREStudent.Sno=SC.Sno
1.等值與非等值連接查詢4.4多表查詢Student.Sno
Sname
Ssex
Sage
Sdept
SC.SnoCno
Grade09001
李強(qiáng)男
21網(wǎng)絡(luò)工程09001018509001
李強(qiáng)
男
21網(wǎng)絡(luò)工程
09001029009001
李強(qiáng)男
21網(wǎng)絡(luò)工程
09001038509002
劉帥男
20網(wǎng)絡(luò)工程09002018709002
劉帥
男
20
網(wǎng)絡(luò)工程
090020292查詢的執(zhí)行結(jié)果:
表4-4例4-9的執(zhí)行結(jié)果1.等值與非等值連接查詢4.4多表查詢【例4-10】自然連接查詢。
SELECTStudent.*,SC.Cno,SC.GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno
若選的字段名在各個(gè)表中是唯一的,則可以省略字段名前的表名,本例也可以寫成:
SELECTStudent.*,Cno,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno1.等值與非等值連接查詢4.4多表查詢【例4-44】查詢選修了“01”號(hào)課程且成績(jī)?cè)?5分以上的學(xué)生的姓名及成績(jī)。
SELECTSname,GradeFROMStudent,SCWHEREStudent.Sno=SC.Sno
ANDCno=‘01'ANDGrade>=751.等值與非等值連接查詢4.4多表查詢執(zhí)行結(jié)果:SnameGrade李強(qiáng)85劉帥87表4-5例4-11的結(jié)果1.等值與非等值連接查詢4.4多表查詢假設(shè)課程表Course的內(nèi)容如表4-6所示。CnoCnameCcredit01離散數(shù)學(xué)402數(shù)據(jù)庫303數(shù)據(jù)結(jié)構(gòu)204操作系統(tǒng)305軟件工程2表4-6Course表1.等值與非等值連接查詢4.4多表查詢【例4-12】多表查詢。查詢選修了“離散數(shù)學(xué)”課程且成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)、姓名、課程名和成績(jī)。
SELECTStudent.Sno,Sname,Cname,GradeFROMStudent,Course,SCWHEREStudent.Sno=SC.Sno
ANDCourse.Cno=SC.Cno
ANDCname=‘離散數(shù)學(xué)'ANDGrade>=801.等值與非等值連接查詢4.4多表查詢執(zhí)行結(jié)果SnoSnameCnameGrade09001李強(qiáng)離散數(shù)學(xué)8509002劉帥離散數(shù)學(xué)871.等值與非等值連接查詢4.4多表查詢2.自身連接查詢
自身連接:一個(gè)表與自身進(jìn)行連接需要給表起別名以示區(qū)別由于所有屬性名都是同名屬性,因此必須使用別名前綴【例4-46】自身連接實(shí)例。查詢不同課程成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。
SELECTa.Sno,a.Cno,b.Cno,a.GradeFROMSCa,SCb
WHERE
a.Grade=b.GradeANDa.Sno=b.SnoANDa.Cno!=b.Cno4.4多表查詢2.自身連接查詢查詢結(jié)果如表4-8所示。SnoCnoCnoGrade0900101038509001030185表4-8例4-13的結(jié)果4.4多表查詢3.外連接外連接與普通連接的區(qū)別普通連接操作只輸出滿足連接條件的元組外連接操作以指定表為連接主體,將主體表中不滿足連接條件的元組一并輸出4.4多表查詢左外連接、右外連接外連接中不匹配的分量用NULL表示。外連接的語法格式為:<表名>LEFT|RIGHT[OUTER]JOIN<表名>ON<連接條件>
其中表名為需連接的表,LEFT[OUTER]JOIN稱為左外連接,RIGHT[OUTER]JOIN稱為右外連接。4.4多表查詢3.外連接【例4-14】查詢學(xué)生的基本情況及選修課的課程號(hào)情況,要求查詢結(jié)果中包含未選課的學(xué)生信息。
SELECTStudent.*,CnoFROMStudentLEFTOUTERJOINSC ONStudent.Sno=SC.Sno4.4多表查詢SnoSnameSsexSageSdeptCno09001李強(qiáng)男21網(wǎng)絡(luò)工程0109001李強(qiáng)男21網(wǎng)絡(luò)工程0209001李強(qiáng)男21網(wǎng)絡(luò)工程0309002劉帥男20網(wǎng)絡(luò)工程0109002劉帥男20網(wǎng)絡(luò)工程0209003王海女18計(jì)算機(jī)NULL09004張坤男20軟件工程N(yùn)ULL查詢結(jié)果:
4.4多表查詢【例4-15】查詢選修了的課程情況及已開設(shè)的所有選修課的課程名。
SELECTSC.*,CnameFROMSCRIGHTJOINCourseONSC.Cno=Course.Cno4.4多表查詢3.外連接Sno
Cno
GradeCname09001
0185離散數(shù)學(xué)09001
0290數(shù)據(jù)庫09001
0385數(shù)據(jù)結(jié)構(gòu)09002
0187離散數(shù)學(xué)09002
0292數(shù)據(jù)庫NULLNULLNULL操作系統(tǒng)NULLNULLNULL軟件工程查詢結(jié)果
表4-10例4-15的結(jié)果4.4多表查詢3.外連接4.5集合查詢集合操作的種類并操作UNION
交操作INTERSECT
差操作EXCEPT其語法格式為:
<SELECT語句>UNION[ALL]|INTERSECT|EXCEPT<SELECT語句>關(guān)鍵字ALL表示合并的結(jié)果中包含所有行,重復(fù)的行不去掉;不使用ALL則表示在合并時(shí)相同的行要去掉。參加集合操作的各查詢結(jié)果的列數(shù)必須相同;對(duì)應(yīng)列的數(shù)據(jù)類型也必須相同。4.5集合查詢【例4-16】
查詢性別是“男”的學(xué)生及年齡小于22歲的學(xué)生。SELECT*FROMStudentWHERESsex=‘男'UNIONSELECT*FROMStudentWHERESage<224.5集合查詢【例4-16】
查詢性別是“男”的學(xué)生及年齡小于22歲的學(xué)生。
也可以使用OR操作查詢來代替,但OR操作查詢不會(huì)去除重復(fù)的行。SELECT*FROMStudentWHERESsex=‘男'ORSage<224.5集合查詢【例4-17】
查詢性別是“男”并且年齡小于22歲的學(xué)生。SELECT*FROMStudentWHERESsex=‘男'INTERSECTSELECT*FROMStudentWHERESage<224.5集合查詢【例4-17】
查詢性別是“男”并且年齡小于22歲的學(xué)生。
也可以使用AND操作查詢來代替。
SELECT*FROMStudentWHERESsex=‘男'ANDSage<224.5集合查詢【例4-18】查詢既選修了“01”號(hào)課程又選修了“03”課程的學(xué)生的學(xué)號(hào)。
SELECTSnoFROMSCWHERECno=‘01'
INTERSECTSELECTSnoFROMSCWHERECno=‘03'4.5集合查詢【例4-19】查詢性別是“男”但年齡不小于22歲的學(xué)生。SELECT*FROMStudentWHERESsex=‘男'EXCEPTSELECT*FROMStudentWHERESage<22可用下面的查詢來代替。SELECT*FROMStudentWHERESsex=‘男'ANDSage>=224.6嵌套查詢嵌套查詢概述一個(gè)SELECT-FROM-WHERE語句稱為一個(gè)查詢塊將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢例如:SELECTSnameFROMStudent/*外層查詢/父查詢*/WHERESnoIN
(SELECTSnoFROMSC/*內(nèi)層查詢/子查詢*/WHERECno=‘2')
;4.6嵌套查詢子查詢的限制不能使用ORDERBY子句層層嵌套方式反映了SQL語言的結(jié)構(gòu)化有些嵌套查詢可以用連接查詢替代4.6嵌套查詢嵌套查詢求解方法:不相關(guān)子查詢,相關(guān)子查詢不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢由里向外逐層處理。即每個(gè)子查詢?cè)谏弦患?jí)查詢處理之前求解,子查詢的結(jié)果用于建立其父查詢的查找條件。4.6嵌套查詢相關(guān)子查詢:子查詢的查詢條件依賴于父查詢首先取外層查詢中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若WHERE子句返回值為真,則取此元組放入結(jié)果表然后再取外層表的下一個(gè)元組重復(fù)這一過程,直至外層表全部檢查完為止4.6嵌套查詢1.帶有IN謂詞的子查詢2.帶有比較運(yùn)算符的子查詢3.帶有ANY(SOME)或ALL謂詞的子查詢4.帶有EXISTS謂詞的子查詢4.6嵌套查詢1.帶有IN謂詞的子查詢【例4-20】查詢選修了“01”號(hào)課程的學(xué)生的信息。
SELECT*FROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECno=‘01')
本例中,子查詢的查詢條件不依賴于父查詢,稱為不相關(guān)子查詢。4.6嵌套查詢本例也可以使用連接查詢來實(shí)現(xiàn):
SELECT*FROMStudent,SCWHEREStudent.Sno=SC.SnoANDCno=‘01'4.6嵌套查詢1.帶有IN謂詞的子查詢【例4-21】查詢選修“數(shù)據(jù)庫”的學(xué)生的基本情況。
SELECT*FROMStudentWHERESnoIN(SELECTSnoFROMSCWHERECnoIN(SELECTCnoFROMCourseWHERECname=‘?dāng)?shù)據(jù)庫')
);4.6嵌套查詢1.帶有IN謂詞的子查詢本例也可以使用連接查詢來實(shí)現(xiàn):
SELECT*FROMStudent,SC,CourseWHEREStudent.Sno=SC.SnoANDCourse.Cno=SC.CnoANDCname=‘?dāng)?shù)據(jù)庫';4.6嵌套查詢1.帶有IN謂詞的子查詢2.帶有比較運(yùn)算符的子查詢當(dāng)能確切知道內(nèi)層查詢返回單值時(shí),可用比較運(yùn)算符(>,<,=,>=,<=,!=或<>)。與ANY或ALL謂詞配合使用4.6嵌套查詢【例4-55】查詢“01”號(hào)課程的成績(jī)高于“李強(qiáng)”的學(xué)生的學(xué)號(hào)。
SELECTSnoFROMSCWHERECno=‘01'ANDGrade>(SELECTGradeFROMSCWHERECno=‘01'ANDSno=(SELECTSnoFROMStudentWHERESname=‘李強(qiáng)'));4.6嵌套查詢2.帶有比較運(yùn)算符的子查詢3.帶有ANY或ALL謂詞的子查詢謂詞語義
ANY:任意一個(gè)值
ALL:所有值4.6嵌套查詢
>ANY 大于子查詢結(jié)果中的某個(gè)值
>ALL 大于子查詢結(jié)果中的所有值
<ANY 小于子查詢結(jié)果中的某個(gè)值
<ALL 小于子查詢結(jié)果中的所有值
>=ANY 大于等于子查詢結(jié)果中的某個(gè)值
>=ALL 大于等于子查詢結(jié)果中的所有值
<=ANY 小于等于子查詢結(jié)果中的某個(gè)值
<=ALL 小于等于子查詢結(jié)果中的所有值
=ANY 等于子查詢結(jié)果中的某個(gè)值
=ALL等于子查詢結(jié)果中的所有值(通常沒有實(shí)際意義)
!=(或<>)ANY 不等于子查詢結(jié)果中的某個(gè)值
!=(或<>)ALL 不等于子查詢結(jié)果中的任何一個(gè)值4.6嵌套查詢3.帶有ANY或ALL謂詞的子查詢【例4-23】查詢比所有“計(jì)算機(jī)”系的學(xué)生年齡都大的學(xué)生信息。
SELECT*FROMStudentWHERESage>ALL
(SELECTSageFROMStudentWHERESdept=‘計(jì)算機(jī)')3.帶有ANY或ALL謂詞的子查詢4.6嵌套查詢本例也可以使用聚集函數(shù)來實(shí)現(xiàn):
SELECT*FROMStudentWHERESage>
(SELECTMAX(Sage)FROMStudentWHERESdept=‘計(jì)算機(jī)')3.帶有ANY或ALL謂詞的子查詢4.6嵌套查詢【例4-24】查詢課程號(hào)為“02”且成績(jī)低于課程號(hào)為“01”的最高成績(jī)的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。
SELECTSno,Cno,GradeFROMSCWHERECno=‘02’ANDGrade<ANY(SELECTGrade FROMSC WHERECno=‘01')3.帶有ANY或ALL謂詞的子查詢4.6嵌套查詢也可以使用聚集函數(shù)來實(shí)現(xiàn):SELECTSno,Cno,GradeFROMSCWHERECno=‘02'ANDGrade<(SELECTMAX(Grade)
FROMSCWHERECno=‘01')3.帶有ANY或ALL謂詞的子查詢4.6嵌套查詢4.帶有EXISTS謂詞的子查詢1.EXISTS謂詞存在量詞
帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只產(chǎn)生邏輯真值“true”或邏輯假值“false”。若內(nèi)層查詢結(jié)果非空,則外層的WHERE子句返回真值若內(nèi)層查詢結(jié)果為空,則外層的WHERE子句返回假值由EXISTS引出的子查詢,其目標(biāo)列表達(dá)式通常都用*,因?yàn)閹XISTS的子查詢只返回真值或假值,給出列名無實(shí)際意義2.NOTEXISTS謂詞若內(nèi)層查詢結(jié)果非空,則外層的WHERE子句返回假值若內(nèi)層查詢結(jié)果為空,則外層的WHERE子句返回真值4.6嵌套查詢【例4-25】查詢選修了“02”號(hào)課程的學(xué)生姓名。SELECTSnameFROMStudentWHEREEXISTS(SELECT*
FROMSCWHEREStudent.Sno= SC.SnoANDCno=‘02');4.帶有EXISTS謂詞的子查詢4.6嵌套查詢【例4-24】查詢沒有選修“02”號(hào)課程的學(xué)生姓名。SELECTSnameFROMStudentWHERENOTEXISTS
(SELECT*FROMSCWHERESno=Student.SnoANDCno=‘02')4.帶有EXISTS謂詞的子查詢4.6嵌套查詢
不同形式的查詢間的替換一些帶EXISTS或NOTEXISTS謂詞的子查詢不能被其他形式的子查詢等價(jià)替換所有帶IN謂詞、比較運(yùn)算符、ANY和ALL謂詞的子查詢都能用帶EXISTS謂詞的子查詢等價(jià)替換
用EXISTS/NOTEXISTS實(shí)現(xiàn)全稱量詞(難點(diǎn))SQL語言中沒有全稱量詞
(Forall)可以把帶有全稱量詞的謂詞轉(zhuǎn)換為等價(jià)的帶有存在量詞的謂詞:(
x)P≡
(
x(
P))
4.帶有EXISTS謂詞的子查詢4.6嵌套查詢例:查詢與“劉晨”在同一個(gè)系學(xué)習(xí)的學(xué)生。可以用帶EXISTS謂詞的子查詢替換:
SELECTSno,Sname,SdeptFROMStudentS1WHEREEXISTS
(SELECT*FROMStudentS2WHERES2.Sdept=S1.SdeptANDS2.Sname=‘劉晨');4.帶有EXISTS謂詞的子查詢4.6嵌套查詢[例]查詢選修了全部課程的學(xué)生姓名。
SELECTSnameFROMStudentWHERENOTEXISTS
(SELECT*FROMCourseWHERENOTEXISTS(SELECT*FROMSCWHERESno=Student.SnoANDCno=Course.Cno
));4.帶有EXISTS謂詞的子查詢4.6嵌套查詢
用EXISTS/NOTEXISTS實(shí)現(xiàn)邏輯蘊(yùn)含SQL語言中沒有蘊(yùn)含(Implication)邏輯運(yùn)算可以利用謂詞演算將邏輯蘊(yùn)含謂詞等價(jià)轉(zhuǎn)換為:p
q≡
p∨q4.帶有EXISTS謂詞的子查詢4.6嵌套查詢
[例]查詢至少選修了學(xué)生200215122選修的全部課程的學(xué)生號(hào)碼。解題思路:用邏輯蘊(yùn)含表達(dá):查詢學(xué)號(hào)為x的學(xué)生,對(duì)所有的課程y,只要200215122學(xué)生選修了課程y,則x也選修了y。形式化表示: 用p表示謂詞“學(xué)生200215122選修了課程y”
用q表示謂詞“學(xué)生x選修了課程y”
則上述查詢?yōu)?(
y)p
q
4.帶有EXISTS謂詞的子查詢4.6嵌套查詢等價(jià)變換:
(
y)p
q≡
(
y(
(p
q))≡
(
y(
(
p∨q)))≡
y(p∧
q)變換后語義:不存在這樣的課程y,學(xué)生200215122選修了y,而學(xué)生x沒有選。4.帶有EXISTS謂詞的子查詢4.6嵌套查詢用NOTEXISTS謂詞表示:
SELECTDISTINCTSnoFROMSCSCXWHERENOTEXISTS(SELECT*FROMSCSCYWHERESCY.Sno=‘200215122'ANDNOTEXISTS(SELECT*FROMSCSCZWHERESCZ.Sno=SCX.SnoAND SCZ.Cno=SCY.Cno));4.帶有EXISTS謂詞的子查詢4.6嵌套查詢4.7數(shù)據(jù)更新4.7.1數(shù)據(jù)插入4.7.2數(shù)據(jù)修改4.7.3數(shù)據(jù)刪除4.7.1數(shù)據(jù)插入兩種插入數(shù)據(jù)方式1.插入單個(gè)元組2.插入子查詢結(jié)果可以一次插入多個(gè)元組1.插入單個(gè)元組語句格式
INSERT INTO<表名>[(<屬性列1>[,<屬性列2>…)] VALUES(<常量1>[,<常量2>]…);功能將新元組插入到指定的表中4.7.1數(shù)據(jù)插入INTO子句屬性列的順序可與表定義中的順序不一致沒有指定屬性列指定部分屬性列
VALUES子句
提供的值必須與INTO子句匹配值的個(gè)數(shù)值的類型4.7.1數(shù)據(jù)插入【例4-28】將一個(gè)新學(xué)生記錄(學(xué)號(hào):09005;姓名:王麗;性別:女;年齡:19歲;所在系:計(jì)算機(jī),插入到Student表中。
INSERTINTOStudent
VALUES(‘09005',‘王麗',‘女',19,‘計(jì)算機(jī)');4.7.1數(shù)據(jù)插入【例4-29】向選課表SC中插入一條選課學(xué)號(hào)為“09005”課程號(hào)為“03”的記錄。
INSERT
INTOSC(Sno,Cno)
VALUES(‘09005',‘03');
新插入的元組在Grade列上取NULL4.7.1數(shù)據(jù)插入2.插入子查詢結(jié)果語句格式
INS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《GB-T 40604-2021新能源場(chǎng)站調(diào)度運(yùn)行信息交換技術(shù)要求》專題研究報(bào)告
- 《GBT 35796-2017 養(yǎng)老機(jī)構(gòu)服務(wù)質(zhì)量基本規(guī)范》專題研究報(bào)告
- 《GB-T 17215.941-2012電測(cè)量設(shè)備 可信性 第41部分:可靠性預(yù)測(cè)》專題研究報(bào)告
- 2026年河南省駐馬店地區(qū)單招職業(yè)傾向性考試題庫及參考答案詳解一套
- 云計(jì)算信息服務(wù)合同
- 智能電網(wǎng)工程師崗位招聘考試試卷及答案
- 2025年休閑健身服務(wù)項(xiàng)目發(fā)展計(jì)劃
- 排尿異常護(hù)理查房
- 遼寧省2025秋九年級(jí)英語全冊(cè)Unit5Whataretheshirtsmadeof課時(shí)1SectionA(1a-2d)課件新版人教新目標(biāo)版
- 員工成長路徑
- DB32T 5124.3-2025 臨床護(hù)理技術(shù)規(guī)范 第3部分:成人危重癥患者有創(chuàng)動(dòng)脈血壓監(jiān)測(cè)
- 松陵一中分班試卷及答案
- 《小米廣告宣傳冊(cè)》課件
- 勞務(wù)派遣公司工作方案
- 物理趣味題目試題及答案
- 華師大版數(shù)學(xué)七年級(jí)上冊(cè)《4.3 立體圖形的表面展開圖》聽評(píng)課記錄
- 2023-2024學(xué)年四川省成都市高二上學(xué)期期末調(diào)研考試地理試題(解析版)
- 陜西單招數(shù)學(xué)試題及答案
- 應(yīng)收賬款債權(quán)轉(zhuǎn)讓協(xié)議
- 四川省宜賓市長寧縣2024-2025學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題(含答案)
- 可行性報(bào)告商業(yè)計(jì)劃書
評(píng)論
0/150
提交評(píng)論