《MySQL數(shù)據(jù)原理與應(yīng)用》 課件 第6章 表記錄的檢索_第1頁
《MySQL數(shù)據(jù)原理與應(yīng)用》 課件 第6章 表記錄的檢索_第2頁
《MySQL數(shù)據(jù)原理與應(yīng)用》 課件 第6章 表記錄的檢索_第3頁
《MySQL數(shù)據(jù)原理與應(yīng)用》 課件 第6章 表記錄的檢索_第4頁
《MySQL數(shù)據(jù)原理與應(yīng)用》 課件 第6章 表記錄的檢索_第5頁
已閱讀5頁,還剩80頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

表記錄的檢索第6章通過本課程的學(xué)習(xí),您將應(yīng)該:了解數(shù)據(jù)庫的相關(guān)概念熟悉數(shù)據(jù)庫工具的使用熟悉SQL語言的規(guī)則與規(guī)范熟練掌握MySQL數(shù)據(jù)庫管理方法熟練掌握MySQL表結(jié)構(gòu)管理方法熟練掌握表記錄的檢索方法熟練掌握視圖與索引的使用方法熟練掌握數(shù)據(jù)處理之增刪改熟練掌握存儲過程與游標(biāo)的使用方法熟練掌握存儲函數(shù)的應(yīng)用熟練掌握觸發(fā)器的應(yīng)用熟練掌握事務(wù)的基本特性和應(yīng)用場景熟練掌握數(shù)據(jù)庫安全及管理熟練掌握MySQL數(shù)據(jù)庫備份和恢復(fù)操作了解利用MySQL+Java開發(fā)一個(gè)數(shù)據(jù)庫學(xué)習(xí)系統(tǒng)并部署課程目標(biāo)項(xiàng)目部署成功本講教學(xué)目標(biāo)了解查詢功能的概念和實(shí)際作用。熟練使用各類型查詢。熟練查詢的實(shí)際應(yīng)用。通過本講的學(xué)習(xí),您將可以:1.OPTION2.OPTIONOPTION3.綜合查詢的應(yīng)用目錄Content單表查詢01函數(shù)查詢02多表查詢03課業(yè)任務(wù)04常見錯(cuò)誤及解決方案05單表查詢016.1.1基本查詢在MySQL中使用SELECT語句來查詢數(shù)據(jù)。SELECT語句是最常用的查詢語句,它的使用方式有些復(fù)雜,但功能很強(qiáng)大。1.基本查詢語句SELECT{*|<字段1,字段2...>}FROM{<表1>,<表2>...|視圖}[WHERE查詢條件][GROUPBYgrouping_columns][ORDERBYsorting_columns][HAVINGsecondary_constraint][LIMITcount];SELECT語句的基本語法如下。6.1.1基本查詢說明:(1){*|<字段1,字段2...>}包含星號通配符和字段列表。星號通配符表示指定所有字段。如果使用字段名稱查詢,需要注意多個(gè)字段間使用逗號隔開。(2){<表1>,<表2>...|視圖}包含數(shù)據(jù)表和視圖。引用多個(gè)數(shù)據(jù)表時(shí),表之間需要用逗號隔開,視圖同理。(3)[WHERE查詢條件]表示對查詢的字段內(nèi)容增加限制條件,對所查詢的字段內(nèi)容進(jìn)一步篩選。(4)[GROUPBYgroupingcolumns]:groupingcolumns意為所指定字段。GROUPBY意為對指定的字段進(jìn)行分組。(5)[ORDERBYsortingcolumns]:sortingcolumns意為所指定字段。ORDERBY意為對指定的字段進(jìn)行排序。(6)[HAVINGsecondaryconstraint]:secondaryconstraint意為次要約束。HAVING意為查詢時(shí)滿足的第二條件。(7)[LIMITcount]意為限定輸出的查詢結(jié)果。6.1.1基本查詢2.查詢所有字段SELECT*FROM表名;查詢所有字段是指查詢表中所有字段的數(shù)據(jù)。在MySQL中使用“*”通配符代表所有列。查詢所有字段語句如下。3.查詢指定字段為了滿足用戶更多的查詢需求,同時(shí)提高查詢效率,MySQL能夠?qū)崿F(xiàn)查詢指定字段。其語法格式如下。注:多個(gè)字段間使用逗號隔開。4.用DISTINCT關(guān)鍵字去除結(jié)果中的重復(fù)行使用DISTINCT關(guān)鍵字可以去除查詢結(jié)果中的重復(fù)記錄,其語法格式如下。SELECTDISTINCT字段名FROM表名;SELECT字段名FROM表名;6.1.1基本查詢【案例6.1】查詢課程表中有多少種課程類型。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTDISTINCTcourse_typeFROMtb_course;執(zhí)行上述SQL語句,指定輸出字段為course_type,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_course,SELECT關(guān)鍵字后添加DISTINCT關(guān)鍵字去除重復(fù)行。如右上圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。去除重復(fù)記錄前的course_type字段如右下圖所示。6.1.2WHERE子句如果要從眾多記錄中查詢出指定的記錄,需要設(shè)定查詢的條件。設(shè)定查詢條件應(yīng)用的是WHERE子句。通過它可以實(shí)現(xiàn)很多復(fù)雜的條件查詢。在使用WHERE子句時(shí),需要使用一些比較運(yùn)算符來確定查詢的條件。常用的比較運(yùn)算符如下圖所示。符號名稱示例符號名稱示例=等于id=1ISNOTNULL非空idISNOTNULL>

大于id>1BETWEENAND兩值之間idBETWEEN1AND2<

小于id<1IN集合idIN(3,4,5)>=大于等于id>=1NOTIN集合外idNOTIN(1,2,3)<=小于等于id<=1LIKE模糊匹配nameLIKE‘王%’!=或<>不等于id!=1NOTLIKE模糊匹配nameNOTLIKE‘王%’ISNULL為空idISNULLREGEXP正則表達(dá)式name正則表達(dá)式說明:比較運(yùn)算符解析可回顧第3章SQL語言的規(guī)則與規(guī)范。6.1.2WHERE子句1.帶關(guān)鍵字IN的查詢關(guān)鍵字IN可以判斷某個(gè)字段的值是否在指定的集合中。如果字段的值在集合中,則滿足查詢條件能夠查詢;如果不在集合中,則不滿足查詢條件。其語法格式如下。SELECT*FROM表名

WHERE條件[NOT]IN(元素1,元素2...元素n);

說明:(1)[NOT]為可選項(xiàng),加上NOT表示不在集合內(nèi)時(shí)滿足條件。(2)元素表示該集合總的元素,各元素之間用逗號隔開,字符型元素需要加上單引號。6.1.2WHERE子句【案例6.2】查詢課程表中課程學(xué)分為1和4的課程名稱。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTcourse_name

FROMtb_course

WHEREcourse_credit

IN(1,4);執(zhí)行上述SQL語句,指定輸出字段course_name,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_course,WHERE子句指定條件字段course_credit值在集合(1,4)內(nèi)。如右圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

說明:6.1.2WHERE子句2.帶關(guān)鍵字BETWEENAND的范圍查詢關(guān)鍵字BETWEENAND可以判斷某個(gè)字段的值是否在指定的范圍內(nèi)。如果字段的值在范圍內(nèi),則滿足查詢條件能夠查詢;如果不在范圍內(nèi),則不滿足查詢條件。其語法格式如下。SELECT*FROM表名WHERE條件[NOT]BETWEEN值1AND值2;(1)[NOT]為可選項(xiàng),加上NOT表示不在范圍內(nèi)時(shí)滿足條件。(2)值1表示該范圍的起始值。(3)值2表示該范圍的終止值。6.1.2WHERE子句【案例6.3】查詢學(xué)生表中出生日期在02年1月1日至03年10月1日的學(xué)生信息。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECT*FROMtb_student

WHEREstudent_birthday

BETWEEN'2002-01-0100:00:00'AND'2003-10-0123:59:59';執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student,WHERE子句指定條件字段student_birthday值在02年1月1日至03年10月1日范圍內(nèi)。如右圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.1.2WHERE子句3.帶LIKE的字符匹配查詢字符串“p”和“明”都算作一個(gè)字符,在這點(diǎn)上英文字母和中文是沒有區(qū)別的。LIKE關(guān)鍵字屬于較常用的比較運(yùn)算符,通過它可以實(shí)現(xiàn)模糊查詢。它有兩種通配符:百分號“%”和下畫線“_”:(1)“%”:可以匹配任何數(shù)目的字符,以及零字符;(2)“_”:只能匹配一個(gè)字符。說明:6.1.2WHERE子句【案例6.4】查詢學(xué)生表中學(xué)號后兩位為01的學(xué)生信息。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECT*FROMtb_student

WHEREstudent_id

LIKE'%01';執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student,WHERE子句指定條件字段student_id值模糊查詢定義最后兩位數(shù)為01,前面的數(shù)由百分號通配符匹配。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。6.1.2WHERE子句4.帶ISNULL關(guān)鍵字查詢控制ISNULL關(guān)鍵字可以用來判斷字段的值是否為空值(NULL)。如果字段為空,則滿足查詢條件能夠查詢;如果不為空,則不滿足查詢條件。其語法格式如下。SELECT*FROM表名WHERE條件IS[NOT]NULL;【案例6.5】查詢學(xué)生表中學(xué)號不為空的學(xué)生信息。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECT*FROMtb_student

WHEREstudent_id

ISNOTNULL;執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student,WHERE子句指定條件字段student_id值不為空(ISNOTNULL)。如右圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.1.2WHERE子句5.多條件查詢AND關(guān)鍵字可以為查詢語句指定多個(gè)條件。只有當(dāng)查詢語句滿足了全部條件時(shí),才能夠成功地完成查詢。反之,則不滿足查詢條件。其語法格式如下。SELECT*FROM表名WHERE條件1AND條件2[...AND條件表達(dá)式n];可以同時(shí)使用多個(gè)AND關(guān)鍵字來連接多個(gè)表達(dá)式。SELECT*FROM表名WHERE條件1OR條件2[...OR條件表達(dá)式n];OR關(guān)鍵字與AND關(guān)鍵字都可以指定多條件,但是與AND關(guān)鍵字不同的是,在OR關(guān)鍵字中存在滿足其中一個(gè)條件的記錄時(shí),將查詢該記錄。反之,不滿足所有條件時(shí)將排除該記錄??梢酝瑫r(shí)使用多個(gè)OR關(guān)鍵字來連接多個(gè)表達(dá)式。6.1.3ORDERBY子句使用ORDERBY關(guān)鍵字能夠?qū)Σ樵兊慕Y(jié)果進(jìn)行升序或降序排列。在默認(rèn)情況下,ORDERBY按升序排列輸出結(jié)果。其語法格式如下。SELECT*FROM表名ORDERBY字段名[ASC|DESC];(1)ASC表示升序排列,DESC表示降序排列。(2)對含有NULL值的列排序時(shí),升序排列會將其放在最前面,反之放在最后。說明:6.1.3ORDERBY子句【案例6.6】查詢學(xué)生表中按身高由矮到高排列的學(xué)生信息。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECT*FROMtb_student

ORDERBYstudent_height

ASC;執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student,添加ORDERBY關(guān)鍵字指定字段student_height升序排列。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。6.1.4GROUPBY子句通過GROUPBY子句可以將數(shù)據(jù)劃分到不同的組中,實(shí)現(xiàn)對記錄進(jìn)行分組查詢。在查詢的列需要包含在分組的列中,目的是使查詢到的數(shù)據(jù)沒有矛盾。一般情況下,當(dāng)SELECT后既有表結(jié)構(gòu)本身的字段,又使用了聚合函數(shù)時(shí)就會用到GROUPBY進(jìn)行分組查詢。SELECT字段|聚合函數(shù)FROM表名GROUPBY字段;(1)查詢的字段要存在于GROUPBY子句中,需要哪個(gè)字段分組則指定哪個(gè)字段。(2)單獨(dú)使用GROUPBY關(guān)鍵字,查詢結(jié)果只顯示每組的一條記錄。(3)如果SELECT后有聚合函數(shù),則該函數(shù)可以不存在于GROUPBY子句。常見的聚合函數(shù)有COUNT、MAX、MIN等。1.使用GROUPBY關(guān)鍵字分組查詢單獨(dú)使用GROUPBY關(guān)鍵字,其語法如下。說明:6.1.4GROUPBY子句【案例6.7】查詢班級表中每個(gè)系部有多少個(gè)班級。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTCOUNT(*),department_id

FROMtb_class

GROUPBYdepartment_id;執(zhí)行上述SQL語句,指定輸出字段為department_id以及聚合函數(shù)COUNT(*):表示所有記錄行數(shù),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_class,添加GROUPBY關(guān)鍵字指定字段department_id進(jìn)行分組。表示以department_id分組查詢屬于該組的記錄行數(shù)。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.1.4GROUPBY子句【案例6.8】查詢班級表中每個(gè)系部有什么班級。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTGROUP_CONCAT(class_name),department_id

FROMtb_class

GROUPBYdepartment_id;執(zhí)行上述SQL語句,指定輸出字段為department_id和GROUP_CONCAT(class_name),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_class,添加GROUPBY關(guān)鍵字指定字段department_id進(jìn)行分組,表示以department_id分組將屬于該組的記錄連接為一條記錄。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

2.GROUPBY關(guān)鍵字與GROUP_CONCAT()函數(shù)同時(shí)使用GROUP_CONCAT()函數(shù)使用方式與聚合函數(shù)一致,主要用于分組顯示,其作用是將分組中的值連接成一個(gè)字符串,并將該字符串返回,所以要結(jié)合GROUPBY使用。6.1.4GROUPBY子句執(zhí)行上述SQL語句,指定輸出字段為department_id和GROUP_CONCAT(class_name),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_class,添加GROUPBY關(guān)鍵字指定字段department_id進(jìn)行分組,表示以department_id分組將屬于該組的記錄連接為一條記錄。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.1.4GROUPBY子句【案例6.9】分組查詢學(xué)生表中的性別和班級。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTstudent_gender,class_id

FROMtb_student

GROUPBYclass_id,student_gender;執(zhí)行上述SQL語句,指定輸出字段為student_gender和class_id,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student,添加GROUPBY關(guān)鍵字指定字段class_id和student_gender進(jìn)行分組,表示首先以字段class_id進(jìn)行分組查詢,在得到相同值后又以student_gender進(jìn)行分組查詢。如右圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

3.按多個(gè)字段分組使用GROUPBY關(guān)鍵字也可以按多個(gè)字段分組。分組過程中,先按照第一個(gè)字段進(jìn)行分組,當(dāng)?shù)谝粋€(gè)字段有相同值時(shí),再按第二個(gè)字段進(jìn)行分組,以此類推。6.1.5用LIMIT限制查詢結(jié)果的數(shù)量查詢數(shù)據(jù)時(shí),可能會查詢出很多記錄,但是用戶可能實(shí)際只需要其中一部分記錄,所以MySQL提供了LIMIT關(guān)鍵字限制查詢結(jié)果的數(shù)量。LIMIT的靈活使用可以實(shí)現(xiàn)對查詢結(jié)果中間取值。其語法格式如下。SELECT*FROM表名LIMIT[位置偏移量,]行數(shù);說明:(1)[位置偏移量]為可選項(xiàng),表示MySQL從哪一行記錄開始顯示。如果不指定位置偏移量,則默認(rèn)從表的第一行記錄開始顯示,第一條記錄的位置偏移量是0,第二條記錄的位置偏移量是1,以此類推。(2)行數(shù)表示返回記錄行的數(shù)量。6.1.5用LIMIT限制查詢結(jié)果的數(shù)量【案例6.10】在學(xué)生表中按學(xué)號升序排序查詢第3至6條記錄。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECT*FROMtb_student

ORDERBYstudent_id

ASCLIMIT2,5;執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student,添加ORDERBY關(guān)鍵字指定字段student_id進(jìn)行升序排序。添加LIMIT關(guān)鍵字,限制查詢記錄第3至第6條。因?yàn)榈?條記錄的位置偏移量為0,所以推導(dǎo)的第3條記錄位置偏移量為2,第6條為5。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

函數(shù)查詢026.2.1COUNT函數(shù)MySQL函數(shù)會對傳遞進(jìn)來的參數(shù)進(jìn)行處理,并返回一個(gè)處理結(jié)果,也就是返回一個(gè)值。MySQL包含了大量并且豐富的函數(shù),在查詢中最常見的則是聚合函數(shù)。聚合函數(shù)最大的特點(diǎn)是它們根據(jù)一組數(shù)據(jù)求出一個(gè)值。聚合函數(shù)的結(jié)果值只根據(jù)選定行中非NULL的值進(jìn)行計(jì)算,NULL值被忽略。COUNT函數(shù)COUNT()函數(shù)用于對除了“*”以外的任何參數(shù),返回所選擇集合中非NULL值的行的數(shù)目;對于參數(shù)“*”,返回所選擇集合中所有行的數(shù)目,包含NULL值的行,沒有WHERE子句的COUNT(*)是經(jīng)過內(nèi)部優(yōu)化的,能夠快速地返回表中所有記錄總數(shù)。函數(shù)查詢6.2.1COUNT函數(shù)【案例6.11】查詢學(xué)生表中的學(xué)生總?cè)藬?shù)。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTCOUNT(*)FROMtb_student;執(zhí)行上述SQL語句,指定輸出字段為COUNT(*),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student。使用COUNT()函數(shù)查詢學(xué)生表中的所有行數(shù)。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.2.2SUM函數(shù)【案例6.12】查詢成績表中的總成績。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTSUM(grade_score)FROMtb_grade;SUM()函數(shù)可以求出表中某個(gè)數(shù)值類型字段取值的總和。執(zhí)行上述SQL語句,指定輸出字段為SUM(grade_score),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_grade。使用SUM()函數(shù)計(jì)算成績表中字段grade_score的值的和。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.2.3AVG函數(shù)【案例6.13】查詢成績表中的平均成績。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTAVG(grade_score)FROMtb_grade;AVG()函數(shù)可以求出表中某個(gè)數(shù)值類型字段取值的平均值。執(zhí)行上述SQL語句,指定輸出字段為AVG(grade_score),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_grade。使用AVG()函數(shù)計(jì)算成績表中字段grade_score的值的平均值。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

6.2.4MAX、MIN函數(shù)【案例6.14】查詢成績表中的成績最大值和最小值。登錄MySQL終端后在db_study數(shù)據(jù)庫中,執(zhí)行如下SQL語句。SELECTMAX(grade_score),MIN(grade_score)FROMtb_grade;MAX()、MIN()函數(shù)可以求出表中某個(gè)數(shù)值類型字段取值的最大值和最小值。執(zhí)行上述SQL語句,指定輸出字段為MAX(grade_score)和MIN(grade_score),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_grade。使用MAX()和MIN()函數(shù)計(jì)算成績表中字段grade_score的值的最大值和最小值。如下圖所示,語句執(zhí)行成功則直接輸出查詢內(nèi)容。

多表查詢036.3.1連接查詢在MySQL中WHERE子句的功能強(qiáng)大使得查詢不局限于單表,更能使用多表查詢。但是多表查詢也增加了更多的限定條件,查詢語句變得更加復(fù)雜繁瑣,為此,MySQL提供了更便捷的查詢方式:連接查詢、子查詢以及正則表達(dá)式查詢。連接查詢連接是關(guān)系數(shù)據(jù)庫模型的主要特點(diǎn)。連接查詢是關(guān)系數(shù)據(jù)庫中最主要的查詢,是指把不同的表的記錄連到一起。主要包括內(nèi)連接、外連接等。通過連接運(yùn)算符可以實(shí)現(xiàn)多個(gè)表查詢。多表查詢說明:6.3.1連接查詢SELECT字段名FROM數(shù)據(jù)表1[INNER]JOIN數(shù)據(jù)表2ON條件;(1)[INNER]為可選參數(shù)。(2)數(shù)據(jù)表2是與數(shù)據(jù)表1連接的表。(3)ON關(guān)鍵字后的條件含有匹配兩個(gè)表中共有列。(4)可以連接至少兩個(gè)數(shù)據(jù)表,每連接一個(gè)數(shù)據(jù)表則需要使用一次JOIN子句。1.內(nèi)連接查詢內(nèi)連接是最普遍的連接模型,而且是最勻稱的,因?yàn)樗鼈円髽?gòu)成連接的每個(gè)表的共有列匹配,不匹配的行將被排除。內(nèi)連接包括相等連接和自然連接,最常見的例子是相等連接,也就是在WHERE子句中使用等號運(yùn)算符,根據(jù)每個(gè)表共有列的值匹配兩個(gè)表中的行。自然連接也常出現(xiàn)在實(shí)際應(yīng)用中,它使用了INNERJOIN語句直接連接兩個(gè)數(shù)據(jù)表的數(shù)據(jù)。其語法格式如下。6.3.1連接查詢【案例6.15】使用自然連接和相等連接查詢學(xué)生姓名與其成績。在MySQL中執(zhí)行自然連接的SQL語句如下。執(zhí)行上述SQL語句,指定輸出字段為student_name和grade_score,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,使用JOIN子句連接數(shù)據(jù)表tb_grade,并在ON關(guān)鍵字中選擇兩個(gè)數(shù)據(jù)表的共有列student_id匹配兩個(gè)表中的行。運(yùn)行結(jié)果如右圖所示。SELECTstudent_name,grade_score

FROMtb_student

JOINtb_grade

ONtb_student.student_id=tb_grade.student_id;6.3.1連接查詢在MySQL中執(zhí)行相等連接的SQL語句如下。執(zhí)行上述SQL語句,指定輸出字段為student_name和grade_score,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student和tb_grade,在WHERE選擇兩個(gè)數(shù)據(jù)表的共有列student_id匹配兩個(gè)表中的行。運(yùn)行結(jié)果如右圖所示。SELECTstudent_name,grade_score

FROMtb_student,tb_grade

WHEREtb_student.student_id=tb_grade.student_id;由運(yùn)行結(jié)果可以得知:自然連接和相等連接在語法上有差別,但是運(yùn)行結(jié)果是一致的。說明:6.3.1連接查詢SELECT字段名FROM數(shù)據(jù)表1LEFT|RIGHT[OUTER]JOIN數(shù)據(jù)表20N條件;(1)[OUTER]為可選參數(shù)。(2)LEFT|RIGHT關(guān)鍵字分別表示左連接和右連接。(3)ON關(guān)鍵字后的條件含有匹配兩個(gè)表中共有列。2.外連接查詢與內(nèi)連接不同,外連接是指使用OUTERJOIN關(guān)鍵字將兩個(gè)表連接起來。外連接生成的結(jié)果集不僅包含符合連接條件的行數(shù)據(jù),而且包括左表(左外連接時(shí)的表)、右表(右外連接時(shí)的表)或兩邊連接表(全外連接時(shí)的表)中所有的數(shù)據(jù)行。外連接語法格式如下。

方式1:左外連接左外連接是指返回左表中所有的記錄,以及右表中符合連接條件的記錄。當(dāng)左表的某行記錄在右表中沒有匹配的記錄時(shí),右表中相關(guān)的記錄將設(shè)為空值。方式2:右外連接右外連接是指返回右表中所有的記錄,以及左表中符合連接條件的記錄。當(dāng)右表的某行記錄在左表中沒有匹配的記錄時(shí),左表中相關(guān)的記錄將設(shè)為空值。6.3.1連接查詢SELECTstudent_name,grade_score

FROMtb_student

LEFTJOINtb_grade

ONtb_student.student_id=tb_grade.student_id

ANDgrade_score>60GROUPBYstudent_name,grade_score;【案例6.16】使用左連接查詢成績大于60的學(xué)生姓名和成績。在MySQL中執(zhí)行左連接的SQL語句如下。6.3.1連接查詢執(zhí)行上述SQL語句,指定輸出字段為student_name和grade_score,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,使用JOIN子句連接數(shù)據(jù)表tb_grade,在ON關(guān)鍵字中選擇兩個(gè)數(shù)據(jù)表的共有列student_id匹配兩個(gè)表中的行并添加條件成績大于60,使用GROUPBY為字段分組。運(yùn)行結(jié)果如下圖所示。由運(yùn)行結(jié)果可以得知:在字段grade_score返回的空值中得知該行記錄是不滿足條件的,但是使用的是左連接,即使不滿足條件依然會遍歷出左表中的原數(shù)據(jù),而在右表中返回空值。6.3.1連接查詢SELECTstudent_name,grade_score

FROMtb_student

RIGHTJOINtb_grade

ONtb_student.student_id=tb_grade.student_id

ANDgrade_score>60GROUPBYstudent_name,grade_score;【案例6.17】使用右連接查詢成績大于60的學(xué)生姓名和成績。在MySQL中執(zhí)行左連接的SQL語句如下。6.3.1連接查詢執(zhí)行上述SQL語句,指定輸出字段為student_name和grade_score,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,使用JOIN子句連接數(shù)據(jù)表tb_grade,在ON關(guān)鍵字中選擇兩個(gè)數(shù)據(jù)表的共有列student_id匹配兩個(gè)表中的行并添加條件成績大于60,使用GROUPBY為字段分組。運(yùn)行結(jié)果如下圖所示。由運(yùn)行結(jié)果可以得知:在字段student_name返回的空值中得知該行記錄是不滿足條件的,但是使用的是右連接,即使不滿足條件依然會遍歷出右表中的原數(shù)據(jù),而在左表中返回空值。6.3.1連接查詢SELECTstudent_name,class_name,AVG(grade_score)FROMtb_student

JOINtb_class

ONtb_student.class_id=tb_class.class_idJOINtb_grade

ONtb_student.student_id=tb_grade.student_idGROUPBYstudent_name,class_name;【案例6.18】查詢每個(gè)學(xué)生所在班級。在MySQL中執(zhí)行復(fù)合條件連接查詢的SQL語句如下。3.復(fù)合條件連接查詢在連接查詢時(shí),可以增加更多的限制條件。通過多個(gè)條件的篩選,可以使查詢結(jié)果更加準(zhǔn)確,擁有多條件的連接查詢稱之為復(fù)合條件連接查詢。TEXTTEXTTEXT6.3.1連接查詢執(zhí)行上述SQL語句,指定輸出字段為student_name,class_name和AVG(grade_score),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,使用JOIN子句連接數(shù)據(jù)表tb_grade和tb_class,在ON關(guān)鍵字中選擇tb_student和tb_grade數(shù)據(jù)表的共有列student_id匹配兩個(gè)表中的行,選擇tb_student和tb_class數(shù)據(jù)表的共有列class_id匹配兩個(gè)表中的行,使用GROUPBY為字段student_name,class_name分組。運(yùn)行結(jié)果如下圖所示。6.3.2子查詢一個(gè)內(nèi)層查詢語句塊可以嵌套在另外一個(gè)外層查詢語句塊的WHERE子句中,其中外層查詢也稱為父查詢(或主查詢)。內(nèi)層查詢也稱子查詢(或從查詢)。MySQL從最內(nèi)層的查詢開始,然后向外向上移動到外層查詢,在這個(gè)過程中,每個(gè)查詢產(chǎn)生的結(jié)果集都被賦給包圍它的父查詢,接著執(zhí)行這個(gè)父查詢,其結(jié)果也被指定給它的父查詢。子查詢和常規(guī)SELECT查詢的執(zhí)行方式一樣,子查詢可以用在任何可以使用表達(dá)式的地方,它必須由父查詢包圍,而且如同常規(guī)的SELECT查詢,它必須包含一個(gè)字段列表、一個(gè)具有一個(gè)或者多個(gè)表名字的FROM子句以及可選的WHERE、HAVING和GROUPBY子句。6.3.2子查詢1.帶IN關(guān)鍵字的子查詢只有子查詢返回的結(jié)果列包含一個(gè)值時(shí)才可以使用比較運(yùn)算符進(jìn)行運(yùn)算。當(dāng)其返回的結(jié)果列是一個(gè)集合時(shí),則需要使用關(guān)鍵字IN。IN運(yùn)算符可以檢測結(jié)果集中是否存在某個(gè)特定的值,如果存在則執(zhí)行外部的查詢。【案例6.19】使用子查詢查詢身高在180以上的同學(xué)信息。在MySQL中執(zhí)行復(fù)合條件連接查詢的SQL語句如下。SELECT*FROMtb_studentWHEREstudent_heightIN(SELECTstudent_heightFROMtb_studentWHEREstudent_height>180);6.3.2子查詢執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,使用WHERE子句為字段student_height指定條件,使用IN關(guān)鍵字指定子查詢中的查詢結(jié)果集,子查詢意為大于180的身高。運(yùn)行結(jié)果如下圖所示。NOTIN關(guān)鍵字的作用與IN關(guān)鍵字剛好相反。以案例6.19為例,如果使用的是NOTIN關(guān)鍵字,則查詢結(jié)果為身高小于180的學(xué)生信息。說明:6.3.2子查詢2.帶比較運(yùn)算符的子查詢子查詢可以使用比較運(yùn)算符,包括=、!=、>、>=、<、<=等。比較運(yùn)算符在子查詢時(shí)使用非常廣泛。【案例6.20】用子查詢查詢22營銷3班的學(xué)生信息。在MySQL中執(zhí)行查詢的SQL語句如下。執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,使用WHERE子句為字段class_id指定條件,使用比較運(yùn)算符指定子查詢中的查詢結(jié)果列,子查詢意為查詢22營銷3班的課程號。運(yùn)行結(jié)果如右圖所示。SELECT*FROMtb_studentWHEREclass_id

=(SELECTclass_id

FROMtb_class

WHEREclass_name

='22營銷3班');

6.3.2子查詢3.帶EXISTS關(guān)鍵字的子查詢使用EXISTS關(guān)鍵字時(shí),內(nèi)層查詢語句不返回查詢的記錄,而是返回布爾值。如果內(nèi)層查詢語句查詢到滿足條件的記錄時(shí),就返回一個(gè)真值(true),否則,將返回一個(gè)假值(false)。當(dāng)返回的值為true時(shí),外層查詢語句將進(jìn)行查詢,當(dāng)返回的值為false時(shí),外層查詢語句不進(jìn)行查詢。【案例6.21】如果存在男生身高大于185的情況則查詢學(xué)生的平均身高。在MySQL中執(zhí)行查詢的SQL語句如下。SELECTAVG(student_height)FROMtb_studentWHEREEXISTS(SELECT*FROMtb_studentWHEREstudent_gender='男'ANDstudent_height>185);6.3.2子查詢執(zhí)行上述SQL語句,指定輸出字段為AVG(student_height),F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,在WHERE子句中定義EXISTS子句,EXISTS判斷子查詢中是否有值,有則返回true,使得外查詢繼續(xù)執(zhí)行,反之返回false,中斷查詢。子查詢意為查詢學(xué)生表中男生身高大于185的學(xué)生信息。運(yùn)行結(jié)果如下圖所示。NOTEXISTS關(guān)鍵字的作用與EXISTS關(guān)鍵字剛好相反。以案例6.21為例,如果使用的是NOTEXISTS關(guān)鍵字,則由于子查詢中返回的是ture值,所以外查詢中斷或返回NULL。說明:6.3.2子查詢4.帶ANY關(guān)鍵字的子查詢ANY關(guān)鍵字表示滿足其中任意一個(gè)條件,通常與比較運(yùn)算符一起使用。使用ANY關(guān)鍵字時(shí),只要滿足內(nèi)層查詢語句返回的結(jié)果中的任意一個(gè),就可以通過該條件來執(zhí)行外層查詢語句。其語法格式如下。字段名

比較運(yùn)算符

ANY(子查詢);

如果比較運(yùn)算符是“<”,則表示小于子查詢結(jié)果集中某一個(gè)值;如果是“>”,則表示大于子查詢結(jié)果集中的最小值。6.3.2子查詢【案例6.22】查詢比22營銷3班身高最矮要高的學(xué)生信息。在MySQL中執(zhí)行查詢的SQL語句如下。執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,在WHERE子句中使用ANY關(guān)鍵字定義字段student_height。子查詢意為查詢學(xué)生表中22營銷3班的同學(xué)身高。比較運(yùn)算符為“>”,表示外查詢中的WHERE子句滿足大于子查詢結(jié)果集中的最小值即可執(zhí)行外查詢。運(yùn)行結(jié)果如右圖所示。SELECT*FROMtb_student

WHEREstudent_height

>ANY(SELECTstudent_height

FROMtb_student

WHEREclass_id='B4009');6.3.2子查詢5.帶ALL關(guān)鍵字的子查詢ALL關(guān)鍵字與ANY關(guān)鍵字用法一致,但是性質(zhì)有所區(qū)別,它表示滿足所有條件,通常與比較運(yùn)算符一起使用。使用ALL關(guān)鍵字時(shí),只有滿足子查詢返回的所有結(jié)果,才會繼續(xù)執(zhí)行外層查詢。其語法格式如下。字段名

比較運(yùn)算符

ALL(子查詢);

如果比較運(yùn)算符是“<”,則表示小于子查詢結(jié)果集中的最小值;如果是“>”,則表示大于子查詢結(jié)果集中的最大值。6.3.2子查詢【案例6.23】查詢比22營銷3班身高最高要高的學(xué)生信息。在MySQL中執(zhí)行查詢的SQL語句如下。執(zhí)行上述SQL語句,指定輸出字段為所有字段,F(xiàn)ROM關(guān)鍵字指定了數(shù)據(jù)表tb_student后,在WHERE子句中使用ALL關(guān)鍵字定義字段student_height。子查詢意為查詢學(xué)生表中22營銷3班的同學(xué)身高。比較運(yùn)算符為“>”,表示外查詢中的WHERE子句滿足大于子查詢結(jié)果集中的最大值即可執(zhí)行外查詢。運(yùn)行結(jié)果如右圖所示。SELECT*FROMtb_student

WHEREstudent_height

>ALL(SELECTstudent_height

FROMtb_student

WHEREclass_id='B4009');6.3.3合并查詢結(jié)果SELECT語句1UNIONSELECT語句2;合并查詢結(jié)果顧名思義是將多個(gè)SELECT語句的查詢結(jié)果合并在一起。MySQL中可以使用UNION和UNIONALL關(guān)鍵字對查詢結(jié)果進(jìn)行合并。1.UNION關(guān)鍵字使用UNION關(guān)鍵字可以將多個(gè)結(jié)果集合并到一起,并且會去除相同記錄。其語法格式為。6.3.3合并查詢結(jié)果【案例6.24】演示UNION關(guān)鍵字的使用。在MySQL中執(zhí)行查詢的SQL語句如下。DROPTABLEIFEXISTStb_test;CREATETABLEtb_test

(namevarchar(255)

CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL)ENGINE=InnoDB

CHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciROW_FORMAT=Dynamic;INSERTINTOtb_test

VALUES('張三');INSERTINTOtb_test

VALUES('王五');INSERTINTOtb_test

VALUES('李四');INSERTINTOtb_test

VALUES('路人甲');INSERTINTOtb_test

VALUES('路人乙’);

6.3.3合并查詢結(jié)果

DROPTABLEIFEXISTStb_test1;CREATETABLEtb_test1(namevarchar(255)

CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL)ENGINE=InnoDB

CHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciROW_FORMAT=Dynamic;INSERTINTOtb_test1VALUES('趙一');INSERTINTOtb_test1VALUES('張三');INSERTINTOtb_test1VALUES('李四');INSERTINTOtb_test1VALUES('孫七');INSERTINTOtb_test1VALUES('周八');

執(zhí)行上述SQL語句,創(chuàng)建數(shù)據(jù)表tb_test和tb_test1。其中有字段name,并插入對應(yīng)數(shù)據(jù)。6.3.3合并查詢結(jié)果

執(zhí)行上述SQL語句,從查詢結(jié)果可見,數(shù)據(jù)表中共有的數(shù)據(jù)“張三”和“李四”僅出現(xiàn)一次,表示UNION關(guān)鍵字去除了重復(fù)數(shù)據(jù)。運(yùn)行結(jié)果如下圖所示。使用UNION關(guān)鍵字執(zhí)行合并查詢新建數(shù)據(jù)表的SQL語句如下。SELECT*FROMtb_testUNIONSELECT*FROMtb_test1;6.3.3合并查詢結(jié)果SELECT*FROMtb_testUNIONALLSELECT*FROMtb_test1;2.UNIONALL關(guān)鍵字使用UNIONALL關(guān)鍵字也可以將多個(gè)結(jié)果集合并到一起,但是不會去除重復(fù)的數(shù)據(jù)?!景咐?.25】使用案例6.24中的數(shù)據(jù)表演示UNIONALL關(guān)鍵字的使用。在MySQL中使用UNIONALL關(guān)鍵字執(zhí)行合并查詢數(shù)據(jù)表的SQL語句如下。執(zhí)行上述SQL語句,運(yùn)行結(jié)果如右圖所示。從查詢結(jié)果可見,數(shù)據(jù)表中共有的數(shù)據(jù)“張三”和“李四”僅出現(xiàn)兩次,說明UNIONALL關(guān)鍵字不會去除重復(fù)記錄。6.3.4定義別名數(shù)據(jù)表名[AS]數(shù)據(jù)表別名;在查詢時(shí),可能由于語句的繁瑣或者是字段名稱的復(fù)雜,導(dǎo)致容易出現(xiàn)錯(cuò)誤拼寫等情況。MySQL含有為表和字段取別名的功能,為字段名稱或表名稱使用別名可以提高語句可閱讀性,同時(shí)也為輸出結(jié)果時(shí)提供更精確的命名。1.定義數(shù)據(jù)表別名使用AS關(guān)鍵字為數(shù)據(jù)表取別名,其語法如下。AS關(guān)鍵字為可選項(xiàng),可以省略不寫,但是不會影響定義別名。說明:6.3.4定義別名SELECTstudent_name,class_name,AVG(grade_score)FROMtb_student

ASsJOINtb_class

AScONs.class_id=c.class_idJOINtb_grade

ASgONs.student_id=g.student_idGROUPBYstudent_name,class_name;【案例6.26】使用別名重寫案例6.18的SQL語句。在MySQL中執(zhí)行SQL語句如下。執(zhí)行上述SQL語句,為數(shù)據(jù)表tb_student定義別名為“s”,為數(shù)據(jù)表tb_class定義別名為“c”,為數(shù)據(jù)表tb_grade定義別名為“g”,在后續(xù)語句對數(shù)據(jù)表的引用中也可以直接使用別名引用。運(yùn)行結(jié)果如右圖所示。從查詢結(jié)果可見,結(jié)果與不使用別名是一樣的,相比之下所使用的SQL語句更簡潔。6.3.4定義別名字段名[AS]字段別名;2.定義字段別名在MySQL中執(zhí)行SQL語句如下。AS關(guān)鍵字為可選項(xiàng),可以省略不寫,但是不會影響定義別名。說明:沒有別名的情況下,MySQL輸出查詢字段默認(rèn)使用其列名,為了更加精確,也可以使用AS關(guān)鍵字為字段取別名,其語法如下。【案例6.27】為案例6.11的輸出字段定義別名。SELECTCOUNT(*)AS學(xué)生總?cè)藬?shù)FROMtb_student;執(zhí)行上述SQL語句,為輸出字段COUNT(*)取別名為“學(xué)生總?cè)藬?shù)”。運(yùn)行結(jié)果如右圖所示。從查詢結(jié)果可見,結(jié)果與不使用別名是一樣的,但是列名相比之下更為直接明了。6.3.5使用正則表達(dá)式查詢正則表達(dá)式通常被用來檢索或替換那些符合某個(gè)模式的文本內(nèi)容,根據(jù)指定的匹配模式匹配文本中符合要求的特殊字符串。正則表達(dá)式的查詢能力比通配字符的查詢能力更強(qiáng)大,而且更加靈活。在MySQL中,使用REGEXP來匹配查詢正則表達(dá)式,其基本形式如下。字段名

REGEXP'匹配方式';

6.3.5使用正則表達(dá)式查詢(1)字段名,表示需要查詢的字段名稱。(2)匹配方式,表示以哪種方式進(jìn)行匹配查詢。其支持的模式匹配字符如下表所示。說明:模式字符含義應(yīng)用舉例^匹配以特定字符或字符串開頭的記錄使用“^”表達(dá)式查詢tb_class表中class_id字段以“B2”開頭的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'^B2';$匹配以特定字符或字符串結(jié)尾的記錄使用“$”表達(dá)式查詢tb_class表中class_id字段以“01”結(jié)尾的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'01$';6.3.5使用正則表達(dá)式查詢模式字符含義應(yīng)用舉例.匹配任何單個(gè)字符,包括回車和換行符使用“.”表達(dá)式查詢tb_class表中class_id字段包含字符5的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'.5';[字符集合]匹配字符集合中的任何一個(gè)字符使用“[]”表達(dá)式查詢tb_class表中class_id字段包含10的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'[10]';S1|S2|S3匹配S1、S2和S3中的任意一個(gè)字符串查詢tb_class表中class_id字段包含“B1”“B2”或“B3”的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'B1|B2|B3';6.3.5使用正則表達(dá)式查詢模式字符含義應(yīng)用舉例*匹配零個(gè)或多個(gè)在它前面的字符使用“*”表達(dá)式查詢tb_class表中class_id字段字符“5”前出現(xiàn)字符“B”的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'B*5';+匹配前面的字符1次或多次使用“+”表達(dá)式查詢tb_class表中class_id字段字符“5”前出現(xiàn)過至少一次字符“B”的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'B+5';字符串{n}匹配字符串出現(xiàn)n次使用{n}表達(dá)式查詢tb_class表中class_id字段中連續(xù)出現(xiàn)2次字符“0”的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'0{2}';這里的正則表達(dá)式與Java、PHP等編程語言中的正則表達(dá)式基本一致。6.3.5使用正則表達(dá)式查詢模式字符含義應(yīng)用舉例字符串{m,n}匹配字符串出現(xiàn)至少m次,最多n次使用{m,n}表達(dá)式查詢tb_class表中class_id字段中至少出現(xiàn)1次最多出現(xiàn)2次字符“2”的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'2{1,2}';<字符串>匹配包含字符串的文本使用“<字符串>”表達(dá)式查詢tb_class表中class_id字段包含字符串“B5”的記錄,查詢語句如下:SELECTclass_idFROMtb_classWHEREclass_idREGEXP'B5';課業(yè)任務(wù)046.4課業(yè)任務(wù)課業(yè)任務(wù)6-1查詢課程表中課程學(xué)分為4的專業(yè)基礎(chǔ)課的課程信息課業(yè)任務(wù)6-2查詢學(xué)生表中最高和最矮身高課業(yè)任務(wù)6-3查詢計(jì)算機(jī)學(xué)院所管理的班級數(shù)量課業(yè)任務(wù)6-6使用Workbench工具進(jìn)行連接查詢課業(yè)任務(wù)6-4查詢選修了數(shù)據(jù)庫原理與應(yīng)用課程的學(xué)生姓名課業(yè)任務(wù)6-5綜合查詢的應(yīng)用王小明想利用MySQL+Java開發(fā)一個(gè)數(shù)據(jù)庫學(xué)習(xí)系統(tǒng),在熟悉了MySQL表結(jié)構(gòu)管理知識后,需要進(jìn)一步地學(xué)習(xí)MySQL表的記錄檢索的知識,為在數(shù)據(jù)庫學(xué)習(xí)系統(tǒng)中進(jìn)行數(shù)據(jù)查詢打下牢固的基礎(chǔ),現(xiàn)通過7個(gè)課業(yè)任務(wù)來完成。具體請見實(shí)驗(yàn)5課業(yè)任務(wù)6-7使用Navicat工具進(jìn)行綜合查詢常見錯(cuò)誤及解決方案056.5.1錯(cuò)誤6-1分組查詢失敗6.5.2錯(cuò)誤6-2課業(yè)任務(wù)6-3連接查詢失敗具體請見實(shí)驗(yàn)56.5常見錯(cuò)誤及解決方案選擇題填空題判斷題操作題(1)SELECT語句中可以使用(

)關(guān)鍵字去除重復(fù)行。A.ORDERBYB.HAVINGC.LIMITD.DISTINCT(2)使用空值查詢時(shí)表示列aa不是空值的表達(dá)式是()。A.aa

ISNULLB.aa

ISNOTNULLC.aa

<>NULLD.aa

=NULLDB選擇題填空題判斷題操作題(3)SELECT*FROMLIMIT5,10描述正確的是(

)。A.獲取第6條到第10條記錄B.獲取第4條到第9條記錄C.獲取第4條到第10條記錄D.獲取第6條到第9條記錄(4)SELECT語句實(shí)現(xiàn)相等連接的關(guān)鍵字是什么(

)。A.JOINB.WHEREC.HAVINGD.以上說法都不正確DA選擇題填空題判斷題操作題(5)在SELECT語句中,可以使用(

)子句,將結(jié)果集中的數(shù)據(jù)行根據(jù)選擇列的值進(jìn)邏輯分組,以便能匯總表內(nèi)容的子集,即實(shí)

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論