




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、肖紅肖紅MySQLMySQL數(shù)據(jù)庫基礎(chǔ)與實例教程數(shù)據(jù)庫基礎(chǔ)與實例教程 之之表記錄的檢索表記錄的檢索1 12 23 3 本章詳細講解本章詳細講解select語句檢索表語句檢索表記錄的方法,并結(jié)記錄的方法,并結(jié)合合“選課系統(tǒng)選課系統(tǒng)”,討論該系統(tǒng)部分問討論該系統(tǒng)部分問題域的實現(xiàn)方法。題域的實現(xiàn)方法。4 4使用使用where子句過濾結(jié)果集子句過濾結(jié)果集select語句概述語句概述使用使用order by子句對結(jié)果集排序子句對結(jié)果集排序使用聚合函數(shù)匯總結(jié)果集使用聚合函數(shù)匯總結(jié)果集5 5使用使用group by子句對記錄分組統(tǒng)計子句對記錄分組統(tǒng)計內(nèi)容一覽內(nèi)容一覽 6 67 78 8 本章詳細講解本章詳細
2、講解select語句檢索表語句檢索表記錄的方法,并結(jié)記錄的方法,并結(jié)合合“選課系統(tǒng)選課系統(tǒng)”,討論該系統(tǒng)部分問討論該系統(tǒng)部分問題域的實現(xiàn)方法。題域的實現(xiàn)方法。9 9子查詢子查詢合并結(jié)果集合并結(jié)果集選課系統(tǒng)綜合查詢選課系統(tǒng)綜合查詢使用正則表達式模糊查詢使用正則表達式模糊查詢1010全文檢索全文檢索內(nèi)容一覽內(nèi)容一覽 5.1 select5.1 select語句概述語句概述select語句的語法格式如下。語句的語法格式如下。select 字段列表字段列表from 數(shù)據(jù)源數(shù)據(jù)源 where條件表達式條件表達式 group by 分組字段分組字段 having條件表達式條件表達式 order by 排序
3、字段排序字段 asc | desc 1 12 23 3使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù)使用使用select子句指定字段列表子句指定字段列表使用使用from子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源4多表連接多表連接5.1 select5.1 select語句概述語句概述使用以下幾種方式指定字段列表:使用以下幾種方式指定字段列表:5.1.1 5.1.1 使用使用selectselect子句指定字段列表子句指定字段列表 可以為字段列表中的字段名或表達式指定可以為字段列表中的字段名或表達式指定別名,中間使用別名,中間使用as關(guān)鍵字分隔即可(關(guān)鍵字分隔即可(as關(guān)鍵關(guān)鍵字可以省略)。字可以省略)。 多表
4、查詢時,同名字段前必須添加表名前多表查詢時,同名字段前必須添加表名前綴,中間使用綴,中間使用“.”分隔。分隔。5.1.1 5.1.1 使用使用selectselect子句指定字段列表子句指定字段列表MySQL中的兩個謂詞中的兩個謂詞distinct和和limit可以限制記可以限制記錄的行數(shù)。錄的行數(shù)。(1)使用謂詞)使用謂詞distinct過濾結(jié)果集中的重復(fù)記錄過濾結(jié)果集中的重復(fù)記錄數(shù)據(jù)庫表中不允許出現(xiàn)重復(fù)的記錄,但這不意味數(shù)據(jù)庫表中不允許出現(xiàn)重復(fù)的記錄,但這不意味著著select的查詢結(jié)果集中不會出現(xiàn)記錄重復(fù)的現(xiàn)象。的查詢結(jié)果集中不會出現(xiàn)記錄重復(fù)的現(xiàn)象。如果需要過濾結(jié)果集中重復(fù)的記錄,可以使
5、用謂如果需要過濾結(jié)果集中重復(fù)的記錄,可以使用謂詞關(guān)鍵字詞關(guān)鍵字distinct,語法格式如下。,語法格式如下。distinct 字段名字段名5.1.2 5.1.2 使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù)(2)使用謂詞)使用謂詞limit查詢某幾行記錄查詢某幾行記錄查詢前幾條或者中間某幾條記錄,可以使用謂詞查詢前幾條或者中間某幾條記錄,可以使用謂詞關(guān)鍵字關(guān)鍵字limit實現(xiàn)。語法格式如下。實現(xiàn)。語法格式如下。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語句等效于:語句等效于:select * from student limit 3;例如檢索例如檢索choose表中從第表中從第2條記錄開始的條記錄開始的3條記錄條記錄信息,可以使用下面的信息,可以使用下面的SQL語句。語句。select * from choose limit 1,3;5.1.2 5.1.2 使用謂詞限制記錄的行數(shù)使用謂詞限制記錄的行數(shù) 多張數(shù)據(jù)庫表(或
7、者視圖)多張數(shù)據(jù)庫表(或者視圖)“縫補縫補”成一個結(jié)成一個結(jié)果集時,需要指定果集時,需要指定“縫補縫補”條件,該條件,該“縫補縫補”條條件稱為連接條件。件稱為連接條件。 指定連接條件的方法有兩種:第一種方法是在指定連接條件的方法有兩種:第一種方法是在where子句中指定連接條件(稍后講解)。第二子句中指定連接條件(稍后講解)。第二種方法是在種方法是在from子句中使用連接(子句中使用連接(join)運算將)運算將多個數(shù)據(jù)源按照某種連接條件多個數(shù)據(jù)源按照某種連接條件“縫補縫補”在一起。在一起。 5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源 第二種方法第二種方法fr
8、om子句的語法格式如下。子句的語法格式如下。from 表名表名1 連接類型連接類型 join 表名表名2 on 表表1和和表表2之間的連接條件之間的連接條件說明:說明:SQL標(biāo)準(zhǔn)中的連接類型主要分為標(biāo)準(zhǔn)中的連接類型主要分為inner連連接(內(nèi)連接)和接(內(nèi)連接)和outer連接(外連接),而外連連接(外連接),而外連接又分為接又分為left(左外連接,簡稱為左連接)、(左外連接,簡稱為左連接)、right(右外連接,簡稱為右連接)以及(右外連接,簡稱為右連接)以及full(完(完全外連接,簡稱完全連接)。全外連接,簡稱完全連接)。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子
9、句指定數(shù)據(jù)源1內(nèi)連接(內(nèi)連接(inner join) 內(nèi)連接將兩個表中滿足指定連接條件的記錄連內(nèi)連接將兩個表中滿足指定連接條件的記錄連接成新的結(jié)果集,舍棄所有不滿足連接條件的記接成新的結(jié)果集,舍棄所有不滿足連接條件的記錄。內(nèi)連接是最常用的連接類型,也是默認的連錄。內(nèi)連接是最常用的連接類型,也是默認的連接類型,可以在接類型,可以在from子句中使用子句中使用inner join(inner關(guān)鍵字可以省略)實現(xiàn)內(nèi)連接,語法格關(guān)鍵字可以省略)實現(xiàn)內(nèi)連接,語法格式如下。式如下。from 表表1 inner join 表表2 on 表表1和表和表2之間的之間的連接條件連接條件5.1.3 5.1.3 使用
10、使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源任務(wù)布置任務(wù)布置1:完成本書場景描述:完成本書場景描述1的任務(wù)要求。的任務(wù)要求。說明:使用內(nèi)連接連接兩個數(shù)據(jù)庫表時,連接條說明:使用內(nèi)連接連接兩個數(shù)據(jù)庫表時,連接條件會同時過濾表件會同時過濾表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)連接不同,外連接(左連接或右連接)的連接條件只過
11、同,外連接(左連接或右連接)的連接條件只過濾一個表,對另一個表不進行過濾(該表的所有濾一個表,對另一個表不進行過濾(該表的所有記錄出現(xiàn)在結(jié)果集中);記錄出現(xiàn)在結(jié)果集中); 注意:注意:MySQL暫不支持完全連接暫不支持完全連接 。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源(1)左連接的語法格式)左連接的語法格式from 表表1 left join 表表2 on 表表1和表和表2之間的連之間的連接條件接條件說明:語法格式中表說明:語法格式中表1左連接表左連接表2,意味著查詢結(jié),意味著查詢結(jié)果集中須包含表果集中須包含表1的全部記錄,然后表的全部記錄,然后表1按指定
12、的按指定的連接條件與表連接條件與表2進行連接,若表進行連接,若表2中沒有滿足連接中沒有滿足連接條件的記錄,則結(jié)果集中表條件的記錄,則結(jié)果集中表2相應(yīng)的字段填入相應(yīng)的字段填入NULL。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源任務(wù)布置任務(wù)布置2:完成本書場景描述:完成本書場景描述2的任務(wù)要求。的任務(wù)要求。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源(2)右連接的語法格式)右連接的語法格式from 表表1 right join 表表2 on 表表1和表和表2之間的之間的連接條件連接條件說明:語法格式中表說明:語法格式中表1右連接表右
13、連接表2,意味著查詢結(jié),意味著查詢結(jié)果集中須包含表果集中須包含表2的全部記錄,然后表的全部記錄,然后表2按指定的按指定的連接條件與表連接條件與表1進行連接,若表進行連接,若表1中沒有滿足連接中沒有滿足連接條件的記錄,則結(jié)果集中表條件的記錄,則結(jié)果集中表1相應(yīng)的字段填入相應(yīng)的字段填入NULL。 5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源任務(wù)布置任務(wù)布置3:完成本書場景描述:完成本書場景描述3的任務(wù)要求。的任務(wù)要求。5.1.3 5.1.3 使用使用fromfrom子句指定數(shù)據(jù)源子句指定數(shù)據(jù)源 以以3個表為例,語法格式如下。個表為例,語法格式如下。from 表表1
14、連接類型連接類型 join 表表2 on 表表1和表和表2之之間的連接條件間的連接條件連接類型連接類型 join 表表3 on 表表2和表和表3之間的連接之間的連接條件條件5.1.4 5.1.4 多表連接多表連接 數(shù)據(jù)庫中存儲著海量數(shù)據(jù)庫中存儲著海量數(shù)據(jù),數(shù)據(jù)庫用戶往往數(shù)據(jù),數(shù)據(jù)庫用戶往往需要的是滿足特定條件需要的是滿足特定條件的記錄,的記錄,where子句可子句可以實現(xiàn)結(jié)果集的過濾篩以實現(xiàn)結(jié)果集的過濾篩選。選。 where子句的語法格式:子句的語法格式:where 條件表達式條件表達式1 12 23 3is NULL運算符運算符使用單一的條件過濾結(jié)果集使用單一的條件過濾結(jié)果集select語句
15、與字符集語句與字符集4使用邏輯運算符使用邏輯運算符5使用使用like進行模糊查詢進行模糊查詢5.2 5.2 使用使用wherewhere子句過濾結(jié)果集子句過濾結(jié)果集 單一的過濾條件可以使用下面的布爾表達式表單一的過濾條件可以使用下面的布爾表達式表示。示。表達式表達式1 比較運算符比較運算符 表達式表達式2說明:說明:“表達式表達式1”和和“表達式表達式2”可以是一個字段可以是一個字段名、常量、變量、函數(shù)甚至是子查詢。名、常量、變量、函數(shù)甚至是子查詢。比較運算符用于比較兩個表達式的值,比較的結(jié)比較運算符用于比較兩個表達式的值,比較的結(jié)果是一個布爾值(果是一個布爾值(true或者或者false)。
16、)。5.2.1 5.2.1 使用單一的條件過濾結(jié)果集使用單一的條件過濾結(jié)果集 常用的比較運算符有常用的比較運算符有=(等于)、(等于)、(大于)、(大于)、=(大于等于)、(大于等于)、(小于)、(小于)、=(小于等于)、(小于等于)、(不等于)、(不等于)、!=(不等于)、(不等于)、!(不大于)。(不大于)。 如果表達式的結(jié)果是數(shù)值,則按照數(shù)值的大小如果表達式的結(jié)果是數(shù)值,則按照數(shù)值的大小進行比較;如果表達式的結(jié)果是字符串,則需要進行比較;如果表達式的結(jié)果是字符串,則需要參考字符序參考字符序collation的設(shè)置進行比較。的設(shè)置進行比較。5.2.1 5.2.1 使用單一的條件過濾結(jié)果集使
17、用單一的條件過濾結(jié)果集 is NULL用于判斷表達式的值是否為空值用于判斷表達式的值是否為空值NULL(is not 恰恰相反),恰恰相反),is NULL的語法格式如下。的語法格式如下。表達式表達式 is not NULL說明:不能將說明:不能將“score is NULL”寫成寫成“score = NULL;”,原因是,原因是NULL是一個不確定的數(shù),不能是一個不確定的數(shù),不能使用使用“=”、“!=”等比較運算符與等比較運算符與NULL進行比較。進行比較。 5.2.2 is NULL5.2.2 is NULL運算符運算符 任務(wù)布置任務(wù)布置4:完成本書場景描述:完成本書場景描述4:MySQL
18、客戶客戶機顯示結(jié)果集時出現(xiàn)亂碼問題的任務(wù)要求。機顯示結(jié)果集時出現(xiàn)亂碼問題的任務(wù)要求。 任務(wù)布置任務(wù)布置5:完成本書場景描述:完成本書場景描述5:查詢結(jié)果失:查詢結(jié)果失敗問題的任務(wù)要求。敗問題的任務(wù)要求。 任務(wù)布置任務(wù)布置6:完成本書場景描述:完成本書場景描述6:SQL語句解語句解析錯誤問題的任務(wù)要求。析錯誤問題的任務(wù)要求。5.2.3 select5.2.3 select語句與字符集語句與字符集 where子句中可以包含多個查詢條件,使用邏子句中可以包含多個查詢條件,使用邏輯運算符可以將多個查詢條件組合起來,完成更輯運算符可以將多個查詢條件組合起來,完成更為復(fù)雜的過濾篩選。常用的邏輯運算符包括邏
19、輯為復(fù)雜的過濾篩選。常用的邏輯運算符包括邏輯與(與(and)、邏輯或()、邏輯或(or)以及邏輯非(!),其)以及邏輯非(!),其中邏輯非(?。閱文窟\算符。中邏輯非(?。閱文窟\算符。 5.2.4 5.2.4 使用邏輯運算符使用邏輯運算符1邏輯非(?。┻壿嫹牵ǎ。?邏輯非(?。閱文窟\算符,邏輯非(?。┑倪壿嫹牵ǎ。閱文窟\算符,邏輯非(?。┑氖褂梅椒ㄝ^為簡單,如下所示。使用邏輯非(?。┦褂梅椒ㄝ^為簡單,如下所示。使用邏輯非(?。┎僮鞑紶柋磉_式時,布爾表達式的值為操作布爾表達式時,布爾表達式的值為true時,時,整個邏輯表達式的結(jié)果為整個邏輯表達式的結(jié)果為false,反之亦然。,反之亦然。!
20、布爾表達式布爾表達式5.2.4 5.2.4 使用邏輯運算符使用邏輯運算符2and邏輯運算符邏輯運算符 使用使用and邏輯運算符連接兩個布爾表達式時,邏輯運算符連接兩個布爾表達式時,只有兩個布爾表達式的值都為只有兩個布爾表達式的值都為true時,整個邏輯時,整個邏輯表達式的結(jié)果才為表達式的結(jié)果才為true。語法格式如下。語法格式如下。布爾表達式布爾表達式1 and 布爾表達式布爾表達式2 5.2.4 5.2.4 使用邏輯運算符使用邏輯運算符 另外另外MySQL還支持還支持betweenand運算符,運算符,betweenand運算符用于判斷一個表達式的值運算符用于判斷一個表達式的值是否位于指定的
21、取值范圍內(nèi),是否位于指定的取值范圍內(nèi),betweenand的的語法格式如下。語法格式如下。表達式表達式 not between 起始值起始值 and 終止值終止值5.2.4 5.2.4 使用邏輯運算符使用邏輯運算符3使用使用or邏輯運算符邏輯運算符 使用使用or邏輯運算符連接兩個布爾表達式時,只邏輯運算符連接兩個布爾表達式時,只有兩個表達式的值都為有兩個表達式的值都為false時,整個邏輯表達式時,整個邏輯表達式的結(jié)果才為的結(jié)果才為false。語法格式如下。語法格式如下。布爾表達式布爾表達式1 or 布爾表達式布爾表達式2 5.2.4 5.2.4 使用邏輯運算符使用邏輯運算符 另外另外MySQ
22、L還支持還支持in運算符,運算符,in運算符用于判運算符用于判定一個表達式的值是否位于一個離散的數(shù)學(xué)集合定一個表達式的值是否位于一個離散的數(shù)學(xué)集合內(nèi),內(nèi),in的語法格式如下。的語法格式如下。表達式表達式 not in (數(shù)學(xué)集合)(數(shù)學(xué)集合)5.2.4 5.2.4 使用邏輯運算符使用邏輯運算符 like運算符用于判斷一個字符串是否與給定的模運算符用于判斷一個字符串是否與給定的模式相匹配。式相匹配。 模式是一種特殊的字符串,特殊之處在于不僅模式是一種特殊的字符串,特殊之處在于不僅包含普通字符,還包含有通配符。在實際應(yīng)用中,包含普通字符,還包含有通配符。在實際應(yīng)用中,如果不能對字符串進行精確查詢,
23、此時可以使用如果不能對字符串進行精確查詢,此時可以使用like運算符與通配符實現(xiàn)模糊查詢,運算符與通配符實現(xiàn)模糊查詢,like運算符的運算符的語法格式如下。語法格式如下。字符串表達式字符串表達式 not like 模式模式5.2.5 5.2.5 使用使用likelike進行模糊查詢進行模糊查詢 模式是一個字符串,其中包含普通字符和通配模式是一個字符串,其中包含普通字符和通配符。在符。在MySQL中常用的通配符如表所示。中常用的通配符如表所示。5.2.5 5.2.5 使用使用likelike進行模糊查詢進行模糊查詢 模糊查詢模糊查詢“%”或者或者“_”字符時,需要將字符時,需要將“%”或者或者“
24、_”字符轉(zhuǎn)義,例如檢索學(xué)生姓名中所有帶字符轉(zhuǎn)義,例如檢索學(xué)生姓名中所有帶“_”的學(xué)生信息,可以使用下面的的學(xué)生信息,可以使用下面的SQL語句,其語句,其中中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進行模糊查詢進行模糊查詢 如果不想使用如果不想使用“”作為轉(zhuǎn)義字符,可以使用作為轉(zhuǎn)義字符,可以使用escape關(guān)鍵字自定義一個轉(zhuǎn)義字符,例如下面的關(guān)鍵字自定義
25、一個轉(zhuǎn)義字符,例如下面的SQL語句使用字符語句使用字符“!”作為轉(zhuǎn)義字符。作為轉(zhuǎn)義字符。select * from new_student where student_name like %!_% escape !;5.2.5 5.2.5 使用使用likelike進行模糊查詢進行模糊查詢 select語句的查詢結(jié)果集的排序由數(shù)據(jù)庫系統(tǒng)語句的查詢結(jié)果集的排序由數(shù)據(jù)庫系統(tǒng)動態(tài)確定,往往是無序的,動態(tài)確定,往往是無序的,order by子句用于對子句用于對結(jié)果集排序。在結(jié)果集排序。在select語句中添加語句中添加order by子句,子句,就可以使結(jié)果集中的記錄按照一個或多個字段的就可以使結(jié)果集中
26、的記錄按照一個或多個字段的值進行排序,排序的方向可以是升序(值進行排序,排序的方向可以是升序(asc)或降)或降序(序(desc)。)。order by子句的語法格式如下。子句的語法格式如下。order by 字段名字段名1 asc|desc ,字段名字段名n asc|desc 5.3 5.3 使用使用order byorder by子句對結(jié)果集排序子句對結(jié)果集排序 聚合函數(shù)用于對一組值進行計算并返回一個匯聚合函數(shù)用于對一組值進行計算并返回一個匯總值,常用的聚合函數(shù)有累加求和總值,常用的聚合函數(shù)有累加求和sum()函數(shù)、平函數(shù)、平均值均值avg()函數(shù)、統(tǒng)計記錄的行數(shù)函數(shù)、統(tǒng)計記錄的行數(shù)cou
27、nt()函數(shù)、最函數(shù)、最大值大值max()函數(shù)和最小值函數(shù)和最小值min()函數(shù)等。函數(shù)等。5.4 5.4 使用聚合函數(shù)匯總結(jié)果集使用聚合函數(shù)匯總結(jié)果集 使用使用count()對對NULL值統(tǒng)計時,值統(tǒng)計時,count()函數(shù)將函數(shù)將忽略忽略NULL值。值。sum()函數(shù)、函數(shù)、avg()函數(shù)、函數(shù)、max()以以及及min()函數(shù)等統(tǒng)計函數(shù),統(tǒng)計數(shù)據(jù)時也將忽略函數(shù)等統(tǒng)計函數(shù),統(tǒng)計數(shù)據(jù)時也將忽略NULL值。值。5.4 5.4 使用聚合函數(shù)匯總結(jié)果集使用聚合函數(shù)匯總結(jié)果集 group by子句將子句將查詢結(jié)果按照某個查詢結(jié)果按照某個字段(或多個字段)字段(或多個字段)進行分組(字段值進行分組(字
28、段值相同的記錄作為一相同的記錄作為一個分組。個分組。1 12 23 3group by子句與子句與having子句子句group by子句與聚合函數(shù)子句與聚合函數(shù)group by子句與子句與group_concat()函數(shù)函數(shù)4group by子句與子句與with rollup選項選項5.5 5.5 使用使用group bygroup by子句對記錄分組統(tǒng)計子句對記錄分組統(tǒng)計 group by子句通常與聚合函數(shù)一起使用。子句通常與聚合函數(shù)一起使用。 group by子句的語法格式如下。子句的語法格式如下。group by 字段列表字段列表 having條件表達式條件表達式 with rollu
29、p 任務(wù)布置任務(wù)布置7:完成本書場景描述:完成本書場景描述7的任務(wù)要求。的任務(wù)要求。5.5 5.5 使用使用group bygroup by子句對記錄分組統(tǒng)計子句對記錄分組統(tǒng)計 例如統(tǒng)計每一個班的學(xué)生人數(shù)。例如統(tǒng)計每一個班的學(xué)生人數(shù)。 例如統(tǒng)計每個學(xué)生已經(jīng)選修多少門課程,該生例如統(tǒng)計每個學(xué)生已經(jīng)選修多少門課程,該生的最高分、最低分、總分及平均成績。的最高分、最低分、總分及平均成績。5.5.1 group by5.5.1 group by子句與聚合函數(shù)子句與聚合函數(shù) having子句用于設(shè)置分組或聚合函數(shù)的過濾篩子句用于設(shè)置分組或聚合函數(shù)的過濾篩選條件,選條件,having子句通常與子句通常與g
30、roup by子句一起使子句一起使用。用。having子句語法格式與子句語法格式與where子句語法格式子句語法格式類似,類似,having子句語法格式如下。子句語法格式如下。having條件表達式條件表達式其中條件表達式是一個邏輯表達式,用于指定分其中條件表達式是一個邏輯表達式,用于指定分組后的篩選條件。組后的篩選條件。5.5.2 group by5.5.2 group by子句與子句與havinghaving子句子句 例如檢索平均成績高于例如檢索平均成績高于70分的學(xué)生信息及平均分的學(xué)生信息及平均成績。成績。5.5.2 group by5.5.2 group by子句與子句與havingh
31、aving子句子句 下面下面select語句的語法格式中,語句的語法格式中,select語句的執(zhí)語句的執(zhí)行過程為:首先使用行過程為:首先使用where子句對結(jié)果集進行過子句對結(jié)果集進行過濾篩選,接著濾篩選,接著group by子句分組子句分組where子句的輸子句的輸出,最后出,最后having子句從分組的結(jié)果中再進行篩選。子句從分組的結(jié)果中再進行篩選。select 字段列表字段列表from 數(shù)據(jù)源數(shù)據(jù)源where條件表達式條件表達式 group by 分組字段分組字段 having條件表達式條件表達式 5.5.2 group by5.5.2 group by子句與子句與havinghavin
32、g子句子句 group_concat()函數(shù)的功能是將集合中的字符函數(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ù)的功能是將集合中的字符串連接起來,此時串連接起來,此時group_concat()函數(shù)的功能與函數(shù)的功能與字符串連接函數(shù)字符串連接函數(shù)concat()的功能相似。的
33、功能相似。例如下面例如下面SQL語句中的語句中的group_concat()函數(shù)以及函數(shù)以及concat()函數(shù)負責(zé)將集合中函數(shù)負責(zé)將集合中(java, 程序程序, 設(shè)計設(shè)計)三個字符串連接起來。三個字符串連接起來。select group_concat(java,程序程序,設(shè)計設(shè)計),concat(java,程序程序,設(shè)計設(shè)計);5.5.3 group by5.5.3 group by子句與子句與group_concat()group_concat()函數(shù)函數(shù) group_concat()函數(shù)還可以按照分組字段,函數(shù)還可以按照分組字段,將另一個字段的值(將另一個字段的值(NULL值除外)使用
34、逗號連值除外)使用逗號連接起來。接起來。 concat()卻函數(shù)沒有提供這樣的功能。卻函數(shù)沒有提供這樣的功能。 5.5.3 group by5.5.3 group by子句與子句與group_concat()group_concat()函數(shù)函數(shù) group by子句將結(jié)果集分為若干個組,使用聚子句將結(jié)果集分為若干個組,使用聚合函數(shù)可以對每個組內(nèi)的數(shù)據(jù)進行信息統(tǒng)計,有合函數(shù)可以對每個組內(nèi)的數(shù)據(jù)進行信息統(tǒng)計,有時需要對各個組進行匯總運算,則需要在每個分時需要對各個組進行匯總運算,則需要在每個分組后加上一條匯總記錄,這個任務(wù)可以通過組后加上一條匯總記錄,這個任務(wù)可以通過with rollup選項實現(xiàn)
35、。選項實現(xiàn)。5.5.4 group by5.5.4 group by子句與子句與with rollupwith rollup選項選項5.6 5.6 合并結(jié)果集合并結(jié)果集 使用使用unionunion可以將多個可以將多個select select 語句的查詢結(jié)語句的查詢結(jié)果集組合成一個結(jié)果集。果集組合成一個結(jié)果集。select select 字段列表字段列表1 from table1 1 from table1 union allunion allselect select 字段列表字段列表2 from table2.2 from table2.說明:字段列表說明:字段列表1 1與字段列表與字段
36、列表2 2的字段個數(shù)必須相的字段個數(shù)必須相同,且具有相同的數(shù)據(jù)類型。合并產(chǎn)生的新結(jié)果同,且具有相同的數(shù)據(jù)類型。合并產(chǎn)生的新結(jié)果集的字段名與字段列表集的字段名與字段列表1 1中的字段名對應(yīng)。中的字段名對應(yīng)。 union 與與 union all 的區(qū)別:的區(qū)別: 當(dāng)使用當(dāng)使用union時,時,MySQL 會篩選掉會篩選掉select結(jié)果結(jié)果集中重復(fù)的記錄(在結(jié)果集合并后會對新產(chǎn)生的集中重復(fù)的記錄(在結(jié)果集合并后會對新產(chǎn)生的結(jié)果集進行排序運算,效率稍低)。而使用結(jié)果集進行排序運算,效率稍低)。而使用union all時,時,MySQL會直接合并兩個結(jié)果集,效率高于會直接合并兩個結(jié)果集,效率高于un
37、ion。如果可以確定合并前的兩個結(jié)果集中不包。如果可以確定合并前的兩個結(jié)果集中不包含重復(fù)的記錄,建議使用含重復(fù)的記錄,建議使用union all。5.6 5.6 合并結(jié)果集合并結(jié)果集 如果一個如果一個select語句能夠返回單個值或者一列語句能夠返回單個值或者一列值,且該值,且該select語句嵌套在另一個語句嵌套在另一個SQL語句中語句中(例如(例如select語句、語句、insert語句、語句、update語句或者語句或者delete語句)中,那么該語句)中,那么該select語句稱為子查詢語句稱為子查詢(也叫內(nèi)層查詢),包含子查詢的(也叫內(nèi)層查詢),包含子查詢的SQL語句稱為語句稱為主查
38、詢(也叫外層查詢)。為了標(biāo)記子查詢與主主查詢(也叫外層查詢)。為了標(biāo)記子查詢與主查詢之間的關(guān)系,通常將子查詢寫在小括號內(nèi)。查詢之間的關(guān)系,通常將子查詢寫在小括號內(nèi)。 子查詢分為相關(guān)子查詢與非相關(guān)子查詢。子查詢分為相關(guān)子查詢與非相關(guān)子查詢。 5.7 5.7 子查詢子查詢 子查詢一般用在子查詢一般用在主查詢的主查詢的where子句子句或或having子句中,子句中,與比較運算符或者邏與比較運算符或者邏輯運算符一起構(gòu)成輯運算符一起構(gòu)成where篩選條件或篩選條件或having篩選條件。篩選條件。 1 12 23 3子查詢與子查詢與in運算符運算符子查詢與比較運算符子查詢與比較運算符子查詢與子查詢與e
39、xists邏輯運算符邏輯運算符4子查詢與子查詢與any運算符運算符5子查詢與子查詢與all運算符運算符5.7 5.7 子查詢子查詢 如果子查詢返回單個值,則可以將一個表達式如果子查詢返回單個值,則可以將一個表達式的值與子查詢的結(jié)果集進行比較。的值與子查詢的結(jié)果集進行比較。 子查詢可以僅僅使用自己定義的數(shù)據(jù)源,也可子查詢可以僅僅使用自己定義的數(shù)據(jù)源,也可以以“直接引用直接引用”主查詢中的數(shù)據(jù)源,但兩者意義主查詢中的數(shù)據(jù)源,但兩者意義完全不同。完全不同。5.7.1 5.7.1 子查詢與比較運算符子查詢與比較運算符 如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,如果子查詢中僅僅使用了自己定義的數(shù)據(jù)源,這種
40、查詢是非相關(guān)子查詢,非相關(guān)子查詢是獨立這種查詢是非相關(guān)子查詢,非相關(guān)子查詢是獨立于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)于外部查詢的子查詢,子查詢總共執(zhí)行一次,執(zhí)行完畢后將值傳遞給主查詢。行完畢后將值傳遞給主查詢。 如果子查詢中使用了主查詢的數(shù)據(jù)源,這種如果子查詢中使用了主查詢的數(shù)據(jù)源,這種查詢是相關(guān)子查詢,此時主查詢的執(zhí)行與相關(guān)子查詢是相關(guān)子查詢,此時主查詢的執(zhí)行與相關(guān)子查詢的執(zhí)行相互依賴。查詢的執(zhí)行相互依賴。5.7.1 5.7.1 子查詢與比較運算符子查詢與比較運算符 子查詢經(jīng)常與子查詢經(jīng)常與in運算符一起使用,用于將一個運算符一起使用,用于將一個表達式的值與子查詢返回的一列值進行比較,
41、如表達式的值與子查詢返回的一列值進行比較,如果表達式的值是此列中的任何一個值,則條件表果表達式的值是此列中的任何一個值,則條件表達式的結(jié)果為達式的結(jié)果為true;否則為;否則為false。5.7.2 5.7.2 子查詢與子查詢與inin運算符運算符 exists邏輯運算符用于檢測子查詢的結(jié)果集是邏輯運算符用于檢測子查詢的結(jié)果集是否包含有記錄,如果結(jié)果集中至少包含一條記錄,否包含有記錄,如果結(jié)果集中至少包含一條記錄,則則exists的結(jié)果為的結(jié)果為true;否則為;否則為false。在。在exists前面加上前面加上not時,與上述結(jié)果恰恰相反。時,與上述結(jié)果恰恰相反。5.7.3 5.7.3 子
42、查詢與子查詢與existsexists邏輯運算符邏輯運算符 any運算符通常與比較運算符一起使用。使用運算符通常與比較運算符一起使用。使用any運算符時,通過比較運算符將一個表達式的運算符時,通過比較運算符將一個表達式的值與子查詢返回的一列值逐一進行比較,若某次值與子查詢返回的一列值逐一進行比較,若某次的比較結(jié)果為的比較結(jié)果為true,則整個表達式的值為,則整個表達式的值為true;否則為否則為false。any邏輯運算符的語法格式如下。邏輯運算符的語法格式如下。表達式表達式 比較運算符比較運算符 any(子查詢子查詢)5.7.4 5.7.4 子查詢與子查詢與anyany運算符運算符 舉例來說
43、:當(dāng)比較運算符為大于號(舉例來說:當(dāng)比較運算符為大于號()時,)時,“表達式表達式 any(子查詢子查詢)”表示至少大于子查詢結(jié)表示至少大于子查詢結(jié)果集中的某一個值(或者說大于結(jié)果集中的最小果集中的某一個值(或者說大于結(jié)果集中的最小值),那么整個表達式的結(jié)果為值),那么整個表達式的結(jié)果為true。5.7.4 5.7.4 子查詢與子查詢與anyany運算符運算符 all運算符通常與比較運算符一起使用。使用運算符通常與比較運算符一起使用。使用all運算符時,通過比較運算符將一個表達式的值運算符時,通過比較運算符將一個表達式的值與子查詢返回的一列值逐一進行比較,若每次的與子查詢返回的一列值逐一進行比
44、較,若每次的比較結(jié)果都為比較結(jié)果都為true,則整個表達式的值為,則整個表達式的值為true;否則為否則為false。any邏輯運算符的語法格式如下。邏輯運算符的語法格式如下。表達式表達式 比較運算符比較運算符 all(子查詢子查詢)5.7.5 5.7.5 子查詢與子查詢與allall運算符運算符 舉例來說:當(dāng)比較運算符為大于號(舉例來說:當(dāng)比較運算符為大于號()時,)時,“表達式表達式 all(子查詢子查詢)”表示大于子查詢結(jié)果集表示大于子查詢結(jié)果集中的任何一個值(或者說大于結(jié)果集中的最大中的任何一個值(或者說大于結(jié)果集中的最大值),那么整個表達式的結(jié)果為值),那么整個表達式的結(jié)果為true
45、。5.7.5 5.7.5 子查詢與子查詢與allall運算符運算符任務(wù)布置任務(wù)布置8:書寫本章節(jié)的:書寫本章節(jié)的select代碼。代碼。5.8 5.8 選課系統(tǒng)綜合查詢選課系統(tǒng)綜合查詢5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢 與與likelike運算符相似,正則表達式主要用于判運算符相似,正則表達式主要用于判斷一個字符串是否與給定的模式匹配,但正則表斷一個字符串是否與給定的模式匹配,但正則表達式的模式匹配功能比達式的模式匹配功能比likelike運算符的模式匹配功運算符的模式匹配功能更為強大,且更加靈活。使用正則表達式進行能更為強大,且更加靈活。使用正則表達式進行模糊查詢時
46、,需要使用模糊查詢時,需要使用regexpregexp關(guān)鍵字,語法格式關(guān)鍵字,語法格式如下。如下。字段名字段名 not regexp binary not regexp binary 正則表達式正則表達式 5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢 正則表達式由一些普通字符和一些元字符構(gòu)正則表達式由一些普通字符和一些元字符構(gòu)成,普通字符包括大寫字母、小寫字母和數(shù)字,成,普通字符包括大寫字母、小寫字母和數(shù)字,而元字符具有特殊的含義。在最簡單的情況下,而元字符具有特殊的含義。在最簡單的情況下,一個正則表達式是一個不包含元字符的字符串。一個正則表達式是一個不包含元字符的字符串。例如
47、正則表達式例如正則表達式testingtesting中沒有包含任何元字中沒有包含任何元字符,它可以匹配符,它可以匹配testingtesting、123testing123testing等字等字符串。符串。 5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢常常用用的的元元字字符符 例如檢索含有例如檢索含有“java”的課程信息,可以使用的課程信息,可以使用下面的下面的SQL語句。語句。select * from course where course_name regexp java;5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢 例如檢索以例如檢索以“程序設(shè)計程序設(shè)
48、計”結(jié)尾的課程信息,可結(jié)尾的課程信息,可以使用下面的以使用下面的SQL語句。語句。select * from course where course_name regexp 程序設(shè)計程序設(shè)計$;5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢 例如檢索以例如檢索以“j”開頭,以開頭,以“程序設(shè)計程序設(shè)計”結(jié)尾的結(jié)尾的課程信息,可以使用下面的課程信息,可以使用下面的SQL語句。語句。select * from course where course_name regexp j.*程序設(shè)計程序設(shè)計$;5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢 例如檢索學(xué)生聯(lián)系方式中以
49、例如檢索學(xué)生聯(lián)系方式中以15開頭或者開頭或者18開開頭,且后面跟著頭,且后面跟著9位數(shù)字的學(xué)生信息,可以使用位數(shù)字的學(xué)生信息,可以使用下面的下面的SQL語句。語句。select * from student where student_contact regexp 1580-99;5.9 5.9 使用正則表達式模糊查詢使用正則表達式模糊查詢 大多數(shù)時候,使用大多數(shù)時候,使用like關(guān)鍵字或者正則表達式關(guān)鍵字或者正則表達式對字符串進行模糊查詢,需要對表進行全表掃描,對字符串進行模糊查詢,需要對表進行全表掃描,檢索效率較低。檢索效率較低。 通過全文檢索,可以有效提升字符串檢索效率。通過全文檢索,可
50、以有效提升字符串檢索效率。5.10 5.10 全文檢索全文檢索 簡單地說,簡單地說,MySQL全文檢索使用特定的分詞全文檢索使用特定的分詞技術(shù)、利用查詢關(guān)鍵字和查詢字段內(nèi)容之間的相技術(shù)、利用查詢關(guān)鍵字和查詢字段內(nèi)容之間的相關(guān)度進行檢索,通過全文索引提高文本匹配的速關(guān)度進行檢索,通過全文索引提高文本匹配的速度。全文檢索的語法格式如下。度。全文檢索的語法格式如下。select字段列表字段列表from 表名表名where match (全文索引字段全文索引字段1,全文索引字段全文索引字段2,.) against (搜索關(guān)鍵字搜索關(guān)鍵字 全文檢索方式全文檢索方式 )5.10 5.10 全文檢索全文檢索
51、 在在2011年發(fā)布的年發(fā)布的5.6版本中版本中InnoDB存儲引存儲引擎表實現(xiàn)了全文檢索擎表實現(xiàn)了全文檢索的支持,這將大幅提的支持,這將大幅提升升InnoDB存儲引擎的存儲引擎的字符串檢索效率,實字符串檢索效率,實現(xiàn)更快速、更高質(zhì)量現(xiàn)更快速、更高質(zhì)量的模糊查詢。的模糊查詢。 1 12 23 3全文檢索方式全文檢索方式全文檢索的簡單應(yīng)用全文檢索的簡單應(yīng)用布爾檢索模式的復(fù)雜應(yīng)用布爾檢索模式的復(fù)雜應(yīng)用4MySQL全文檢索的注意事項全文檢索的注意事項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存儲引擎),在存儲引擎),在book表中的字段組合(name, brief_introduction)創(chuàng)建一個全文索引 。5.10.1 5.10.1 全文檢索的簡單應(yīng)用全文檢索的簡單應(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 m
54、ixture 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 us
55、ed in combination with a web server for constructing database-backed web sites that involve dynamic content generation.,98.0,2008-1-1); 向向book表插入測試數(shù)據(jù)。表插入測試數(shù)據(jù)。5.10.1 5.10.1 全文檢索的簡單應(yīng)用全文檢索的簡單應(yīng)用 例如檢索書名或者簡介中涉及到例如檢索書名或者簡介中涉及到practices單詞單詞的所有圖書信息,可以使用下面的的所有圖書信息,可以使用下面的SQL語句。語句。select * from book where matc
56、h (name,brief_introduction) against (practices)G5.10.1 5.10.1 全文檢索的簡單應(yīng)用全文檢索的簡單應(yīng)用 例如檢索書名或者簡介中涉及到例如檢索書名或者簡介中涉及到practices或者或者cookbook單詞的所有圖書信息,可以使用下面單詞的所有圖書信息,可以使用下面的的SQL語句。語句。select * from book where match (name,brief_introduction) against (practices cookbook)G5.10.1 5.10.1 全文檢索的簡單應(yīng)用全文檢索的簡單應(yīng)用 檢索書名或者簡介
57、中涉及到檢索書名或者簡介中涉及到mysql單詞的所有單詞的所有圖書信息,將檢索失敗。圖書信息,將檢索失敗。 MySQL在進行全文檢索時,默認情況下將忽在進行全文檢索時,默認情況下將忽略權(quán)重超過略權(quán)重超過50%的記錄,的記錄,50%稱為閾值(注意讀稱為閾值(注意讀作:作:y zh),), 因此檢索失敗。因此檢索失敗。5.10.1 5.10.1 全文檢索的簡單應(yīng)用全文檢索的簡單應(yīng)用 如果希望忽略閾值的因素,例如檢索書名或者如果希望忽略閾值的因素,例如檢索書名或者簡介中涉及到簡介中涉及到“mysql”單詞的所有圖書信息,可單詞的所有圖書信息,可以使用下面的以使用下面的SQL語句,執(zhí)行結(jié)果如圖語句,執(zhí)
58、行結(jié)果如圖5-66所示,所示,該該SQL語句使用了布爾檢索模式(稍后講解)。語句使用了布爾檢索模式(稍后講解)。select * from book where match (name,brief_introduction) against (mysql in boolean mode)G5.10.1 5.10.1 全文檢索的簡單應(yīng)用全文檢索的簡單應(yīng)用 檢索書名或者簡介中涉及到檢索書名或者簡介中涉及到php單詞的所有圖單詞的所有圖書信息,將檢索失敗。書信息,將檢索失敗。 這是由于這是由于MySQL全文檢索對搜索關(guān)鍵字的最全文檢索對搜索關(guān)鍵字的最?。J值為小(默認值為4)以及最大長度(默認值為)以及最大長度(默認值為84)進行了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 標(biāo)準(zhǔn)離婚合同全文
- 新能源汽車銷售代理合同
- 商品房買賣合同示例
- 畢業(yè)生檔案托管合同協(xié)議書
- 廣告投放合同「樣本」
- 多人合伙經(jīng)營合同范例大全
- 屋頂防水修繕項目合同
- 戶外廣告LED大屏租賃合同
- 稻谷購銷合同樣本
- 腎性貧血的治療課件
- 2025中鐵集裝箱運輸有限責(zé)任公司招聘46人(京外地區(qū)崗位)筆試參考題庫附帶答案詳解
- 中國農(nóng)業(yè)大學(xué)人文與發(fā)展學(xué)院管理服務(wù)崗位招聘筆試真題2023
- 《木蘭詩》第二課時(公開課)課件
- 核電項目人橋吊車抗震計算書版
- 淺談簽證合同索賠培訓(xùn)課件
- 2023年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試筆試題庫及答案解析
- 揭陽市基層診所醫(yī)療機構(gòu)衛(wèi)生院社區(qū)衛(wèi)生服務(wù)中心村衛(wèi)生室地址信息
- 晉中項目投決會報告
- 二年級下冊數(shù)學(xué)課件-1.3 分草莓 北師大版(共14張PPT)
- 2022年中小學(xué)心理健康教育指導(dǎo)綱要
- 高架橋梁混凝土工程專項施工方案
評論
0/150
提交評論