




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
MySQL數(shù)據(jù)庫技術(shù)及應(yīng)用第5章數(shù)據(jù)查詢與視圖管理掌握在MySQL數(shù)據(jù)庫中創(chuàng)建和管理表的基本技能,對于數(shù)據(jù)庫管理員和開發(fā)人員來說都是非常重要的。掌握這些內(nèi)容可以更好地存儲和查詢數(shù)據(jù),從而滿足實(shí)際業(yè)務(wù)需求。前言學(xué)習(xí)要點(diǎn)熟悉SELECT語句結(jié)構(gòu)熟悉表的簡單查詢熟悉表的連接查詢熟悉子查詢熟悉聯(lián)合查詢熟悉視圖管理第5章數(shù)據(jù)查詢與視圖管理學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理SELECT語句是SQL語言中使用最為頻繁的語句,它的強(qiáng)大功能能夠滿足各種復(fù)雜的數(shù)據(jù)檢索需求。掌握SELECT語句的使用對于進(jìn)行有效的數(shù)據(jù)分析和管理至關(guān)重要。第5章數(shù)據(jù)查詢與視圖管理5.1SELECT語句SELECT語句的完整結(jié)構(gòu):SELECT[ALL|DISTINCT][TOP(expression)[PERCENT]][column_name(s)[,...]][*][INTOnew_table]FROMtable_name[JOIN...ON...][WHERECONDITION][GROUPBYcolumn_name(s)[,...]][HAVINGCONDITION][ORDERBYcolumn_name(s)[ASC|DESC][,...]];第5章數(shù)據(jù)查詢與視圖管理5.1SELECT語句說明:·[ALL|DISTINCT]:指定是否返回所有匹配的行(ALL)或只返回?zé)o重復(fù)的行(DISTINCT),ALL是默認(rèn)選項(xiàng)?!TOP(expression)[PERCENT]]:限制返回的行數(shù)或百分比。·[column_name(s)[,...]]:指定要選擇的列??梢允褂胉*`來選擇所有列?!INTOnew_table]:創(chuàng)建一個(gè)新表,并將查詢結(jié)果插入其中?!ROMtable_name:指定要查詢的表或視圖?!JOIN...ON...]:用于結(jié)合其他表的數(shù)據(jù)?!WHEREcondition]:過濾結(jié)果集的條件?!GROUPBYcolumn_name(s)[,...]]:對結(jié)果集進(jìn)行分組?!HAVINGcondition]:過濾分組后的結(jié)果集。·[ORDERBYcolumn_name(s)[ASC|DESC][,...]]:對結(jié)果集進(jìn)行排序。第5章數(shù)據(jù)查詢與視圖管理5.1SELECT語句學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理簡單查詢是指只涉及一張表的查詢,也不需要使用JOIN子句來結(jié)合其他表的數(shù)據(jù)。1.使用星號(*)通配符查詢所有字段使用星號(*)通配符查詢時(shí),將返回所有列?!纠?-1】查詢?nèi)w學(xué)生的詳細(xì)信息。SELECT*FROMstudent;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢2.查詢指定字段使用SELECT語句,可以獲取多個(gè)字段下的數(shù)據(jù),只需要在關(guān)鍵字SELECT后面指定要查找的字段的名稱,不同字段名稱之間用逗號(,)分隔開,最后一個(gè)字段后面不需要加逗號?!纠?-2】查詢?nèi)w學(xué)生的學(xué)號與姓名。SELECTSno,SnameFROMstudent;【例5-3】查詢所有學(xué)生的姓名、學(xué)號、班級。SELECTSname,Sno,SclassFROMstudent;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢3.查詢結(jié)果不重復(fù)DISTINCT用于去除SELECT語句返回結(jié)果中的重復(fù)行。當(dāng)執(zhí)行一條查詢語句時(shí),可能會遇到結(jié)果集中包含重復(fù)數(shù)據(jù)的情況。為了獲取唯一的記錄,可以使用DISTINCT關(guān)鍵詞來確保查詢結(jié)果中的每行都是獨(dú)一無二的。具體來說還包括單列去重和多列去重?!纠?-4】查詢選修了課程的學(xué)生人數(shù)。SELECTCOUNT(DISTINCTSno)FROMsc;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢4.為字段取別名AS關(guān)鍵字用于為查詢結(jié)果中的字段或表達(dá)式指定別名。別名是一個(gè)臨時(shí)的、可自定義的名稱,用于在查詢時(shí)方便的引用某字段或表達(dá)式。這些別名只在查詢期間有效?!纠?-5】查詢?nèi)w學(xué)生的姓名及年齡。SELECTSname,YEAR(NOW())-YEAR(Sbirth)AS'年齡'FROMstudent;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢5.使用YEAR函數(shù)【例5-6】查詢?nèi)w學(xué)生的姓名、出生年份。SELECTSnameAS學(xué)生姓名,YEAR(Sbirth)AS出生年份FROMstudent;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢6.查詢滿足條件的記錄(1)運(yùn)算符進(jìn)行數(shù)據(jù)查詢時(shí),通常需要根據(jù)特定條件篩選出符合要求的記錄。WHERE子句的作用是設(shè)定篩選條件,只返回滿足條件的記錄。【例5-7】查詢“計(jì)算機(jī)2001”班的學(xué)生名單。SELECTSnameFROMstudentWHERESclass='計(jì)算機(jī)2001';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢6.查詢滿足條件的記錄(1)運(yùn)算符進(jìn)行數(shù)據(jù)查詢時(shí),通常需要根據(jù)特定條件篩選出符合要求的記錄。WHERE子句的作用是設(shè)定篩選條件,只返回滿足條件的記錄。第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢運(yùn)算符描述=等于<>或
!=不等于>
大于>=大于等于<
小于<=小于等于<=>安全等于6.查詢滿足條件的記錄(1)運(yùn)算符【例5-7】查詢“計(jì)算機(jī)2301”班的學(xué)生名單。SELECTSnameFROMstudentWHERESclass='計(jì)算機(jī)2301';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢6.查詢滿足條件的記錄(1)運(yùn)算符【例5-8】查詢2001年以前出生的學(xué)生的姓名及出生日期。SELECTSname,SbirthFROMstudentWHERESbirth<‘2004-01-01';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢6.查詢滿足條件的記錄(1)運(yùn)算符【例5-9】查詢有不及格成績的學(xué)生的學(xué)號。SELECTDISTINCTSnoFROMscWHEREGrade<60;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢6.查詢滿足條件的記錄(2)邏輯連接符在WHERE子中還可以使邏輯連接符來組合多個(gè)條件,以實(shí)現(xiàn)更復(fù)雜的條件設(shè)定。邏輯連接符有4個(gè),分別是NOT、AND、OR和XOR。其中,NOT表示對條件的否定;AND用于連接兩個(gè)條件,當(dāng)兩個(gè)條件都滿足時(shí)才返回TRUE,否則返回FALSE;OR也用于連接兩個(gè)條件,只要有一個(gè)條件滿足時(shí)就返回TRUE;XOR同樣也用于連接兩個(gè)條件,只有一個(gè)條件滿足時(shí)才返回TRUE,當(dāng)兩個(gè)條件都滿足或都不滿足時(shí)返回FALSE。第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢邏輯連接符描述NOT非AND并且OR或者XOR異或6.查詢滿足條件的記錄(2)邏輯連接符【例5-10】查詢計(jì)算機(jī)2302班的男生的姓名和學(xué)號。SELECTSname,SnoFROMstudentWHERESclass='計(jì)算機(jī)2302'ANDSsex='男';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢7.帶BETWEENAND的范圍查詢BETWEENAND用于在給定的范圍內(nèi)篩選結(jié)果集,它允許選擇在某個(gè)最小值和最大值之間的數(shù)據(jù)行。選取不在指定范圍內(nèi)的行,可以使用NOTBETWEENAND。注意:BETWEENAND是包括邊界值的;NOTBETWEENAND是不包括邊界值的。【例5-11】查詢在出生日期在“2003-01-01”和“2004-12-31”之間學(xué)生的姓名、班級、出生日期。SELECTSname,Sclass,SbirthFROMstudentWHERESbirthBETWEEN‘2003-01-01'AND‘2004-12-31';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢8.帶IN關(guān)鍵字的查詢IN關(guān)鍵字用于指定多個(gè)值的列表,并在查詢中篩選出與列表中任意一個(gè)值匹配的行。IN關(guān)鍵字提供了一種簡潔的方式來編寫多個(gè)OR條件的查詢,使得SQL查詢更加易讀和易于管理。此外,IN關(guān)鍵字也可以與子查詢結(jié)合使用,以根據(jù)另一個(gè)查詢的結(jié)果來篩選行。NOTIN則用于篩選出不在給定值列表中的行。【例5-12】查詢“計(jì)算機(jī)2301”和“通信2301”班學(xué)生的姓名和性別。SELECTSname,SsexFROMstudentWHERESclassIN('計(jì)算機(jī)2301',‘通信2301');第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢9.模式匹配(1)帶LIKE的字符匹配查詢用于篩選出指定模式的行,而NOTLIKE則是用于篩選出不符合指定模式的行。·%:匹配任意長度字符的字符串?!:匹配任意單個(gè)字符。【例5-13】查詢所有姓“王”的學(xué)生的姓名和學(xué)號。SELECTSname,SnoFROMstudentWHERESnameLIKE'王%';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢9.模式匹配(1)帶LIKE的字符匹配查詢【例5-14】查詢姓名中第二個(gè)字是“文”的學(xué)生姓名和學(xué)號。SELECTSname,SnoFROMstudentWHERESnameLIKE'_文%';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢9.模式匹配(1)帶LIKE的字符匹配查詢【例5-15】查詢不姓王的學(xué)生的姓名和學(xué)號。SELECTSname,SnoFROMstudentWHERESnameNOTLIKE'王%';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢(2)REGEXP運(yùn)算符MySQL還內(nèi)置了REGEXP關(guān)鍵字,提供強(qiáng)大的正則表達(dá)式功能,可以更加靈活和高效地進(jìn)行數(shù)據(jù)匹配和處理。常見的正則表達(dá)式元字符,如下所示。·.:匹配任意單個(gè)字符。·^:匹配字符串的開頭?!?:匹配字符串的結(jié)尾?!?:匹配前一個(gè)字符零次或多次。·+:匹配前一個(gè)字符一次或多次?!?:匹配前一個(gè)字符零次或一次?!]:匹配括號內(nèi)的任意一個(gè)字符?!^]:匹配不在括號內(nèi)的任意一個(gè)字符。第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢(2)REGEXP運(yùn)算符【例5-16】查詢所有姓“王”的學(xué)生的姓名和學(xué)號。SELECTSname,SnoFROMstudentWHERESnameREGEXP'^王’;或者SELECTSname,SnoFROMstudentWHERESnameREGEXP'王+';第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢10.空值查詢創(chuàng)建數(shù)據(jù)表的,可以指定某列中是否包含空值(NULL)??罩挡煌?,也不同于空字符串??罩狄话惚硎緮?shù)據(jù)未知、不適用或?qū)⒃谝院筇砑訑?shù)據(jù)。在SELECT語句中使用ISNULL子句,可以查詢某字段內(nèi)容為空記錄?!纠?-17】某些學(xué)生選修某門課程后沒有參加考試,所以有選課記錄,但是沒有考試成績,假設(shè)這些學(xué)生的成績?yōu)榭罩?null)。請查詢成績?yōu)榭盏倪x課信息。SELECT*FROMscWHEREGradeISNULL;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢10.空值查詢【例5-18】查詢成績不為空的選課信息。SELECT*FROMscWHEREGradeISNOTNULL;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢11.對查詢結(jié)果排序ORDERBY用于對查詢結(jié)果進(jìn)行排序,允許按照一個(gè)或多個(gè)列的值以升序或降序方式排列返回的數(shù)據(jù)行。默認(rèn)情況下,排序是按升序進(jìn)行的。ASC關(guān)鍵字表示按升序排序,DESC關(guān)鍵字表示按降序排序?!纠?-19】查詢選修了“18110140”課程的學(xué)生的學(xué)號及成績,查詢結(jié)果按分?jǐn)?shù)降序排列。SELECTSno,GradeFROMscWHERECno='18110140'ORDERBYGradeDESC;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢11.對查詢結(jié)果排序【例5-20】查詢?nèi)w學(xué)生的信息。查詢結(jié)果按所在班升序排列,對同一班中的學(xué)生按出生日期降序排列。SELECT*FROMstudentORDERBYSclass,SbirthDESC;第5章數(shù)據(jù)查詢與視圖管理5.2簡單查詢學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理有時(shí)候查詢并不需要返回表中的數(shù)據(jù),而是要對數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總。MySQL提供一些聚合函數(shù),可以對指定的數(shù)據(jù)進(jìn)行分析和匯總。這些函數(shù)的功能有:計(jì)算數(shù)據(jù)表中記錄行數(shù)的總數(shù)、計(jì)算某個(gè)字段的數(shù)據(jù)總和,以及計(jì)算某個(gè)字段數(shù)據(jù)中的最大值、最小值或者平均值。它們可以與GROUPBY子句結(jié)合使用,以便在分組的數(shù)據(jù)上執(zhí)行聚合操作。第5章數(shù)據(jù)查詢與視圖管理5.3使用聚合函數(shù)查詢聚合函數(shù)描述COUNT()返回指定列中的非NULL值的行數(shù)SUM()返回指定列的總和AVG()返回指定列的平均值MIN()返回指定列的最小值MAX()返回指定列的最大值【例5-21】查詢選修了課程的學(xué)生人數(shù)。SELECTCOUNT(DISTINCTSno)FROMsc;【例5-22】查詢課程號為“18132220”的課程的成績情況,顯示該課程的最高分、最低分及平均分。SELECTMAX(Grade),MIN(Grade),AVG(Grade)FROMscWHERECno='18132220’;第5章數(shù)據(jù)查詢與視圖管理5.3使用聚合函數(shù)查詢GROUPBY用于對結(jié)果集進(jìn)行分組。GROUPBY的主要用途是將數(shù)據(jù)集劃分為若干個(gè)小區(qū)域,然后對這些小區(qū)域進(jìn)行數(shù)據(jù)處理。GROUPBY通常與聚合函數(shù)(如SUM、COUNT、AVG、MIN、MAX)結(jié)合使用,以便對每個(gè)分組執(zhí)行聚合操作。GROUPBY可以與ORDERBY結(jié)合使用,以便對分組后的結(jié)果進(jìn)行排序。HAVING子句用于對分組后的結(jié)果進(jìn)行篩選,類似于WHERE子句,但WHERE子句在數(shù)據(jù)分組前進(jìn)行篩選,而HAVING子句在分組后進(jìn)行篩選。【例5-23】查詢每門課程的課程號與選課人數(shù)。SELECTCno,COUNT(Sno)AS選課人數(shù)FROMscGROUPBYCno;第5章數(shù)據(jù)查詢與視圖管理5.3使用聚合函數(shù)查詢【例5-24】查詢選課不足2門的學(xué)生的學(xué)號及選課數(shù)量。SELECTSno,COUNT(Cno)AS選課數(shù)量FROMscGROUPBYSnoHAVINGCOUNT(Cno)<2;第5章數(shù)據(jù)查詢與視圖管理5.3使用聚合函數(shù)查詢學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理連接查詢是一項(xiàng)重要的數(shù)據(jù)庫操作,它允許從多個(gè)表中檢索和組合數(shù)據(jù),以便進(jìn)行更復(fù)雜的查詢和分析。以下是幾種常見的連接類型。(1)內(nèi)連接(INNERJOIN)
(2)自然連接(NATURALJOIN)
(3)外連接(OUTERJOIN)
(4)自連接(SELFJOIN)
第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.1內(nèi)連接內(nèi)連接合并具有同一列的兩個(gè)以上的表的行,結(jié)果集中不包含一張表與另一張表不匹配的行,內(nèi)連接的語句結(jié)構(gòu)如下。SELECTcolumn_name(s)FROMtable1INNERJOINtable2ONtable1.column_name=table2.column_name[WHEREcondition];說明:·table1和table2是要進(jìn)行連接操作的表名?!olumn_name(s)是想要從連接的結(jié)果中選擇的列名?!able1.column_name和table2.column_name是用于連接兩張表的列名。這些列必須在兩張表中都存在,并且具有相同的數(shù)據(jù)類型和值。第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.1內(nèi)連接【例5-25】查詢每個(gè)學(xué)生及其選修課程情況。SELECT*FROMstudentINNERJOINscONstudent.Sno=sc.Sno;該語句的等價(jià)寫法如下:SELECT*FROMstudent,scWHEREstudent.Sno=sc.Sno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.2自然連接自然連接是一種特殊的等值連接,要求兩個(gè)關(guān)系中進(jìn)行比較的分量必須是相同的屬性組,并且在結(jié)果中把重復(fù)的屬性列去掉?!纠?-26】自然連接student表和sc表。SELECTstudent.Sno,Ssex,Sbirth,Sclass,Cno,GradeFROMstudent,scWHEREstudent.Sno=sc.Sno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.2自然連接【例5-27】查詢選修“18132220”課程成績在90分以上的所有學(xué)生的學(xué)號、性別、出生日期、班級、課程號和成績。SELECTStudent.Sno,Ssex,Sbirth,Sclass,Cno,GradeFROMstudent,scWHEREstudent.Sno=sc.SnoANDsc.Cno='18132220'ANDGrade>=90;等價(jià)寫法如下:SELECTStudent.Sno,Ssex,Sbirth,Sclass,Cno,GradeFROMstudentJOINscONstudent.Sno=sc.SnoWHEREsc.Cno='18132220'ANDsc.Grade>90;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.2自然連接【例5-28】查詢學(xué)生的學(xué)號、姓名、選修課程名和成績。SELECTStudent.Sno,Sname,Cname,GradeFROMstudent,sc,courseWHEREstudent.Sno=sc.SnoANDsc.Cno=course.Cno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接內(nèi)連接缺點(diǎn)是如果想要把不滿足條件的數(shù)據(jù)也查詢出來,內(nèi)連接就做不到,于是引入外連接。下面是外連接的用法。1.左外連接以左表為基準(zhǔn),按條件連接,將左表沒有的對應(yīng)項(xiàng)顯示的右表的列為NULL,使用關(guān)鍵詞LEFTOUTERJOIN或LEFTJOIN,語句結(jié)構(gòu)如下。SELECTcolumn_name(s)FROMtable1LEFTOUTERJOINtable2ONtable1.column_name=table2.column_name;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接1.左外連接【例5-29】查詢?nèi)w學(xué)生的信息及選課情況。SELECTstudent.Sno,Sname,Ssex,Sbirth,Sclass,Cno,GradeFROMstudentLEFTOUTERJOINscONstudent.Sno=sc.Sno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接2.右外連接以右表為基準(zhǔn),按條件連接,將右表沒有的對應(yīng)項(xiàng)顯示的左表的列為NULL,使用關(guān)鍵詞RIGHTOUTERJOIN或RIGHTJOIN,語句結(jié)構(gòu)如下。SELECTcolumn_name(s)FROMtable1RIGHTOUTERJOINtable2ONtable1.column_name=table2.column_name;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接2.右外連接【例5-30】查詢所有課程的選課情況。SELECTSno,Grade,course.*FROMscRIGHTOUTERJOINcourseONcourse.Cno=sc.Cno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接3.全外連接當(dāng)一張表中的某行在另一張表中沒有匹配行時(shí),則另一張表的選擇列表列為NULL。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值,使用關(guān)鍵詞FULLOUTERJOIN,語句結(jié)構(gòu)如下。SELECTcolumn_name(s)FROMtable1FULLOUTERJOINtable2ONtable1.column_name=table2.column_name;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接3.全外連接【例5-31】查詢所有學(xué)生的信息以選課情況。SELECTstudent.Sno,Sname,Ssex,Sbirth,Sclass,Cno,GradeFROMstudentFULLOUTERJOINscONstudent.Sno=sc.Sno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.3外連接3.全外連接MySQL8不支持全外連接查詢,可以使用UNION和LEFTJOIN以及RIGHTJOIN的組合來實(shí)現(xiàn)全外連接功能。SELECTstudent.Sno,Sname,Ssex,Sbirth,Sclass,Cno,GradeFROMstudentLEFTOUTERJOINscONstudent.Sno=sc.SnoUNIONSELECTstudent.Sno,Sname,Ssex,Sbirth,Sclass,Cno,GradeFROMstudentRIGHTOUTERJOINscONstudent.Sno=sc.Sno;第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.4自連接自連接是在同一張表的不同實(shí)例之間進(jìn)行連接的查詢,通常用于查詢表內(nèi)部的某種層級或關(guān)聯(lián)結(jié)構(gòu)。在SQL中,自連接通常用于處理具有父子關(guān)系的數(shù)據(jù),例如分類表、組織結(jié)構(gòu)圖或樹形結(jié)構(gòu)的數(shù)據(jù)。在自連接中,一張表被視為兩張不同的表,并分別用不同的別名來標(biāo)識。然后,在WHERE子句中使用這些別名,將它們連接起來,以創(chuàng)建一種與自身關(guān)聯(lián)的視圖。第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.4自連接自連接的語句結(jié)構(gòu)如下。SELECTcolumn_name(s)FROMtable_nameASalias1INNERJOINtable_nameASalias2ONalias1.column_name=alias2.column_name;說明:·table_name是要進(jìn)行自連接操作的表名。·alias1和alias2是表的別名,用于在查詢中區(qū)分同一張表的不同實(shí)例?!olumn_name是在兩張表實(shí)例之間進(jìn)行匹配的列名。第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢5.4.4自連接【例5-32】查詢同時(shí)選修了“18132370“和“11110140“課程的學(xué)生的學(xué)號。SELECTs1.SnoFROMscASs1JOINscASs2ONs1.Sno=s2.SnoWHEREs1.Cno='18132370'ANDs2.Cno='11110140';第5章數(shù)據(jù)查詢與視圖管理5.4連接查詢學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理子查詢,也被稱為嵌套查詢,是SQL中一種強(qiáng)大的查詢技術(shù),它允許在一個(gè)查詢內(nèi)部執(zhí)行另一個(gè)查詢,可以描述更為復(fù)雜的查詢條件。子查詢是嵌入在另一個(gè)查詢中的SELECT語句。它可以出現(xiàn)在多種SQL語句中,如SELECT、INSERT、UPDATE、DELETE等。第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.1帶有ANY或者SOME關(guān)鍵字的子查詢帶有ANY或SOME關(guān)鍵字的子查詢用于將主查詢中的某個(gè)值與子查詢返回的結(jié)果集中的值進(jìn)行比較。如果主查詢中的值與子查詢結(jié)果集中的任何(ANY)或某些(SOME,等同于ANY)值滿足比較條件,則返回TRUE。第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.1帶有ANY或者SOME關(guān)鍵字的子查詢【例5-33】使用ANY關(guān)鍵字查詢選課表中成績大于任意一門課程成績的學(xué)生信息。SELECT*FROMstudentWHERESnoIN(SELECTSnoFROMscWHEREGrade>ANY(SELECTGradeFROMsc));第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.1帶有ANY或者SOME關(guān)鍵字的子查詢【例5-34】使用SOME關(guān)鍵字查詢選課表中的成績大于至少一門課程成績的學(xué)生信息。SELECT*FROMstudentWHERESnoIN(SELECTSnoFROMscWHEREGrade>SOME(SELECTGradeFROMsc));第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.2帶有ALL關(guān)鍵字的子查詢帶有ALL關(guān)鍵字的子查詢用于比較主查詢中的值與子查詢返回的所有值。當(dāng)使用ALL關(guān)鍵字時(shí),主查詢中的值必須與子查詢結(jié)果集中所有的值滿足比較條件,這樣的行才會被包含在最終結(jié)果中。這種類型的子查詢通常與比較運(yùn)算符(如>、<、>=、<=)結(jié)合使用。【例5-35】查詢出生日期早于所有男生的女生的信息。SELECT*FROMstudentWHERESsex='女'ANDSbirth<ALL(SELECTSbirthFROMstudentWHERESsex='男');第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.3帶有IN關(guān)鍵字的子查詢IN關(guān)鍵字進(jìn)行子查詢時(shí),內(nèi)層查詢語句僅僅返回一個(gè)數(shù)據(jù)列,這個(gè)數(shù)據(jù)列里的值將提供給外層查詢語句進(jìn)行比較操作。第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.3帶有IN關(guān)鍵字的子查詢【例5-36】查詢與“謝鑫”在同一個(gè)班級學(xué)習(xí)的學(xué)生。SELECT*FROMstudentWHERESclassIN(SELECTSclassFROMstudentWHERESname='謝鑫');第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.4帶有比較運(yùn)算符的子查詢在前面介紹的帶ANY、ALL關(guān)鍵字的子查詢時(shí)使用了“>”比較運(yùn)算符,子查詢時(shí)還可以使用其他的比較運(yùn)算符,如“<”、“<=”、“=”、“>=”和“!=”等?!纠?-37】用比較運(yùn)算符實(shí)現(xiàn)查詢與“謝鑫”在同一個(gè)班級的學(xué)生。SELECT*FROMstudentWHERESclass=(SELECTSclassFROMstudentWHERESname='謝鑫');第5章數(shù)據(jù)查詢與視圖管理5.5子查詢5.5.5帶有EXISTS關(guān)鍵字的子查詢EXISTS關(guān)鍵字用于檢查子查詢是否至少返回了一行數(shù)據(jù),即判斷子查詢的結(jié)果集是否非空。這是一個(gè)非常有用的工具,尤其是在需要驗(yàn)證某些條件下是否存在相關(guān)記錄時(shí)?!纠?-38】查詢所有選修了“18132220”課程的學(xué)生的姓名。SELECTSnameFROMstudentWHEREEXISTS(SELECT*FROMscWHEREstudent.Sno=sc.SnoANDCno='18132220');第5章數(shù)據(jù)查詢與視圖管理5.5子查詢學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理聯(lián)合查詢是使用UNION操作符將多個(gè)查詢的結(jié)果集合并成一個(gè)結(jié)果集。UNION操作符用于合并兩個(gè)或多個(gè)SELECT語句的結(jié)果集,但它不會返回重復(fù)的記錄。語句結(jié)構(gòu)如下。SELECTcolumn_name(s)FROMtable1UNIONSELECTcolumn_name(s)FROMtable2;如果需要包括重復(fù)的行,應(yīng)使用UNIONALL,則使用如下語句結(jié)構(gòu)。SELECTcolumn_name(s)FROMtable1UNIONALLSELECTcolumn_name(s)FROMtable2;第5章數(shù)據(jù)查詢與視圖管理5.6聯(lián)合查詢說明:·column_name(s)是想從每張表中選擇的列名。在UNION操作中,每個(gè)SELECT語句必須具有相同數(shù)量的列?!able1和table2是要從中檢索數(shù)據(jù)的表名?!NION關(guān)鍵字合并兩個(gè)SELECT語句的結(jié)果集?!NIONALL也會合并結(jié)果集,但它會包含重復(fù)的行。注意:為了能夠使用UNION操作符,每個(gè)SELECT語句中的列必須具有相似的數(shù)據(jù)類型。另外,每個(gè)SELECT語句中的列的順序也必須相同。第5章數(shù)據(jù)查詢與視圖管理5.6聯(lián)合查詢【例5-39】查詢2005年以前出生的學(xué)生和全體女生信息。SELECT*FROMstudentWHERESbirth<=‘2005-1-1'UNIONSELECT*FROMstudentWHERESsex='女';第5章數(shù)據(jù)查詢與視圖管理5.6聯(lián)合查詢學(xué)習(xí)內(nèi)容5.1SELECT語句5.2簡單查詢5.3使用聚合函數(shù)查詢5.4連接查詢5.5子查詢5.6聯(lián)合查詢5.7視圖管理第5章數(shù)據(jù)查詢與視圖管理視圖(View)是一個(gè)虛擬的表,它是根據(jù)一個(gè)或多個(gè)實(shí)際表(也稱為基表)的結(jié)果集創(chuàng)建的。視圖不存儲實(shí)際的數(shù)據(jù),而是在每次查詢視圖時(shí)動態(tài)地執(zhí)行其定義中的SQL語句并返回結(jié)果。對視圖的操作與對表的操作一樣,可以對其進(jìn)行查詢、修改和刪除。當(dāng)對通過視圖看到的數(shù)據(jù)進(jìn)行修改時(shí),相應(yīng)的基本表的數(shù)據(jù)也要發(fā)生變化;同時(shí),若基本表的數(shù)據(jù)發(fā)生變化,則這種變化也可以自動反映到視圖中。視圖可幫助用戶屏蔽真實(shí)表結(jié)構(gòu)變化帶來的影響。第5章數(shù)據(jù)查詢與視圖管理5.7視圖管理1.創(chuàng)建視圖視圖中包含了SELECT語句的查詢結(jié)果,因此視圖的創(chuàng)建基于SELECT語句和已存在的數(shù)據(jù)表??梢曰谝粡埍斫⒁晥D,也可以基于多張表建立視圖。創(chuàng)建視圖的語句結(jié)構(gòu)如下。CREATEVIEWview_nameASSELECTcolumn1,column2,...FROMtable_name[WHEREcondition];第5章數(shù)據(jù)查詢與視圖管理5.7視圖管理說明:·view_name是要創(chuàng)建的視圖的名稱?!olumn1,column2,...是想要在視圖中顯示的列名?!able_name是用于生成視圖結(jié)果集的表名?!HEREcondi
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度教師教育培訓(xùn)機(jī)構(gòu)戰(zhàn)略合作合同
- 2025福建省安全員《C證》考試題庫
- 2025年度企業(yè)產(chǎn)品質(zhì)量認(rèn)證服務(wù)合同范本
- 2025年度歷史輔導(dǎo)班協(xié)議書退費(fèi)及人文知識拓展合同
- 2025年度教育機(jī)構(gòu)員工入職教學(xué)與培訓(xùn)合同
- 2025年度勞動解除協(xié)議書:物流行業(yè)員工退工補(bǔ)償與就業(yè)安置合同
- 智能家居融資居間合同范例
- 2025年度養(yǎng)豬業(yè)品牌營銷推廣合作協(xié)議
- 2025年度體育賽事賽事獎勵及獎金分配轉(zhuǎn)委托合同
- 2025年度5G通信技術(shù)合作介紹費(fèi)合同
- 2025年億達(dá)商學(xué)院成立儀式及論壇經(jīng)驗(yàn)總結(jié)(三篇)
- (2025)駕照C1證考試科目一必考題庫及參考答案(包過版)
- 2025年湖南理工職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 罕見病診治與病例管理制度
- 課題申報(bào)書:“四新”建設(shè)與創(chuàng)新創(chuàng)業(yè)人才培養(yǎng)基本范式研究
- 婦科常見急危重癥護(hù)理
- 春季高考高職單招數(shù)學(xué)模擬試題七套含答案
- 2024-2025學(xué)年陜西省寶雞市高三上學(xué)期高考模擬檢測(一)英語試題(含解析)
- 2025年企業(yè)的演講稿例文(2篇)
- 電瓶三輪車安全培訓(xùn)
- 造船廠有限空間作業(yè)安全措施方案
評論
0/150
提交評論