版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章MySQL查詢(xún)和視圖——MySQL數(shù)據(jù)查詢(xún)MySQL教程(第2版)MySQL數(shù)據(jù)庫(kù)查詢(xún)使用SELECT語(yǔ)句可以從一個(gè)或多個(gè)表中選取符合某種條件的特定的行和列,結(jié)果通常是生成一個(gè)臨時(shí)表。下面介紹SELECT語(yǔ)句,它是SQL的核心。SELECT語(yǔ)句的語(yǔ)法格式如下:SELECT [ALL|DISTINCT|DISTINCTROW]
列... [FROM表...] [WHERE條件] [GROUPBY{列名|表達(dá)式|position}[ASC|DESC],...] [HAVING條件] [ORDERBY{列名|表達(dá)式|position}[ASC|DESC],...]01選擇輸出列1.選擇指定的列2.定義列別名3.替換查詢(xún)結(jié)果中的數(shù)據(jù)4.計(jì)算列值5.消除結(jié)果集中的重復(fù)行6.聚合函數(shù)選擇輸出列1.選擇指定的列使用SELECT語(yǔ)句選擇一個(gè)表中的某些列,各列名之間要以逗號(hào)分隔,所有列用“*”表示。語(yǔ)法格式為如下:SELECT*|列名,列名,...FROM表名【例3.1】查詢(xún)xscj數(shù)據(jù)庫(kù)的xs表中各個(gè)學(xué)生的姓名、專(zhuān)業(yè)名和總學(xué)分。USExscj SELECT姓名,專(zhuān)業(yè)名,總學(xué)分 FROMxs;選擇輸出列2.定義列別名當(dāng)希望查詢(xún)結(jié)果中的列標(biāo)題顯示為自己選擇的列標(biāo)題,可以在列名之后使用AS子句。語(yǔ)法格式如下:SELECT...列名[AS列別名]【例3.2】查詢(xún)xs表中計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的學(xué)號(hào)、姓名和總學(xué)分,將結(jié)果中各列的標(biāo)題分別指定為number、name和mark。SELECT學(xué)號(hào)ASnumber,姓名ASname,總學(xué)分ASmark FROMxs WHERE專(zhuān)業(yè)名='計(jì)算機(jī)';執(zhí)行結(jié)果如圖。選擇輸出列3.替換查詢(xún)結(jié)果中的數(shù)據(jù)語(yǔ)法格式如下:CASE WHEN條件1THEN表達(dá)式1 WHEN條件2THEN表達(dá)式2 ... ELSE表達(dá)式NEND【例3.3】查詢(xún)xs表中計(jì)算機(jī)專(zhuān)業(yè)各學(xué)生的學(xué)號(hào)、姓名和總學(xué)分,對(duì)總學(xué)分按如下規(guī)則進(jìn)行替換:若總學(xué)分為空值,替換為“尚未選課”;若總學(xué)分小于15,替換為“不及格”;若總學(xué)分為15~50,替換為“合格”;若總學(xué)分大于50,替換為“優(yōu)秀”;將總學(xué)分列的標(biāo)題更改為“等級(jí)”。選擇輸出列替換操作代碼如下:SELECT學(xué)號(hào),姓名,CASE WHEN總學(xué)分ISNULLTHEN'尚未選課’ WHEN總學(xué)分<15THEN'不及格’ WHEN總學(xué)分>=15AND總學(xué)分<=50THEN'合格’ ELSE'優(yōu)秀'ENDAS等級(jí)FROMxsWHERE專(zhuān)業(yè)名='計(jì)算機(jī)';執(zhí)行結(jié)果如圖。選擇輸出列4.計(jì)算列值輸出列可使用表達(dá)式表示。語(yǔ)法格式如下:SELECT表達(dá)式...【例3.4】按120分制重新計(jì)算成績(jī),顯示cj表中學(xué)號(hào)為221101學(xué)生的成績(jī)信息。SELECT學(xué)號(hào),課程號(hào),成績(jī)*1.20AS成績(jī)120 FROMcj WHERE學(xué)號(hào)='221101';執(zhí)行結(jié)果如圖。選擇輸出列5.消除結(jié)果集中的重復(fù)行對(duì)表只選擇其某些列時(shí),輸出的結(jié)果可能會(huì)出現(xiàn)重復(fù)行。語(yǔ)法格式如下:SELECTDISTINCT|DISTINCTROW列名...【例3.5】對(duì)xs表只選擇專(zhuān)業(yè)名列和總學(xué)分列,消除結(jié)果集中的重復(fù)行。SELECTDISTINCT專(zhuān)業(yè)名,總學(xué)分 FROMxs;執(zhí)行結(jié)果如圖。選擇輸出列6.聚合函數(shù)SELECT的輸出列還可以包含所謂的聚合函數(shù)。聚合函數(shù)常常用于對(duì)一組值進(jìn)行計(jì)算,然后返回單個(gè)值。除COUNT()函數(shù)外,聚合函數(shù)都會(huì)忽略空值。表3.1列出了一些常用的聚合函數(shù)。函
數(shù)
名說(shuō)
明COUNT()統(tǒng)計(jì)記錄數(shù),返回int類(lèi)型整數(shù)MAX()求最大值MIN()求最小值SUM()返回表達(dá)式中所有值的和AVG()求組中值的平均值STD()或STDDEV()返回給定表達(dá)式中所有值的標(biāo)準(zhǔn)差VARIANCE()返回給定表達(dá)式中所有值的方差GROUP_CONCAT()返回由屬于一組的列值連接組合而成的結(jié)果BIT_AND()邏輯或BIT_OR()邏輯與BIT_XOR()邏輯異或選擇輸出列(1)COUNT()函數(shù)COUNT()函數(shù)用于統(tǒng)計(jì)組中滿(mǎn)足條件的行數(shù)或總行數(shù),返回SELECT語(yǔ)句檢索到的行中非NULL值的數(shù)目,若找不到匹配的行,則返回0。語(yǔ)法格式如下:COUNT({[ALL|DISTINCT]表達(dá)式}|*)其中,表達(dá)式的數(shù)據(jù)類(lèi)型可以是除BLOB或TEXT之外的任何類(lèi)型。ALL表示對(duì)所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,默認(rèn)值為ALL。使用COUNT(*)時(shí)將返回檢索行的總數(shù)目,不論其是否包含NULL值。【例3.6】求學(xué)生的總數(shù)。SELECTCOUNT(*)AS'學(xué)生總數(shù)’ FROMxs;執(zhí)行結(jié)果如圖。選擇輸出列【例3.7】統(tǒng)計(jì)備注不為空的學(xué)生數(shù)目。SELECTCOUNT(備注)AS'備注不為空的學(xué)生數(shù)目’ FROMxs;執(zhí)行結(jié)果如圖。【例3.8】統(tǒng)計(jì)總學(xué)分在50分以上的人數(shù)。SELECTCOUNT(總學(xué)分)AS'總學(xué)分50分以上的人數(shù)’ FROMxs WHERE總學(xué)分>50;執(zhí)行結(jié)果如圖。選擇輸出列(2)MAX()函數(shù)和MIN()函數(shù)MAX()函數(shù)和MIN()函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值。語(yǔ)法格式如下:MAX/MIN([ALL|DISTINCT]表達(dá)式)【例3.9】求選修101課程的學(xué)生的最高分和最低分。SELECTMAX(成績(jī)),MIN(成績(jī)) FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖。選擇輸出列(3)SUM()函數(shù)和AVG()函數(shù)SUM()函數(shù)和AVG()函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值。語(yǔ)法格式如下:SUM/AVG([ALL|DISTINCT]表達(dá)式)【例3.10】求學(xué)號(hào)為221101的學(xué)生所學(xué)課程的總成績(jī)。SELECTSUM(成績(jī))AS'課程總成績(jī)’ FROMcj WHERE學(xué)號(hào)='221101';執(zhí)行結(jié)果如圖?!纠?.11】求選修101課程的學(xué)生的平均成績(jī)。SELECTAVG(成績(jī))AS'課程101平均成績(jī)’ FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖。選擇輸出列(4)VARIANCE()函數(shù)和STDDEV()函數(shù)VARIANCE()函數(shù)和STDDEV()函數(shù)分別用于計(jì)算特定的表達(dá)式中的所有值的方差和標(biāo)準(zhǔn)差。語(yǔ)法格式如下:VARIANCE/STDDEV([ALL|DISTINCT]表達(dá)式)【例3.12】求選修101課程的成績(jī)的方差。SELECTVARIANCE(成績(jī)) FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖?!纠?.13】求選修101課程的成績(jī)的標(biāo)準(zhǔn)差。SELECTSTDDEV(成績(jī)) FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖。選擇輸出列(5)GROUP_CONCAT()函數(shù)MySQL支持一個(gè)特殊的聚合函數(shù)GROUP_CONCAT()。該函數(shù)返回來(lái)自一個(gè)組中指定列的所有非NULL值,這些值一個(gè)接著一個(gè)放置,中間用逗號(hào)隔開(kāi),并表示為一個(gè)長(zhǎng)長(zhǎng)的字符串。這個(gè)字符串的長(zhǎng)度是有限制的,標(biāo)準(zhǔn)值是1024。語(yǔ)法格式如下:GROUP_CONCAT({[ALL|DISTINCT]表達(dá)式}|*)【例3.14】查詢(xún)選修了206課程的學(xué)生的學(xué)號(hào)。SELECTGROUP_CONCAT(學(xué)號(hào)) FROMcj WHERE課程號(hào)='206';執(zhí)行結(jié)果如圖。選擇輸出列(6)BIT_AND()函數(shù)、BIT_OR()函數(shù)和BIT_XOR()函數(shù)。存在與二進(jìn)制運(yùn)算符&(與)、|(或)和^(異或)相對(duì)應(yīng)的聚合函數(shù),分別是BIT_AND、BIT_OR、BIT_XOR。語(yǔ)法格式如下:BIT_AND|BIT_OR|BIT_XOR({[ALL|DISTINCT]表達(dá)式}|*)【例3.15】有一個(gè)表bits,其中有一列bin_value上有3個(gè)integer值,即1、3、7,獲取在該列上執(zhí)行BIT_OR的結(jié)果。SELECTBIN(BIT_OR(bin_value)) FROMbits;02數(shù)據(jù)來(lái)源1.引用一個(gè)表2.多表連接數(shù)據(jù)來(lái)源1.引用一個(gè)表用戶(hù)可以用如下兩種方式引用表。第一種方式是使用USE語(yǔ)句讓一個(gè)數(shù)據(jù)庫(kù)成為當(dāng)前數(shù)據(jù)庫(kù),F(xiàn)ROM子句中指定表名應(yīng)該屬于當(dāng)前數(shù)據(jù)庫(kù)。第二種方式是在指定表名前帶上表所屬數(shù)據(jù)庫(kù)的名字。例如,假設(shè)當(dāng)前數(shù)據(jù)庫(kù)是db1,現(xiàn)在要顯示數(shù)據(jù)庫(kù)db2里的表tb的內(nèi)容,使用如下語(yǔ)句:SELECT*FROMdb2.tb;數(shù)據(jù)來(lái)源2.多表連接(1)全連接。將各個(gè)表用逗號(hào)分隔,就指定了一個(gè)全連接。使用FROM子句產(chǎn)生的中間結(jié)果是一個(gè)新表,新表是每個(gè)表的每行都與其他表中的每行交叉以產(chǎn)生的所有可能組合。這種連接方式會(huì)潛在地產(chǎn)生數(shù)量非常多的行,因?yàn)榭赡艿玫降男袛?shù)為每個(gè)表行數(shù)之積!使用WHERE子句設(shè)定條件將結(jié)果集減小為易于管理的大小,這樣的連接即等值連接(連接條件中兩表對(duì)應(yīng))?!纠?.16】查找所有學(xué)生選過(guò)的課程名和課程號(hào)。使用如下語(yǔ)句:SELECTDISTINCTkc.課程名,cj.課程號(hào)FROMkc,cjWHEREkc.課程號(hào)=cj.課程號(hào);執(zhí)行結(jié)果如圖。數(shù)據(jù)來(lái)源(2)JOIN連接。語(yǔ)法格式如下:JOIN表ON連接條件使用JOIN關(guān)鍵字的連接主要分為如下3種。①內(nèi)連接。指定了INNER關(guān)鍵字的連接是內(nèi)連接?!纠?.17】查找所有學(xué)生選過(guò)的課程名和課程號(hào)??梢允褂靡韵抡Z(yǔ)句:SELECTDISTINCT課程名,cj.課程號(hào) FROMkcINNER JOINcjON(kc.課程號(hào)=cj.課程號(hào));它的功能是合并兩個(gè)表,返回滿(mǎn)足條件的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可以省略INNER關(guān)鍵字。數(shù)據(jù)來(lái)源【例3.18】查找選修了206課程且成績(jī)?yōu)?0分及以上的學(xué)生的姓名及成績(jī)。SELECT姓名,成績(jī) FROMxsJOINcjONxs.學(xué)號(hào)=cj.學(xué)號(hào) WHERE課程號(hào)='206'AND成績(jī)>=80;執(zhí)行結(jié)果如圖。數(shù)據(jù)來(lái)源【例3.19】查找選修了“計(jì)算機(jī)導(dǎo)論”課程且成績(jī)?yōu)?0分及以上學(xué)生的學(xué)號(hào)、姓名、課程名及成績(jī)。SELECTxs.學(xué)號(hào),姓名,課程名,成績(jī) FROMxsJOINcjONxs.學(xué)號(hào)=cj.學(xué)號(hào) JOINkcONcj.課程號(hào)=kc.課程號(hào) WHERE課程名='計(jì)算機(jī)導(dǎo)論'AND成績(jī)>=80;執(zhí)行結(jié)果如圖。數(shù)據(jù)來(lái)源【例3.20】查找課程不同、成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。SELECTa.學(xué)號(hào),a.課程號(hào),b.課程號(hào),a.成績(jī) FROMcjASa JOINcjASbONa.成績(jī)=b.成績(jī)ANDa.學(xué)號(hào)=b.學(xué)號(hào)ANDa.課程號(hào)!=b.課程號(hào);執(zhí)行結(jié)果如圖?!纠?.21】查找kc表中所有學(xué)生選過(guò)的課程名。SELECT課程名 FROMkcINNERJOINcjUSING(課程號(hào));數(shù)據(jù)來(lái)源②外連接。指定了OUTER關(guān)鍵字的連接為外連接,其中的OUTER關(guān)鍵字均可省略。外連接包括以下。左外連接(LEFTOUTERJOIN):結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行,對(duì)于這樣的行,右表被選擇的列輸出為NULL。右外連接(RIGHTOUTERJOIN):結(jié)果表中除了匹配行外,還包括右表有的但左表中不匹配的行,對(duì)于這樣的行,從左表被選擇的列設(shè)置為NULL。自然連接(NATURALJOIN):自然連接包括自然左外連接(NATURALLEFTOUTERJOIN)和自然右外連接(NATURALRIGHTOUTERJOIN)?!纠?.22】查找所有學(xué)生情況及他們選修的課程號(hào),若學(xué)生未選修任何課,也要顯示其情況。SELECTxs.*,課程號(hào) FROMxsLEFTOUTERJOINcjONxs.學(xué)號(hào)=cj.學(xué)號(hào);數(shù)據(jù)來(lái)源【例3.23】查找被選修了的課程的選修情況和所有開(kāi)設(shè)的課程名。SELECTcj.*,課程名 FROMcjRIGHTJOINkcONcj.課程號(hào)=kc.課程號(hào);結(jié)果顯示如圖?!纠?.24】使用自然連接查詢(xún)所有學(xué)生選過(guò)的課程名和課程號(hào)。SELECT課程名,課程號(hào)FROMkc WHERE課程號(hào)IN (SELECTDISTINCT課程號(hào)FROMkcNATURALRIGHTOUTERJOINcj);數(shù)據(jù)來(lái)源③交叉連接。指定了CROSSJOIN關(guān)鍵字的連接是交叉連接。在不包含連接條件時(shí),交叉連接結(jié)果表是由第一個(gè)表的每一行與第二個(gè)表的每一行拼接后形成的表,因此結(jié)果表的行數(shù)等于兩個(gè)表行數(shù)之積。在MySQL中,CROSSJOIN語(yǔ)法上與INNERJOIN等同,兩者可以互換。【例3.25】列出學(xué)生所有可能的選課情況。SELECT學(xué)號(hào),姓名,課程號(hào),課程名 FROMxsCROSSJOINkc;另外,STRAIGHT_JOIN連接用法和INNERJOIN連接基本相同。不同的是,STRAIGHT_JOIN后不可以使用USING子句替代ON條件?!纠?.26】使用STRAIGHT_JOIN連接查找所有學(xué)生選過(guò)的課程名和課程號(hào)。SELECTDISTINCT課程名,cj.課程號(hào) FROMkcSTRAIGHT_JOINcjON(kc.課程號(hào)=cj.課程號(hào));03查詢(xún)條件1.比較運(yùn)算2.模式匹配3.范圍比較4.空值比較5.子查詢(xún)查詢(xún)條件WHERE子句的基本格式為:WHERE條件條件格式如下:表達(dá)式<比較運(yùn)算符>表達(dá)式 /*比較運(yùn)算*/|邏輯表達(dá)式<邏輯運(yùn)算符>邏輯表達(dá)式|表達(dá)式[NOT]LIKE表達(dá)式[ESCAPE'ESC字符’] /*LIKE運(yùn)算符*/|表達(dá)式[NOT][REGEXP|RLIKE]表達(dá)式 /*REGEXP運(yùn)算符*/|表達(dá)式[NOT]BETWEEN表達(dá)式AND表達(dá)式 /*指定范圍*/|表達(dá)式IS[NOT]NULL /*判斷是否為空值*/|表達(dá)式[NOT]IN(子查詢(xún)|表達(dá)式[,…n]) /*IN子句*/|表達(dá)式<比較運(yùn)算符>{ALL|SOME|ANY}(子查詢(xún)) /*比較子查詢(xún)*/|EXIST(子查詢(xún)) /*EXIST子查詢(xún)*/使用WHERE子句會(huì)根據(jù)條件對(duì)FROM子句一行一行地進(jìn)行判斷,當(dāng)條件為T(mén)RUE的時(shí)候,這一行就被包含到WHERE子句的中間結(jié)果中。查詢(xún)條件1.比較運(yùn)算比較運(yùn)算用于比較兩個(gè)表達(dá)式值,當(dāng)兩個(gè)表達(dá)式值均不為空值(NULL)時(shí),比較運(yùn)算返回邏輯值TRUE(真)或FALSE(假);而當(dāng)兩個(gè)表達(dá)式值中有一個(gè)為空值或都為空值時(shí),將返回UNKNOWN。MySQL支持的比較運(yùn)算符有=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!=(不等于)等?!纠?.27】查詢(xún)xs表中學(xué)號(hào)為221101的學(xué)生的情況。SELECT姓名,學(xué)號(hào),總學(xué)分 FROMxs WHERE學(xué)號(hào)='221101';執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.28】查詢(xún)xs表中總學(xué)分大于50分的學(xué)生的情況。SELECT姓名,學(xué)號(hào),出生日期,總學(xué)分 FROMxs WHERE總學(xué)分>50;執(zhí)行結(jié)果如圖。MySQL支持一個(gè)特殊的等于運(yùn)算符“<=>”,當(dāng)兩個(gè)表達(dá)式值彼此相等或都等于空值時(shí),它的返回值為T(mén)RUE,其中有一個(gè)空值或都是非空值但不相等時(shí),返回值就是FALSE。其中沒(méi)有UNKNOWN的情況。查詢(xún)條件【例3.29】查詢(xún)xs表中備注為空的學(xué)生的情況。SELECT姓名,學(xué)號(hào),出生日期,總學(xué)分 FROMxs WHERE備注<=>NULL;可以通過(guò)邏輯運(yùn)算符(AND、OR、XOR和NOT)組成更為復(fù)雜的查詢(xún)條件。查詢(xún)xs表中專(zhuān)業(yè)為計(jì)算機(jī)、性別為女(0)的學(xué)生的情況。SELECT姓名,學(xué)號(hào),性別,總學(xué)分 FROMxs WHERE專(zhuān)業(yè)名='計(jì)算機(jī)'AND性別=0;執(zhí)行結(jié)果如圖。查詢(xún)條件2.模式匹配(1)LIKE運(yùn)算符。LIKE運(yùn)算符用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算對(duì)象可以是char、varchar、text、datetime等類(lèi)型的數(shù)據(jù),返回邏輯值TRUE或FALSE。語(yǔ)法格式如下:表達(dá)式[NOT]LIKE表達(dá)式[ESCAPE'esc字符']使用LIKE進(jìn)行模式匹配時(shí),常使用特殊符號(hào)_和%,可進(jìn)行模糊查詢(xún)?!?”代表0個(gè)或多個(gè)字符,“_”代表單個(gè)字符。由于MySQL默認(rèn)不區(qū)分大小寫(xiě),要區(qū)分大小寫(xiě)時(shí)需要更換字符集的校對(duì)規(guī)則?!纠?.30】查詢(xún)xs表中姓“王”學(xué)生的學(xué)號(hào)、姓名及性別。SELECT學(xué)號(hào),姓名,性別 FROMxs WHERE姓名LIKE'王%';執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.31】查詢(xún)xs表中學(xué)號(hào)倒數(shù)第二個(gè)數(shù)字為0的學(xué)生的學(xué)號(hào)、姓名及專(zhuān)業(yè)名。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名 FROMxs WHERE學(xué)號(hào)LIKE'%0_';執(zhí)行結(jié)果如圖?!纠?.32】查詢(xún)xs表中名字包含下畫(huà)線學(xué)生的學(xué)號(hào)和姓名。SELECT學(xué)號(hào),姓名 FROMxs WHERE學(xué)號(hào)LIKE'%#_%'ESCAPE'#';查詢(xún)條件(2)REGEXP運(yùn)算符。REGEXP運(yùn)算符用來(lái)執(zhí)行更復(fù)雜的字符串比較運(yùn)算。REGEXP是正規(guī)表達(dá)式的縮寫(xiě),但它不是SQL標(biāo)準(zhǔn)的一部分。REGEXP運(yùn)算符的一個(gè)同義詞是RLIKE。語(yǔ)法格式如下:表達(dá)式[NOT][REGEXP|RLIKE]表達(dá)式屬于REGEXP運(yùn)算符的特殊字符如表。特殊字符含
義特殊字符含
義^匹配字符串的開(kāi)始部分[abc]匹配方括號(hào)里出現(xiàn)的字符串a(chǎn)bc$匹配字符串的結(jié)束部分[a-z]匹配方括號(hào)里出現(xiàn)的a~z之間的1個(gè)字符.匹配任何一個(gè)字符(包括回車(chē)和新行)[^a-z]匹配方括號(hào)里出現(xiàn)的不在a~z之間的1個(gè)字符*匹配星號(hào)之前的0個(gè)或多個(gè)字符的任何序列|匹配符號(hào)左邊或右邊出現(xiàn)的字符串+匹配加號(hào)之前的1個(gè)或多個(gè)字符的任何序列[[..]]匹配方括號(hào)里出現(xiàn)的符號(hào)(如空格、換行、括號(hào)、句號(hào)、冒號(hào)、加號(hào)、連字符等)?匹配問(wèn)號(hào)之前0個(gè)或多個(gè)字符[[:<:]和[[:>:]]匹配一個(gè)單詞的開(kāi)始和結(jié)束{n}匹配括號(hào)前的內(nèi)容出現(xiàn)n次的序列[[::]匹配方括號(hào)里出現(xiàn)的字符中的任意一個(gè)字符()匹配括號(hào)里的內(nèi)容
查詢(xún)條件【例3.33】查詢(xún)姓李的學(xué)生的學(xué)號(hào)、姓名和專(zhuān)業(yè)名。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名 FROMxs WHERE姓名REGEXP'^李';執(zhí)行結(jié)果如圖?!纠?.34】查詢(xún)學(xué)號(hào)里包含4、5、6學(xué)生的學(xué)號(hào)、姓名和專(zhuān)業(yè)名。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名 FROMxs WHERE學(xué)號(hào)REGEXP'[4,5,6]';執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.35】查詢(xún)學(xué)號(hào)以21開(kāi)頭、以02結(jié)尾的學(xué)生學(xué)號(hào)、姓名和專(zhuān)業(yè)名。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名 FROMxs WHERE學(xué)號(hào)REGEXP'^21.*02$';執(zhí)行結(jié)果如圖。查詢(xún)條件3.范圍比較用于范圍比較的關(guān)鍵字有兩個(gè):BETWEEN和IN。當(dāng)要查詢(xún)的條件是某個(gè)值的范圍時(shí),可以使用BETWEEN關(guān)鍵字指出查詢(xún)范圍。語(yǔ)法格式如下:表達(dá)式[NOT]BETWEEN表達(dá)式1AND表達(dá)式2當(dāng)不使用NOT時(shí),若表達(dá)式的值在表達(dá)式1的值與表達(dá)式2的值之間(包括這兩個(gè)值),則返回TRUE,否則返回FALSE;使用NOT時(shí),返回值剛好相反。使用IN關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)表達(dá)式的值與值表中的任一個(gè)值匹配時(shí),即返回TRUE,否則返回FALSE。使用IN關(guān)鍵字指定值表的格式為:表達(dá)式IN(表達(dá)式[,…,n])查詢(xún)條件【例3.36】查詢(xún)xs表中不在2003年出生學(xué)生的情況。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,出生日期 FROMxs WHERE出生日期NOTBETWEEN'2003-1-1'AND'2003-12-31';執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.37】查詢(xún)xs表中專(zhuān)業(yè)名為“計(jì)算機(jī)”“通信工程”或“無(wú)線電”的學(xué)生的情況。SELECT* FROMxs WHERE專(zhuān)業(yè)名IN('計(jì)算機(jī)','通信工程','無(wú)線電');該語(yǔ)句與下句等價(jià):SELECT* FROMxs WHERE專(zhuān)業(yè)名='計(jì)算機(jī)'OR專(zhuān)業(yè)名='通信工程'OR專(zhuān)業(yè)名='無(wú)線電';查詢(xún)條件4.空值比較當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值時(shí),使用ISNULL關(guān)鍵字。語(yǔ)法格式如下:表達(dá)式IS[NOT]NULL當(dāng)不使用NOT時(shí),若表達(dá)式的值為空值,返回TRUE,否則返回FALSE;當(dāng)使用NOT時(shí),結(jié)果剛好相反?!纠?.38】查詢(xún)總學(xué)分尚不定學(xué)生的情況。SELECT* FROMxs WHERE總學(xué)分ISNULL;查詢(xún)條件5.子查詢(xún)(1)IN子查詢(xún)。IN子查詢(xún)用于進(jìn)行給定值是否在子查詢(xún)結(jié)果集中的判斷。語(yǔ)法格式如下:表達(dá)式[NOT]IN(子查詢(xún))當(dāng)表達(dá)式的值與子查詢(xún)結(jié)果表中的某個(gè)值相等時(shí),IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反。【例3.39】查找選修了課程號(hào)為206課程的學(xué)生的姓名、學(xué)號(hào)。SELECT姓名,學(xué)號(hào) FROMxs WHERE學(xué)號(hào)IN (SELECT學(xué)號(hào) fromcj WHERE課程號(hào)='206’ );執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.40】查找未選修離散數(shù)學(xué)的學(xué)生的姓名、學(xué)號(hào)、專(zhuān)業(yè)名。SELECT姓名,學(xué)號(hào),專(zhuān)業(yè)名 FROMxs WHERE學(xué)號(hào)NOTIN ( SELECT學(xué)號(hào) FROMcj WHERE課程號(hào)IN (SELECT課程號(hào) FROMkc WHERE課程名='離散數(shù)學(xué)’ ) );執(zhí)行結(jié)果如圖。查詢(xún)條件(2)比較子查詢(xún)。這種子查詢(xún)可以被認(rèn)為是IN子查詢(xún)的擴(kuò)展,它使表達(dá)式的值與子查詢(xún)的結(jié)果進(jìn)行比較運(yùn)算。語(yǔ)法格式如下:表達(dá)式{<|<=|=|>|>=|!=|<>}{ALL|SOME|ANY}(子查詢(xún))其中:ALL用于指定表達(dá)式的值要與子查詢(xún)結(jié)果集中的每個(gè)值都進(jìn)行比較,當(dāng)表達(dá)式的值與查詢(xún)結(jié)果集中的每個(gè)值都滿(mǎn)足比較的關(guān)系時(shí),才返回TRUE,否則返回FALSE;SOME或ANY是同義詞,表示表達(dá)式的值只要與子查詢(xún)結(jié)果集中的某個(gè)值滿(mǎn)足比較的關(guān)系時(shí),就返回TRUE,否則返回FALSE;如果子查詢(xún)的結(jié)果集只返回一行數(shù)據(jù),可以通過(guò)比較運(yùn)算符直接比較。查詢(xún)條件【例3.41】查找選修了離散數(shù)學(xué)學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào) FROMcj WHERE課程號(hào)= ( SELECT課程號(hào) FROMkc WHERE課程名='離散數(shù)學(xué)’ );執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.42】查找xs表中比所有通信工程專(zhuān)業(yè)學(xué)生年齡都小的學(xué)生的學(xué)號(hào)、姓名、專(zhuān)業(yè)名、出生日期。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,出生日期 FROMxs WHERE出生日期>ALL ( SELECT出生日期 FROMxs WHERE專(zhuān)業(yè)名='通信工程’ );執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.43】查找cj表中課程號(hào)為206課程的成績(jī)不低于課程號(hào)為101課程的最低成績(jī)的學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào) FROMcj WHERE課程號(hào)='206'AND成績(jī)>=ANY ( SELECT成績(jī) FROMcj WHERE課程號(hào)='101’ );執(zhí)行結(jié)果如圖。查詢(xún)條件(3)EXISTS子查詢(xún)。EXISTS謂詞用于測(cè)試子查詢(xún)的結(jié)果是否為空表,若子查詢(xún)的結(jié)果集不為空,則EXISTS返回TRUE,否則返回FALSE。EXISTS還可與NOT結(jié)合使用,即NOTEXISTS,其返回值與EXIST的剛好相反。語(yǔ)法格式如下:[NOT]EXISTS(子查詢(xún))【例3.44】查找選修課程號(hào)為206學(xué)生的姓名。SELECT姓名 FROMxs WHEREEXISTS ( SELECT* FROMcj WHERE學(xué)號(hào)=xs.學(xué)號(hào)AND課程號(hào)='206’ );執(zhí)行結(jié)果如圖。查詢(xún)條件這類(lèi)子查詢(xún)稱(chēng)為相關(guān)子查詢(xún),因?yàn)樽硬樵?xún)的條件依賴(lài)于外層查詢(xún)中的某些值。其處理過(guò)程:首先找外層SELECT中xs表的第一行,根據(jù)該行的學(xué)號(hào)列值處理內(nèi)層SELECT,若結(jié)果不為空,則WHERE條件就為真,就把該行的姓名值取出作為結(jié)果集的一行;然后找xs表的第2、3等行,重復(fù)上述處理過(guò)程直到xs表的所有行都查找完為止。【例3.45】查找選修了全部課程學(xué)生的姓名。SELECT姓名 FROMxs WHERENOTEXISTS ( SELECT* FROMkc WHERENOTEXISTS ( SELECT* FROMcj WHERE學(xué)號(hào)=xs.學(xué)號(hào)AND課程號(hào)=kc.課程號(hào) ) );查詢(xún)條件MySQL區(qū)分了4種類(lèi)型的子查詢(xún):①返回一個(gè)表的子查詢(xún)是表子查詢(xún);②返回帶有一個(gè)或多個(gè)值的一行的子查詢(xún)是行子查詢(xún);③返回一行或多行,但每行上只有一個(gè)值的是列子查詢(xún);④只返回一個(gè)值的是標(biāo)量子查詢(xún),從定義上講,每個(gè)標(biāo)量子查詢(xún)都是一個(gè)列子查詢(xún)和行子查詢(xún)。上面介紹的子查詢(xún)都屬于列子查詢(xún)。另外,子查詢(xún)還可以用在SELECT語(yǔ)句的其他子句中。子查詢(xún)可以用在FROM子句中,但必須為子查詢(xún)產(chǎn)生的中間表定義一個(gè)別名?!纠?.46】從xs表中查找總學(xué)分大于50分的男學(xué)生的姓名和學(xué)號(hào)。SELECT姓名,學(xué)號(hào),總學(xué)分 FROM(SELECT姓名,學(xué)號(hào),性別,總學(xué)分 FROMxs WHERE總學(xué)分>50 )ASstudent WHERE性別='1';執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.47】從xs表中查找所有女學(xué)生的姓名、學(xué)號(hào),以及與221101號(hào)學(xué)生的年齡差距。SELECT學(xué)號(hào),姓名,YEAR(出生日期)- YEAR((SELECT出生日期 FROMxs WHERE學(xué)號(hào)='221101’ ))AS年齡差距 FROMxs WHERE性別='0';執(zhí)行結(jié)果如圖。查詢(xún)條件【例3.48】查找與221101號(hào)學(xué)生性別相同、總學(xué)分相同學(xué)生的學(xué)號(hào)和姓名。SELECT學(xué)號(hào),姓名 FROMxs WHERE(性別,總學(xué)分)=(SELECT性別,總學(xué)分 FROMxs WHERE學(xué)號(hào)='221101’ );執(zhí)行結(jié)果如圖。04分
組分
組語(yǔ)法格式如下:GROUPBY{列名|表達(dá)式|列順序}[ASC|DESC],...[WITHROLLUP]【例3.49】查詢(xún)各專(zhuān)業(yè)名及對(duì)應(yīng)的學(xué)生數(shù)。SELECT專(zhuān)業(yè)名,COUNT(*)AS'學(xué)生數(shù)’ FROMxs GROUPBY專(zhuān)業(yè)名;執(zhí)行結(jié)果如圖。分
組【例3.50】求被選修的各門(mén)課程的平均成績(jī)和選修該課程學(xué)生的人數(shù)。SELECT課程號(hào),AVG(成績(jī))AS'平均成績(jī)',COUNT(學(xué)號(hào))AS'選修人數(shù)’ FROMcj GROUPBY課程號(hào);執(zhí)行結(jié)果如圖。分
組【例3.51】查詢(xún)每個(gè)專(zhuān)業(yè)的男生人數(shù)、女生人數(shù)、總?cè)藬?shù),以及學(xué)生總?cè)藬?shù)。SELECT專(zhuān)業(yè)名,性別,COUNT(*)AS'人數(shù)’ FROMxs GROUPBY專(zhuān)業(yè)名,性別 WITHROLLUP;執(zhí)行結(jié)果如圖。將上述語(yǔ)句與不帶ROLLUP操作符的GROUPBY子句的執(zhí)行情況進(jìn)行比較:SELECT專(zhuān)業(yè)名,性別,COUNT(*)AS'人數(shù)’ FROMxs GROUPBY專(zhuān)業(yè)名,性別;執(zhí)行結(jié)果如圖。分
組【例3.52】在xscj數(shù)據(jù)庫(kù)中產(chǎn)生一個(gè)結(jié)果集,包括每門(mén)課程各專(zhuān)業(yè)的平均成績(jī)、每門(mén)課程的總平均成績(jī)和所有課程的總平均成績(jī)。SELECT課程名,專(zhuān)業(yè)名,AVG(成績(jī))AS'平均成績(jī)’ FROMcj,kc,xs WHEREcj.課程號(hào)=kc.課程號(hào)ANDcj.學(xué)號(hào)=xs.學(xué)號(hào) GROUPBY課程名,專(zhuān)業(yè)名 WITHROLLUP;執(zhí)行結(jié)果如圖。05分組條件分組條件HAVING子句的語(yǔ)法格式如下:HAVING條件其中,條件的定義和WHERE子句中條件的類(lèi)似,不過(guò)HAVING子句中的條件可以包含聚合函數(shù),而WHERE子句中的則不可以。SQL標(biāo)準(zhǔn)要求HAVING子句必須引用GROUPBY子句中的列或用于聚合函數(shù)中的列。MySQL允許HAVING子句引用SELECT清單中的列和外部子查詢(xún)中的列?!纠?.53】查找平均成績(jī)?yōu)?5分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。SELECT學(xué)號(hào),AVG(成績(jī))AS'平均成績(jī)’ FROMcj GROUPBY學(xué)號(hào) HAVINGAVG(成績(jī))>=85;執(zhí)行結(jié)果如圖。分組條件【例3.54】查找選修課程超過(guò)2門(mén)且成績(jī)都為80分及以上的學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào) FROMcj WHERE成績(jī)>=80 GROUPBY學(xué)號(hào) HAVINGCOUNT(*)>2;執(zhí)行結(jié)果如圖。分組條件【例3.55】查找通信工程專(zhuān)業(yè)平均成績(jī)?yōu)?5分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。SELECT學(xué)號(hào),AVG(成績(jī))AS'平均成績(jī)’ FROMcj WHERE學(xué)號(hào)IN (SELECT學(xué)號(hào) FROMxs WHERE專(zhuān)業(yè)名='通信工程’ ) GROUPBY學(xué)號(hào) HAVINGAVG(成績(jī))>=85;執(zhí)行結(jié)果如圖。06排
序排
序ORDERBY子句的語(yǔ)法格式如下:ORDERBY{列名|表達(dá)式|順序號(hào)}[ASC|DESC],...【例3.56】將通信工程專(zhuān)業(yè)的學(xué)生按出生日期先后排序。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,出生日期 FROMxs WHERE專(zhuān)業(yè)名='通信工程' ORDERBY出生日期;執(zhí)行結(jié)果如圖。排
序【例3.57】將計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的“計(jì)算機(jī)導(dǎo)論”課程成績(jī)按降序排列。SELECT姓名,課程名,成績(jī) FROMxs,kc,cj WHERExs.學(xué)號(hào)=cj.學(xué)號(hào) ANDcj.課程號(hào)=kc.課程號(hào) AND課程名='計(jì)算機(jī)導(dǎo)論’ AND專(zhuān)業(yè)名='計(jì)算機(jī)’ ORDERBY成績(jī)DESC;執(zhí)行結(jié)果如圖。排
序【例3.58】將計(jì)算機(jī)專(zhuān)業(yè)學(xué)生按其平均成績(jī)排列。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名 FROMxs WHERE專(zhuān)業(yè)名='計(jì)算機(jī)’ ORDERBY(SELECTAVG(成績(jī)) FROMcj GROUPBYcj.學(xué)號(hào) HAVINGxs.學(xué)號(hào)=cj.學(xué)號(hào) );執(zhí)行結(jié)果如圖。07輸出行限制輸出行限制LIMIT子句主要用于限制被SELECT語(yǔ)句返回的行數(shù)。語(yǔ)法格式如下:LIMIT{[偏移量,]行數(shù)}【例3.59】查找xs表中學(xué)號(hào)靠前的5位學(xué)生的信息。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,性別,出生日期,總學(xué)分 FROMxs ORDERBY學(xué)號(hào) LIMIT5;執(zhí)行結(jié)果如圖。輸出行限制【例3.60】查找xs表中從第2位學(xué)生開(kāi)始的3位學(xué)生的信息。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,性別,出生日期,總學(xué)分 FROMxs ORDERBY學(xué)號(hào) LIMIT1,3;執(zhí)行結(jié)果如圖。08聯(lián)合查詢(xún)聯(lián)合查詢(xún)用戶(hù)使用UNION語(yǔ)句,可以把來(lái)自許多SELECT語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。語(yǔ)法格式如下:SELECT...UNION[ALL|DISTINCT]SELECT...[UNION[ALL|DISTINCT]SELECT...]使用UNION的時(shí)候,在第一個(gè)SELECT語(yǔ)句中被使用的列名稱(chēng)將被用于結(jié)果的列名稱(chēng)?!纠?.61】查找學(xué)號(hào)為221101和學(xué)號(hào)為211201的兩位學(xué)生的信息。SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,性別,出生日期,總學(xué)分 FROMxs WHERE學(xué)號(hào)='221101’ UNION SELECT學(xué)號(hào),姓名,專(zhuān)業(yè)名,性別,出生日期,總學(xué)分 FROMxs WHERE學(xué)號(hào)='211201';執(zhí)行結(jié)果如圖。09行瀏覽查詢(xún)1.打開(kāi)一個(gè)表2.瀏覽表中的行3.關(guān)閉打開(kāi)的表行瀏覽查詢(xún)1.打開(kāi)一個(gè)表用戶(hù)可以使用HANDLEROPEN語(yǔ)句打開(kāi)一個(gè)表。語(yǔ)法格式如下:HANDLER表名OPEN[[AS]alias]2.瀏覽表中的行HANDLERREAD語(yǔ)句用于瀏覽一個(gè)已打開(kāi)的表的數(shù)據(jù)行。語(yǔ)法格式如下:HANDLER表名READ{FIRST|NEXT} [WHERE條件][LIMIT...]由于沒(méi)有其他的聲明,在讀取一行數(shù)據(jù)的時(shí)候,行的順序是由MySQL決定的。如果要按某個(gè)順序來(lái)顯示,可以通過(guò)在HANDLERREAD語(yǔ)句中指定索引來(lái)實(shí)現(xiàn)。語(yǔ)法格式如下:HANDLER表名READ索引名{=|<=|>=|<|>}(值...) [WHERE條件][LIMIT...]HANDLER表名READ索引名{FIRST|NEXT|PREV|LAST} [WHERE條件][LIMIT...]行瀏覽查詢(xún)3.關(guān)閉打開(kāi)的表讀取完行后必須使用HANDLERCLOSE語(yǔ)句來(lái)關(guān)閉表。語(yǔ)法格式如下:HANDLER表名CLOSE【例3.62】一行一行地瀏覽kc表中滿(mǎn)足條件的內(nèi)容,要求讀取學(xué)分大于4的第一行數(shù)據(jù)。首先打開(kāi)表:USExscjHANDLERkcOPEN;讀取滿(mǎn)足條件的第一行:HANDLERkcREADFIRSTWHERE學(xué)分>4;執(zhí)行結(jié)果如圖。行瀏覽查詢(xún)讀取下一行:HANDLERkcREADNEXT;執(zhí)行結(jié)果如圖。關(guān)閉該表:HANDLERkcCLOSE;第3章MySQL查詢(xún)和視圖——MySQL視圖01視圖的概念視圖的概念使用視圖有下列優(yōu)點(diǎn)。(1)為用戶(hù)集中數(shù)據(jù),簡(jiǎn)化用戶(hù)的數(shù)據(jù)查詢(xún)和處理。有時(shí)用戶(hù)所需要的數(shù)據(jù)分散在多個(gè)表中,定義視圖可將它們集中在一起,從而方便用戶(hù)的數(shù)據(jù)查詢(xún)和處理。(2)(3)(4)(5)屏蔽數(shù)據(jù)庫(kù)的復(fù)雜性。用戶(hù)不必了解復(fù)雜的數(shù)據(jù)庫(kù)中的表結(jié)構(gòu),并且數(shù)據(jù)庫(kù)中表的更改也不影響用戶(hù)對(duì)數(shù)據(jù)庫(kù)的使用。簡(jiǎn)化用戶(hù)權(quán)限的管理。只需授予用戶(hù)使用視圖的權(quán)限,而不必指定用戶(hù)只能使用表的特定列,也增加了安全性。便于數(shù)據(jù)共享。各用戶(hù)不必都定義和存儲(chǔ)自己所需的數(shù)據(jù),可共享數(shù)據(jù)庫(kù)的數(shù)據(jù),這樣同樣的數(shù)據(jù)只需存儲(chǔ)一次??梢灾匦陆M織數(shù)據(jù)以便輸出到其他應(yīng)用程序中。02創(chuàng)建視圖創(chuàng)建視圖視圖在數(shù)據(jù)庫(kù)中是作為一個(gè)對(duì)象來(lái)存儲(chǔ)的。用戶(hù)創(chuàng)建視圖前,要保證自己已被數(shù)據(jù)庫(kù)所有者授權(quán)可以使用CREATEVIEW語(yǔ)句,并且有權(quán)操作視圖所涉及的表或其他視圖,其語(yǔ)法格式如下:CREATE[ORREPLACE]VIEW視圖名[(列名...)]ASselect語(yǔ)句對(duì)SELECT語(yǔ)句有以下的限制:(1)定義視圖的用戶(hù)必須對(duì)所參照的表或視圖有查詢(xún)(即可執(zhí)行SELECT語(yǔ)句)權(quán)限;(2)不能包含F(xiàn)ROM子句中的子查詢(xún);(3)在定義中引用的表或視圖必須存在;(4)若引用不是當(dāng)前數(shù)據(jù)庫(kù)的表或視圖時(shí),要在表或視圖前加上數(shù)據(jù)庫(kù)的名稱(chēng);(5)在視圖定義中允許使用ORDERBY,但是,如果從特定視圖進(jìn)行了選擇,而該視圖使用了具有自己ORDERBY的語(yǔ)句,則視圖定義中的ORDERBY將被忽略;(6)對(duì)于SELECT語(yǔ)句中的其他選項(xiàng)或子句,若視圖中也包含了這些選項(xiàng),則效果未定義。創(chuàng)建視圖【例3.63】假設(shè)當(dāng)前數(shù)據(jù)庫(kù)是mytest,創(chuàng)建xscj數(shù)據(jù)庫(kù)中的cs_kc視圖,包括計(jì)算機(jī)專(zhuān)業(yè)各學(xué)生的學(xué)號(hào)、選修的課程號(hào)及成績(jī)。要保證對(duì)該視圖的修改都符合專(zhuān)業(yè)名為“計(jì)算機(jī)”這個(gè)條件。CREATEORREPLACEVIEWxscj.cs_kc AS SELECTxs.學(xué)號(hào),課程號(hào),成績(jī) FROMxscj.xs,xscj.cj WHERExs.學(xué)號(hào)=cj.學(xué)號(hào)ANDxs.專(zhuān)業(yè)名='計(jì)算機(jī)’ WITHCHECKOPTION;【例3.64】創(chuàng)建xscj數(shù)據(jù)庫(kù)中的計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的平均成績(jī)視圖cs_kc_avg,包括學(xué)號(hào)(在視圖中列名為num)和平均成績(jī)(在視圖中列名為score_avg)。USExscjCREATEVIEWcs_kc_avg(num,score_avg) AS SELECT學(xué)號(hào),AVG(成績(jī)) FROMcs_kc GROUPBY學(xué)號(hào);03查詢(xún)視圖查詢(xún)視圖【例3.65】在視圖cs_kc中查找計(jì)算機(jī)專(zhuān)業(yè)學(xué)生的學(xué)號(hào)和選修的課程號(hào)。SELECT學(xué)號(hào),課程號(hào) FROMcs_kc;【例3.66】查找平均成績(jī)?yōu)?0分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。本例首先創(chuàng)建學(xué)生平均成績(jī)視圖xs_kc_avg,包括學(xué)號(hào)(在視圖中列名為num)和平均成績(jī)(在視圖中列名為score_avg)。創(chuàng)建學(xué)生平均成績(jī)視圖xs_kc_avg:CREATEVIEWxs_kc_avg(num,score_avg) AS SELECT學(xué)號(hào),AVG(成績(jī)) FROMcj GROUPBY學(xué)號(hào);再對(duì)xs_kc_avg視圖進(jìn)行查詢(xún)。SELECT* FROMxs_kc_avg WHEREscore_avg>=80;執(zhí)行結(jié)果如圖。0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于生成式人工智能的初中英語(yǔ)寫(xiě)作教學(xué)策略研究教學(xué)研究課題報(bào)告
- 冷鏈物流配送路徑優(yōu)化系統(tǒng):2025年技術(shù)創(chuàng)新驅(qū)動(dòng)可行性探討
- 2026年網(wǎng)絡(luò)安全滲透測(cè)試工程師筆試模擬卷
- 2026年企業(yè)財(cái)務(wù)管理能力等級(jí)考試題目
- 《鄉(xiāng)土中國(guó)》之“差序格局”“系維著私人的道德”“家族”“男女有別”++2025-2026學(xué)年統(tǒng)編版高一語(yǔ)文必修上冊(cè)
- 2026云南曲靖市富源縣公安局營(yíng)上派出所招聘警務(wù)輔助人員5人備考題庫(kù)及答案詳解(奪冠系列)
- 2025年漯河舞陽(yáng)縣事業(yè)單位人才引進(jìn)6名備考題庫(kù)(含答案詳解)
- 2026廣西來(lái)賓市直屬機(jī)關(guān)遴選和選調(diào)公務(wù)員備考題庫(kù)及完整答案詳解
- 1.3 《全等三角形的判定》(含答案)蘇科版八年級(jí)數(shù)學(xué)上冊(cè)
- 2026中國(guó)人民銀行清算總中心直屬企業(yè)中志支付清算服務(wù)(北京)有限公司招聘3人備考題庫(kù)含答案詳解
- 長(zhǎng)護(hù)險(xiǎn)人員管理培訓(xùn)制度
- 2026河南大學(xué)附屬中學(xué)招聘77人備考題庫(kù)附答案
- 網(wǎng)絡(luò)安全運(yùn)維與管理規(guī)范(標(biāo)準(zhǔn)版)
- 2026年包頭職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性考試模擬試題含答案解析
- 2026年XX醫(yī)院兒科護(hù)理工作計(jì)劃
- 2025-2026學(xué)年貴州省安順市多校高一(上)期末物理試卷(含答案)
- 呼吸機(jī)相關(guān)肺炎預(yù)防策略指南2026
- 妊娠期缺鐵性貧血中西醫(yī)結(jié)合診療指南-公示稿
- 北京市2025年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷三套及答案
- 2026年上海理工大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)附答案
- TCEC電力行業(yè)數(shù)據(jù)分類(lèi)分級(jí)規(guī)范-2024
評(píng)論
0/150
提交評(píng)論