MySQL數(shù)據(jù)庫技術(shù)與應(yīng)用(微課版) 課件 模塊3 數(shù)據(jù)庫查詢_第1頁
MySQL數(shù)據(jù)庫技術(shù)與應(yīng)用(微課版) 課件 模塊3 數(shù)據(jù)庫查詢_第2頁
MySQL數(shù)據(jù)庫技術(shù)與應(yīng)用(微課版) 課件 模塊3 數(shù)據(jù)庫查詢_第3頁
MySQL數(shù)據(jù)庫技術(shù)與應(yīng)用(微課版) 課件 模塊3 數(shù)據(jù)庫查詢_第4頁
MySQL數(shù)據(jù)庫技術(shù)與應(yīng)用(微課版) 課件 模塊3 數(shù)據(jù)庫查詢_第5頁
已閱讀5頁,還剩92頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

BYYUSHEN數(shù)據(jù)庫技術(shù)與應(yīng)用DATABASETECHNOLOGYANDAPPLICATION任務(wù)1單表數(shù)據(jù)查詢?nèi)蝿?wù)2多表連接查詢?nèi)蝿?wù)3限行與排序查詢項目模塊3數(shù)據(jù)庫

查詢篇任務(wù)4分組統(tǒng)計查詢與分析查詢?nèi)蝿?wù)5子查詢?nèi)蝿?wù)6聯(lián)合查詢與逐行查詢?nèi)蝿?wù)7視圖簡化查詢?nèi)蝿?wù)8索引加速查詢CONTENTSBYYUSHENYOURLOGOAUNIVERSITY01任務(wù)1單表數(shù)據(jù)查詢點擊查看本任務(wù)知識技術(shù)點02任務(wù)2多表連接查詢點擊查看本任務(wù)知識技術(shù)點03任務(wù)3限行查詢與排序查詢點擊查看本任務(wù)知識技術(shù)點04任務(wù)4分組統(tǒng)計與分析查詢點擊查看本任務(wù)知識技術(shù)點05任務(wù)5子查詢點擊查看本任務(wù)知識技術(shù)點06任務(wù)6聯(lián)合查詢與逐行查詢點擊查看本任務(wù)知識技術(shù)點07任務(wù)7使用視圖簡化查詢點擊查看本任務(wù)知識技術(shù)點08任務(wù)8使用索引加速查詢點擊查看本任務(wù)知識技術(shù)點BYYUSHEN崗位能力能使用SQL命令和Workbench圖形化工具實現(xiàn)對一張或多張數(shù)據(jù)表進行簡單查詢、

連接查詢、嵌套子查詢、聯(lián)合查詢、排序或限量查詢、分組統(tǒng)計查詢的操作方法;能理解視圖的概念、特點及使用原則;能理解索引的概念、作用、存儲及分類;能使用SQL命令和Workbench圖形化工具為數(shù)據(jù)庫建立管理適當?shù)囊晥D與索引;技能證書標準解答客戶對表數(shù)據(jù)各類查詢的理論和操作問題;根據(jù)客戶需求運用SQL的DML語言編寫數(shù)據(jù)查詢語句;推薦客戶使用合理的視圖與索引高效查詢方案;思政素養(yǎng)養(yǎng)成注重細節(jié)、精益求精的職業(yè)操守;對解決問題積極探索、尋求高效、簡明、優(yōu)化手段的工匠精神;保護數(shù)據(jù)的同時還要認識到片面性問題,用辯證的思維看待事物;數(shù)據(jù)庫查詢項目模塊3

數(shù)據(jù)庫技術(shù)與應(yīng)用BYYUSHEN高校教學質(zhì)量分析管理系統(tǒng)數(shù)據(jù)庫db_teachingG-EDU格諾博教育公司開發(fā)“高校教學質(zhì)量分析管理系統(tǒng)”,應(yīng)能為學校的質(zhì)量督導部門、教師、學生提供對評學、評教以及教學相關(guān)基礎(chǔ)數(shù)據(jù)的查詢服務(wù),獲得查詢統(tǒng)計分析報表。根據(jù)學校用戶提供的限定條件與要求,系統(tǒng)通過MySQL的SELECT命令,從后臺數(shù)據(jù)庫中相應(yīng)的一個表或多個表中,運用連接、子查詢、排序、分組統(tǒng)計、聯(lián)合查詢等不同方式,提取有效數(shù)據(jù),并設(shè)置合理的視圖與索引方案,來簡化和優(yōu)化加速對數(shù)據(jù)的查詢統(tǒng)計分析。項目模塊情境數(shù)據(jù)庫查詢項目模塊3

數(shù)據(jù)庫技術(shù)與應(yīng)用BYYUSHEN01任務(wù)一單表數(shù)據(jù)查詢通過“高校教學質(zhì)量分析管理系統(tǒng)”,質(zhì)量管理處、教務(wù)處、各二級學院等教學相關(guān)部門以及教師本人,需通過查看某個學期(如2019-2020學年一)指定教師(如000010號教師)的同行及督導專家的教學評價評語、評分情況,作為對該教師教學質(zhì)量評判的指標參考之一,所需查詢的數(shù)據(jù)只源自教師教學評價表這一個表中。任務(wù)描述BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.1簡單基本SELECT查詢語句任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLESELECT[ALL|DISTINCT]*|列表達式

,...FROM表名[WHERE條件表達式

];查什么從哪查查啥樣

SELECT子句:投影列,即選擇查詢結(jié)果集中要輸出顯示的列字段或表達式,及輸出顯示的順序。在SELECT子句的查詢列表中,列字段的順序是可以改變的,無需按照數(shù)據(jù)表中定義的順序排列。FROM子句:指定表,即選擇查詢的數(shù)據(jù)源表。WHERE子句:選擇行,即選擇查詢的行記錄的條件。BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.2投影列任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLESELECT*FROM表名

[WHERE條件表達式

];1查詢表中所有列SELECT子句中,“*”代替數(shù)據(jù)表中的所有列,查詢結(jié)果集中輸出顯示順序與源表中列順序相同。查詢課程信息表tb_course中的所有課程信息mysql>

SELECT*FROMtb_course;BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.2投影列任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLESELECT列表達式1,列表達式2,…FROM表名

[WHERE條件表達式

];2查詢表中指定列SELECT子句中,指定要查詢的列,各列名之間用英文逗號隔開,指定各列的順序即顯示結(jié)果集列呈現(xiàn)的順序。查詢課程信息表tb_course中所有課程的課程號、課程名稱和學分。mysql>

SELECTCourse_no,Course,CreditFROMtb_course;BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.2投影列任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE3查詢表達式計算列SELECT子句中,指定要查詢顯示的計算表達式結(jié)果,各表達式之間用英文逗號隔開。查詢課程信息表tb_course中所有課程的課程號、課程名稱、學分若增加0.5分的結(jié)果、以及按16教學周計算課程所需的周課時數(shù)。mysql>

SELECTCourse_no,Course,credit+0.5,Class_hour/16FROMtb_course;BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.2投影列任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE4查詢顯示列別名默認情況下,查詢結(jié)果集中顯示的列名,就是SELECT子句指定的查詢列或表達式的名稱。如果希望查詢結(jié)果集中的列名稱顯示為自定義的列名稱時,可以在SELECT子句中自定義列或表達式的別名。查詢課程信息表tb_course中所有課程的課程號、課程名稱、學分若增加0.5分的結(jié)果、以及按16教學周計算課程所需的周課時數(shù)。表頭的學分和周課時數(shù)列名顯示為credit和weekclass_hour。mysql>

SELECTCourse_no,Course,Credit+0.5ASCredit,Class_hour/16AS‘Weekclass_hour’FROMtb_course;SELECT列表達式1AS列別名|列表達式2列別名,…FROM表名

[WHERE條件表達式

];BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.2投影列任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE4查詢顯示列別名SELECT子句中設(shè)置列別名,改變的只是查詢結(jié)果集所顯示的列標題,并沒有改變數(shù)據(jù)表中的列名。當自定義的列別名中含有空格時,必須用引號將列別名括起來。BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.2投影列任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE5查詢過濾重復(fù)值的列

SELECT子句中,可在指定的一個列名前使用DISTINCT關(guān)鍵詞,獲取該列去除了重復(fù)值的結(jié)果集。查詢課程表tb_course中,學校所開設(shè)的課程類型。mysql>

SELECTDISTINCTCategoryFROMtb_course;SELECTDISTINCT

列名FROM表名

[WHERE條件表達式

];使用DISTINC關(guān)鍵字過濾重復(fù)值的列只能指定一個。如果列值有多個為NULL,DISTINCT關(guān)鍵字會把這些NULL視為相同重復(fù)。BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.3選擇行任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE1查詢表中所有行

省略WHERE條件子句的SELECT查詢語句,默認查詢表中的所有數(shù)據(jù)行。查詢?nèi)藬?shù)在45~50人之間的班級信息。mysql>

SELECTClass_No,Class_Name,Per_QuantityFROMTB_Class

->

WHEREPer_QuantityBETWEEN45AND50;2查詢篩選滿足條件的行使用比較運算符、IN運算符、BETWEENAND運算符、LIKE運算符、REGEXP正則運算符、NOT、AND、OR運算符定義的條件表達式,在WHERE子句中表示篩選行記錄的條件。BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.3選擇行任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE查詢評學評教表tb_grade中,還未進行評教的學生的學號、課程編號及任課教師編號、評教分數(shù)信息。mysql>

SELECTStu_no,Course_no,Teacher_no,Teach_evalu_scoreFROMtb_grade->WHERETeach_evalu_scoreISNULL;3查詢含空值的行使用IS[NOT]NULL運算符,在WHERE子句中可篩選指定列值為(不為)空的行記錄。查詢教研室表tb_staffroom中,已安排了教研室主任人選的教研室。mysql>

SELECT*FROMtb_staffroomWHEREDirectorISNOTNULL;BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用3.1.4MySQL常用系統(tǒng)函數(shù)任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE1常用數(shù)值處理函數(shù)BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE查詢課程表tb_course中,所有公共基礎(chǔ)課的整數(shù)學分(四舍五入)mysql>SELECTCourse_No,Course,Category,ROUND(Credit,0)FROMtb_course

->WHERECategory='公共基礎(chǔ)課';3.1.4MySQL常用系統(tǒng)函數(shù)BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE2常用字符串處理函數(shù)3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE查詢督導專家表tb_expert中,所有姓“王”的督導專家信息。mysql>SELECT*FROMtb_expertWHEREExpert_NameLIKE'王%';或者:mysql>SELECT*FROMtb_expert->WHEREExpert_NameREGEXP'王*';或者:mysql>SELECT*FROMtb_expert->WHERELEFT(Expert_Name,1)='王';mysql>

SELECT*FROMtb_expert->WHERESUBSTRING(Expert_Name,1,1)='王;mysql>

SELECT*FROMtb_expert->WHEREINSTR(Expert_Name,'王')=1;mysql>SELECT*FROMtb_expert->WHERELOCATE('王',Expert_Name)=1;或者:或者:或者:3.1.4MySQL常用系統(tǒng)函數(shù)BYYUSHEN01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE3常用日期時間獲取函數(shù)3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE4日期加減函數(shù)3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE查詢教師表tb_teacher中,工齡未滿20年的教師的編號、姓名、工作年份。Mysql>SELECTTeacher_No,Teacher_Name,YEAR(Work_Date)FROMtb_teacher

->

WHEREYEAR(CURDATE())-YEAR(Work_Date)<20;或者:mysql>SELECTTeacher_No,Teacher_Name,YEAR(Work_Date)FROMtb_teacher

->WHEREEXTRACT(yearfromCURDATE())-EXTRACT(yearfromWork_Date)<20;mysql>SELECTTeacher_No,Teacher_Name,YEAR(Work_Date)FROMtb_teacher

->WHEREADDDATE(Work_Date,interval20year)>CURDATE();或者:或者:mysql>

SELECTTeacher_No,Teacher_Name,YEAR(Work_Date)FROMtb_teacher

->WHERESUBDATE(CURDATE(),interval20year)<Work_Date;3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE5數(shù)據(jù)類型轉(zhuǎn)換函數(shù)數(shù)據(jù)類型轉(zhuǎn)換函數(shù)功能示例運行結(jié)果CONVERT(x,轉(zhuǎn)換后的類型)將數(shù)據(jù)x轉(zhuǎn)換成指定類型CONVERT(410008,char(6))‘410008’CAST(xAS轉(zhuǎn)換后的類型)將數(shù)據(jù)x轉(zhuǎn)換成指定類型CAST(410008ASchar(6))‘410008’3.1.4MySQL常用系統(tǒng)函數(shù)查詢評學評教成績表tb_grade,得到大數(shù)據(jù)技術(shù)20級班級中(學號前8位‘20200403’),評學分數(shù)達到85分以上的評分信息的字符串報表。即輸出為:大數(shù)據(jù)技術(shù)20級班級XXXXXX號學生,XXXX號課程評學分數(shù):XXmysql>SELECTCONCAT('大數(shù)據(jù)技術(shù)20級班級',Stu_No,'號學生,',Course_No,'號課程評學分數(shù):',CONVERT(Score,char(5)))->FROMtb_grade

->WHEREscore>85andleft(Stu_No,8)='20200403';01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE6常用條件控制函數(shù)3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE查詢教師表tb_teacher中,副高以下職稱的教師的職稱與學歷,助教的職稱級別為初級,講師的職稱級別為中級。mysql>SELECTTeacher_NoAS教師號,Teacher_NameAS教師名,Positional_TitleAS職稱,

->

IF(Positional_Title='助教','初級','中級')AS職稱級別,Edu_Background學歷

->FROMtb_teacher

->WHEREPositional_TitleNOTLIKE'%教授%';或者:mysql>SELECTTeacher_NoAS教師號,Teacher_NameAS教師名,Positional_TitleAS職稱,

->

CASEPositional_Title

->

WHEN'助教'THEN'初級’

->WHEN'講師'THEN'中級’

->

END

AS職稱級別,

->Edu_Background學歷

->FROMtb_teacher

->WHEREPositional_TitleNOTLIKE'%教授%';3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE查詢教師教學評價表tb_teach_evaluation中,督導專家對教師教學質(zhì)量的評價等級,評分90分以上的“優(yōu)秀”,80~89分“良好”,60~79分“合格”,60分以下“不合格”。mysql>SELECTTeacher_NoAS教師號,Evalu_ScoreAS評分,

->

IF(Evalu_Score>=90,'優(yōu)秀',IF(Evalu_Score>=80,'良好’,IF(Evalu_Score>=60,'合格','不合格')))

->AS評價等級

->FROMtb_teach_evaluation

->WHEREAppraiser='督導專家';或者:mysql>mysql>SELECTTeacher_NoAS教師號,Evalu_ScoreAS評分,

->

CASE

->WHENEvalu_Score>=90THEN'優(yōu)秀'

->WHENEvalu_Score>=80THEN'良好'

->WHENEvalu_Score>=60THEN'合格'

->ELSE'不合格'

->ENDAS評價等級

->FROMtb_teach_evaluation

->WHEREAppraiser='督導專家';3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE7常用JSON操作函數(shù)3.1.4MySQL常用系統(tǒng)函數(shù)01

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)一單表數(shù)據(jù)查詢QUERYDATAINASINGLETABLE創(chuàng)建一個含JSON類型的數(shù)據(jù)表,并運用函數(shù)進行JSON字段操作。mysql>CREATETABLEtb_testjson(Idintprimarykeynotnull,D1varchar(50)null,D2jsonnull);mysql>INSERTINTOtb_testjson

->VALUES(1,'1','{"a":1,"a":"2"}');

mysql>INSERTINTOtb_testjson->VALUES(2,'2',JSON_OBJECT("a",1,"b","2"));

mysql>INSERTINTOtb_testjson->VALUES(3,'3',JSON_ARRAY("arr",1,2));

mysql>SELECT*FROMtb_testjson;生成JSON數(shù)組或JSON對象進行表數(shù)據(jù)添加:3.1.4MySQL常用系統(tǒng)函數(shù)合并兩個JSON進行表數(shù)據(jù)添加:mysql>INSERTINTOtb_testjson->VALUES(4,'4',JSON_MERGE_PRESERVE('{"a":4,

->"b":"4"}','{"c":4,"d":"4"}'));mysql>SELECT*FROMtb_testjson;mysql>SELECTJSON_EXTRACT(D2,'$.a')FROMtb_testjson;從D2字段中查詢提取a的值:BYYUSHEN任務(wù)二多表連接查詢學生、教師、質(zhì)量督導部門通過“高校教學質(zhì)量分析系統(tǒng)”,需查看指定學生在一學期中各科課程的評學考試成績、所獲績點,分析其學習情況,從而了解學習質(zhì)量和有助于學生制定提升進步的學習策略計劃。所需查詢的指定學生信息、該生所考的課程信息、成績與績點信息的數(shù)據(jù)分別源自學生表、課程表、評學評教成績表的多個表中。任務(wù)描述02BYYUSHEN

數(shù)據(jù)庫技術(shù)與應(yīng)用3.2.1連接查詢語句任務(wù)二多表連接查詢JOINQUERIESFORMULTIPLETABLES02JOIN子句:連接關(guān)鍵字,指定查詢數(shù)據(jù)源表中所連接的表。JOIN為內(nèi)連接類型時可省略INNER,外連接類型有LEFTOUTER和RIGHTOUTER兩種。ON連接表達式:通過兩表間的相關(guān)字段值相等,指定表間連接的關(guān)聯(lián)關(guān)系。CROSS交叉連接時無指定連接條件、無該子句。WHERE子句:選擇行,即選擇查詢的數(shù)據(jù)源表。SELECT[ALL|DISTINCT]*|列表達式

,...FROM表名1[表別名1][INNER|[LEFT|RIGHT]OUTER|CROSS]JOIN表名2[表別名2]

[ON表名1.關(guān)聯(lián)列=表名2.關(guān)聯(lián)列]...[WHERE條件表達式];查什么從哪查如何連接哪個表連接條件

查啥樣

數(shù)據(jù)庫技術(shù)與應(yīng)用3.2.2內(nèi)連接查詢?nèi)蝿?wù)二多表連接查詢JOINQUERIESFORMULTIPLETABLES02

內(nèi)連接(INNERJOIN)是多表查詢最常用的連接方式,也是MySQL系統(tǒng)默認的多表連接方式,

因此INNER關(guān)鍵字可以省略。內(nèi)連接通過ON或WHERE中指定的表間連接條件,比較兩個表中公共字段的值,

通常比較主表的主鍵與從表的外鍵的字段值,只有比較值滿足連接條件的作為匹配行返回結(jié)果集。查詢軟件學院所開設(shè)的專業(yè)情況,查詢輸出學院名稱、學院編號、專業(yè)名稱、專業(yè)編號。mysql>SELECTDepartment,tb_department.Dep_No,Profession,Profession_No

->

FROMtb_departmentJOINtb_profession

->ONtb_department.Dep_No=tb_profession.Dep_No

->WHEREDepartment='軟件學院';

數(shù)據(jù)庫技術(shù)與應(yīng)用3.2.2內(nèi)連接查詢

在連接查詢時,如果要用到的字段是主表和從表中都共有的同名字段,則必須在這樣的共有同名字段的名前加上表名進行區(qū)分,用“表名.字段名”來表示。如果表名太長,可以在FROM和JOIN關(guān)鍵字的表名后,為表名定義一個簡短的別名,這樣在連接查詢語句中,公共字段前的表名標識可用簡短的別名代替。當連接條件為比較運算符“=”比較兩表的公共字段值時,為“等值連接”。等值連接所比較的兩表公共字段的名稱與類型都完全相同時,還可以使用“USING(字段名)”子句取代ON子句來連接。任務(wù)二多表連接查詢JOINQUERIESFORMULTIPLETABLES02mysql>SELECT

Department,d.Dep_No,Profession,Profession_No

->

FROMtb_departmentd

JOINtb_professionp

->

ONd.Dep_No=p.Dep_No

->WHEREDepartment='軟件學院';mysql>SELECTDepartment,d.Dep_No,Profession,Profession_No

->FROMtb_departmentdJOINtb_professionpUSING(Dep_No)

->WHEREDepartment='軟件學院';

數(shù)據(jù)庫技術(shù)與應(yīng)用3.2.2內(nèi)連接查詢?nèi)蝿?wù)二多表連接查詢JOINQUERIESFORMULTIPLETABLES02在多個表進行連接查詢時,可以兩兩表間依次JOIN并ON指定連接條件。內(nèi)連接還有一種特殊情況:將一個表與其自身進行連接,即連接的兩個表是同一個表,稱為“自連接”。它是指相互連接的表在物理上為同一個表,但邏輯上分為兩個表,所以使用自連接時,需要為該表指定兩個別名,并對所有字段列的引用均要前面標識表別名。若要在一個表中查找具有相同字段列值的行數(shù)據(jù),可以使用自連接。mysql>SELECTDepartment,d.Dep_No,Profession,Profession_No

->FROMtb_departmentd,tb_professionp

->WHEREDepartment='軟件學院'ANDd.Dep_No=p.Dep_No;

數(shù)據(jù)庫技術(shù)與應(yīng)用3.2.3外連接查詢?nèi)蝿?wù)二多表連接查詢JOINQUERIESFORMULTIPLETABLES02

外連接(OUTERJOIN)方式下,可以只限制一個表,對另一個表不加限制,使另一個表中的所有行都會顯示在結(jié)果集中。

外連接含左外連接(LEFTOUTERJOIN)、右外連接(RIGHTOUTERJOIN),左右是相對JOIN關(guān)鍵詞的左表

和右表而言,其中OUTER關(guān)鍵字可以省略。查詢大數(shù)據(jù)技術(shù)2020級及以后的各班學生的課程評學考試成績,包括剛?cè)雽W還沒考試過的學生。mysql>SELECTs.Stu_No,Stu_Name,g.Course_No,Score

->

FROMtb_studentsLEFTJOINtb_gradegONs.Stu_No=g.Stu_No

->WHEREs.Stu_NoREGEXP'202[0-9]0403';mysql>SELECTs.Stu_No,Stu_Name,g.Course_No,Score

->

FROMtb_gradegRIGHTJOINtb_students

ONs.Stu_No=g.Stu_No

->WHEREs.Stu_NoREGEXP'202[0-9]0403';

數(shù)據(jù)庫技術(shù)與應(yīng)用3.2.4交叉連接任務(wù)二多表連接查詢JOINQUERIESFORMULTIPLETABLES02

交叉連接(CROSSJOIN)是在沒有ON或WHERE指定兩表間連接條件的情況下,會把一個表的所有行與另一個表

的所有行一一連接組合,構(gòu)成兩個表中所有數(shù)據(jù)記錄行的笛卡爾積,即結(jié)果集的記錄行數(shù)會是這兩個表記錄行數(shù)的乘積M×N查詢每個二級學院可能開設(shè)的公共基礎(chǔ)課程情況,即各二級學院名稱、公共基礎(chǔ)課程的課程號、課程名、課程類型。mysql>SELECTDepartment,Course_No,Course,Category

->FROMtb_departmentCROSSJOINtb_course

->WHERECategory='公共基礎(chǔ)課';mysql>SELECTDepartment,Course_No,Course,Category

->FROMtb_department,tb_course

->WHERECategory='公共基礎(chǔ)課';交叉連接產(chǎn)生笛卡爾積的結(jié)果集,在規(guī)范化

的數(shù)據(jù)庫中并無太多應(yīng)用價值。

因為沒有指定表間連接條件,所以結(jié)果集會出現(xiàn)兩表中并不匹配的無意義的連接行。BYYUSHEN任務(wù)三排序與限行“高校教學質(zhì)量分析系統(tǒng)”中,無論教師、學生、專業(yè)、課程等教學基礎(chǔ)數(shù)據(jù),還是各學期的評學與評教等教學質(zhì)量數(shù)據(jù),數(shù)據(jù)量都很大,經(jīng)常需要在查詢查看數(shù)據(jù)時進行排序,使關(guān)心的數(shù)據(jù)顯示到最前面,方便進一步分析,還需通過對操作的數(shù)據(jù)進行限量的方式提高執(zhí)行效率。學校教學質(zhì)量督導部門和教務(wù)處在學期末,要對督導專家評分最高的前三位老師進行評優(yōu),對指定課程評學考試成績最高的前五位同學評定該門課程的學習標兵,成績最低的的五位同學提出對該門課程學習的幫助,需對相關(guān)數(shù)據(jù)記錄實行排序和限行操作。任務(wù)描述03BYYUSHEN03

數(shù)據(jù)庫技術(shù)與應(yīng)用3.3.1ORDERBY排序子句任務(wù)三排序與限行查詢SORTANDLIMITEDQUERIESQUERYDATAINASINGLETABLEORDERBY列名1|表達式1|列編號[ASC|DESC][,...n]ORDERBY:可以按多個關(guān)鍵字進行排序,多關(guān)鍵字之間英文逗號分隔。

查詢結(jié)果會首先按照第一個關(guān)鍵字的值排序,對第一個關(guān)鍵字值相同的數(shù)據(jù)行,再按第二個關(guān)鍵字

的值排序,依次類推。在SELECT子句的查詢列表中,列字段的順序是可以改變的,無需按照數(shù)據(jù)表

中定義的順序排列。ASC:升序排列(也是默認排序順序)。含NULL空值的記錄行將最后顯示。DESC:降序排列。含NULL空值的記錄行將最先顯示。ORDERBY子句要寫在WHERE子句后面。03

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)三排序與限行查詢SORTANDLIMITEDQUERIESQUERYDATAINASINGLETABLE查詢軟件學院(學院編號0004)所有班級人數(shù),按人數(shù)升序排列輸出。3.3.1ORDERBY排序子句mysql>

SELECT*FROMtb_class

->WHERESUBSTRING(Class_No,5,2)=‘04’->ORDERBYPer_Quantity

;查詢指定課程Python程序設(shè)計(課程編號900011)的所有考試成績,按分數(shù)從高到低輸出,若有同分的記錄,則按考試學期時間從早到晚排列。

mysql>SELECTg.Stu_No,Stu_Name,g.Course_No,Course,

->Score,GPA,g.Test_Term

->FROMtb_coursecJOINtb_gradeg

->ONc.Course_No=g.Course_No

->JOINtb_studentsONg.Stu_No=s.Stu_No

->WHERECourse='Python程序設(shè)計'

->ORDERBYScoreDESC,Test_Term;03

數(shù)據(jù)庫技術(shù)與應(yīng)用3.3.2LIMIT限行子句任務(wù)三排序與限行查詢SORTANDLIMITEDQUERIESQUERYDATAINASINGLETABLELIMIT[偏移量n,]

記錄數(shù);

SELECT語句中可以使用LIMIT子句來限定查詢輸出的記錄數(shù)量,指定查詢結(jié)果集是從哪一條記錄開始、及查詢多少行記錄。偏移量:設(shè)置從查詢結(jié)果的哪條記錄開始。默認第1條記錄的偏移量為0,第2條記錄的偏移量為1,依此類推。記錄數(shù):表示限定查詢返回的最大記錄數(shù)量。當限定的記錄數(shù)大于數(shù)據(jù)表中符合要求的實際記錄數(shù)量時,以實際記錄數(shù)為準。。LIMIT子句中只限定了記錄數(shù)、沒有指定偏移量時,默認表示從查詢結(jié)果的第1條記錄開始、返回限定數(shù)量的數(shù)據(jù)記錄。LIMIT子句也可與ORDERBY子句連用,要寫在WHERE子句、ORDERBY子句后面。03

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)三排序與限行查詢SORTANDLIMITEDQUERIESQUERYDATAINASINGLETABLE查詢顯示班級開課安排表tb_class_course的前3個班級排課情況。mysql>

SELECT*FROMtb_class_courseLIMIT33.3.2LIMIT限行子句查詢顯示第10-20行的學生記錄的學號、姓名、登錄名與登錄密碼。mysql>

SELECTStu_No,Stu_Name,Stu_Login_Name,stu_PasswordFROMtb_studentLIMIT9,11;03

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)三排序與限行查詢SORTANDLIMITEDQUERIESQUERYDATAINASINGLETABLE將指定課程(如900011Python程序設(shè)計)考分最低的5位同學的成績增加3分。mysql>

UPDATEtb_gradeSETScore=Score+3WHERECourse_No='900011’

->ORDERBYScoreLIMIT5;3.3.2LIMIT限行子句刪除最后錄入的5條評學成績記錄。。mysql>

DELETEFROMtb_gradeORDERBYidDESCLIMIT5;

在MySQL中,除了對SELECT查詢記錄時進行排序和限量外,對數(shù)據(jù)表中記錄的UPDATE更新和DELETE刪除操作也可以進行排序和限量。表示根據(jù)指定字段按順序進行更新或刪除符合條件的限定數(shù)量條記錄。如果UPDATE和DELETE操作中沒有Where條件,Limit子句可用來直接限制更新和刪除的記錄數(shù)量BYYUSHEN任務(wù)四分組統(tǒng)計與分析查詢在學期終,教學督導部門、教務(wù)處需通過高校教學質(zhì)量管理系統(tǒng)的數(shù)據(jù)統(tǒng)計,獲得學生、教師、班級、專業(yè)、院系等不同范圍的評學評教評分統(tǒng)計報表結(jié)果等。比如按學期對各學生的平均評學成績與績點匯總的報表查詢,對各專業(yè)或?qū)W院的評學成績均分統(tǒng)計報表查詢,等等,實現(xiàn)一學期中對學生學習質(zhì)量的多層級評估。任務(wù)描述04BYYUSHEN

數(shù)據(jù)庫技術(shù)與應(yīng)用3.4.1聚合函數(shù)任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04聚合函數(shù)在統(tǒng)計參數(shù)字段值時,默認忽略NULL值;COUNT(*)統(tǒng)計所有記錄行數(shù)(包含NULL值行)。DISTINCT:去除參數(shù)字段值中的重復(fù)值后,再聚合運算。ALL:默認為ALL,表示對所有非空值進行聚合運算。聚合函數(shù)對于用列的一組值進行計算,然后返回單個值。

數(shù)據(jù)庫技術(shù)與應(yīng)用3.4.1聚合函數(shù)任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04根據(jù)tb_grade評學評教成績表的數(shù)據(jù),查詢檢索所有參加了考試評學的學生人數(shù)、考查課的成績數(shù)量、已考課程的門數(shù)、評學總分與平均分。mysql>SELECTCOUNT(*),COUNT(Mark),COUNT(DISTINCTCourse_No),SUM(Score),AVG(Score)

->FROMtb_grade;

數(shù)據(jù)庫技術(shù)與應(yīng)用3.4.2GROUPBY與HAVING子句任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04SELECT

[

ALL

|

DISTINCT

]

分組列表達式,...,聚合函數(shù)統(tǒng)計表達式,...FROM表名1

[

表別名1

][,...][

WHERE條件表達式]GROUPBY分組依據(jù)列1[,...][WITHROLLUP][HAVING條件表達式];GROUPBY:按指定列字段的值進行分組,列字段值相同的作為一組??砂炊鄠€列字段進行分組,多個分組關(guān)鍵字段間英文逗號(,)分隔。WITHROLLUP:使分組統(tǒng)計結(jié)果集中不僅包含GROUPBY分組的行,還包含匯總行。

HAVING:對分組統(tǒng)計后的數(shù)據(jù)記錄集,再進行過濾篩選

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04查詢統(tǒng)計學生信息表tb_student中男生和女生的人數(shù)mysql>SELECTGender,COUNT(Gender)FROMtb_studentGROUPBYGender;GROUPBY子句帶上WITHROLLUP參數(shù)可以輸出分組的匯總值。如果查詢統(tǒng)計學生信息表tb_student中男生和女生的人數(shù)和總?cè)藬?shù):mysql>SELECTGender,COUNT(Gender)FROMtb_studentGROUPBYGenderWITHROLLUP;3.4.2GROUPBY與HAVING子句

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04WHERE子句的篩選條件中不能包含聚合函數(shù)。WHERE只能對分組前的指定表中的記錄進行篩選,所以WHERE子句跟在FROM子句之后、在GROUPBY子句之前。要篩選含聚合函數(shù)的條件,只能通過WHERE子查詢或GROUPBY的HAVING子句。HAVING子句是對分組后的結(jié)果記錄集進行篩選,所以HAVING子句可以使用聚合函數(shù)篩選條件,并只能跟GROUPBY子句一起使用,寫在GROUPBY子句之后。SELECT分組統(tǒng)計查詢各子句執(zhí)行順序是:

①執(zhí)行WHERE子句,從數(shù)據(jù)表中選取滿足條件的數(shù)據(jù)行;

②執(zhí)行GROUPBY子句,對選取的數(shù)據(jù)行、按指定列字段的值進行分組;

③執(zhí)行SELECT子句中的聚合函數(shù),對每組數(shù)據(jù)按指定聚合要求進行統(tǒng)計;

④執(zhí)行HAVING子句,對分組統(tǒng)計后的數(shù)據(jù)行再按指定條件篩選出結(jié)果集數(shù)據(jù)。3.4.2GROUPBY與HAVING子句

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04對2019-2020學年第一學期,查詢軟件技術(shù)專業(yè)符合申報學校一等獎學金的學生的學號、姓名、評學考試分數(shù)及績點情況。(申報學校一等獎學金應(yīng)符合評學考試平均績點達4.0、單科分數(shù)不低于80分)。mysql>SELECTg.Stu_No,Stu_Name,MIN(Score),AVG(GPA)

->FROMtb_gradegJOINtb_studentsONg.Stu_No=s.Stu_No

->WHERETest_Term='2019-2020學年一'ANDSUBSTRING(g.Stu_No,5,2)='04'

->GROUPBYg.Stu_No,Stu_Name

->HAVINGAVG(GPA)>=4.0ANDMIN(Score)>=80;3.4.2GROUPBY與HAVING子句

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04查詢統(tǒng)計2019級-2021級各專業(yè)開設(shè)的班級數(shù)量,其中總?cè)藬?shù)超過100的專業(yè)。mysql>SELECTProfession_No,GROUP_CONCAT(Class_Name),COUNT(Class_No),SUM(Per_Quantity)

->FROMtb_class

->WHERELEFT(Class_No,4)BETWEEN2019AND2021

->GROUPBYProfession_No

->HAVINGSUM(Per_Quantity)>100;GROUP_CONCAT([DISTINCT]非分組統(tǒng)計列[ORDERBY列名][SEPARATOR'分隔符’]);SELECT子句中如果有非分組和統(tǒng)計的字段,默認是只輸出其在一組中的第一個值,若需要輸出該列在一組中包含的所有值,可通過

GROUP_CONCAT(

)

函數(shù)實現(xiàn)同一分組中指定列的各值、按指定分隔符連接全部輸出。GROUP_CONCAT()函數(shù)必須和GROUPBY子句一起使用。3.4.2GROUPBY與HAVING子句

數(shù)據(jù)庫技術(shù)與應(yīng)用3.4.3使用窗口函數(shù)查詢?nèi)蝿?wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY041窗口函數(shù)窗口函數(shù)OVER([PARTITIONBY分組字段][ORDERBY排序字段[ASC|DESC])[[AS]別名]MySQL從8.0版本開始支持窗口函數(shù),也稱OLAP函數(shù)(OnlineAnalyticalProcessing,聯(lián)機分析處理),可對數(shù)據(jù)進行實時分析處理:OVER:指定函數(shù)執(zhí)行的窗口范圍。若省略O(shè)VER后面括號中的內(nèi)容,窗口會包含滿足WHERE條件的所有行,窗口函數(shù)會基于所有滿足WHERE條件的記錄進行計算。PARTITIONBY子句:指定窗口函數(shù)按照哪些字段進行分組,分組后,窗口函數(shù)可以在每個分組中分別執(zhí)行。ORDERBY子句:指定窗口函數(shù)按照哪些字段進行排序,執(zhí)行排序操作使窗口函數(shù)按照排序后的數(shù)據(jù)記錄的順序進行編號。

數(shù)據(jù)庫技術(shù)與應(yīng)用3.4.3使用窗口函數(shù)查詢?nèi)蝿?wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04122常用窗口函數(shù)分類

數(shù)據(jù)庫技術(shù)與應(yīng)用3窗口函數(shù)使用查詢班級信息表,對軟件學院(專業(yè)編號前兩位04)班級,按專業(yè)分析各專業(yè)的累積人數(shù),累積人數(shù)統(tǒng)計列列名Ac_Per。查看班級名稱、專業(yè)編號、人數(shù)及對應(yīng)專業(yè)班級累計人數(shù)。。mysql>

SELECTClass_Name,Profession_No,Per_Quantity,

->SUM(Per_Quantity)OVER(PARTITIONBYProfession_NoORDERBYClass_Name)ASAc_Per

->FROMtb_class

->WHERELEFT(Profession_No,2)='04';3.4.3使用窗口函數(shù)查詢?nèi)蝿?wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04

數(shù)據(jù)庫技術(shù)與應(yīng)用3.4.3使用窗口函數(shù)查詢?nèi)蝿?wù)四分組統(tǒng)計與分析查詢GROUPSTATISTICSANDANALYSISQUERY04窗口函數(shù)和普通聚合函數(shù)的區(qū)別:

普通聚合函數(shù)是將多條記錄聚合為一條;

窗口函數(shù)則是每條記錄都會執(zhí)行,有幾條記錄執(zhí)行完還是幾條。

窗口函數(shù)和GROUPBY在查詢中對數(shù)據(jù)進行分組有類似之處,其區(qū)別在于:

窗口函數(shù)會對每個分組之后的數(shù)據(jù)進行分別操作,也就是將分組的結(jié)果置于每一條數(shù)據(jù)記錄中;

GROUPBY只對分組之后數(shù)據(jù)使用聚集函數(shù)匯總,會把分組的結(jié)果聚合成一條記錄。窗口函數(shù)適用場景:對分組統(tǒng)計結(jié)果中的每一條記錄都進行計算的場景下,使用窗口函數(shù)更好。

(因為MySQL的普通聚合函數(shù)的GROUPBY分組統(tǒng)計結(jié)果是每一組只有一條記錄。)

BYYUSHEN任務(wù)五子查詢在學期末,教學督導部門、教務(wù)處需通過高校教學質(zhì)量管理系統(tǒng)的評學評教數(shù)據(jù),獲得各位教師的學生評教、同行與督導專家評價及評分匯總的查詢報表,還可對學院分專業(yè)教研室查看各位教師的評教質(zhì)量數(shù)據(jù),等等,實現(xiàn)一學期中對教師教學質(zhì)量的多層級評估。任務(wù)描述05BYYUSHEN05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.1比較子查詢?nèi)蝿?wù)五子查詢THESUBQUERY1單值返回比較子查詢查詢與秦奮老師在同一教研室的所有教師的編號、姓名、所在教研室編號和職稱信息。mysql>SELECTTeacher_No,Teacher_Name,Staff_No,Positional_TitleFROMtb_teacher->WHEREStaff_No=

(SELECTStaff_NoFROMtb_teacherWHERETeacher_Name='秦奮');當子查詢的結(jié)果返回只有單個值時,可以用=、<>、>、>=、<、<=等大小相等比較運算符,判斷外層數(shù)據(jù)操作的篩選條件所比較的某個列值是否與子查詢結(jié)果值滿足大小或相等關(guān)系。嵌套比較子查詢的執(zhí)行順序是“先內(nèi)后外”,即先執(zhí)行最內(nèi)層的子查詢,再將內(nèi)查詢的結(jié)果作為上一級外層查詢的篩選條件值來執(zhí)行外查詢。子查詢可嵌套更深一級的子查詢,最多可嵌套32層。05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.1比較子查詢?nèi)蝿?wù)五子查詢THESUBQUERY查詢何方同學的網(wǎng)頁設(shè)計課程的評學成績,查看該生學號、課程號、評學分數(shù)或等級。mysql>SELECTStu_No,Course_No,Score,MarkFROMtb_grade

->WHEREStu_No=

(SELECTStu_NoFROMtb_studentWHEREStu_Name='何方')->ANDCourse_No=

(SELECTCourse_NoFROMtb_courseWHERECourse='網(wǎng)頁設(shè)計');對比:如果查詢何方同學的網(wǎng)頁設(shè)計課程的評學成績,需查看到該生的學號、姓名、課程號、課程名及評學分數(shù)或等級。

比較總結(jié)數(shù)據(jù)查詢命令方式有何不同。

mysql>SELECTg.Stu_No,Stu_Name,g.Course_No,Course,Score,Mark->

FROMtb_studentsJOINtb_gradegONs.Stu_No=g.Stu_No->JOINtb_coursecONg.Course_No=c.Course_No->WHEREStu_Name='何方'ANDCourse='網(wǎng)頁設(shè)計';05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.1比較子查詢?nèi)蝿?wù)五子查詢THESUBQUERY子查詢與連接查詢在很多情況下可以互換,兩者區(qū)別和互換原則:外查詢要輸出的結(jié)果集中,包含字段來自多個表,用連接查詢;外查詢要輸出的結(jié)果集中,包含字段只來自一個表,但其WHERE子句篩選條件

涉及另一個表時,常用子查詢。

幾乎所有連接查詢中使用JOIN運算符的查詢部分都可以寫成子查詢,

但連接查詢的效率高于子查詢。

05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.1比較子查詢?nèi)蝿?wù)五子查詢THESUBQUERY2多值返回比較子查詢WHERE表達式[NOT]IN(子查詢)當子查詢的結(jié)果返回為批量多個值時,可以用IN、ANY、ALL、SOME等批量比較運算符,判斷外層數(shù)據(jù)操作的篩選條件所比較的某個列值是否在子查詢的結(jié)果集中。WHERE表達式比較運算符

[ANY|SOME|ALL](子查詢)IN:表達式只要與子查詢的結(jié)果集中有某個值相等時,即滿足條件。ANY和SOME是同義詞:表達式只要與子查詢的結(jié)果集中有某個值滿足比較關(guān)系時,即滿足條件。ALL:表達式要與子查詢結(jié)果集中每個值都滿足比較關(guān)系時,才滿足條件。

05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.1比較子查詢?nèi)蝿?wù)五子查詢THESUBQUERY查詢"軟件技術(shù)2031"班所開設(shè)的課程信息,查看所開課程的編號,課程名,學時數(shù),學分。mysql>SELECTCourse_No,Course,Class_Hour,CreditFROMtb_course

->WHERECourse_NoIN(SELECTCourse_NoFROMtb_class_course

->WHEREClass_No=(SELECTClass_NoFROMtb_class

->

WHEREClass_Name='軟件技術(shù)2031'));或者:mysql>

SELECTCourse_No,Course,Class_Hour,CreditFROMtb_course

->WHERECourse_No=ANY(SELECTCourse_NoFROMtb_class_course

->WHEREClass_No=(SELECTClass_NoFROMtb_class

->WHEREClass_Name='軟件技術(shù)2031'))

;05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.2EXISTS相關(guān)(存在)子查詢?nèi)蝿?wù)五子查詢THESUBQUERYWHERE

[NOT]

EXISTS(子查詢)EXISTS表示存在,帶EXISTS關(guān)鍵字的子查詢不返回任何實際數(shù)據(jù),僅返回一個邏輯值,作為外層查詢WHERE篩選條件的結(jié)果。由于帶EXISTS關(guān)鍵字的子查詢不需要返回實際數(shù)據(jù),所以這種子查詢的SELECT子句中結(jié)果列表達式用“*”,因為給出列名并沒有意義。帶EXISTS關(guān)鍵字的子查詢的WHERE條件,要依賴于外層查詢中的某個列值,因此也被稱為

“相關(guān)子查詢”。EXISTS相關(guān)存在子查詢的執(zhí)行過程是“反復(fù)逐行,先外后內(nèi)”。

05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.2EXISTS相關(guān)(存在)子查詢?nèi)蝿?wù)五子查詢THESUBQUERY查詢同行教師和督導專家對郭瑞老師的所有評教評語、評分以及進行評價的學期。mysql>SELECTTeacher_No,Evalu_Score,Evalu_Comment,Evalu_TermFROMtb_teach_evaluation

->WHEREEXISTS(SELECT*FROMtb_teacherWHERETeacher_Name='郭瑞'

->ANDtb_teacher.Teacher_No=tb_teach_evaluation.Teacher_No);比較子查詢的SELECT子句列字段,與外查詢WHERE篩選條件的比較字段對應(yīng),

EXISTS相關(guān)子查詢的SELECT子句列字段為*,外查詢的WHERE篩選條件為判斷子查詢結(jié)果集是否EXISTS。比較子查詢只執(zhí)行一次,EXISTS相關(guān)子查詢要反復(fù)執(zhí)行多次。比較子查詢先內(nèi)后外執(zhí)行,EXISTS相關(guān)子查詢先外后內(nèi)執(zhí)行。05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.3派生表子查詢?nèi)蝿?wù)五子查詢THESUBQUERY查詢年齡在45歲以下的青年教師的編號、姓名、年齡、職稱信息。mysql>SELECT*->FROM(SELECTTeacher_No,Teacher_Name,YEAR(curdate())-YEAR(Birthday)Age,

->Positional_TitleFROMtb_teacher)tt->WHEREAge<=45;當FROM數(shù)據(jù)源是子查詢時,子查詢結(jié)果集視作派生表,是張?zhí)摂M表,并且必須為其設(shè)置一個別名,在SELECT查詢語句中使用別名來引用派生表?;蛘撸簃ysql>SELECTTeacher_No,Teacher_Name,YEAR(curdate())-YEAR(Birthday)Age,->Positional_Title->FROMtb_teacher->WHEREYEAR(curdate())-YEAR(Birthday)<=45;05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.3派生表子查詢?nèi)蝿?wù)五子查詢THESUBQUERY查詢在督導專家和同行教師的不同評教人員,所給予評價最高分的教師的編號與評分。mysql>SELECTa.Appraiser,a.Teacher_No,a.Evalu_Score->FROMtb_teach_evaluationa,(SELECTAppraiser,MAX(Evalu_Score)MaxScore->FROMtb_teach_evaluationGROUPBYAppraiser)b->WHEREa.Appraiser=b.AppraiserANDa.Evalu_Score=b.MaxScore;05

數(shù)據(jù)庫技術(shù)與應(yīng)用3.5.4

利用子查詢添加、修改、刪除表數(shù)據(jù)任務(wù)五子查詢THESUBQUERYINSERT[INTO]表名[(列名1,列名2,...)]SELECT列表達式1,列表達式2,...FROM表名1[表別名1][INNER|OUTER|CROSS][JOIN][,]表名2[表別名2]...[ON表名1.關(guān)聯(lián)列=表名2.關(guān)聯(lián)列]...[WHERE條件表達式];INSERT語句中的SELECT子查詢,可用于將子查詢結(jié)果集添加到指定表中,即同時插入多行數(shù)據(jù)、實現(xiàn)表復(fù)制,比使用多個單行的INSERT語句效率要高。子查詢SLELECT語句與單表查詢、多表查詢中SQL語法格式相同。INSERT目標表中列順序、類型及數(shù)量,要與SELECT子查詢結(jié)果集中相應(yīng)列順序、類型及數(shù)量必須一致。1子查詢用于添加表數(shù)據(jù)05

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)五子查詢THESUBQUERY創(chuàng)建退休教師信息表tb_retiree,將每年數(shù)據(jù)審核時達到退休年齡60歲的教師記錄添加到tb_retiree表中。##創(chuàng)建退休教師信息表tb_retiree,其表結(jié)構(gòu)與教師表tb_teacher相同mysql>CREATETABLEtb_retireeLIKEtb_teacher;QueryOK,0rowsaffected(0.05sec)##將達到退休年齡60歲的教師記錄添加入tb_retiree表mysql>INSERTINTOtb_retiree

->SELECT*FROMtb_teacherWHEREDATE_SUB(curdate(),INTERVAL60YEAR)>=Birthday;QueryOK,2rowsaffected(0.02sec)3.5.4利用子查詢添加、修改、刪除表數(shù)據(jù)05

數(shù)據(jù)庫技術(shù)與應(yīng)用任務(wù)五子查詢THESUBQUERY將所有評學分在90分以下的少數(shù)民族學生的評學分數(shù)都增加5分。mysql>UPDATEtb_grade->SETScore=Score+5->WHEREStu_NoIN(SELECTStu_NoFROMtb_studentWHERENation<>'漢族')

ANDScore<90;3.5.4利用子查詢添加、修改、刪除表數(shù)據(jù)2子查詢用于修改表數(shù)據(jù)在教師表中為每位老師設(shè)置一列教學質(zhì)量均分Quality_Score,統(tǒng)計教師教學評價表tb_teach_evaluation中督導專家和同行對各位老師評價均分,更新教師表對應(yīng)老師的教學質(zhì)量均分。##在教師表表中設(shè)置一列quality_score,與教師教學評價表中Evalu_Score列字段類型相同mysql>ALTERTABLEtb_teacherADDCOLUMNQuality_ScoreDECIMAL(4,1);##統(tǒng)計督導專家和同行對各位老師的評價均分,更新教師表中對應(yīng)老師的教學質(zhì)量均分mysql>UPDATEtb_teacher

SETQuality_Score=(SELECTAVG(Evalu_Score)FROMtb_teach_evaluationWHEREtb_teacher.Teacher_No=tb_teach_evaluation.Teacher_NoGROUPBYTeacher_N

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論