MySQL數(shù)據(jù)庫 課件匯 姜云橋 任務(wù)3.5 連接查詢 - 5.2 備份與恢復(fù)的應(yīng)用_第1頁
MySQL數(shù)據(jù)庫 課件匯 姜云橋 任務(wù)3.5 連接查詢 - 5.2 備份與恢復(fù)的應(yīng)用_第2頁
MySQL數(shù)據(jù)庫 課件匯 姜云橋 任務(wù)3.5 連接查詢 - 5.2 備份與恢復(fù)的應(yīng)用_第3頁
MySQL數(shù)據(jù)庫 課件匯 姜云橋 任務(wù)3.5 連接查詢 - 5.2 備份與恢復(fù)的應(yīng)用_第4頁
MySQL數(shù)據(jù)庫 課件匯 姜云橋 任務(wù)3.5 連接查詢 - 5.2 備份與恢復(fù)的應(yīng)用_第5頁
已閱讀5頁,還剩281頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

主講教師:姜云橋任務(wù)3.5連接查詢子項(xiàng)目3數(shù)據(jù)庫的查詢開發(fā)任務(wù)目標(biāo)1.能利用內(nèi)連接完成多表數(shù)據(jù)的查詢2.能利用左外連接完成多表數(shù)據(jù)的查詢3.能利用右外連接完成多表數(shù)據(jù)的查詢4.能利用自連接完成數(shù)據(jù)的查詢知識(shí)目標(biāo)1.掌握內(nèi)連接innerjoin的語法2.掌握左外連接LEFTjoin的語法3.掌握右外連接RIGHTjoin的語法4.掌握自連接的語法能力目標(biāo)任務(wù)要求利用數(shù)據(jù)庫jxgl中的student(學(xué)生信息表)、course(課程表)、score(成績(jī)表)、department(院系單位表)、teacher(教師表)和teach(講授表)6張完成內(nèi)連接的各種查詢,左外連接的各種查詢,右外連接的各種查詢以及自連接的查詢。任務(wù)必備知識(shí)想一想如何進(jìn)行連接查詢?任務(wù)必備知識(shí)3.5.1內(nèi)連接內(nèi)連接用于返回兩個(gè)表中滿足連接條件的數(shù)據(jù),使用關(guān)鍵字innerjoin表示,也可以簡(jiǎn)寫成join,其語法格式如下所示:fromtable_1innerjointable_2oncondition_1innerjointable_3oncondition_2...innerjointable_noncondition_n任務(wù)必備知識(shí)3.5.1內(nèi)連接【任務(wù)3.5.1】查詢”李軍”各科成績(jī)mysql>selectst.s_name,sc.c_no,sc.mark->fromstudentstjoinscoresconst.s_no=sc.s_no->wherest.s_name='李軍';任務(wù)必備知識(shí)3.5.1內(nèi)連接【任務(wù)3.5.2】查詢每位同學(xué)的姓名、最高分、最低分、平均分mysql>selectst.s_name,max(sc.mark),min(sc.mark),avg(sc.mark)->fromstudentstjoinscoresconst.s_no=sc.s_no->groupbyst.s_name;任務(wù)必備知識(shí)3.5.1內(nèi)連接【任務(wù)3.5.3】查詢平均成績(jī)大于等于75分的同學(xué)的姓名、學(xué)號(hào)和平均成績(jī)(保留一位小數(shù))mysql>selectst.s_name,st.s_no,round(avg(sc.mark),1)as'平均成績(jī)'->fromstudentstjoinscoresconst.s_no=sc.s_no->groupbyst.s_no->havingavg(sc.mark)>=75;任務(wù)必備知識(shí)3.5.1內(nèi)連接【任務(wù)3.5.4】查詢同時(shí)學(xué)過課程”A001”和”A002”學(xué)生的基本信息mysql>selectst.s_no,st.s_name,st.s_sex,st.s_birth,st.d_no,st.s_address,st.s_phone->fromstudentstjoinscoresconst.s_no=sc.s_no->groupbyst.s_no->havingsum(if(sc.c_noin('A001','A002'),1,0))>1;任務(wù)必備知識(shí)3.5.1內(nèi)連接【任務(wù)3.5.5】查詢”吳“姓同學(xué)課程的成績(jī),顯示姓名,課程名,成績(jī)mysql>selectst.s_name,c.c_name,sc.mark->fromstudentstjoinscoresconst.s_no=sc.s_no->joincourseconc.c_no=sc.c_no->wherest.s_namelike'吳%';任務(wù)必備知識(shí)3.5.2左外連接左外連接語法如下:fromtable_1leftjointable_2oncondition_1leftjointable_3oncondition_2...leftjointable_noncondition_n任務(wù)必備知識(shí)3.5.2左外連接【任務(wù)3.5.6】查詢每位老師的授課信息mysql>select*fromteacherleftjointeachonteacher.t_no=teach.t_no;LeftjoinLeftjoin任務(wù)必備知識(shí)3.5.2左外連接【任務(wù)3.5.7】查詢各系部名稱和對(duì)應(yīng)的學(xué)生人數(shù),按照人數(shù)降序排列mysql>selectd.d_name,count(s.s_name)asstudent_num->fromdepartmentdleftjoinstudentsond.d_no=s.d_no->groupbyd.d_no->orderbystudent_numdesc;任務(wù)必備知識(shí)3.5.3右外連接fromtable_1rightjointable_2oncondition_1rightjointable_3oncondition_2...rightjointable_noncondition_n任務(wù)必備知識(shí)【任務(wù)3.5.8】通過右外連接方式實(shí)現(xiàn)【任務(wù)3.5.6】mysql>select*fromteachrightjointeacheronteacher.t_no=teach.t_no;3.5.3右外連接任務(wù)必備知識(shí)【任務(wù)3.5.9】通過右外連接實(shí)現(xiàn)【任務(wù)3.5.7】mysql>selectd.d_name,count(s.s_name)asstudent_num ->fromstudentsrightjoindepartmentdond.d_no=s.d_no ->groupbyd.d_no->orderbystudent_numdesc;3.5.3右外連接任務(wù)必備知識(shí)【任務(wù)3.5.10】從教師授課表teach中找出授課相同的組合,即同一門課存在多個(gè)教師授課mysql>selectdistinctt1.t_no,t1.c_no ->fromteacht1jointeacht2ont1.c_no=t2.c_noandt1.t_no<>t2.t_no;3.5.4自連接任務(wù)實(shí)施1.查詢各部門名稱及其對(duì)應(yīng)的員工數(shù)量,結(jié)果如下所示:任務(wù)實(shí)施2.查詢各學(xué)歷對(duì)應(yīng)的平均福利、最高福利、最低福利,結(jié)果如下:任務(wù)實(shí)施3.查詢各部門的名稱及其對(duì)應(yīng)的男、女人數(shù),結(jié)果如下:任務(wù)實(shí)施4.查詢”王”姓員工的基本收入,結(jié)果如下:任務(wù)實(shí)施5.僅查詢“學(xué)院”的名稱及對(duì)應(yīng)的職稱的人數(shù),結(jié)果按系部名稱和職稱排序,其中職稱的順序依次為教授、副教授、講師、助講:任務(wù)實(shí)施6.查詢各部門名稱,及其對(duì)應(yīng)的平均基本收入(保留兩位有效小數(shù)),結(jié)果如下:任務(wù)實(shí)施要求撰寫實(shí)訓(xùn)總結(jié),把完成任務(wù)過程中主要操作、命令及關(guān)鍵步驟的截圖,遇到的問題與解決方法、未解決或需要進(jìn)一步探討的問題、以及任務(wù)實(shí)踐過程中的收獲和經(jīng)驗(yàn)教訓(xùn)的內(nèi)容寫入總結(jié)并提交。學(xué)習(xí)活動(dòng)展示學(xué)習(xí)產(chǎn)品(學(xué)習(xí)超市):優(yōu)化(完善)設(shè)計(jì)學(xué)習(xí)產(chǎn)品展示提交點(diǎn)評(píng)歸納什么是內(nèi)連接,如何實(shí)現(xiàn)?什么是左外連接,如何實(shí)現(xiàn)?什么是右外連接,如何實(shí)現(xiàn)?什么是自連接,如何實(shí)現(xiàn)?成績(jī)考核考核項(xiàng)目完成度線上各個(gè)考核項(xiàng)目完成情況課堂預(yù)習(xí)問題回答課堂表現(xiàn)布置作業(yè)任務(wù)書3.6主講教師:姜云橋謝謝觀看THANKYOU主講教師:姜云橋任務(wù)3.6子查詢與union查詢子項(xiàng)目3數(shù)據(jù)庫的查詢開發(fā)任務(wù)目標(biāo)1.能熟練使用子查詢方式完成各種查詢需求2.能使用集合查詢完成查詢需求知識(shí)目標(biāo)1.掌握子查詢可以出現(xiàn)的位置。2.掌握標(biāo)量子查詢3.掌握列子查詢4.掌握行子查詢5.掌握表子查詢6.掌握集合查詢能力目標(biāo)任務(wù)要求利用數(shù)據(jù)庫jxgl中的student(學(xué)生信息表)、course(課程表)、score(成績(jī)表)、department(院系單位表)、teacher(教師表)和teach(講授表),完成標(biāo)量子查詢、列子查詢、行子查詢、表子查詢以及合并查詢?nèi)蝿?wù)必備知識(shí)想一想什么是子查詢,分為幾種類型?任務(wù)必備知識(shí)3.6.1子查詢子查詢是指嵌套在其他sql語句(如insert、delete、select、update等)中的查詢語句。子查詢也稱為內(nèi)查詢,必須位于括號(hào)之中;包含子查詢的查詢被稱為外查詢。MySQL中的子查詢按照返回結(jié)果可以分為以下幾種類型:標(biāo)量子查詢:返回單個(gè)值(一行一列)的子查詢。列子查詢:返回單列結(jié)果(多行一列)的子查詢。行子查詢(RowSubquery):返回單行結(jié)果(一行多列)的子查詢,標(biāo)量子查詢是行子查詢的一個(gè)特例。表子查詢(TableSubquery):返回一個(gè)虛擬表(多行多列)的子查詢,行子查詢是表子查詢的一個(gè)特例。任務(wù)必備知識(shí)3.6.1子查詢按照內(nèi)查詢與外查詢之間的關(guān)系可分為:非關(guān)聯(lián)子查詢:內(nèi)查詢不依賴外查詢的信息,可獨(dú)立運(yùn)行。關(guān)聯(lián)子查詢:內(nèi)查詢引用外查詢的字段,無法獨(dú)立運(yùn)行。任務(wù)必備知識(shí)一、標(biāo)量子查詢是指子查詢返回的是單一值的標(biāo)量,如一個(gè)數(shù)字或一個(gè)字符串??梢允褂?、>、<、>=、<=、<>等操作符對(duì)子查詢的標(biāo)量結(jié)果進(jìn)行比較。3.6.1子查詢【任務(wù)3.6.1】查詢成績(jī)表score,返回大于平均成績(jī)的記錄mysql>select*->fromscore->wheremark>(selectavg(mark)fromscore);任務(wù)必備知識(shí)二、列子查詢指子查詢返回的結(jié)果集是N行一列,該結(jié)果通常來自對(duì)表的某個(gè)字段查詢返回,可以使用in、any、some和all等操作符,含義如下。3.6.1子查詢?nèi)蝿?wù)必備知識(shí)3.6.1子查詢【任務(wù)3.6.2】查詢授課任務(wù)的老師的信息mysql>select*fromteacherwheret_noin(selectdistinctt_nofromteach);任務(wù)必備知識(shí)三、行子查詢子查詢返回的結(jié)果集是一行N列,該子查詢的結(jié)果通常是對(duì)表的某行數(shù)據(jù)進(jìn)行查詢而返回的結(jié)果集。3.6.1子查詢【任務(wù)3.6.3】查詢與”劉光明“同學(xué)同性別同系部的學(xué)生的基本信息mysql>select*->fromstudent->where(s_sex,d_no)=(selects_sex,d_nofromstudentwheres_name='劉光明')->ands_name<>'劉光明‘;任務(wù)必備知識(shí)四、表子查詢子查詢返回的結(jié)果集是N行N列的一個(gè)表數(shù)據(jù)。表子查詢通常用于FROM子句或者查詢條件中。3.6.1子查詢【任務(wù)3.6.4】使用表子查詢獲取各系部名稱和學(xué)生的數(shù)量mysql>selectd.d_nameas'系部名稱',ifnull(s.num,0)as'學(xué)生數(shù)量'->fromdepartmentdleftjoin(-> selectd_no,count(*)asnumfromstudentgroupbyd_no->)s->ond.d_no=s.d_no;任務(wù)必備知識(shí)3.6.1子查詢?nèi)蝿?wù)必備知識(shí)五、關(guān)聯(lián)子查詢內(nèi)部查詢引用了外部查詢列,即內(nèi)部查詢會(huì)對(duì)外部查詢的每行進(jìn)行一次計(jì)算,需要注意,使用關(guān)聯(lián)子查詢是最容易出現(xiàn)錯(cuò)誤的地方。3.6.1子查詢【任務(wù)3.6.5】使用關(guān)聯(lián)子查詢獲得各個(gè)系部的教師的數(shù)量,顯示系部名稱,教師數(shù)量mysql>selectd.d_nameas'系部名稱',->(selectcount(*)fromteachertwheret.d_no=d.d_no)as'教師數(shù)量' ->fromdepartmentd;任務(wù)必備知識(shí)3.6.1子查詢+--------------+--------------+|系部名稱|教師數(shù)量|+--------------+--------------+|人文學(xué)院|2||信息學(xué)院|5||外語學(xué)院|2||建工學(xué)院|2||機(jī)電學(xué)院|2||珠寶學(xué)院|2||管理學(xué)院|2||金融學(xué)院|3|+--------------+--------------+任務(wù)必備知識(shí)六、exists操作符exists檢查指定查詢是否產(chǎn)生某些行。根據(jù)子查詢是否返回行,exists僅返回true或false,不會(huì)返回unkown,這是和其他操作符(如in、any、all等)的區(qū)別,notexists同樣如此,只不過功能相反。3.6.1子查詢?nèi)蝿?wù)必備知識(shí)3.6.1子查詢【任務(wù)3.6.6】返回不存在女性學(xué)生的系部名稱mysql>selectd.d_name->fromdepartmentd->wherenotexists(->select1fromstudentstwherest.d_no=d.d_noandst.s_sex='女');任務(wù)必備知識(shí)3.6.2合并查詢union操作符用于將兩個(gè)查詢結(jié)果合并成一個(gè)結(jié)果集?;菊Z法格式如下:selectcol_a1,col_a2,...fromtable1union[distinct|all]selectcol_b1,col_b2,...fromtable2;任務(wù)必備知識(shí)【任務(wù)3.6.7】通過unionall查詢成績(jī)大于90和小于60的學(xué)生的學(xué)號(hào)mysql>selects_nofromscorewheremark>90->unionall->selects_nofromscorewheremark<60;3.6.2合并查詢?nèi)蝿?wù)必備知識(shí)【任務(wù)3.6.8】通過union查詢成績(jī)大于90和小于60的學(xué)生的學(xué)號(hào)mysql>selects_nofromscorewheremark>90->union->selects_nofromscorewheremark<60;3.6.2合并查詢?nèi)蝿?wù)必備知識(shí)【任務(wù)3.6.9】通過union查詢成績(jī)大于90和小于60的學(xué)生的學(xué)號(hào),并按學(xué)號(hào)降序顯示mysql>selects_nofromscorewheremark>90->union->selects_nofromscorewheremark<60->orderbys_nodesc;3.6.2合并查詢?nèi)蝿?wù)必備知識(shí)【任務(wù)3.6.10】通過查詢成績(jī)表score成績(jī)第一和最后一名的學(xué)生的學(xué)號(hào)和成績(jī)mysql>(selects_no,markfromscoreorderbymarkdesclimit1) ->union ->(selects_no,markfromscoreorderbymarklimit1);3.6.2合并查詢?nèi)蝿?wù)實(shí)施在人事管理數(shù)據(jù)庫rsgl中進(jìn)行如下操作1.查詢和趙劍同職稱、學(xué)歷、政治背景的員工的姓名、職稱、學(xué)歷、政治背景,結(jié)果如下:任務(wù)實(shí)施2.查詢沒有員工的部門的名稱,結(jié)果如下:3.查年齡大于50,并且不是信息學(xué)院與外語學(xué)院的員工姓名和性別,結(jié)果如下:任務(wù)實(shí)施4.查詢收入最高(收入=基本收入+福利+補(bǔ)貼-公積金-稅-其他)和最低的員工編號(hào)和收入,結(jié)果如下:5.查詢超過基本收入平均值的員工的姓名,結(jié)果如下:任務(wù)實(shí)施要求撰寫實(shí)訓(xùn)總結(jié),把完成任務(wù)過程中主要操作、命令及關(guān)鍵步驟的截圖,遇到的問題與解決方法、未解決或需要進(jìn)一步探討的問題、以及任務(wù)實(shí)踐過程中的收獲和經(jīng)驗(yàn)教訓(xùn)的內(nèi)容寫入總結(jié)并提交。學(xué)習(xí)活動(dòng)展示學(xué)習(xí)產(chǎn)品(學(xué)習(xí)超市):優(yōu)化(完善)設(shè)計(jì)學(xué)習(xí)產(chǎn)品展示提交點(diǎn)評(píng)歸納什么是子查詢?學(xué)習(xí)各種類型的子查詢學(xué)習(xí)關(guān)聯(lián)子查詢和無關(guān)子查詢學(xué)習(xí)集合的union、intersect、except操作成績(jī)考核考核項(xiàng)目完成度線上各個(gè)考核項(xiàng)目完成情況課堂預(yù)習(xí)問題回答課堂表現(xiàn)布置作業(yè)任務(wù)書4.1主講教師:姜云橋謝謝觀看THANKYOU主講教師:姜云橋任務(wù)4.1視圖的開發(fā)子項(xiàng)目4數(shù)據(jù)庫高級(jí)應(yīng)用開發(fā)任務(wù)背景出于安全的原因,有時(shí)要隱藏一些重要的數(shù)據(jù)信息。例如,社會(huì)保險(xiǎn)基金表包含著客戶的很多重要信息,如果只顯示姓名、地址等基本信息,而不顯示社會(huì)保險(xiǎn)號(hào)和工資數(shù)等重要信息。任務(wù)目標(biāo)1.能創(chuàng)建視圖2.能查詢、修改和刪除視圖3.能通過視圖對(duì)數(shù)據(jù)進(jìn)行操作知識(shí)目標(biāo)1.理解視圖2.了解視圖特性3.掌握視圖的創(chuàng)建,查詢、修改和刪除視圖的方法能力目標(biāo)任務(wù)要求本任務(wù)將從認(rèn)識(shí)視圖著手,學(xué)習(xí)視圖的創(chuàng)建、查詢、修改和刪除方法,并學(xué)會(huì)通過視圖對(duì)數(shù)據(jù)進(jìn)行查詢和統(tǒng)計(jì),通過視圖向基表進(jìn)行數(shù)據(jù)更新的操作。任務(wù)必備知識(shí)想一想試解釋視圖?任務(wù)必備知識(shí)4.1.1視圖的概念視圖(view)是一種虛擬存在的表,本質(zhì)上就是一個(gè)存儲(chǔ)在數(shù)據(jù)庫中的查詢語句,因此,視圖并不存儲(chǔ)數(shù)據(jù),數(shù)據(jù)來自定義視圖時(shí)所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。合理使用視圖可以給我們帶來許多好處:簡(jiǎn)單:將復(fù)雜的查詢定義為視圖,直接基于視圖進(jìn)行操作,隱藏具體的實(shí)現(xiàn)。數(shù)據(jù)獨(dú)立:一旦視圖的結(jié)構(gòu)確定了,可以屏蔽表結(jié)構(gòu)變化對(duì)用戶的影響。安全:使用視圖的用戶只能訪問他們被允許訪問的內(nèi)容,如此可以限制訪問某些敏感信息,例如身份證號(hào)、工資等。任務(wù)必備知識(shí)想一想如何創(chuàng)建視圖?任務(wù)必備知識(shí)語法格式如下:create[orreplace]viewview_name[(column_list)]asselect_statement;4.1.2創(chuàng)建視圖注意:雖然MySQL支持在視圖定義中使用orderby子句,但是不建議在視圖的定義中使用orderby子句,因?yàn)樗⒉荒鼙WC最終排序的結(jié)果,而且可能由于不必要的排序降低查詢的性能。任務(wù)必備知識(shí)一、基于單表創(chuàng)建【任務(wù)4.1.1】基于student表創(chuàng)建包含學(xué)號(hào)、姓名、性別、院系的視圖view_studentmysql>createorreplaceviewview_student->as->selects_no,s_name,s_sex,d_nofromstudent;4.1.2創(chuàng)建視圖任務(wù)必備知識(shí)二、基于多表創(chuàng)建【任務(wù)4.1.2】創(chuàng)建視圖view_mark,包括姓名、課程名和成績(jī)字段mysql>createorreplaceviewview_mark->as->selectst.s_name,cs.c_name,sc.mark->fromstudentstjoinscoresconst.s_no=sc.s_no->joincoursecsonsc.c_no=cs.c_no;4.1.2創(chuàng)建視圖任務(wù)必備知識(shí)三、基于視圖創(chuàng)建【任務(wù)4.1.3】基于視圖view_mark創(chuàng)建新視圖view_mark_statistics,統(tǒng)計(jì)每位學(xué)生的總成績(jī)、平均成績(jī)。mysql>createorreplaceviewview_mark_statistics->as->selects_name,sum(mark)assum_mark,avg(mark)asavg_mark->fromview_mark->groupbys_name;4.1.2創(chuàng)建視圖任務(wù)必備知識(shí)想一想如何查看視圖?任務(wù)必備知識(shí)4.1.3查看視圖查看視圖是查看數(shù)據(jù)庫中已存在的視圖的定義。查看視圖的方法包括showtables語句、desc語句和showcreateview語句等。一、查看已創(chuàng)建的視圖視圖是一個(gè)虛表,所以視圖的查詢還是如同查詢基本表一樣,用showtables命令進(jìn)行查看,可看到新創(chuàng)建的視圖。任務(wù)必備知識(shí)【任務(wù)4.1.4】查看已創(chuàng)建的視圖mysql>showtableslike'view_%';4.1.3查看視圖二、查看視圖結(jié)構(gòu)和查看表結(jié)果一樣,通過desc命令可以查看視圖的結(jié)構(gòu)?!救蝿?wù)4.1.5】使用desc命令查看視圖view_mark的結(jié)構(gòu)mysql>descview_mark;任務(wù)必備知識(shí)三、查看視圖的定義類似查看表的定義,通過showcreateview語句可以查看視圖的定義4.1.3查看視圖【任務(wù)4.1.6】查看視圖view_mark的定義mysql>showcreateviewview_mark\G任務(wù)必備知識(shí)想一想如何使用視圖?任務(wù)必備知識(shí)4.1.4使用視圖一、查詢數(shù)據(jù)【任務(wù)4.1.7】通過視圖view_mark,查詢選修了“操作系統(tǒng)”課程且成績(jī)及格以上的學(xué)生mysql>selects_name,c_name,mark->fromview_mark->wherec_name='操作系統(tǒng)'andmark>=60;任務(wù)必備知識(shí)4.1.4使用視圖二、插入數(shù)據(jù)【任務(wù)4.1.8】往視圖view_student插入下列數(shù)據(jù)mysql>insertintoview_student(s_no,s_name,s_sex,d_no)->values('122008','張三','男','D001'),->('122013','李四','男','D002');任務(wù)必備知識(shí)4.1.4使用視圖三、更新數(shù)據(jù)【任務(wù)4.1.9】更新視圖view_student中“張三”的院系編號(hào)為“D003”mysql>updateview_student->setd_no='D003'->wheres_name='張三';任務(wù)必備知識(shí)4.1.4使用視圖【任務(wù)4.1.10】通過視圖view_mark修改“張群”的MYSQL課程的成績(jī)?yōu)?6mysql>updateview_mark->setmark=76->wheres_name='張群'andc_name='MYSQL';說明:若一個(gè)視圖依賴于多個(gè)基本表,則一次更新只能修改一個(gè)基本表的數(shù)據(jù),不能同時(shí)修改多個(gè)基本表的數(shù)據(jù)。任務(wù)必備知識(shí)4.1.4使用視圖四、刪除數(shù)據(jù)【任務(wù)4.1.11】通過視圖view_student刪除“章偉峰”的記錄mysql>deletefromview_student ->wheres_name='章偉峰';任務(wù)必備知識(shí)想一想如何刪除視圖?任務(wù)必備知識(shí)4.1.5刪除視圖【任務(wù)4.1.12】刪除視圖view_mark、view_mark_statistics、view_studentdropview[ifexists]view_name1,view_name2,...說明:(1)聲明了ifexists,視圖不存在的話,也不會(huì)出現(xiàn)錯(cuò)誤信息。(2)一次性刪除多個(gè)視圖時(shí),視圖之間通過逗號(hào)(,)分隔。mysql>dropviewifexistsview_mark,view_mark_statistics,view_student;任務(wù)實(shí)施在rsgl數(shù)據(jù)庫中,進(jìn)行如下操作:1.創(chuàng)建視圖,統(tǒng)計(jì)每個(gè)系部博士、碩士、本科的人數(shù),查詢?cè)撘晥D運(yùn)行效果如下:任務(wù)實(shí)施2.

.創(chuàng)建視圖,統(tǒng)計(jì)系部編號(hào)為“A001”的員工的姓名、編號(hào)、性別、出生日期,查詢視圖運(yùn)行效果如下::任務(wù)實(shí)施3.創(chuàng)建視圖,統(tǒng)計(jì)每個(gè)系的最高基本工資,最低基本工資,平均基本工資(保留2位小數(shù)),查詢視圖,運(yùn)行效果如下:任務(wù)實(shí)施4.創(chuàng)建視圖,統(tǒng)計(jì)暫時(shí)沒有員工的系部名稱、系部編號(hào),查詢視圖運(yùn)行效果如下:5.刪除以上創(chuàng)建的視圖。任務(wù)實(shí)施要求撰寫實(shí)訓(xùn)總結(jié),把完成任務(wù)過程中主要操作、命令及關(guān)鍵步驟的截圖,遇到的問題與解決方法、未解決或需要進(jìn)一步探討的問題、以及任務(wù)實(shí)踐過程中的收獲和經(jīng)驗(yàn)教訓(xùn)的內(nèi)容寫入總結(jié)并提交。學(xué)習(xí)活動(dòng)展示學(xué)習(xí)產(chǎn)品(學(xué)習(xí)超市):優(yōu)化(完善)設(shè)計(jì)學(xué)習(xí)產(chǎn)品展示提交點(diǎn)評(píng)歸納試解釋視圖視圖的特性如何創(chuàng)建、查看、使用、修改和刪除視圖?成績(jī)考核考核項(xiàng)目完成度線上各個(gè)考核項(xiàng)目完成情況課堂預(yù)習(xí)問題回答課堂表現(xiàn)布置作業(yè)任務(wù)書4.2主講教師:姜云橋謝謝觀看THANKYOU主講教師:姜云橋任務(wù)4.2索引的開發(fā)子項(xiàng)目4數(shù)據(jù)庫高級(jí)應(yīng)用開發(fā)任務(wù)背景由于數(shù)據(jù)庫在執(zhí)行一條SQL語句的時(shí)候,默認(rèn)的方式是根據(jù)搜索條件進(jìn)行全表掃描,遇到匹配條件的就加入搜索結(jié)果集合。在進(jìn)行涉及多個(gè)表連接,包括了許多搜索條件(例如大小比較、Like匹配等),而且表數(shù)據(jù)量特別大的查詢時(shí),在沒有索引的情況下,MySQL需要執(zhí)行的掃描行數(shù)會(huì)很大,速度也會(huì)很慢。任務(wù)目標(biāo)1.能創(chuàng)建索引2.能管理索引知識(shí)目標(biāo)1.了解索引2.了解索引的分類3.理解索引的設(shè)計(jì)原則4.掌握創(chuàng)建索引的方法5.掌握管理索引的方法能力目標(biāo)任務(wù)要求本任務(wù)將從認(rèn)識(shí)索引、索引的分類以及索引的設(shè)計(jì)原則等方面著手,介紹創(chuàng)建和管理索引的方法。特別要注意的是,索引并不是越多越好,要正確認(rèn)識(shí)索引的重要性和設(shè)計(jì)原則,創(chuàng)建合適的索引。任務(wù)必備知識(shí)想一想索引是什么?任務(wù)必備知識(shí)4.2.1索引的概念索引是一種特殊的數(shù)據(jù)庫結(jié)構(gòu),可以用來快速查詢數(shù)據(jù)庫表中的記錄。對(duì)于索引的理解可以直接類比查字典。當(dāng)我們需要查找某個(gè)漢字的意思時(shí),我們并不是從頭挨著找到漢字,而是通過拼音索引快速鎖定漢字所在的頁碼,進(jìn)而找到對(duì)應(yīng)漢字的解釋。如果我們并不知道漢字的讀音,可以通過部首筆畫索引快速鎖定漢字的頁碼,從而找到漢字的讀音和解釋。任務(wù)必備知識(shí)4.2.1索引的概念日常使用的索引主要包括如下幾種:普通索引(index):索引的關(guān)鍵字是index,這是最基本的索引,它沒有任何限制。唯一性索引(unique):關(guān)鍵字是unique。與普通索引類似,但是unique索引列的值必須唯一,允許有空值。如果是組合索引,則列值的組合必須唯一。在一個(gè)表上可以創(chuàng)建多個(gè)unique索引。主鍵索引(primarykey):它是一種特殊的唯一索引,不允許有空值。一般是在建表的時(shí)候同時(shí)創(chuàng)建主鍵索引。也可通過修改表的方法增加主鍵,但一個(gè)表只能有一個(gè)主鍵索引。任務(wù)必備知識(shí)想一想創(chuàng)建索引有幾種方式,分別是?任務(wù)必備知識(shí)創(chuàng)建索引有3種方式,分別是:1.創(chuàng)建表的時(shí)候創(chuàng)建索引2.在已經(jīng)存在的表上創(chuàng)建索引3.使用ALTERTABLE語句來創(chuàng)建索引4.2.2索引的建立任務(wù)必備知識(shí)一、創(chuàng)建表時(shí)創(chuàng)建【任務(wù)4.2.1】創(chuàng)建表student2,s_no為主鍵索引,s_name為唯一性索引,并在s_address列上前6位字符創(chuàng)建索引創(chuàng)建表的時(shí)候可以直接創(chuàng)建索引,這種方式最簡(jiǎn)單、方便。4.2.2索引的建立任務(wù)必備知識(shí)4.2.2索引的建立mysql>createtablestudent2->(->s_nochar(6)primarykeycomment'學(xué)號(hào)',->s_namevarchar(20)uniquecomment'姓名',->sexchar(2)default'男'comment'性別',->birthdatecomment'出生日期',->d_nochar(6)comment'所在系部',->addressvarchar(20)comment'家庭地址',->phonevarchar(20)comment'聯(lián)系電話',->indexaddress_index(address(6))->);任務(wù)必備知識(shí)二、用createindex語句創(chuàng)建1.創(chuàng)建普通索引如果表已建好,可以使用createindex語句建立索引。createindexindex_nameontbl_name(col_name(length)[asc|desc],...)4.2.2索引的建立【任務(wù)4.2.2】student的d_no字段經(jīng)常作為查詢條件,建立普通索引mysql>createindexd_no_indexonstudent(d_no);任務(wù)必備知識(shí)2.創(chuàng)建唯一性索引4.2.2索引的建立【任務(wù)4.2.3】在course表的c_name列上建立一個(gè)唯一性索引c_name_indexmysql>createuniqueindexc_name_indexoncourse(c_name);像課程表的課程名,部門表的部門名,商品表的商品名之類的字段,一般情況下是,可建立一個(gè)唯一性索引。任務(wù)必備知識(shí)3.創(chuàng)建多列索引4.2.2索引的建立【任務(wù)4.2.4】在score表的s_no和c_no列上建立一個(gè)復(fù)合索引score_indexmysql>createindexscore_indexonscore(s_no,c_no);可以在一個(gè)索引的定義中包含多個(gè)列,中間用逗號(hào)隔開,但是它們要屬于同一個(gè)表。這樣的索引叫做復(fù)合索引。任務(wù)必備知識(shí)三、通過altertable語句創(chuàng)建索引在已經(jīng)存在的表上可以用altertable語句創(chuàng)建索引。altertabletbl_nameadd{unique|index|primarykey}[index_name](col_name(length)[asc|desc],...)4.2.2索引的建立任務(wù)必備知識(shí)4.2.2索引的建立【任務(wù)4.2.5】在teacher表上建立t_no主鍵索引(還未建立主鍵),建立t_name和d_no的復(fù)合索引,以加速表的檢索速度mysql>altertableteacher ->addprimarykey(t_no), ->addindexmark_index(t_name,d_no);任務(wù)必備知識(shí)4.2.2索引的建立【任務(wù)4.2.6】在department表中的d_name創(chuàng)建唯一性索引mysql>altertabledepartment ->adduniqueindexd_name_index(d_name);分析與討論(1)主鍵索引必定是唯一的,唯一性索引不一定是主鍵。(2)一張表上只能一個(gè)主鍵,但可以有一個(gè)或者多個(gè)唯一性索引。任務(wù)必備知識(shí)想一想MySQL如何查看索引?任務(wù)必備知識(shí)如果想要查看表中創(chuàng)建的索引的情況,可以使用showindexfromtbl_name語句4.2.3索引的查看【任務(wù)4.2.7】查看表student2中的索引mysql>showindexfromstudent2\g任務(wù)必備知識(shí)想一想MySQL如何刪除索引?任務(wù)必備知識(shí)刪除索引是指將表中已經(jīng)存在的索引刪除掉。一些不再使用的索引會(huì)降低表的更新速度,影響數(shù)據(jù)庫的性能。對(duì)于這樣的索引,應(yīng)該將其刪除。對(duì)于已經(jīng)存在的索引,可以通過dropindexindex_nameontbl_name來刪除。4.2.4索引的刪除【任務(wù)4.2.8】刪除course表的mark索引mysql>dropindexmark_indexoncourse;也可用ALTERTABLE語句刪除:altertabletbl_namedrop{indexindex_name|primarykey}任務(wù)必備知識(shí)4.2.4索引的刪除【任務(wù)4.2.9】刪除course表上的主鍵索引mysql>altertablecoursedropprimarykey;【任務(wù)4.2.10】刪除course表上的唯一性索引c_name_indexmysql>altertablecoursedropindexc_name_index;任務(wù)必備知識(shí)(1)刪除唯一性索引,如同刪除普通索引一樣,用dropindex語句即可,不能寫成dropuniqueindex,但是創(chuàng)建唯一性索引要寫成adduniqueindex。(2)刪除主鍵索引,則需要altertable直接使用dropprimarykey子句進(jìn)行刪除,不需要提供索引名稱,因?yàn)橐粋€(gè)表中只有一個(gè)主鍵分析與討論任務(wù)實(shí)施在rsgl數(shù)據(jù)庫中完成下列操作:1.在employee表上通過createindex語句在birth字段創(chuàng)建名為index_birth的索引,創(chuàng)建完成后可查詢到如下輸出(省略了部分輸出):mysql>showindexfromemployee\G***************************2.row***************************Table:employeeNon_unique:1Key_name:index_birthSeq_in_index:1Column_name:birth……任務(wù)實(shí)施2.在employee表上通過altertable語句在e_name字段創(chuàng)建名為index_name的唯一性索引,創(chuàng)建完成后可查詢到如下輸出(省略部分輸出):mysql>showindexfromemployee\G***************************3.row***************************Table:employeeNon_unique:1Key_name:index_nameSeq_in_index:1Column_name:e_name……任務(wù)實(shí)施3.在employee表上通過createindex語句在d_id和education字段上創(chuàng)建多列索引。***************************4.row***************************Table:employeeNon_unique:1Key_name:index_mulSeq_in_index:1Column_name:d_id……***************************5.row***************************Table:employeeNon_unique:1Key_name:index_mulSeq_in_index:2Column_name:education……任務(wù)實(shí)施4.刪除employee表上的唯一性索引,刪除完成后查看索引信息,確保刪除。5.刪除employee表上的主鍵索引,刪除完成后查看索引信息,確保刪除。6.刪除employee表上的多列索引,刪除完成后查看索引信息,確保刪除。任務(wù)實(shí)施要求撰寫實(shí)訓(xùn)總結(jié),把完成任務(wù)過程中主要操作、命令及關(guān)鍵步驟的截圖,遇到的問題與解決方法、未解決或需要進(jìn)一步探討的問題、以及任務(wù)實(shí)踐過程中的收獲和經(jīng)驗(yàn)教訓(xùn)的內(nèi)容寫入總結(jié)并提交。學(xué)習(xí)活動(dòng)展示學(xué)習(xí)產(chǎn)品(學(xué)習(xí)超市):優(yōu)化(完善)設(shè)計(jì)學(xué)習(xí)產(chǎn)品展示提交點(diǎn)評(píng)歸納索引是?MySQL的索引分類?索引的設(shè)計(jì)原則?創(chuàng)建索引有幾種方式,分別是?如何查看索引?如何刪除索引?成績(jī)考核考核項(xiàng)目完成度線上各個(gè)考核項(xiàng)目完成情況課堂預(yù)習(xí)問題回答課堂表現(xiàn)布置作業(yè)任務(wù)書4.3主講教師:姜云橋謝謝觀看THANKYOU主講教師:姜云橋任務(wù)4.3存儲(chǔ)過程和函數(shù)的開發(fā)子項(xiàng)目4數(shù)據(jù)庫高級(jí)應(yīng)用開發(fā)任務(wù)背景銀行經(jīng)常需要計(jì)算用戶的利息,但不同類別的用戶的利率是不一樣的。這就可以將計(jì)算利率的SQL代碼寫成一個(gè)程序存放起來,用指定的用戶類別作參數(shù)。這樣的程序叫作存儲(chǔ)過程或者存儲(chǔ)函數(shù)。任務(wù)目標(biāo)1.能創(chuàng)建存儲(chǔ)過程2.能執(zhí)行存儲(chǔ)過程3.能修改和刪除存儲(chǔ)過程知識(shí)目標(biāo)1.了解DElimitER命令2.理解存儲(chǔ)過程3.掌握創(chuàng)建存儲(chǔ)過程的方法4.掌握修改和刪除存儲(chǔ)過程的方法能力目標(biāo)任務(wù)要求通過本次任務(wù),使學(xué)生能夠創(chuàng)建、執(zhí)行、修改和刪除存儲(chǔ)過程;掌握創(chuàng)建基本的存儲(chǔ)過程的方法,掌握創(chuàng)建帶有變量的存儲(chǔ)過程的方法,理解創(chuàng)建帶有流程控制語句的存儲(chǔ)過程的方法。任務(wù)必備知識(shí)想一想試解釋存儲(chǔ)過程?銀行經(jīng)常需要計(jì)算用戶的利息,但不同類別的用戶的利率是不一樣的。這就可以將計(jì)算利率的sql代碼寫成一個(gè)程序存放起來,用指定的用戶類別作參數(shù)。這樣的程序叫作存儲(chǔ)過程或者存儲(chǔ)函數(shù)。使用時(shí)只要調(diào)用這個(gè)存儲(chǔ)過程或者存儲(chǔ)函數(shù),根據(jù)指定的用戶類別,就可以將不同類別用戶的利息計(jì)算出來。任務(wù)必備知識(shí)任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作一、創(chuàng)建存儲(chǔ)過程創(chuàng)建存儲(chǔ)過程可以使用createprocedure語句。createprocedure[ifnotexists]sp_name([in|out|inout]param_nametype,...)routine_body任務(wù)必備知識(shí)【任務(wù)4.3.1】創(chuàng)建存儲(chǔ)過程sp_delete_student,用指定的學(xué)號(hào)作為參數(shù)刪除某一學(xué)生的記錄4.3.1存儲(chǔ)過程和函數(shù)的基本操作mysql>delimiter$$mysql>createproceduresp_delete_student(innochar(8))->begin->deletefromstudentwheres_no=no;->end$$mysql>delimiter;任務(wù)必備知識(shí)【任務(wù)4.3.2】創(chuàng)建帶輸出參數(shù)的存儲(chǔ)過程sp_count_student,求學(xué)生人數(shù)4.3.1存儲(chǔ)過程和函數(shù)的基本操作mysql>delimiter$$mysql>createproceduresp_count_student(outstu_cntintunsigned)->begin->selectcount(*)intostu_cntfromstudent;->end$$mysql>delimiter;任務(wù)必備知識(shí)【任務(wù)4.3.3】創(chuàng)建存儲(chǔ)過程sp_search_teacher,以指定的系別號(hào)為參數(shù),查找某學(xué)院的老師姓名、所在院系名稱4.3.1存儲(chǔ)過程和函數(shù)的基本操作mysql>delimiter$$mysql>createproceduresp_search_teacher(innochar(8))->begin->selectt.t_name,d.d_name->fromteachertjoindepartmentdont.d_no=d.d_no->wheret.d_no=no;->end$$mysql>delimiter;任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作二、調(diào)用存儲(chǔ)過程創(chuàng)建完存儲(chǔ)過程之后,調(diào)用存儲(chǔ)過程需要使用call語句。callsp_name(parameter,...)【任務(wù)4.3.4】調(diào)用存儲(chǔ)過程sp_delete_student,刪除學(xué)號(hào)為122001的學(xué)生的信息mysql>callsp_delete_student('122001');任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作【任務(wù)4.3.5】調(diào)用存儲(chǔ)過程sp_count_student,統(tǒng)計(jì)學(xué)生人數(shù)mysql>callsp_count_student(@num);mysql>select@num;【任務(wù)4.3.6】調(diào)用存儲(chǔ)過程sp_search_teacher,查詢?cè)合稻幪?hào)D001的教師姓名和院系名稱mysql>callsp_search_teacher('D001');任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作三、查看存儲(chǔ)過程showprocedurestatus[like'pattern'|whereexpr]說明:(1)like匹配存儲(chǔ)過程的名稱。(2)where可以指定更多的過濾條件。1.查看存儲(chǔ)過程的狀態(tài)信息任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作【任務(wù)4.3.7】查看存儲(chǔ)過程sp_search_teacher的狀態(tài)信息mysql>showprocedurestatuslike'sp_search_teacher'\G***************************1.row***************************Db:jxglName:sp_search_teacherType:PROCEDUREDefiner:root@localhostModified:2023-01-2523:07:38Created:2023-01-2523:07:38Security_type:DEFINERComment:character_set_client:utf8mb4collation_connection:utf8mb4_0900_ai_ciDatabaseCollation:utf8mb4_0900_ai_ci任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作類似與查看數(shù)據(jù)庫和數(shù)據(jù)表的定義,存儲(chǔ)過程的定義可通過SHOWCREATEPROCEDURE命令查看。2.查看存儲(chǔ)過程的定義【任務(wù)4.3.8】查看存儲(chǔ)過程sp_search_teacher的定義mysql>showcreateproceduresp_search_teacher\G任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作四、刪除存儲(chǔ)過程可以使用dropprocedure刪除已經(jīng)存在的存儲(chǔ)過程。dropprocedure[ifexists]sp_name;【任務(wù)4.3.9】刪除存儲(chǔ)過程sp_search_teachermysql>dropproceduresp_search_teacher;任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作五、存儲(chǔ)函數(shù)MySQL存儲(chǔ)函數(shù)和存儲(chǔ)過程類似,也是存儲(chǔ)在數(shù)據(jù)庫中的程序,其查看、刪除過程和存儲(chǔ)過程一樣,只不過將procedure換成function即可,主要在于創(chuàng)建和調(diào)用過程稍有不同。創(chuàng)建過程:createfunction[ifnotexists]sp_name(param_nametype,...)returnstype[deterministic|nosql|readssqldata]routine_body任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作【任務(wù)4.3.10】定義存儲(chǔ)函數(shù)func_count_score,獲取score表中分?jǐn)?shù)超過指定成績(jī)的記錄數(shù)mysql>delimiter$$mysql>createfunctionfunc_count_score(sdecimal)returnsint->deterministic->begin->declares_countint;->selectcount(*)intos_countfromscorewheremark>=s;->returns_count;->end$$mysql>delimiter;任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作【任務(wù)4.3.11】使用自定義的存儲(chǔ)函數(shù)func_count_score,獲取超過90分的成績(jī)記錄數(shù)mysql>selectfunc_count_score(90)as‘優(yōu)秀記錄數(shù)';任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作【任務(wù)4.3.12】查看存儲(chǔ)函數(shù)func_count_score狀態(tài)信息mysql>showfunctionstatuslike'func_count_score'\G***************************1.row***************************Db:jxglName:func_count_scoreType:FUNCTIONDefiner:root@localhostModified:2023-01-2617:12:49Created:2023-01-2617:12:49Security_type:DEFINERComment:character_set_client:utf8mb4collation_connection:utf8mb4_0900_ai_ciDatabaseCollation:utf8mb4_0900_ai_ci1rowinset(0.01sec)或者執(zhí)行下列語句mysql>showfunctionstatuswherename='func_count_score'\G任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作【任務(wù)4.3.13】刪除存儲(chǔ)函數(shù)func_count_scoremysql>dropfunctionfunc_count_score;任務(wù)必備知識(shí)4.3.1存儲(chǔ)過程和函數(shù)的基本操作存儲(chǔ)過程和存儲(chǔ)函數(shù)除了參數(shù)和返回值方式不同之外,最重要的區(qū)別在于存儲(chǔ)過程可以修改數(shù)據(jù)庫對(duì)象的狀態(tài),而存儲(chǔ)函數(shù)卻不能。這也意味這存儲(chǔ)函數(shù)中主要以查詢?yōu)橹?,可以放在查詢語句中使用,存儲(chǔ)過程卻不行。任務(wù)必備知識(shí)一、變量1.變量聲明存儲(chǔ)過程和函數(shù)可以定義和使用變量,它們可以用來存儲(chǔ)臨時(shí)結(jié)果。用戶可以使用declare關(guān)鍵字來定義變量,這些變量的作用范圍只適用于begin…end程序段中,所以是局部變量。過程和函數(shù)使用的局部變量必須在開頭就聲明。在聲明局部變量的同時(shí)也可以為其賦一個(gè)初始值:declarevar_nametype[defaultvalue];4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)2.變量賦值給變量賦值有兩種方式,一種通過SET語句:setvar1=expr1,var2=expr2,...;另外一種方式通過selectINTO語句完成賦值:selectexpr1,expr2,...intovar1,var2,...from...;4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)【任務(wù)4.3.14】創(chuàng)建一個(gè)存儲(chǔ)函數(shù),根據(jù)課程號(hào)查詢不及格學(xué)生的數(shù)量mysql>delimiter$$mysql>createfunctionfunc_fail_count(nochar(4))returnsint->readssqldata->begin->declares_countintdefault0;->selectcount(*)intos_countfromscorewherec_no=noandmark<60;->returns_count;->end$$mysql>delimiter;4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)【任務(wù)4.3.14】創(chuàng)建一個(gè)存儲(chǔ)函數(shù),根據(jù)課程號(hào)查詢不及格學(xué)生的數(shù)量調(diào)用函數(shù),查詢課程號(hào)A002不及格人數(shù)mysql>selectfunc_fail_count('A002')as'A002不及格人數(shù)';+---------------------+4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)二、條件控制語句1.If語句MySQL提供了兩種條件控制語句:if語句和case語句IF語句可根據(jù)不同的條件執(zhí)行不同的操作。ifsearch_conditionthenstatement_listelseifsearch_conditionthenstatement_list...elsestatement_listendif4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)【任務(wù)4.3.15】創(chuàng)建一個(gè)存儲(chǔ)過程,根據(jù)指定的參數(shù)(學(xué)號(hào))查看某位學(xué)生的不及格科目數(shù),如果不及格科目數(shù)超過2門(含2門),則輸出“啟動(dòng)成績(jī)預(yù)警!”并輸出該生的成績(jī)單,否則輸出“成績(jī)?cè)诳煽胤秶?.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)首先,創(chuàng)建存儲(chǔ)過程:mysql>delimiter$$mysql>createprocedureproc_query(innochar(8),outstrvarchar(20))->begin->declarefail_counttinyintunsigneddefault0;->selectcount(*)intofail_countfromscorewheres_no=noandmark<60;->iffail_count>=2then->setstr='啟動(dòng)成績(jī)預(yù)警';->else->setstr='成績(jī)?cè)诳煽胤秶?;->endif;->end$$mysql>delimiter;4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)調(diào)用存儲(chǔ)過程,查詢學(xué)號(hào)122001的成績(jī)狀況:mysql>callproc_query('122001',@msg);mysql>select@msg;4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)1.case語句case語句可以用于構(gòu)造復(fù)雜的條件判斷,類似于case表達(dá)式,case語句也存在兩種形式:簡(jiǎn)單case語句和搜索case語句4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)casecase_valuewhenwhen_valuethenstatement_listwhenwhen_valuethenstatement_list...elsestatement_listendcase;4.3.2存儲(chǔ)過程和函數(shù)的編程功能(1)簡(jiǎn)單case語句任務(wù)必備知識(shí)【任務(wù)4.3.16】創(chuàng)建一個(gè)存儲(chǔ)過程,根據(jù)專業(yè)類型(專業(yè)課4分、專業(yè)基礎(chǔ)課3分、必須課2分、選修課1分)更新學(xué)分,參數(shù)為專業(yè)類型首先,創(chuàng)建存儲(chǔ)過程(不能創(chuàng)建函數(shù),函數(shù)中不能更新表格數(shù)據(jù))4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)mysql>delimiter$$mysql>createprocedureproc_update_credit(intypevarchar(10))->begin->casetype->when'專業(yè)課'then->updatecoursesetc_credit=4wherec_type=type;->when'專業(yè)基礎(chǔ)課'then->updatecoursesetc_credit=3wherec_type=type;->when'必修課'then->updatecoursesetc_credit=2wherec_type=type;->else->updatecoursesetc_credit=1;->endcase;->end$$mysql>delimiter;4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)casewhensearch_conditionthenstatement_listwhensearch_conditionthenstatement_list...elsestatement_listendcase;4.3.2存儲(chǔ)過程和函數(shù)的編程功能(2)搜索case語句任務(wù)必備知識(shí)【任務(wù)4.3.17】創(chuàng)建一個(gè)存儲(chǔ)函數(shù),根據(jù)學(xué)號(hào)輸出學(xué)生的成績(jī)等級(jí),平均分>=90優(yōu)秀,>=80良好,>=60及格,否則不及格首先,創(chuàng)建存儲(chǔ)函數(shù):4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)mysql>delimiter$$mysql>createfunctionfunc_score_level(nochar(8))returnsvarchar(20)->readssqldata->begin->declaremsgvarchar(20);->declareavg_markdecimal(4,1)default0;->->selectavg(mark)intoavg_markfromscorewheres_no=no;->case->whenavg_mark>=90thensetmsg='優(yōu)秀';->whenavg_mark>=80thensetmsg='良好';->whenavg_mark>=60thensetmsg='及格';->elsesetmsg='不及格';->endcase;->returnmsg;->end$$mysql>delimiter;4.3.2存儲(chǔ)過程和函數(shù)的編程功能調(diào)用存儲(chǔ)函數(shù),根據(jù)傳入的成績(jī)輸出等級(jí):mysql>selectfunc_score_level('122003');任務(wù)必備知識(shí)三、循環(huán)控制語句1.loop語句[label:]loopstatement_listendloop[label]4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)【任務(wù)4.3.18】創(chuàng)建存儲(chǔ)過程,使用loop語句求10以內(nèi)奇數(shù)之和創(chuàng)建存儲(chǔ)過程:mysql>delimiter$$mysql>createproceduresp_loop_sum()->begin->declareiintdefault0;->declarei_sumintdefault0;->label:loop->seti=i+1;->ifi>10thenleavelabel;4.3.2存儲(chǔ)過程和函數(shù)的編程功能->endif;->ifi%2=0theniteratelabel;->elseseti_sum=i_sum+i;->endif;->endlooplabel;->selecti_sum;->end$$mysql>delimiter;任務(wù)必備知識(shí)【任務(wù)4.3.18】創(chuàng)建存儲(chǔ)過程,使用loop語句求10以內(nèi)奇數(shù)之和調(diào)用存儲(chǔ)過程:mysql>callsp_loop_sum();4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)三、循環(huán)控制語句2.while語句[label:]whilesearch_conditiondostatement_listendwhile[label]4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)【任務(wù)4.3.19】創(chuàng)建存儲(chǔ)過程,使用while語句求10以內(nèi)奇數(shù)之和4.3.2存儲(chǔ)過程和函數(shù)的編程功能創(chuàng)建存儲(chǔ)過程:mysql>delimiter$$mysql>createproceduresp_while_sum()->begin->declareiintdefault0;->declarei_sumintdefault0;->->label:whilei<10do->seti=i+1;->ifi%2=1then->seti_sum=i_sum+i;->endif;->endwhilelabel;->->selecti_sum;->end$$mysql>delimiter;任務(wù)必備知識(shí)調(diào)用存儲(chǔ)過程:mysql>callsp_while_sum();4.3.2存儲(chǔ)過程和函數(shù)的編程功能【任務(wù)4.3.19】創(chuàng)建存儲(chǔ)過程,使用while語句求10以內(nèi)奇數(shù)之和任務(wù)必備知識(shí)四、repeat語句[label:]repeatstatement_listuntilsearch_conditionendrepeat[label]4.3.2存儲(chǔ)過程和函數(shù)的編程功能任務(wù)必備知識(shí)【任務(wù)4.3.20】創(chuàng)建存儲(chǔ)過程,使用repeat語句求10以內(nèi)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論