數(shù)據(jù)庫(kù)技術(shù)項(xiàng)目式教程(MySQL)課件 項(xiàng)目4 查詢和更新數(shù)據(jù)_第1頁(yè)
數(shù)據(jù)庫(kù)技術(shù)項(xiàng)目式教程(MySQL)課件 項(xiàng)目4 查詢和更新數(shù)據(jù)_第2頁(yè)
數(shù)據(jù)庫(kù)技術(shù)項(xiàng)目式教程(MySQL)課件 項(xiàng)目4 查詢和更新數(shù)據(jù)_第3頁(yè)
數(shù)據(jù)庫(kù)技術(shù)項(xiàng)目式教程(MySQL)課件 項(xiàng)目4 查詢和更新數(shù)據(jù)_第4頁(yè)
數(shù)據(jù)庫(kù)技術(shù)項(xiàng)目式教程(MySQL)課件 項(xiàng)目4 查詢和更新數(shù)據(jù)_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單表查詢?nèi)蝿?wù)提出數(shù)據(jù)庫(kù)、表創(chuàng)建好后,接下來(lái)的工作是對(duì)數(shù)據(jù)進(jìn)行操作,包括查詢數(shù)據(jù)、插入數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù)等。數(shù)據(jù)操作是數(shù)據(jù)庫(kù)工程師和數(shù)據(jù)庫(kù)相關(guān)崗位人員日常工作中必做的也是最頻繁的工作。任務(wù)分析數(shù)據(jù)庫(kù)中最常見的操作是數(shù)據(jù)查詢,可以說(shuō)數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)的核心操作。查詢可以對(duì)單表進(jìn)行查詢,也可以完成復(fù)雜的連接查詢和嵌套查詢,其中對(duì)單表進(jìn)行查詢是數(shù)據(jù)查詢操作中最簡(jiǎn)單的,所以我們先從單表查詢?nèi)胧謱W(xué)習(xí)數(shù)據(jù)查詢操作。實(shí)現(xiàn)數(shù)據(jù)查詢操作必須使用SQL語(yǔ)言中的SELECT語(yǔ)句。所以先學(xué)習(xí)和理解SELECT語(yǔ)句,然后針對(duì)實(shí)際需求對(duì)表進(jìn)行查詢。1.選擇表中的若干列(1)查詢部分列SELECT列名[,…n]FROM表名;(2)查詢?nèi)苛蠸ELECT*FROM表名;(3)為查詢結(jié)果集內(nèi)的列指定別名SELECT原列名AS列別名[,…n]FROM表名;SELECT原列名列別名[,…n]FROM表名;(4)查詢經(jīng)過(guò)計(jì)算的列SELECT計(jì)算表達(dá)式或列名FROM表名;相關(guān)知識(shí)與技能【例】查詢所有學(xué)生的學(xué)號(hào)和姓名?!纠坎樵?nèi)w學(xué)生的詳細(xì)信息?!纠坎樵兯袑W(xué)生的學(xué)號(hào)和姓名,并指定別名為學(xué)生學(xué)號(hào)、學(xué)生姓名?!纠坎樵兯袑W(xué)生的學(xué)號(hào)、姓名和出生年份。任務(wù)實(shí)施2.選擇表中的若干行SELECT目標(biāo)列表達(dá)式FROM表名WHERE行條件表達(dá)式;(1)比較大小>、>=、=、<、<=、<>、!=、!>、!<(2)確定范圍列名或計(jì)算表達(dá)式[NOT]BETWEEN下限值A(chǔ)ND上限值(3)確定集合列名或表達(dá)式[NOT]IN(常量1,常量2,……,常量n)相關(guān)知識(shí)與技能【例】查詢所有女生的學(xué)號(hào)和姓名?!纠坎樵兤綍r(shí)成績(jī)?cè)?0~100之間(包含90和100)的學(xué)號(hào)和課程編號(hào)。【例】查詢課程學(xué)時(shí)為30或60的課程的課程編號(hào)和課程名稱。任務(wù)實(shí)施2.選擇表中的若干行(4)涉及空值列名IS[NOT]NULL(5)字符匹配列名[NOT]LIKE'<匹配串>'_(下劃線):匹配任意單個(gè)字符。%(百分號(hào)):匹配任意長(zhǎng)度(長(zhǎng)度可以為0)的字符串。(6)使用正則表達(dá)式使用REGEXP關(guān)鍵字比LIKE更強(qiáng)大相關(guān)知識(shí)與技能【例】查詢期末成績(jī)現(xiàn)為空的學(xué)生的學(xué)號(hào)和課程編號(hào)?!纠坎樵兯行?陳'的學(xué)生的學(xué)號(hào)和姓名?!纠吭赟chool數(shù)據(jù)庫(kù)中查詢出Checkhealth表的Problem字段值出現(xiàn)“亂”至少1次的記錄。任務(wù)實(shí)施3.去掉查詢結(jié)果中重復(fù)的行須指定DISTINCT短語(yǔ)。其語(yǔ)法格式為:SELECTDISTINCT目標(biāo)列表達(dá)式FROM表名;【例】查詢期末成績(jī)有不及格的學(xué)生的學(xué)號(hào)。相關(guān)知識(shí)與技能4.對(duì)查詢結(jié)果排序(1)ORDERBY子句如果沒有指定查詢結(jié)果的顯示順序,DBMS按照記錄在表中的先后順序輸出查詢結(jié)果。可通過(guò)ORDERBY子句改變查詢結(jié)果集中記錄的顯示順序。其語(yǔ)法格式為:ORDERBY排序列名ASC|DESCASC表示按升序排列,DESC按降序排列,其中升序ASC為缺省值。相關(guān)知識(shí)與技能(2)限制返回行數(shù)若要限制顯示查詢結(jié)果的行數(shù),可使用LIMIT子句。其語(yǔ)法格式為:

LIMIT[位置偏移值,]行數(shù);位置偏移值可選,表示從哪一行開始顯示,若不指定,默認(rèn)從第一條記錄開始,第一條記錄的位置偏移值為0。行數(shù)表示返回的記錄條數(shù)。如使用LIMIT10,則顯示查詢結(jié)果中最前面的10條記錄。LIMIT5,3,則顯示從第6條記錄行開始之后的3條記錄?!纠坎樵兎祷貙W(xué)生表中的最前面2條記錄作為樣本數(shù)據(jù)顯示。相關(guān)知識(shí)與技能【例】查詢所有學(xué)生的詳細(xì)信息,查詢結(jié)果按照出生年月降序排列?!纠坎樵兯袑W(xué)生的詳細(xì)信息,查詢結(jié)果按照班級(jí)編號(hào)升序排列,對(duì)同一個(gè)班的學(xué)生按照學(xué)號(hào)升序排列?!纠坎樵兯袑W(xué)生中年齡最大的那位學(xué)生的學(xué)號(hào)和姓名?!咀⒁狻縊RDERBY后可以跟多個(gè)關(guān)鍵字按多列排序,先按寫在前面的列排序,當(dāng)前面的列值相同時(shí),再按后面的列排序。其語(yǔ)法格式為:ORDERBY排序字段1ASC|DESC,排序字段2ASC|DESC任務(wù)實(shí)施任務(wù)總結(jié)整個(gè)SELECT語(yǔ)句的含義是:從FROM子句指定的表中,根據(jù)WHERE子句的行條件表達(dá)式找出滿足條件的行(記錄),再按SELECT子句中的列名或表達(dá)式選出記錄中的字段值形成查詢結(jié)果。如果有ORDERBY子句,則查詢結(jié)果還要按照排序列的值進(jìn)行升序或降序排列。如果有LIMIT子句,按照LIMIT限制的行數(shù)顯示結(jié)果。其語(yǔ)法格式如下:SELECT[ALL|DISTINCT]目標(biāo)列表達(dá)式FROM表名[WHERE行條件表達(dá)式][ORDERBY排序列[ASC|DESC]][LIMIT[位置偏移值,]行數(shù)];數(shù)據(jù)匯總統(tǒng)計(jì)任務(wù)提出在對(duì)表數(shù)據(jù)進(jìn)行查詢中,經(jīng)常會(huì)對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,如統(tǒng)計(jì)個(gè)數(shù)、平均值、最大最小值、計(jì)算總和等操作。另外,還會(huì)根據(jù)需要對(duì)數(shù)據(jù)進(jìn)行分開統(tǒng)計(jì)匯總,如統(tǒng)計(jì)各個(gè)班級(jí)的人數(shù)等操作。任務(wù)分析SQL提供了許多集函數(shù)對(duì)數(shù)據(jù)進(jìn)行各種統(tǒng)計(jì)計(jì)算。若需要對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)計(jì)算,GROUPBY子句就能夠?qū)崿F(xiàn)這種分組統(tǒng)計(jì)。1.集函數(shù)相關(guān)知識(shí)與技能集函數(shù)函數(shù)功能COUNT(*)統(tǒng)計(jì)表中元組的個(gè)數(shù)COUNT(列名)統(tǒng)計(jì)列值非空的個(gè)數(shù)(忽略NULL值)SUM(列名)計(jì)算列值的總和(須為數(shù)值型列,忽略NULL值)AVG(列名)計(jì)算列值的平均值(須為數(shù)值型列,忽略NULL值)MAX(列名)計(jì)算列值的最大值(忽略NULL值)MIN(列名)計(jì)算列值的最小值(忽略NULL值)Count(distinct列名)統(tǒng)計(jì)列中非空值的去除重復(fù)值之后的個(gè)數(shù)?!纠拷y(tǒng)計(jì)Student表中學(xué)生的記錄數(shù)?!纠坎樵冋n程編號(hào)為'2003003'課程的學(xué)生期末成績(jī)的最高分和最低分?!纠拷y(tǒng)計(jì)出信息工程學(xué)院的專業(yè)個(gè)數(shù)。任務(wù)實(shí)施2.分組統(tǒng)計(jì)先將表中數(shù)據(jù)分組,然后再對(duì)每個(gè)組進(jìn)行統(tǒng)計(jì)計(jì)算。GROUPBY分組列名【例】統(tǒng)計(jì)各班級(jí)學(xué)生人數(shù)?!纠拷y(tǒng)計(jì)各門課程學(xué)生的平時(shí)成績(jī)平均分、期末成績(jī)平均分。相關(guān)知識(shí)與技能3.對(duì)組篩選對(duì)查詢數(shù)據(jù)分組后對(duì)這些組按條件進(jìn)行篩選,輸出滿足條件的組。HAVING組篩選條件表達(dá)式【例】查詢出課程選課人數(shù)超過(guò)2人的課程編號(hào)?!纠坎樵兂鏊羞x修課程的平均期末成績(jī)小于50分的學(xué)生學(xué)號(hào)。相關(guān)知識(shí)與技能任務(wù)總結(jié)若要對(duì)數(shù)據(jù)庫(kù)表中數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,可使用集函數(shù)。若要對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì)計(jì)算,使用GROUPBY子句。若在表中數(shù)據(jù)分組后還要對(duì)這些組按條件進(jìn)行篩選,輸出滿足條件的組,則使用HAVING子句。

SELECT[ALL|DISTINCT]目標(biāo)列表達(dá)式

FROM表名

[WHERE行條件表達(dá)式]

[GROUPBY分組列名]

[HAVING組篩選條件表達(dá)式]

[ORDERBY排序列名[ASC|DESC]];多表連接查詢?nèi)蝿?wù)提出在實(shí)際應(yīng)用中,查詢往往是針對(duì)多個(gè)表進(jìn)行的,可能涉及二張或更多張表。任務(wù)分析在關(guān)系型數(shù)據(jù)庫(kù)中,將這種涉及到兩個(gè)或兩個(gè)以上表的查詢,稱為多表連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫(kù)中最重要的查詢。連接查詢根據(jù)返回的連接記錄情況,分為“內(nèi)連接”和“外連接”查詢。1.內(nèi)連接返回多個(gè)表中滿足連接條件的記錄。連接條件指明兩個(gè)表按照什么條件進(jìn)行連接。<表名1.列名1><比較運(yùn)算符><表名2.列名2>等值連接:比較運(yùn)算符為“=”。非等值連接:用了其他運(yùn)算符的連接。【例】Student和Score表的連接條件。Student.Sno=Score.Sno相關(guān)知識(shí)與技能(1)連接條件的指定連接條件的指定可在FROM子句或WHERE子句中。在舊式的SQL語(yǔ)句中:FROM表名1,表名2WHERE<連接條件>在ANSISQL-92中:FROM表名1[INNER]JOIN表名2ON<連接條件>建議使用在FROM子句中指定連接條件。相關(guān)知識(shí)與技能【例】查詢所有學(xué)生選修課程的詳細(xì)信息,結(jié)果包含學(xué)號(hào)、課程編號(hào)、課程名稱、課程學(xué)分、平時(shí)成績(jī)、期末成績(jī)。USESchool;SELECTSno,Score.Cno,Cname,Credit,Uscore,EndscoreFROMScoreJOINCourseONScore.Cno=Course.Cno;注意:對(duì)于在查詢引用的多個(gè)表中重復(fù)的列名必須指定表名,即表名.列名。任務(wù)實(shí)施(2)給表指定別名如果表名比較復(fù)雜,可以給表指定別名。FROM表名1AS表別名JOIN表名2AS表別名ON<連接條件>或者FROM表名1表別名JOIN表名2表別名ON<連接條件>【例】查詢計(jì)算機(jī)093班學(xué)生的學(xué)號(hào)和姓名。SELECTSno,SnameFROMStudentASsJOINClassAScONs.Classno=c.ClassnoWHEREClassName='計(jì)算機(jī)093';相關(guān)知識(shí)與技能(3)三張表或更多表的連接多表連接可能涉及三張表或更多表的連接。連接實(shí)現(xiàn)的步驟是:先兩張表進(jìn)行連接形成虛表1,虛表1與第三張表進(jìn)行連接形成虛表2,虛表2與第四張表進(jìn)行連接形成虛表3,……最后對(duì)虛表n進(jìn)行查詢得出查詢結(jié)果。相關(guān)知識(shí)與技能任務(wù)實(shí)施【例】查詢所有學(xué)生的學(xué)號(hào)、姓名、班級(jí)名稱、選修的課程編號(hào)及平時(shí)成績(jī)。SELECTStudent.Sno,Sname,ClassName,Cno,UscoreFROMClassJOINStudentONClass.ClassNo=Student.ClassNoJOINScoreONStudent.Sno=Score.Sno;(4)自連接查詢一個(gè)連接查詢中涉及的兩個(gè)表都是同一個(gè)表。必須對(duì)表指定別名。FROM表名別名1JOIN表名別名2ON<連接條件>【例】查詢出與'陳國(guó)成'同班的學(xué)生詳細(xì)信息。SELECTs2.*FROMStudents1

JOINStudents2ONs1.ClassNo=s2.ClassNoWHEREs1.Sname='陳國(guó)成'ANDS2.Sname!='陳國(guó)成';相關(guān)知識(shí)與技能2.外連接除返回內(nèi)部連接的記錄以外,還在查詢結(jié)果中返回左表或右表中不符合條件的記錄。相關(guān)知識(shí)與技能外連接(1)左外連接FROM表名1LEFT[OUTER]JOIN表名2ON<連接條件>【例】查詢所有學(xué)生的詳細(xì)信息及其選課信息,如果學(xué)生沒有選課,也顯示其詳細(xì)信息。SELECTStudent.*,Cno,UScore,EndScoreFROMStudentLEFTJOINScoreONStudent.Sno=Score.Sno;相關(guān)知識(shí)與技能外連接(2)右外連接FROM表名1RIGHT[OUTER]JOIN表名2ON<連接條件>【例】查詢所有學(xué)生的詳細(xì)信息及其選課信息,如果學(xué)生沒有選課,也顯示其詳細(xì)信息。SELECTStudent.*,Cno,UScore,EndScoreFROMScoreRIGHTJOINStudentONStudent.Sno=Score.Sno;相關(guān)知識(shí)與技能任務(wù)總結(jié)多表連接查詢是關(guān)系數(shù)據(jù)庫(kù)中最重要的查詢。連接查詢分為內(nèi)連接和外連接查詢。其中內(nèi)連接查詢是實(shí)際應(yīng)用中最常用的。SELECT[ALL|DISTINCT]目標(biāo)列表達(dá)式FROM表名1[JOIN表名2ON表名1.列名1=表名2.列名2][WHERE行條件表達(dá)式][GROUPBY分組列名][HAVING組篩選條件表達(dá)式][ORDERBY排序列名[ASC|DESC]];子查詢?nèi)蝿?wù)提出當(dāng)查詢涉及多張表時(shí),習(xí)慣的做法是使用連接查詢,先將涉及的多張表連接起來(lái)。對(duì)于查詢結(jié)果只涉及一張表,而查詢條件涉及其他一張或多張表的查詢,除了使用多表連接查詢外,可以使用嵌套查詢。另外,部分查詢的條件復(fù)雜,如,查詢出選修“2003003”課程且平時(shí)成績(jī)低于本課程平時(shí)成績(jī)的平均分的學(xué)生學(xué)號(hào),查詢選修了全部課程的學(xué)生姓名。這些查詢無(wú)法使用多表連接查詢實(shí)現(xiàn),需要使用嵌套查詢實(shí)現(xiàn)。任務(wù)分析在一個(gè)SELECT語(yǔ)句的WHERE子句中的行條件表達(dá)式或HAVING子句中的組篩選條件中,含有另一個(gè)SEELCT語(yǔ)句,這種查詢稱為嵌套查詢。根據(jù)內(nèi)部查詢的查詢條件是否依賴于外部查詢,可將嵌套查詢分為:不相關(guān)子查詢相關(guān)子查詢1.不相關(guān)子查詢根據(jù)外部查詢和內(nèi)部查詢連接的關(guān)鍵字,可將不相關(guān)子查詢分為:帶比較運(yùn)算符的子查詢帶IN、NOTIN關(guān)鍵字的子查詢帶ANY、ALL關(guān)鍵字的子查詢相關(guān)知識(shí)與技能(1)帶比較運(yùn)算符的子查詢外層查詢與內(nèi)層查詢之間可以用>、<、=、>=、<=、!=或<>等比較運(yùn)算符進(jìn)行連接。【例】查詢'數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用1'課程學(xué)生的選課信息。SELECT*FROMScoreWHERECno=(SELECTCnoFROMCourseWHERECname='數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用1');先求解出內(nèi)層查詢結(jié)果,內(nèi)層查詢只執(zhí)行一次,執(zhí)行完畢后將結(jié)果傳遞給外層查詢。相關(guān)知識(shí)與技能(2)帶IN、NOTIN關(guān)鍵字的子查詢子查詢的結(jié)果往往是一個(gè)集合。【例】查詢出選修了課程編號(hào)為'0901169'課程的學(xué)生姓名和班級(jí)編號(hào)。SELECTSname,ClassNoFROMStudentWHERESnoIN(SELECTSnoFROMScoreWHERECno='0901169');【注意】IN前面必須有字段名,IN前面的字段名必須與子查詢中SELECT后的字段名對(duì)應(yīng)。相關(guān)知識(shí)與技能【例】查詢出選修了'數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用1'課程的學(xué)生姓名和班級(jí)編號(hào)?!纠坎樵兂鲞x修'2003003'課程且平時(shí)成績(jī)低于本課程平時(shí)成績(jī)的平均值的學(xué)生學(xué)號(hào)?!纠坎樵儧]有選修課程編號(hào)為‘0901170’的學(xué)生學(xué)號(hào)和姓名。任務(wù)實(shí)施(3)帶ANY、ALL關(guān)鍵字的子查詢使用ANY或ALL關(guān)鍵字時(shí)必須同時(shí)使用比較運(yùn)算符。>ANY

大于子查詢結(jié)果中的某個(gè)值>ALL

大于子查詢結(jié)果中的所有值【例】查詢男生中比任意一個(gè)女生年齡小的男生姓名和出生年月。SELECTSname,BirthFROMStudentWHERESex='男'ANDBirth>ANY(SELECTBirthFROMStudentWHERESex='女');相關(guān)知識(shí)與技能帶ANY、ALL關(guān)鍵字的子查詢【例】查詢男生中比所有女生年齡小的男生姓名和出生年月。SELECTSname,BirthFROMStudentWHERESex='男'ANDBirth>ALL(SELECTBirthFROMStudentWHERESex='女');相關(guān)知識(shí)與技能2.相關(guān)子查詢(1)帶EXISTS、NOTEXISTS關(guān)鍵字的子查詢【例】查詢出選修了課程編號(hào)為'0901169'課程的學(xué)生姓名和班級(jí)編號(hào)。SELECTSname,ClassNoFROMStudentWHEREEXISTS(SELECT*FROMScoreWHERESno=Student.SnoANDCno='0901169');【注意】EXISTS關(guān)鍵字前面沒有字段名,子查詢的SELECT后為*,子查詢中的WHERE條件中必須有連接條件關(guān)聯(lián)外部表。相關(guān)知識(shí)與技能【例】查詢沒有選修課程編號(hào)為'0901170'的學(xué)生學(xué)號(hào)和姓名。SELECTSno,SnameFROMStudentWHERENOTEXISTS (SELECT*

FROMScore WHERESno=student.SnoANDCno='0901170');任務(wù)實(shí)施【例】查詢選修了全部課程的學(xué)生姓名。SELECTSname FROMStudent WHERENOTEXISTS (SELECT* FROMCourse WHERENOTEXISTS (SELECT* FROMScore WHERESno=Student.SnoANDCno=Course.Cno) );任務(wù)實(shí)施(2)帶IN與EXISTS的子查詢的區(qū)別IN是子表為驅(qū)動(dòng)表,父表為被驅(qū)動(dòng)表,故適用于子表查詢結(jié)果集小而父表結(jié)果集大的情況。EXISTS是父表為驅(qū)動(dòng)表,子表為被驅(qū)動(dòng)表,故適用于父表結(jié)果集小而子表查詢結(jié)果集大的情況。NOTIN不對(duì)NULL進(jìn)行處理,NOTEXISTS會(huì)對(duì)NULL值進(jìn)行處理。當(dāng)子查詢結(jié)果中有空值時(shí),必須使用NOTEXISTS。相關(guān)知識(shí)與技能任務(wù)總結(jié)當(dāng)查詢結(jié)果只涉及一張表,而查詢條件涉及另外表,既可以使用連接查詢,又可以使用嵌套查詢,建議采用連接查詢。當(dāng)查詢結(jié)果涉及多張表,必須采用連接查詢。部分查詢的條件選擇只能使用嵌套。數(shù)據(jù)更新任務(wù)提出對(duì)數(shù)據(jù)的操作除了常用的查詢操作外,還包括日常必做的插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)等操作。插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)操作統(tǒng)稱為數(shù)據(jù)更新。任務(wù)分析在數(shù)據(jù)操作中,操作的對(duì)象都是記錄,而不是記錄中的某個(gè)數(shù)據(jù)。插入數(shù)據(jù)指往表中插入一條記錄或多條記錄,對(duì)應(yīng)的SQL語(yǔ)句是INSERT語(yǔ)句。修改數(shù)據(jù)指對(duì)表中現(xiàn)有記錄進(jìn)行修改,對(duì)應(yīng)語(yǔ)句是UPDATE語(yǔ)句。刪除數(shù)據(jù)指刪除指定的記錄,對(duì)應(yīng)語(yǔ)句是DELETE語(yǔ)句。1.插入記錄INSERTINTO表名[(列名1,列名2,……,列名N)]VALUES(常量1,……,常量N)[,(常量1,……,常量N)];其功能是:將VALUES后面的常量插入到表中新記錄的對(duì)應(yīng)列中。在MySQL中,一次可以同時(shí)插入多條記錄,在VALUES后以逗號(hào)分隔。相關(guān)知識(shí)與技能【例】往School數(shù)據(jù)庫(kù)的Class表中插入記錄。任務(wù)實(shí)施2.往已有表中插入查詢結(jié)果INSERTINTO表名[(列名1,列名2,……,列名N)]SELECT查詢語(yǔ)句;其功能是:將SELECT查詢語(yǔ)句查詢的結(jié)果插入到表中。但前提是該表必須已經(jīng)存在,而且表中的字段數(shù)據(jù)類型和長(zhǎng)度都要與查詢結(jié)果中的字段一致。相關(guān)知識(shí)與技能【例】假如在School數(shù)據(jù)庫(kù)中已為班級(jí)編號(hào)為'202201001'的班級(jí)學(xué)生單獨(dú)建了一個(gè)空表JSJ,其中包含學(xué)號(hào)、姓名、性別和班級(jí)編號(hào)四個(gè)字段,字段的數(shù)據(jù)類型和長(zhǎng)度都與Student表相同,現(xiàn)要從Student表中查詢出該班學(xué)生信息插入到JSJ表中。任務(wù)實(shí)施3.生成一張新表并插入查詢結(jié)果CREATETABLE新表名SELECT語(yǔ)句;其功能是:創(chuàng)建一個(gè)新表,并將查詢結(jié)果存放到該新表中。新表不能事先存在,新表的結(jié)構(gòu)包括列名、數(shù)據(jù)類型和長(zhǎng)度都由SELECT查詢語(yǔ)句決定。相關(guān)知識(shí)與技能臨時(shí)表MySQL臨時(shí)表在我們需要保存一些臨時(shí)數(shù)據(jù)時(shí)是非常有用的。臨時(shí)表只在當(dāng)前連接可見,當(dāng)關(guān)閉連接時(shí),MySQL會(huì)自動(dòng)刪除表并釋放所有空間。臨時(shí)表的定義和數(shù)據(jù)都保存在內(nèi)存中。使用SHOWTABLES命令是無(wú)法查看臨時(shí)表的,可以通過(guò)SELECT語(yǔ)句查看臨時(shí)表中的記錄。相關(guān)知識(shí)與技能創(chuàng)建臨時(shí)表創(chuàng)建臨時(shí)表的語(yǔ)法與創(chuàng)建表語(yǔ)法類似,不同之處是增加關(guān)鍵字TEMPORARY。CREATETEMPORARYTABLE臨時(shí)表名

(……);常見的應(yīng)用是將查詢結(jié)果存放到臨時(shí)表中:CREATETEMPORARYTABLE臨時(shí)表名

SELECT語(yǔ)句;相關(guān)知識(shí)與技能【例】查詢班級(jí)編號(hào)為‘202201002’的班級(jí)學(xué)生信息,將查詢結(jié)果存放到臨時(shí)表中,表名為JSJ2。CREATETEMPORARYTABLEJSJ2 SELECTSno,Sname,Sex,Birth FROMStudent WHEREClassNo='202201002';任務(wù)實(shí)施4.修改數(shù)據(jù)UPDATE表名

SET列名1=<修改后的值>[,列名2=<修改后的值>,……]

[WHERE行條件表達(dá)式]

[ORDERBY排序列名]

[LIMIT行數(shù)];其功能是:對(duì)表中滿足WHERE條件的記錄進(jìn)行修改,由SET子句將修改后的值替換相應(yīng)列的值。若不使用WHERE子句,則修改所有記錄的指定列的值。<修改后的值>可以是具體的常量值,也可以是表達(dá)式。OEDERBY子句用于按指定的順序更新行。LIMIT子句限制可更新的行數(shù)。相關(guān)知識(shí)與技能【例】在School數(shù)據(jù)庫(kù)中將Sno為“202231010100102”、Cno為“0901170”的平時(shí)成績(jī)修改為80分?!纠繉⑦x修"0901170"課程的平時(shí)成績(jī)最低的2位學(xué)生的平時(shí)成績(jī)提高2分。任務(wù)實(shí)施5.刪除數(shù)據(jù)DELETEFROM表名

[WHERE行條件表達(dá)式]

[ORDERBY排序列名]

[LIMIT行數(shù)];其功能是:刪除表中滿足WHERE條件的所有記錄。如果不使用WHERE子句,則刪除表中的所有記錄。OEDERBY子句用于按指定的順序刪除行。LIMIT子句限制最大可刪的行數(shù)。相關(guān)知識(shí)與技能【例】刪除Sno為'200931010100322'的學(xué)生選修課程編號(hào)為'0901025'的課程的選課記錄。DELETEFROMScoreWHERESno='200931010100322'ANDCno='0901025';任務(wù)實(shí)施6.更新多張表中數(shù)據(jù)(1)修改多張表中記錄UPDATE表1,表2,…

SET表1.列1=值1,表2.列1=值2,表1.列2=表2.列3,…

WHERE多表連接條件;(2)刪除多張表中記錄DELETE要?jiǎng)h除記錄的表名,…

FROM表名1INNERJOIN表名2ON連接條件…

WHERE刪除條件;相關(guān)知識(shí)與技能【例】在School數(shù)據(jù)庫(kù)中將課程'數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用1'的課程學(xué)時(shí)改為60,并將選修了該課程學(xué)生的平時(shí)成績(jī)?cè)黾?分?!纠吭赟chool數(shù)據(jù)庫(kù)中將課程'數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用1'的所有課程期末成績(jī)置為0分。【例】在School數(shù)據(jù)庫(kù)中刪除課程名稱包含'數(shù)據(jù)庫(kù)'的所有選課記錄?!纠吭赟chool數(shù)據(jù)庫(kù)中刪除Course表中與Score表不匹配的行,即Course表中課程沒有選課記錄的課程基本信息。任務(wù)實(shí)施更新多張表中數(shù)據(jù)(3)使用子查詢子查詢可以嵌套在UPDATE語(yǔ)句的WHERE子句或SET子句中。也同樣可以嵌套在DELETE語(yǔ)句中,用以構(gòu)造執(zhí)行刪除操作的條件?!纠吭赟chool數(shù)據(jù)庫(kù)中將課程'數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用1'的所有課程期末成績(jī)置為空?!纠吭赟chool數(shù)據(jù)庫(kù)中將學(xué)號(hào)為“202231010100207”這個(gè)學(xué)生轉(zhuǎn)到“電商221”班?!纠吭赟chool數(shù)據(jù)庫(kù)中刪除課程名稱包含'數(shù)據(jù)庫(kù)'的所有選課記錄。相關(guān)知識(shí)與技能任務(wù)總結(jié)數(shù)據(jù)更新包括插入記錄、修改記錄和刪除記錄。記錄的SQL語(yǔ)句為INSERT語(yǔ)句;修改記錄的語(yǔ)句為UPDATE語(yǔ)句;刪除記錄的語(yǔ)句為DELETE語(yǔ)句。級(jí)聯(lián)更新、級(jí)聯(lián)刪除任務(wù)提出InnoDB存儲(chǔ)引擎支持外鍵,為了保證表間數(shù)據(jù)的一致性,我們往往會(huì)設(shè)置外鍵約束。那么,在對(duì)表數(shù)據(jù)操作時(shí),必須滿足參照完整性。如要?jiǎng)h除的主表記錄在從表中存在相關(guān)記錄,則不能直接刪除主表中的該記錄。如要修改的字段上設(shè)置過(guò)表間關(guān)系,也要保證修改后的值滿足參照完整性。任務(wù)分析本任務(wù)采用級(jí)聯(lián)更新、級(jí)聯(lián)刪除的方法實(shí)現(xiàn)主表和子表中相關(guān)記錄的更新、刪除。1.級(jí)聯(lián)更新級(jí)聯(lián)更新指修改主表中主鍵字段的值,其對(duì)應(yīng)從表中外鍵字段的相應(yīng)值自動(dòng)修改。(1)創(chuàng)建外鍵約束時(shí)加上ONUPDATECASCADEFOREIGNKEY(外鍵字段)REFERENCES主表(主鍵字段)ONUPDATECASCADE(2)外鍵約束已經(jīng)存在,沒有設(shè)置級(jí)聯(lián)更新,則刪除原有外鍵約束,添加新的外鍵約束。查看表的建表信息得到外鍵約束名:SHOWCREATETABLE表名;刪除外鍵約束:ALTERTABLE表名DROPFOREIGNKEY外鍵約束名;添加新的外鍵約束:ALTERTABLE從表

ADD[CONSTRAINT外鍵約束名]FOREIGNKEY(外鍵字段)REFERENCES主表(主鍵字段)ONUPDATECASCADE;相關(guān)知識(shí)與技能

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論