版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、肖紅肖紅MySQLMySQL數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程數(shù)據(jù)庫(kù)基礎(chǔ)與實(shí)例教程 之之表記錄的檢索表記錄的檢索1 12 23 3 本章詳細(xì)講解本章詳細(xì)講解select語(yǔ)句檢索表語(yǔ)句檢索表記錄的方法,并結(jié)記錄的方法,并結(jié)合合“選課系統(tǒng)選課系統(tǒng)”,討論該系統(tǒng)部分問(wèn)討論該系統(tǒng)部分問(wèn)題域的實(shí)現(xiàn)方法。題域的實(shí)現(xiàn)方法。4 4使用使用where子句過(guò)濾結(jié)果集子句過(guò)濾結(jié)果集select語(yǔ)句概述語(yǔ)句概述使用使用order by子句對(duì)結(jié)果集排序子句對(duì)結(jié)果集排序使用聚合函數(shù)匯總結(jié)果集使用聚合函數(shù)匯總結(jié)果集5 5使用使用group by子句對(duì)記錄分組統(tǒng)計(jì)子句對(duì)記錄分組統(tǒng)計(jì)內(nèi)容一覽內(nèi)容一覽 6 67 78 8 本章詳細(xì)講解本章詳細(xì)
2、講解select語(yǔ)句檢索表語(yǔ)句檢索表記錄的方法,并結(jié)記錄的方法,并結(jié)合合“選課系統(tǒng)選課系統(tǒng)”,討論該系統(tǒng)部分問(wèn)討論該系統(tǒng)部分問(wèn)題域的實(shí)現(xiàn)方法。題域的實(shí)現(xiàn)方法。9 9子查詢子查詢合并結(jié)果集合并結(jié)果集選課系統(tǒng)綜合查詢選課系統(tǒng)綜合查詢使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢1010全文檢索全文檢索內(nèi)容一覽內(nèi)容一覽 5.1 select5.1 select語(yǔ)句概述語(yǔ)句概述select語(yǔ)句的語(yǔ)法格式如下。語(yǔ)句的語(yǔ)法格式如下。select 字段列表字段列表from 數(shù)據(jù)源數(shù)據(jù)源 where條件表達(dá)式條件表達(dá)式 group by 分組字段分組字段 having條件表達(dá)式條件表達(dá)式 order by 排序
3、字段排序字段 asc | desc 1 12 23 3使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù)使用使用select子句指定字段列表子句指定字段列表使用使用from子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源4多表連接多表連接5.1 select5.1 select語(yǔ)句概述語(yǔ)句概述使用以下幾種方式指定字段列表:使用以下幾種方式指定字段列表:5.1.1 5.1.1 使用使用selectselect子句指定字段列表子句指定字段列表 可以為字段列表中的字段名或表達(dá)式指定可以為字段列表中的字段名或表達(dá)式指定別名,中間使用別名,中間使用as關(guān)鍵字分隔即可(關(guān)鍵字分隔即可(as關(guān)鍵關(guān)鍵字可以省略)。字可以省略)。 多表
4、查詢時(shí),同名字段前必須添加表名前多表查詢時(shí),同名字段前必須添加表名前綴,中間使用綴,中間使用“.”分隔。分隔。5.1.1 5.1.1 使用使用selectselect子句指定字段列表子句指定字段列表MySQL中的兩個(gè)謂詞中的兩個(gè)謂詞distinct和和limit可以限制記可以限制記錄的行數(shù)。錄的行數(shù)。(1)使用謂詞)使用謂詞distinct過(guò)濾結(jié)果集中的重復(fù)記錄過(guò)濾結(jié)果集中的重復(fù)記錄數(shù)據(jù)庫(kù)表中不允許出現(xiàn)重復(fù)的記錄,但這不意味數(shù)據(jù)庫(kù)表中不允許出現(xiàn)重復(fù)的記錄,但這不意味著著select的查詢結(jié)果集中不會(huì)出現(xiàn)記錄重復(fù)的現(xiàn)象。的查詢結(jié)果集中不會(huì)出現(xiàn)記錄重復(fù)的現(xiàn)象。如果需要過(guò)濾結(jié)果集中重復(fù)的記錄,可以使
5、用謂如果需要過(guò)濾結(jié)果集中重復(fù)的記錄,可以使用謂詞關(guān)鍵字詞關(guān)鍵字distinct,語(yǔ)法格式如下。,語(yǔ)法格式如下。distinct 字段名字段名5.1.2 5.1.2 使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù)(2)使用謂詞)使用謂詞limit查詢某幾行記錄查詢某幾行記錄查詢前幾條或者中間某幾條記錄,可以使用謂詞查詢前幾條或者中間某幾條記錄,可以使用謂詞關(guān)鍵字關(guān)鍵字limit實(shí)現(xiàn)。語(yǔ)法格式如下。實(shí)現(xiàn)。語(yǔ)法格式如下。select字段列表字段列表from數(shù)據(jù)源數(shù)據(jù)源limit start,length;start表示從第幾行記錄開始檢索,表示從第幾行記錄開始檢索,length表示檢表示檢索多少行記錄
6、。表中第一行記錄的索多少行記錄。表中第一行記錄的start值為值為0。5.1.2 5.1.2 使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù)例如:例如:select * from student limit 0,3; 該該SQL語(yǔ)句等效于:語(yǔ)句等效于:select * from student limit 3;例如檢索例如檢索choose表中從第表中從第2條記錄開始的條記錄開始的3條記錄條記錄信息,可以使用下面的信息,可以使用下面的SQL語(yǔ)句。語(yǔ)句。select * from choose limit 1,3;5.1.2 5.1.2 使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù) 多張數(shù)據(jù)庫(kù)表(或
7、者視圖)多張數(shù)據(jù)庫(kù)表(或者視圖)“縫補(bǔ)縫補(bǔ)”成一個(gè)結(jié)成一個(gè)結(jié)果集時(shí),需要指定果集時(shí),需要指定“縫補(bǔ)縫補(bǔ)”條件,該條件,該“縫補(bǔ)縫補(bǔ)”條條件稱為連接條件。件稱為連接條件。 指定連接條件的方法有兩種:第一種方法是在指定連接條件的方法有兩種:第一種方法是在where子句中指定連接條件(稍后講解)。第二子句中指定連接條件(稍后講解)。第二種方法是在種方法是在from子句中使用連接(子句中使用連接(join)運(yùn)算將)運(yùn)算將多個(gè)數(shù)據(jù)源按照某種連接條件多個(gè)數(shù)據(jù)源按照某種連接條件“縫補(bǔ)縫補(bǔ)”在一起。在一起。 5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源 第二種方法第二種方法fr
8、om子句的語(yǔ)法格式如下。子句的語(yǔ)法格式如下。from 表名表名1 連接類型連接類型 join 表名表名2 on 表表1和和表表2之間的連接條件之間的連接條件說(shuō)明:說(shuō)明:SQL標(biāo)準(zhǔn)中的連接類型主要分為標(biāo)準(zhǔn)中的連接類型主要分為inner連連接(內(nèi)連接)和接(內(nèi)連接)和outer連接(外連接),而外連連接(外連接),而外連接又分為接又分為left(左外連接,簡(jiǎn)稱為左連接)、(左外連接,簡(jiǎn)稱為左連接)、right(右外連接,簡(jiǎn)稱為右連接)以及(右外連接,簡(jiǎn)稱為右連接)以及full(完(完全外連接,簡(jiǎn)稱完全連接)。全外連接,簡(jiǎn)稱完全連接)。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子
9、句指定數(shù)據(jù)源1內(nèi)連接(內(nèi)連接(inner join) 內(nèi)連接將兩個(gè)表中滿足指定連接條件的記錄連內(nèi)連接將兩個(gè)表中滿足指定連接條件的記錄連接成新的結(jié)果集,舍棄所有不滿足連接條件的記接成新的結(jié)果集,舍棄所有不滿足連接條件的記錄。內(nèi)連接是最常用的連接類型,也是默認(rèn)的連錄。內(nèi)連接是最常用的連接類型,也是默認(rèn)的連接類型,可以在接類型,可以在from子句中使用子句中使用inner join(inner關(guān)鍵字可以省略)實(shí)現(xiàn)內(nèi)連接,語(yǔ)法格關(guān)鍵字可以省略)實(shí)現(xiàn)內(nèi)連接,語(yǔ)法格式如下。式如下。from 表表1 inner join 表表2 on 表表1和表和表2之間的之間的連接條件連接條件5.1.3 5.1.3 使用
10、使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源任務(wù)布置任務(wù)布置1:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述1的任務(wù)要求。的任務(wù)要求。說(shuō)明:使用內(nèi)連接連接兩個(gè)數(shù)據(jù)庫(kù)表時(shí),連接條說(shuō)明:使用內(nèi)連接連接兩個(gè)數(shù)據(jù)庫(kù)表時(shí),連接條件會(huì)同時(shí)過(guò)濾表件會(huì)同時(shí)過(guò)濾表1與表與表2的記錄信息。的記錄信息。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源2外連接(外連接(outer join) 外連接又分為左連接(外連接又分為左連接(left join)、右連接)、右連接(right join)和完全連接()和完全連接(full)。與內(nèi)連接不)。與內(nèi)連接不同,外連接(左連接或右連接)的連接條件只過(guò)
11、同,外連接(左連接或右連接)的連接條件只過(guò)濾一個(gè)表,對(duì)另一個(gè)表不進(jìn)行過(guò)濾(該表的所有濾一個(gè)表,對(duì)另一個(gè)表不進(jìn)行過(guò)濾(該表的所有記錄出現(xiàn)在結(jié)果集中);記錄出現(xiàn)在結(jié)果集中); 注意:注意:MySQL暫不支持完全連接暫不支持完全連接 。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源(1)左連接的語(yǔ)法格式)左連接的語(yǔ)法格式from 表表1 left join 表表2 on 表表1和表和表2之間的連之間的連接條件接條件說(shuō)明:語(yǔ)法格式中表說(shuō)明:語(yǔ)法格式中表1左連接表左連接表2,意味著查詢結(jié),意味著查詢結(jié)果集中須包含表果集中須包含表1的全部記錄,然后表的全部記錄,然后表1按指定
12、的按指定的連接條件與表連接條件與表2進(jìn)行連接,若表進(jìn)行連接,若表2中沒有滿足連接中沒有滿足連接條件的記錄,則結(jié)果集中表?xiàng)l件的記錄,則結(jié)果集中表2相應(yīng)的字段填入相應(yīng)的字段填入NULL。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源任務(wù)布置任務(wù)布置2:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述2的任務(wù)要求。的任務(wù)要求。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源(2)右連接的語(yǔ)法格式)右連接的語(yǔ)法格式from 表表1 right join 表表2 on 表表1和表和表2之間的之間的連接條件連接條件說(shuō)明:語(yǔ)法格式中表說(shuō)明:語(yǔ)法格式中表1右連接表右
13、連接表2,意味著查詢結(jié),意味著查詢結(jié)果集中須包含表果集中須包含表2的全部記錄,然后表的全部記錄,然后表2按指定的按指定的連接條件與表連接條件與表1進(jìn)行連接,若表進(jìn)行連接,若表1中沒有滿足連接中沒有滿足連接條件的記錄,則結(jié)果集中表?xiàng)l件的記錄,則結(jié)果集中表1相應(yīng)的字段填入相應(yīng)的字段填入NULL。 5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源任務(wù)布置任務(wù)布置3:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述3的任務(wù)要求。的任務(wù)要求。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源 以以3個(gè)表為例,語(yǔ)法格式如下。個(gè)表為例,語(yǔ)法格式如下。from 表表1
14、連接類型連接類型 join 表表2 on 表表1和表和表2之之間的連接條件間的連接條件連接類型連接類型 join 表表3 on 表表2和表和表3之間的連接之間的連接條件條件5.1.4 5.1.4 多表連接多表連接 數(shù)據(jù)庫(kù)中存儲(chǔ)著海量數(shù)據(jù)庫(kù)中存儲(chǔ)著海量數(shù)據(jù),數(shù)據(jù)庫(kù)用戶往往數(shù)據(jù),數(shù)據(jù)庫(kù)用戶往往需要的是滿足特定條件需要的是滿足特定條件的記錄,的記錄,where子句可子句可以實(shí)現(xiàn)結(jié)果集的過(guò)濾篩以實(shí)現(xiàn)結(jié)果集的過(guò)濾篩選。選。 where子句的語(yǔ)法格式:子句的語(yǔ)法格式:where 條件表達(dá)式條件表達(dá)式1 12 23 3is NULL運(yùn)算符運(yùn)算符使用單一的條件過(guò)濾結(jié)果集使用單一的條件過(guò)濾結(jié)果集select語(yǔ)句
15、與字符集語(yǔ)句與字符集4使用邏輯運(yùn)算符使用邏輯運(yùn)算符5使用使用like進(jìn)行模糊查詢進(jìn)行模糊查詢5.2 5.2 使用使用wherewhere子句過(guò)濾結(jié)果集子句過(guò)濾結(jié)果集 單一的過(guò)濾條件可以使用下面的布爾表達(dá)式表單一的過(guò)濾條件可以使用下面的布爾表達(dá)式表示。示。表達(dá)式表達(dá)式1 比較運(yùn)算符比較運(yùn)算符 表達(dá)式表達(dá)式2說(shuō)明:說(shuō)明:“表達(dá)式表達(dá)式1”和和“表達(dá)式表達(dá)式2”可以是一個(gè)字段可以是一個(gè)字段名、常量、變量、函數(shù)甚至是子查詢。名、常量、變量、函數(shù)甚至是子查詢。比較運(yùn)算符用于比較兩個(gè)表達(dá)式的值,比較的結(jié)比較運(yùn)算符用于比較兩個(gè)表達(dá)式的值,比較的結(jié)果是一個(gè)布爾值(果是一個(gè)布爾值(true或者或者false)。
16、)。5.2.1 5.2.1 使用單一的條件過(guò)濾結(jié)果集使用單一的條件過(guò)濾結(jié)果集 常用的比較運(yùn)算符有常用的比較運(yùn)算符有=(等于)、(等于)、(大于)、(大于)、=(大于等于)、(大于等于)、(小于)、(小于)、=(小于等于)、(小于等于)、(不等于)、(不等于)、!=(不等于)、(不等于)、!(不大于)。(不大于)。 如果表達(dá)式的結(jié)果是數(shù)值,則按照數(shù)值的大小如果表達(dá)式的結(jié)果是數(shù)值,則按照數(shù)值的大小進(jìn)行比較;如果表達(dá)式的結(jié)果是字符串,則需要進(jìn)行比較;如果表達(dá)式的結(jié)果是字符串,則需要參考字符序參考字符序collation的設(shè)置進(jìn)行比較。的設(shè)置進(jìn)行比較。5.2.1 5.2.1 使用單一的條件過(guò)濾結(jié)果集使
17、用單一的條件過(guò)濾結(jié)果集 is NULL用于判斷表達(dá)式的值是否為空值用于判斷表達(dá)式的值是否為空值NULL(is not 恰恰相反),恰恰相反),is NULL的語(yǔ)法格式如下。的語(yǔ)法格式如下。表達(dá)式表達(dá)式 is not NULL說(shuō)明:不能將說(shuō)明:不能將“score is NULL”寫成寫成“score = NULL;”,原因是,原因是NULL是一個(gè)不確定的數(shù),不能是一個(gè)不確定的數(shù),不能使用使用“=”、“!=”等比較運(yùn)算符與等比較運(yùn)算符與NULL進(jìn)行比較。進(jìn)行比較。 5.2.2 is NULL5.2.2 is NULL運(yùn)算符運(yùn)算符 任務(wù)布置任務(wù)布置4:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述4:MySQL
18、客戶客戶機(jī)顯示結(jié)果集時(shí)出現(xiàn)亂碼問(wèn)題的任務(wù)要求。機(jī)顯示結(jié)果集時(shí)出現(xiàn)亂碼問(wèn)題的任務(wù)要求。 任務(wù)布置任務(wù)布置5:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述5:查詢結(jié)果失:查詢結(jié)果失敗問(wèn)題的任務(wù)要求。敗問(wèn)題的任務(wù)要求。 任務(wù)布置任務(wù)布置6:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述6:SQL語(yǔ)句解語(yǔ)句解析錯(cuò)誤問(wèn)題的任務(wù)要求。析錯(cuò)誤問(wèn)題的任務(wù)要求。5.2.3 select5.2.3 select語(yǔ)句與字符集語(yǔ)句與字符集 where子句中可以包含多個(gè)查詢條件,使用邏子句中可以包含多個(gè)查詢條件,使用邏輯運(yùn)算符可以將多個(gè)查詢條件組合起來(lái),完成更輯運(yùn)算符可以將多個(gè)查詢條件組合起來(lái),完成更為復(fù)雜的過(guò)濾篩選。常用的邏輯運(yùn)算符包括邏
19、輯為復(fù)雜的過(guò)濾篩選。常用的邏輯運(yùn)算符包括邏輯與(與(and)、邏輯或()、邏輯或(or)以及邏輯非(?。?,其)以及邏輯非(!),其中邏輯非(!)為單目運(yùn)算符。中邏輯非(?。閱文窟\(yùn)算符。 5.2.4 5.2.4 使用邏輯運(yùn)算符使用邏輯運(yùn)算符1邏輯非(?。┻壿嫹牵ǎ。?邏輯非(?。閱文窟\(yùn)算符,邏輯非(?。┑倪壿嫹牵ǎ。閱文窟\(yùn)算符,邏輯非(?。┑氖褂梅椒ㄝ^為簡(jiǎn)單,如下所示。使用邏輯非(!)使用方法較為簡(jiǎn)單,如下所示。使用邏輯非(?。┎僮鞑紶柋磉_(dá)式時(shí),布爾表達(dá)式的值為操作布爾表達(dá)式時(shí),布爾表達(dá)式的值為true時(shí),時(shí),整個(gè)邏輯表達(dá)式的結(jié)果為整個(gè)邏輯表達(dá)式的結(jié)果為false,反之亦然。,反之亦然。!
20、布爾表達(dá)式布爾表達(dá)式5.2.4 5.2.4 使用邏輯運(yùn)算符使用邏輯運(yùn)算符2and邏輯運(yùn)算符邏輯運(yùn)算符 使用使用and邏輯運(yùn)算符連接兩個(gè)布爾表達(dá)式時(shí),邏輯運(yùn)算符連接兩個(gè)布爾表達(dá)式時(shí),只有兩個(gè)布爾表達(dá)式的值都為只有兩個(gè)布爾表達(dá)式的值都為true時(shí),整個(gè)邏輯時(shí),整個(gè)邏輯表達(dá)式的結(jié)果才為表達(dá)式的結(jié)果才為true。語(yǔ)法格式如下。語(yǔ)法格式如下。布爾表達(dá)式布爾表達(dá)式1 and 布爾表達(dá)式布爾表達(dá)式2 5.2.4 5.2.4 使用邏輯運(yùn)算符使用邏輯運(yùn)算符 另外另外MySQL還支持還支持betweenand運(yùn)算符,運(yùn)算符,betweenand運(yùn)算符用于判斷一個(gè)表達(dá)式的值運(yùn)算符用于判斷一個(gè)表達(dá)式的值是否位于指定的
21、取值范圍內(nèi),是否位于指定的取值范圍內(nèi),betweenand的的語(yǔ)法格式如下。語(yǔ)法格式如下。表達(dá)式表達(dá)式 not between 起始值起始值 and 終止值終止值5.2.4 5.2.4 使用邏輯運(yùn)算符使用邏輯運(yùn)算符3使用使用or邏輯運(yùn)算符邏輯運(yùn)算符 使用使用or邏輯運(yùn)算符連接兩個(gè)布爾表達(dá)式時(shí),只邏輯運(yùn)算符連接兩個(gè)布爾表達(dá)式時(shí),只有兩個(gè)表達(dá)式的值都為有兩個(gè)表達(dá)式的值都為false時(shí),整個(gè)邏輯表達(dá)式時(shí),整個(gè)邏輯表達(dá)式的結(jié)果才為的結(jié)果才為false。語(yǔ)法格式如下。語(yǔ)法格式如下。布爾表達(dá)式布爾表達(dá)式1 or 布爾表達(dá)式布爾表達(dá)式2 5.2.4 5.2.4 使用邏輯運(yùn)算符使用邏輯運(yùn)算符 另外另外MySQ
22、L還支持還支持in運(yùn)算符,運(yùn)算符,in運(yùn)算符用于判運(yùn)算符用于判定一個(gè)表達(dá)式的值是否位于一個(gè)離散的數(shù)學(xué)集合定一個(gè)表達(dá)式的值是否位于一個(gè)離散的數(shù)學(xué)集合內(nèi),內(nèi),in的語(yǔ)法格式如下。的語(yǔ)法格式如下。表達(dá)式表達(dá)式 not in (數(shù)學(xué)集合)(數(shù)學(xué)集合)5.2.4 5.2.4 使用邏輯運(yùn)算符使用邏輯運(yùn)算符 like運(yùn)算符用于判斷一個(gè)字符串是否與給定的模運(yùn)算符用于判斷一個(gè)字符串是否與給定的模式相匹配。式相匹配。 模式是一種特殊的字符串,特殊之處在于不僅模式是一種特殊的字符串,特殊之處在于不僅包含普通字符,還包含有通配符。在實(shí)際應(yīng)用中,包含普通字符,還包含有通配符。在實(shí)際應(yīng)用中,如果不能對(duì)字符串進(jìn)行精確查詢,
23、此時(shí)可以使用如果不能對(duì)字符串進(jìn)行精確查詢,此時(shí)可以使用like運(yùn)算符與通配符實(shí)現(xiàn)模糊查詢,運(yùn)算符與通配符實(shí)現(xiàn)模糊查詢,like運(yùn)算符的運(yùn)算符的語(yǔ)法格式如下。語(yǔ)法格式如下。字符串表達(dá)式字符串表達(dá)式 not like 模式模式5.2.5 5.2.5 使用使用likelike進(jìn)行模糊查詢進(jìn)行模糊查詢 模式是一個(gè)字符串,其中包含普通字符和通配模式是一個(gè)字符串,其中包含普通字符和通配符。在符。在MySQL中常用的通配符如表所示。中常用的通配符如表所示。5.2.5 5.2.5 使用使用likelike進(jìn)行模糊查詢進(jìn)行模糊查詢 模糊查詢模糊查詢“%”或者或者“_”字符時(shí),需要將字符時(shí),需要將“%”或者或者“
24、_”字符轉(zhuǎn)義,例如檢索學(xué)生姓名中所有帶字符轉(zhuǎn)義,例如檢索學(xué)生姓名中所有帶“_”的學(xué)生信息,可以使用下面的的學(xué)生信息,可以使用下面的SQL語(yǔ)句,其語(yǔ)句,其中中new_student表在表記錄的更新操作章節(jié)中創(chuàng)表在表記錄的更新操作章節(jié)中創(chuàng)建。執(zhí)行結(jié)果如圖建。執(zhí)行結(jié)果如圖5-23所示。所示。select * from new_student where student_name like %_%;5.2.5 5.2.5 使用使用likelike進(jìn)行模糊查詢進(jìn)行模糊查詢 如果不想使用如果不想使用“”作為轉(zhuǎn)義字符,可以使用作為轉(zhuǎn)義字符,可以使用escape關(guān)鍵字自定義一個(gè)轉(zhuǎn)義字符,例如下面的關(guān)鍵字自定義
25、一個(gè)轉(zhuǎn)義字符,例如下面的SQL語(yǔ)句使用字符語(yǔ)句使用字符“!”作為轉(zhuǎn)義字符。作為轉(zhuǎn)義字符。select * from new_student where student_name like %!_% escape !;5.2.5 5.2.5 使用使用likelike進(jìn)行模糊查詢進(jìn)行模糊查詢 select語(yǔ)句的查詢結(jié)果集的排序由數(shù)據(jù)庫(kù)系統(tǒng)語(yǔ)句的查詢結(jié)果集的排序由數(shù)據(jù)庫(kù)系統(tǒng)動(dòng)態(tài)確定,往往是無(wú)序的,動(dòng)態(tài)確定,往往是無(wú)序的,order by子句用于對(duì)子句用于對(duì)結(jié)果集排序。在結(jié)果集排序。在select語(yǔ)句中添加語(yǔ)句中添加order by子句,子句,就可以使結(jié)果集中的記錄按照一個(gè)或多個(gè)字段的就可以使結(jié)果集中
26、的記錄按照一個(gè)或多個(gè)字段的值進(jìn)行排序,排序的方向可以是升序(值進(jìn)行排序,排序的方向可以是升序(asc)或降)或降序(序(desc)。)。order by子句的語(yǔ)法格式如下。子句的語(yǔ)法格式如下。order by 字段名字段名1 asc|desc ,字段名字段名n asc|desc 5.3 5.3 使用使用order byorder by子句對(duì)結(jié)果集排序子句對(duì)結(jié)果集排序 聚合函數(shù)用于對(duì)一組值進(jìn)行計(jì)算并返回一個(gè)匯聚合函數(shù)用于對(duì)一組值進(jìn)行計(jì)算并返回一個(gè)匯總值,常用的聚合函數(shù)有累加求和總值,常用的聚合函數(shù)有累加求和sum()函數(shù)、平函數(shù)、平均值均值avg()函數(shù)、統(tǒng)計(jì)記錄的行數(shù)函數(shù)、統(tǒng)計(jì)記錄的行數(shù)cou
27、nt()函數(shù)、最函數(shù)、最大值大值max()函數(shù)和最小值函數(shù)和最小值min()函數(shù)等。函數(shù)等。5.4 5.4 使用聚合函數(shù)匯總結(jié)果集使用聚合函數(shù)匯總結(jié)果集 使用使用count()對(duì)對(duì)NULL值統(tǒng)計(jì)時(shí),值統(tǒng)計(jì)時(shí),count()函數(shù)將函數(shù)將忽略忽略NULL值。值。sum()函數(shù)、函數(shù)、avg()函數(shù)、函數(shù)、max()以以及及min()函數(shù)等統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)數(shù)據(jù)時(shí)也將忽略函數(shù)等統(tǒng)計(jì)函數(shù),統(tǒng)計(jì)數(shù)據(jù)時(shí)也將忽略NULL值。值。5.4 5.4 使用聚合函數(shù)匯總結(jié)果集使用聚合函數(shù)匯總結(jié)果集 group by子句將子句將查詢結(jié)果按照某個(gè)查詢結(jié)果按照某個(gè)字段(或多個(gè)字段)字段(或多個(gè)字段)進(jìn)行分組(字段值進(jìn)行分組(字
28、段值相同的記錄作為一相同的記錄作為一個(gè)分組。個(gè)分組。1 12 23 3group by子句與子句與having子句子句group by子句與聚合函數(shù)子句與聚合函數(shù)group by子句與子句與group_concat()函數(shù)函數(shù)4group by子句與子句與with rollup選項(xiàng)選項(xiàng)5.5 5.5 使用使用group bygroup by子句對(duì)記錄分組統(tǒng)計(jì)子句對(duì)記錄分組統(tǒng)計(jì) group by子句通常與聚合函數(shù)一起使用。子句通常與聚合函數(shù)一起使用。 group by子句的語(yǔ)法格式如下。子句的語(yǔ)法格式如下。group by 字段列表字段列表 having條件表達(dá)式條件表達(dá)式 with rollu
29、p 任務(wù)布置任務(wù)布置7:完成本書場(chǎng)景描述:完成本書場(chǎng)景描述7的任務(wù)要求。的任務(wù)要求。5.5 5.5 使用使用group bygroup by子句對(duì)記錄分組統(tǒng)計(jì)子句對(duì)記錄分組統(tǒng)計(jì) 例如統(tǒng)計(jì)每一個(gè)班的學(xué)生人數(shù)。例如統(tǒng)計(jì)每一個(gè)班的學(xué)生人數(shù)。 例如統(tǒng)計(jì)每個(gè)學(xué)生已經(jīng)選修多少門課程,該生例如統(tǒng)計(jì)每個(gè)學(xué)生已經(jīng)選修多少門課程,該生的最高分、最低分、總分及平均成績(jī)。的最高分、最低分、總分及平均成績(jī)。5.5.1 group by5.5.1 group by子句與聚合函數(shù)子句與聚合函數(shù) having子句用于設(shè)置分組或聚合函數(shù)的過(guò)濾篩子句用于設(shè)置分組或聚合函數(shù)的過(guò)濾篩選條件,選條件,having子句通常與子句通常與g
30、roup by子句一起使子句一起使用。用。having子句語(yǔ)法格式與子句語(yǔ)法格式與where子句語(yǔ)法格式子句語(yǔ)法格式類似,類似,having子句語(yǔ)法格式如下。子句語(yǔ)法格式如下。having條件表達(dá)式條件表達(dá)式其中條件表達(dá)式是一個(gè)邏輯表達(dá)式,用于指定分其中條件表達(dá)式是一個(gè)邏輯表達(dá)式,用于指定分組后的篩選條件。組后的篩選條件。5.5.2 group by5.5.2 group by子句與子句與havinghaving子句子句 例如檢索平均成績(jī)高于例如檢索平均成績(jī)高于70分的學(xué)生信息及平均分的學(xué)生信息及平均成績(jī)。成績(jī)。5.5.2 group by5.5.2 group by子句與子句與havingh
31、aving子句子句 下面下面select語(yǔ)句的語(yǔ)法格式中,語(yǔ)句的語(yǔ)法格式中,select語(yǔ)句的執(zhí)語(yǔ)句的執(zhí)行過(guò)程為:首先使用行過(guò)程為:首先使用where子句對(duì)結(jié)果集進(jìn)行過(guò)子句對(duì)結(jié)果集進(jìn)行過(guò)濾篩選,接著濾篩選,接著group by子句分組子句分組where子句的輸子句的輸出,最后出,最后having子句從分組的結(jié)果中再進(jìn)行篩選。子句從分組的結(jié)果中再進(jìn)行篩選。select 字段列表字段列表from 數(shù)據(jù)源數(shù)據(jù)源where條件表達(dá)式條件表達(dá)式 group by 分組字段分組字段 having條件表達(dá)式條件表達(dá)式 5.5.2 group by5.5.2 group by子句與子句與havinghavin
32、g子句子句 group_concat()函數(shù)的功能是將集合中的字符函數(shù)的功能是將集合中的字符串連接起來(lái),此時(shí)串連接起來(lái),此時(shí)group_concat()函數(shù)的功能與函數(shù)的功能與字符串連接函數(shù)字符串連接函數(shù)concat()的功能相似。的功能相似。5.5.3 group by5.5.3 group by子句與子句與group_concat()group_concat()函數(shù)函數(shù) group_concat()函數(shù)的功能是將集合中的字符函數(shù)的功能是將集合中的字符串連接起來(lái),此時(shí)串連接起來(lái),此時(shí)group_concat()函數(shù)的功能與函數(shù)的功能與字符串連接函數(shù)字符串連接函數(shù)concat()的功能相似。的
33、功能相似。例如下面例如下面SQL語(yǔ)句中的語(yǔ)句中的group_concat()函數(shù)以及函數(shù)以及concat()函數(shù)負(fù)責(zé)將集合中函數(shù)負(fù)責(zé)將集合中(java, 程序程序, 設(shè)計(jì)設(shè)計(jì))三個(gè)字符串連接起來(lái)。三個(gè)字符串連接起來(lái)。select group_concat(java,程序程序,設(shè)計(jì)設(shè)計(jì)),concat(java,程序程序,設(shè)計(jì)設(shè)計(jì));5.5.3 group by5.5.3 group by子句與子句與group_concat()group_concat()函數(shù)函數(shù) group_concat()函數(shù)還可以按照分組字段,函數(shù)還可以按照分組字段,將另一個(gè)字段的值(將另一個(gè)字段的值(NULL值除外)使用
34、逗號(hào)連值除外)使用逗號(hào)連接起來(lái)。接起來(lái)。 concat()卻函數(shù)沒有提供這樣的功能。卻函數(shù)沒有提供這樣的功能。 5.5.3 group by5.5.3 group by子句與子句與group_concat()group_concat()函數(shù)函數(shù) group by子句將結(jié)果集分為若干個(gè)組,使用聚子句將結(jié)果集分為若干個(gè)組,使用聚合函數(shù)可以對(duì)每個(gè)組內(nèi)的數(shù)據(jù)進(jìn)行信息統(tǒng)計(jì),有合函數(shù)可以對(duì)每個(gè)組內(nèi)的數(shù)據(jù)進(jìn)行信息統(tǒng)計(jì),有時(shí)需要對(duì)各個(gè)組進(jìn)行匯總運(yùn)算,則需要在每個(gè)分時(shí)需要對(duì)各個(gè)組進(jìn)行匯總運(yùn)算,則需要在每個(gè)分組后加上一條匯總記錄,這個(gè)任務(wù)可以通過(guò)組后加上一條匯總記錄,這個(gè)任務(wù)可以通過(guò)with rollup選項(xiàng)實(shí)現(xiàn)
35、。選項(xiàng)實(shí)現(xiàn)。5.5.4 group by5.5.4 group by子句與子句與with rollupwith rollup選項(xiàng)選項(xiàng)5.6 5.6 合并結(jié)果集合并結(jié)果集 使用使用unionunion可以將多個(gè)可以將多個(gè)select select 語(yǔ)句的查詢結(jié)語(yǔ)句的查詢結(jié)果集組合成一個(gè)結(jié)果集。果集組合成一個(gè)結(jié)果集。select select 字段列表字段列表1 from table1 1 from table1 union allunion allselect select 字段列表字段列表2 from table2.2 from table2.說(shuō)明:字段列表說(shuō)明:字段列表1 1與字段列表與字段
36、列表2 2的字段個(gè)數(shù)必須相的字段個(gè)數(shù)必須相同,且具有相同的數(shù)據(jù)類型。合并產(chǎn)生的新結(jié)果同,且具有相同的數(shù)據(jù)類型。合并產(chǎn)生的新結(jié)果集的字段名與字段列表集的字段名與字段列表1 1中的字段名對(duì)應(yīng)。中的字段名對(duì)應(yīng)。 union 與與 union all 的區(qū)別:的區(qū)別: 當(dāng)使用當(dāng)使用union時(shí),時(shí),MySQL 會(huì)篩選掉會(huì)篩選掉select結(jié)果結(jié)果集中重復(fù)的記錄(在結(jié)果集合并后會(huì)對(duì)新產(chǎn)生的集中重復(fù)的記錄(在結(jié)果集合并后會(huì)對(duì)新產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,效率稍低)。而使用結(jié)果集進(jìn)行排序運(yùn)算,效率稍低)。而使用union all時(shí),時(shí),MySQL會(huì)直接合并兩個(gè)結(jié)果集,效率高于會(huì)直接合并兩個(gè)結(jié)果集,效率高于un
37、ion。如果可以確定合并前的兩個(gè)結(jié)果集中不包。如果可以確定合并前的兩個(gè)結(jié)果集中不包含重復(fù)的記錄,建議使用含重復(fù)的記錄,建議使用union all。5.6 5.6 合并結(jié)果集合并結(jié)果集 如果一個(gè)如果一個(gè)select語(yǔ)句能夠返回單個(gè)值或者一列語(yǔ)句能夠返回單個(gè)值或者一列值,且該值,且該select語(yǔ)句嵌套在另一個(gè)語(yǔ)句嵌套在另一個(gè)SQL語(yǔ)句中語(yǔ)句中(例如(例如select語(yǔ)句、語(yǔ)句、insert語(yǔ)句、語(yǔ)句、update語(yǔ)句或者語(yǔ)句或者delete語(yǔ)句)中,那么該語(yǔ)句)中,那么該select語(yǔ)句稱為子查詢語(yǔ)句稱為子查詢(也叫內(nèi)層查詢),包含子查詢的(也叫內(nèi)層查詢),包含子查詢的SQL語(yǔ)句稱為語(yǔ)句稱為主查
38、詢(也叫外層查詢)。為了標(biāo)記子查詢與主主查詢(也叫外層查詢)。為了標(biāo)記子查詢與主查詢之間的關(guān)系,通常將子查詢寫在小括號(hào)內(nèi)。查詢之間的關(guān)系,通常將子查詢寫在小括號(hào)內(nèi)。 子查詢分為相關(guān)子查詢與非相關(guān)子查詢。子查詢分為相關(guān)子查詢與非相關(guān)子查詢。 5.7 5.7 子查詢子查詢 子查詢一般用在子查詢一般用在主查詢的主查詢的where子句子句或或having子句中,子句中,與比較運(yùn)算符或者邏與比較運(yùn)算符或者邏輯運(yùn)算符一起構(gòu)成輯運(yùn)算符一起構(gòu)成where篩選條件或篩選條件或having篩選條件。篩選條件。 1 12 23 3子查詢與子查詢與in運(yùn)算符運(yùn)算符子查詢與比較運(yùn)算符子查詢與比較運(yùn)算符子查詢與子查詢與e
39、xists邏輯運(yùn)算符邏輯運(yùn)算符4子查詢與子查詢與any運(yùn)算符運(yùn)算符5子查詢與子查詢與all運(yùn)算符運(yùn)算符5.7 5.7 子查詢子查詢 如果子查詢返回單個(gè)值,則可以將一個(gè)表達(dá)式如果子查詢返回單個(gè)值,則可以將一個(gè)表達(dá)式的值與子查詢的結(jié)果集進(jìn)行比較。的值與子查詢的結(jié)果集進(jìn)行比較。 子查詢可以僅僅使用自己定義的數(shù)據(jù)源,也可子查詢可以僅僅使用自己定義的數(shù)據(jù)源,也可以以“直接引用直接引用”主查詢中的數(shù)據(jù)源,但兩者意義主查詢中的數(shù)據(jù)源,但兩者意義完全不同。完全不同。5.7.1 5.7.1 子查詢與比較運(yùn)算符子查詢與比較運(yùn)算符 如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,這種
40、查詢是非相關(guān)子查詢,非相關(guān)子查詢是獨(dú)立這種查詢是非相關(guān)子查詢,非相關(guān)子查詢是獨(dú)立于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)行完畢后將值傳遞給主查詢。行完畢后將值傳遞給主查詢。 如果子查詢中使用了主查詢的數(shù)據(jù)源,這種如果子查詢中使用了主查詢的數(shù)據(jù)源,這種查詢是相關(guān)子查詢,此時(shí)主查詢的執(zhí)行與相關(guān)子查詢是相關(guān)子查詢,此時(shí)主查詢的執(zhí)行與相關(guān)子查詢的執(zhí)行相互依賴。查詢的執(zhí)行相互依賴。5.7.1 5.7.1 子查詢與比較運(yùn)算符子查詢與比較運(yùn)算符 子查詢經(jīng)常與子查詢經(jīng)常與in運(yùn)算符一起使用,用于將一個(gè)運(yùn)算符一起使用,用于將一個(gè)表達(dá)式的值與子查詢返回的一列值進(jìn)行比較,
41、如表達(dá)式的值與子查詢返回的一列值進(jìn)行比較,如果表達(dá)式的值是此列中的任何一個(gè)值,則條件表果表達(dá)式的值是此列中的任何一個(gè)值,則條件表達(dá)式的結(jié)果為達(dá)式的結(jié)果為true;否則為;否則為false。5.7.2 5.7.2 子查詢與子查詢與inin運(yùn)算符運(yùn)算符 exists邏輯運(yùn)算符用于檢測(cè)子查詢的結(jié)果集是邏輯運(yùn)算符用于檢測(cè)子查詢的結(jié)果集是否包含有記錄,如果結(jié)果集中至少包含一條記錄,否包含有記錄,如果結(jié)果集中至少包含一條記錄,則則exists的結(jié)果為的結(jié)果為true;否則為;否則為false。在。在exists前面加上前面加上not時(shí),與上述結(jié)果恰恰相反。時(shí),與上述結(jié)果恰恰相反。5.7.3 5.7.3 子
42、查詢與子查詢與existsexists邏輯運(yùn)算符邏輯運(yùn)算符 any運(yùn)算符通常與比較運(yùn)算符一起使用。使用運(yùn)算符通常與比較運(yùn)算符一起使用。使用any運(yùn)算符時(shí),通過(guò)比較運(yùn)算符將一個(gè)表達(dá)式的運(yùn)算符時(shí),通過(guò)比較運(yùn)算符將一個(gè)表達(dá)式的值與子查詢返回的一列值逐一進(jìn)行比較,若某次值與子查詢返回的一列值逐一進(jìn)行比較,若某次的比較結(jié)果為的比較結(jié)果為true,則整個(gè)表達(dá)式的值為,則整個(gè)表達(dá)式的值為true;否則為否則為false。any邏輯運(yùn)算符的語(yǔ)法格式如下。邏輯運(yùn)算符的語(yǔ)法格式如下。表達(dá)式表達(dá)式 比較運(yùn)算符比較運(yùn)算符 any(子查詢子查詢)5.7.4 5.7.4 子查詢與子查詢與anyany運(yùn)算符運(yùn)算符 舉例來(lái)說(shuō)
43、:當(dāng)比較運(yùn)算符為大于號(hào)(舉例來(lái)說(shuō):當(dāng)比較運(yùn)算符為大于號(hào)()時(shí),)時(shí),“表達(dá)式表達(dá)式 any(子查詢子查詢)”表示至少大于子查詢結(jié)表示至少大于子查詢結(jié)果集中的某一個(gè)值(或者說(shuō)大于結(jié)果集中的最小果集中的某一個(gè)值(或者說(shuō)大于結(jié)果集中的最小值),那么整個(gè)表達(dá)式的結(jié)果為值),那么整個(gè)表達(dá)式的結(jié)果為true。5.7.4 5.7.4 子查詢與子查詢與anyany運(yùn)算符運(yùn)算符 all運(yùn)算符通常與比較運(yùn)算符一起使用。使用運(yùn)算符通常與比較運(yùn)算符一起使用。使用all運(yùn)算符時(shí),通過(guò)比較運(yùn)算符將一個(gè)表達(dá)式的值運(yùn)算符時(shí),通過(guò)比較運(yùn)算符將一個(gè)表達(dá)式的值與子查詢返回的一列值逐一進(jìn)行比較,若每次的與子查詢返回的一列值逐一進(jìn)行比
44、較,若每次的比較結(jié)果都為比較結(jié)果都為true,則整個(gè)表達(dá)式的值為,則整個(gè)表達(dá)式的值為true;否則為否則為false。any邏輯運(yùn)算符的語(yǔ)法格式如下。邏輯運(yùn)算符的語(yǔ)法格式如下。表達(dá)式表達(dá)式 比較運(yùn)算符比較運(yùn)算符 all(子查詢子查詢)5.7.5 5.7.5 子查詢與子查詢與allall運(yùn)算符運(yùn)算符 舉例來(lái)說(shuō):當(dāng)比較運(yùn)算符為大于號(hào)(舉例來(lái)說(shuō):當(dāng)比較運(yùn)算符為大于號(hào)()時(shí),)時(shí),“表達(dá)式表達(dá)式 all(子查詢子查詢)”表示大于子查詢結(jié)果集表示大于子查詢結(jié)果集中的任何一個(gè)值(或者說(shuō)大于結(jié)果集中的最大中的任何一個(gè)值(或者說(shuō)大于結(jié)果集中的最大值),那么整個(gè)表達(dá)式的結(jié)果為值),那么整個(gè)表達(dá)式的結(jié)果為true
45、。5.7.5 5.7.5 子查詢與子查詢與allall運(yùn)算符運(yùn)算符任務(wù)布置任務(wù)布置8:書寫本章節(jié)的:書寫本章節(jié)的select代碼。代碼。5.8 5.8 選課系統(tǒng)綜合查詢選課系統(tǒng)綜合查詢5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢 與與likelike運(yùn)算符相似,正則表達(dá)式主要用于判運(yùn)算符相似,正則表達(dá)式主要用于判斷一個(gè)字符串是否與給定的模式匹配,但正則表斷一個(gè)字符串是否與給定的模式匹配,但正則表達(dá)式的模式匹配功能比達(dá)式的模式匹配功能比likelike運(yùn)算符的模式匹配功運(yùn)算符的模式匹配功能更為強(qiáng)大,且更加靈活。使用正則表達(dá)式進(jìn)行能更為強(qiáng)大,且更加靈活。使用正則表達(dá)式進(jìn)行模糊查詢時(shí)
46、,需要使用模糊查詢時(shí),需要使用regexpregexp關(guān)鍵字,語(yǔ)法格式關(guān)鍵字,語(yǔ)法格式如下。如下。字段名字段名 not regexp binary not regexp binary 正則表達(dá)式正則表達(dá)式 5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢 正則表達(dá)式由一些普通字符和一些元字符構(gòu)正則表達(dá)式由一些普通字符和一些元字符構(gòu)成,普通字符包括大寫字母、小寫字母和數(shù)字,成,普通字符包括大寫字母、小寫字母和數(shù)字,而元字符具有特殊的含義。在最簡(jiǎn)單的情況下,而元字符具有特殊的含義。在最簡(jiǎn)單的情況下,一個(gè)正則表達(dá)式是一個(gè)不包含元字符的字符串。一個(gè)正則表達(dá)式是一個(gè)不包含元字符的字符串。例如
47、正則表達(dá)式例如正則表達(dá)式testingtesting中沒有包含任何元字中沒有包含任何元字符,它可以匹配符,它可以匹配testingtesting、123testing123testing等字等字符串。符串。 5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢常常用用的的元元字字符符 例如檢索含有例如檢索含有“java”的課程信息,可以使用的課程信息,可以使用下面的下面的SQL語(yǔ)句。語(yǔ)句。select * from course where course_name regexp java;5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢 例如檢索以例如檢索以“程序設(shè)計(jì)程序設(shè)
48、計(jì)”結(jié)尾的課程信息,可結(jié)尾的課程信息,可以使用下面的以使用下面的SQL語(yǔ)句。語(yǔ)句。select * from course where course_name regexp 程序設(shè)計(jì)程序設(shè)計(jì)$;5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢 例如檢索以例如檢索以“j”開頭,以開頭,以“程序設(shè)計(jì)程序設(shè)計(jì)”結(jié)尾的結(jié)尾的課程信息,可以使用下面的課程信息,可以使用下面的SQL語(yǔ)句。語(yǔ)句。select * from course where course_name regexp j.*程序設(shè)計(jì)程序設(shè)計(jì)$;5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢 例如檢索學(xué)生聯(lián)系方式中以
49、例如檢索學(xué)生聯(lián)系方式中以15開頭或者開頭或者18開開頭,且后面跟著頭,且后面跟著9位數(shù)字的學(xué)生信息,可以使用位數(shù)字的學(xué)生信息,可以使用下面的下面的SQL語(yǔ)句。語(yǔ)句。select * from student where student_contact regexp 1580-99;5.9 5.9 使用正則表達(dá)式模糊查詢使用正則表達(dá)式模糊查詢 大多數(shù)時(shí)候,使用大多數(shù)時(shí)候,使用like關(guān)鍵字或者正則表達(dá)式關(guān)鍵字或者正則表達(dá)式對(duì)字符串進(jìn)行模糊查詢,需要對(duì)表進(jìn)行全表掃描,對(duì)字符串進(jìn)行模糊查詢,需要對(duì)表進(jìn)行全表掃描,檢索效率較低。檢索效率較低。 通過(guò)全文檢索,可以有效提升字符串檢索效率。通過(guò)全文檢索,可
50、以有效提升字符串檢索效率。5.10 5.10 全文檢索全文檢索 簡(jiǎn)單地說(shuō),簡(jiǎn)單地說(shuō),MySQL全文檢索使用特定的分詞全文檢索使用特定的分詞技術(shù)、利用查詢關(guān)鍵字和查詢字段內(nèi)容之間的相技術(shù)、利用查詢關(guān)鍵字和查詢字段內(nèi)容之間的相關(guān)度進(jìn)行檢索,通過(guò)全文索引提高文本匹配的速關(guān)度進(jìn)行檢索,通過(guò)全文索引提高文本匹配的速度。全文檢索的語(yǔ)法格式如下。度。全文檢索的語(yǔ)法格式如下。select字段列表字段列表from 表名表名where match (全文索引字段全文索引字段1,全文索引字段全文索引字段2,.) against (搜索關(guān)鍵字搜索關(guān)鍵字 全文檢索方式全文檢索方式 )5.10 5.10 全文檢索全文檢索
51、 在在2011年發(fā)布的年發(fā)布的5.6版本中版本中InnoDB存儲(chǔ)引存儲(chǔ)引擎表實(shí)現(xiàn)了全文檢索擎表實(shí)現(xiàn)了全文檢索的支持,這將大幅提的支持,這將大幅提升升InnoDB存儲(chǔ)引擎的存儲(chǔ)引擎的字符串檢索效率,實(shí)字符串檢索效率,實(shí)現(xiàn)更快速、更高質(zhì)量現(xiàn)更快速、更高質(zhì)量的模糊查詢。的模糊查詢。 1 12 23 3全文檢索方式全文檢索方式全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用布爾檢索模式的復(fù)雜應(yīng)用布爾檢索模式的復(fù)雜應(yīng)用4MySQL全文檢索的注意事項(xiàng)全文檢索的注意事項(xiàng)5InnoDB表的全文檢索表的全文檢索5.10 5.10 全文檢索全文檢索create table book(isbn char(20) primary
52、 key,name char(100) not null,brief_introduction text not null,price decimal(6,2),publish_time date not null,unique index isbn_unique (isbn),index name_index (name (20),fulltext index brief_fulltext (name,brief_introduction),index complex_index (price,publish_time) engine=MyISAM default charset=gbk;
53、創(chuàng)建書籍book表(注意該表為注意該表為MyISAM存儲(chǔ)引擎),在存儲(chǔ)引擎),在book表中的字段組合(name, brief_introduction)創(chuàng)建一個(gè)全文索引 。5.10.1 5.10.1 全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用insert into book(isbn,name,brief_introduction,price,publish_time) values(978-7-115-25626-3,PHP Fundamentals & Practices,Web Database Applications MySQL offers web developers a mixtu
54、re of theoretical and practical information on creating web database applications. ,42.0,2012-7-1), (978-7-115-25626-4,MySQL COOKBOOK,The MySQL database management system has become quite popular in recent years.,128.0,2008-1-1), (978-7-115-25626-5,Beginning MySQL, MySQL is especially heavily used i
55、n combination with a web server for constructing database-backed web sites that involve dynamic content generation.,98.0,2008-1-1); 向向book表插入測(cè)試數(shù)據(jù)。表插入測(cè)試數(shù)據(jù)。5.10.1 5.10.1 全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用 例如檢索書名或者簡(jiǎn)介中涉及到例如檢索書名或者簡(jiǎn)介中涉及到practices單詞單詞的所有圖書信息,可以使用下面的的所有圖書信息,可以使用下面的SQL語(yǔ)句。語(yǔ)句。select * from book where match (n
56、ame,brief_introduction) against (practices)G5.10.1 5.10.1 全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用 例如檢索書名或者簡(jiǎn)介中涉及到例如檢索書名或者簡(jiǎn)介中涉及到practices或者或者cookbook單詞的所有圖書信息,可以使用下面單詞的所有圖書信息,可以使用下面的的SQL語(yǔ)句。語(yǔ)句。select * from book where match (name,brief_introduction) against (practices cookbook)G5.10.1 5.10.1 全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用 檢索書名或者簡(jiǎn)介中涉及到
57、檢索書名或者簡(jiǎn)介中涉及到mysql單詞的所有單詞的所有圖書信息,將檢索失敗。圖書信息,將檢索失敗。 MySQL在進(jìn)行全文檢索時(shí),默認(rèn)情況下將忽在進(jìn)行全文檢索時(shí),默認(rèn)情況下將忽略權(quán)重超過(guò)略權(quán)重超過(guò)50%的記錄,的記錄,50%稱為閾值(注意讀稱為閾值(注意讀作:作:y zh),), 因此檢索失敗。因此檢索失敗。5.10.1 5.10.1 全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用 如果希望忽略閾值的因素,例如檢索書名或者如果希望忽略閾值的因素,例如檢索書名或者簡(jiǎn)介中涉及到簡(jiǎn)介中涉及到“mysql”單詞的所有圖書信息,可單詞的所有圖書信息,可以使用下面的以使用下面的SQL語(yǔ)句,執(zhí)行結(jié)果如圖語(yǔ)句,執(zhí)行結(jié)果如
58、圖5-66所示,所示,該該SQL語(yǔ)句使用了布爾檢索模式(稍后講解)。語(yǔ)句使用了布爾檢索模式(稍后講解)。select * from book where match (name,brief_introduction) against (mysql in boolean mode)G5.10.1 5.10.1 全文檢索的簡(jiǎn)單應(yīng)用全文檢索的簡(jiǎn)單應(yīng)用 檢索書名或者簡(jiǎn)介中涉及到檢索書名或者簡(jiǎn)介中涉及到php單詞的所有圖單詞的所有圖書信息,將檢索失敗。書信息,將檢索失敗。 這是由于這是由于MySQL全文檢索對(duì)搜索關(guān)鍵字的最全文檢索對(duì)搜索關(guān)鍵字的最?。J(rèn)值為?。J(rèn)值為4)以及最大長(zhǎng)度(默認(rèn)值為)以及最大長(zhǎng)度(默認(rèn)值為84)進(jì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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源汽車充電站場(chǎng)地租賃與運(yùn)營(yíng)管理合同12篇
- 2025年度圖書銷售合同范本二零二五年度4篇
- 二零二五年度高端餐廳特色菜品定制供應(yīng)合同3篇
- 專業(yè)設(shè)備運(yùn)輸協(xié)議模板(2024版)
- 2024蓄水池建造與維護(hù)一體化服務(wù)合同3篇
- 專業(yè)用琴租賃協(xié)議(2024年度)版B版
- 2025年度茶葉倉(cāng)儲(chǔ)物流配送服務(wù)協(xié)議4篇
- 2025年度智慧城市建設(shè)物聯(lián)網(wǎng)設(shè)備采購(gòu)與安裝服務(wù)協(xié)議3篇
- 2024限定版戶外欄桿施工協(xié)議版B版
- 個(gè)性化汽車租賃協(xié)議模板2024版版
- 安徽省合肥市包河區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題
- 《酸堿罐區(qū)設(shè)計(jì)規(guī)范》編制說(shuō)明
- PMC主管年終總結(jié)報(bào)告
- 售樓部保安管理培訓(xùn)
- 倉(cāng)儲(chǔ)培訓(xùn)課件模板
- 2025屆高考地理一輪復(fù)習(xí)第七講水循環(huán)與洋流自主練含解析
- GB/T 44914-2024和田玉分級(jí)
- 2024年度企業(yè)入駐跨境電商孵化基地合作協(xié)議3篇
- 《形勢(shì)與政策》課程標(biāo)準(zhǔn)
- 2023年海南省公務(wù)員錄用考試《行測(cè)》真題卷及答案解析
- 橋梁監(jiān)測(cè)監(jiān)控實(shí)施方案
評(píng)論
0/150
提交評(píng)論