MySQL數(shù)據(jù)庫應用教程 課件 第5、6章 表記錄的查詢、索引_第1頁
MySQL數(shù)據(jù)庫應用教程 課件 第5、6章 表記錄的查詢、索引_第2頁
MySQL數(shù)據(jù)庫應用教程 課件 第5、6章 表記錄的查詢、索引_第3頁
MySQL數(shù)據(jù)庫應用教程 課件 第5、6章 表記錄的查詢、索引_第4頁
MySQL數(shù)據(jù)庫應用教程 課件 第5、6章 表記錄的查詢、索引_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第5章表記錄的查詢《MySQL數(shù)據(jù)庫應用教程》劉瑞新主編配套資源目錄第5章表記錄的查詢5.1單表記錄查詢5.2聚合函數(shù)查詢5.3多表連接查詢5.4子查詢5.1.1單表查詢語句SELECT[ALL|DISTINCT]selection_list1[,selection_list2…]FROMtable_source;5.1單表記錄查詢【例5-1】在數(shù)據(jù)庫studentinfo中查詢學生表student中的所有記錄。USEstudentinfo;SELECT*FROMstudent;5.1單表記錄查詢2.查詢指定的列【例5-2】在數(shù)據(jù)庫studentinfo中,查詢學生表student中的StudentName、Sex、StudentID和ClassID列。SELECTStudentName,Sex,StudentID,ClassIDFROMstudent;5.1單表記錄查詢5.1單表記錄查詢3.查詢計算的值【例5-3】在數(shù)據(jù)庫studentinfo中,查詢學生表student中的全體學生,顯示StudentName、Sex列,以及“年齡:”字符串和年齡。SELECTStudentName,Sex,'年齡:',YEAR(NOW())-YEAR(Birthday)FROMstudent;5.1單表記錄查詢【例5-4】計算表達式的值。SELECT101+3*50/7,"abc"="ABC",2>=3;5.1單表記錄查詢3.為列取別名【例5-5】在數(shù)據(jù)庫studentinfo中,查詢student表中的全體學生的姓名、性別和年齡,要求對應的列名顯示為中文名稱。SELECTStudentNameAS'姓名',Sex性別,YEAR(NOW())-YEAR(Birthday)AS年齡

FROMstudent;5.1單表記錄查詢4.不顯示重復記錄【例5-6】在數(shù)據(jù)庫studentinfo中,查詢student表中的性別。SELECTSexFROMstudent;5.1單表記錄查詢SELECTDISTINCTSexFROMstudent;5.1單表記錄查詢SELECTStudentName,SexFROMstudent;5.1單表記錄查詢5.1.2使用WHERE子句過濾結果集SELECT[ALL|DISTINCT]selection_list1[,selection_list2…]FROMtable_source[WHEREsearch_condition];5.1單表記錄查詢1.使用關系表達式和邏輯表達式的條件查詢關系運算符有<,<=,=,>,>=,<>,!=,!<,!>,<=>?!?lt;>”表示不等于,等價“!=”;“!>”表示不大于,等價“<=”;“!<”表示不小于,等價“>=”。邏輯運算符有ANOT或!,AND或&&,OR或||,XOR。AND和OR連接多個條件。5.1單表記錄查詢【例5-7】查詢selectcourse表中成績在60到75之間或者成績?yōu)?00的學號、課程號。SQL語句和查詢結果如下:SELECTStudentID,CourseID,ScoreFROMselectcourseWHEREScore>=60ANDScore<=75ORScore=100;5.1單表記錄查詢2.使用BETWEEN…AND關鍵字的范圍查詢expression[NOT]BETWEENexpressionlANDexpression2“xBETWEEN200AND500”相當于表達式“x>=200ANDx<=500”。5.1單表記錄查詢【例5-8】對例5-7改用BETWEEN…AND關鍵字實現(xiàn)查詢。SELECTStudentID,CourseID,ScoreFROMselectcourseWHEREScoreBETWEEN60AND75ORScore=100;5.1單表記錄查詢【例5-9】查詢student表中出生日期不在2003-02-01到2003-05-31之間的學生。SELECTStudentName,Sex,BirthdayFROMstudentWHEREBirthdayNOTBETWEEN'2003-02-01'AND'2003-05-31';5.1單表記錄查詢3.使用IN關鍵字的集合查詢expression[NOT]IN(value1,value2,…)【例5-10】查詢student表中地址不在北京、上海、廣東、浙江的記錄。SELECT*FROMstudentWHEREAddressNOTIN('北京','上海','廣東','浙江');5.1單表記錄查詢4.使用ISNULL關鍵字查詢空值expressionIS[NOT]NULL【例5-11】在course表中,查詢填寫課程號的記錄。SELECT*FROMcourseWHEREPreCourseIDISNOTNULL;5.1單表記錄查詢5.使用LIKE關鍵字的字符匹配查詢expression[NOT]LIKE'模式字符串'[ESCAPE'換碼字符']【例5-12】在course表中,查詢課程名CourseName中含有“基礎”的課程。SELECT*FROMcourseWHERECourseNameLIKE'%基礎%';5.1單表記錄查詢6.使用正則表達式的查詢expression[NOT]REGEXP'正則表達式'5.1單表記錄查詢SELECT'teacher'REGEXP'er$';5.1單表記錄查詢(1)匹配指定的字符串【例5-13】在課程表course中,查詢課程名稱中含有“學”“基礎”“法”的課程。SELECT*FROMcourseWHERECourseNameREGEXP'學|基礎|法';5.1單表記錄查詢(2)查詢以特定字符或字符串開頭的記錄【例5-14】在student表中,查詢廣東、廣西、湖南或湖北的學生的信息。SELECT*FROMstudentWHEREAddressREGEXP'^廣|湖';5.1單表記錄查詢(3)用“.”替代字符串中的任意一個字符【例5-15】在student表中,查詢姓名中以“李”開頭,以“欣”結尾,中間包含一個字的學生信息。SELECT*FROMstudentWHEREStudentNameREGEXP'^李.欣$';5.1單表記錄查詢5.1.3對查詢結果集的處理1.使用ORDERBY子句對查詢結果排序ORDERBYexpression1[ASC|DESC][,expression2[ASC|DESC],…]【例5-16】在student表中,按出生日期的先后順序顯示。SELECT*FROMstudentORDERBYBirthdayASC;5.1單表記錄查詢【例5-17】在selectcourse表中查詢成績大于或等于85分的學生的學號、課程號和成績,并先按成績的降序,再按學號的升序排列,列名顯示為中文。SELECTStudentIDAS學號,CourseID課程號,Score成績FROMselectcourseWHEREScore>=85ORDERBYScoreDESC,StudentIDASC;5.1單表記錄查詢2.限制查詢結果的數(shù)量LIMITlines[OFFSEToffset]【例5-18】在selectcourse表中,查詢課程號CourseID為6開頭的成績,按成績從高到低降序排序,輸出第2至第4條記錄的學生,該子句改為LIMIT4OFFSET2。SELECTStudentIDAS學號,CourseIDAS課程號,ScoreAS成績

FROMselectcourseWHERESUBSTR(CourseID,1,1)='6'ORDERBYScoreDESCLIMIT3OFFSET2;5.1單表記錄查詢5.2.1聚合函數(shù)5.2聚合函數(shù)查詢1.COUND()函數(shù)COUNT(*):返回數(shù)據(jù)表中記錄的行數(shù),包含NULL值的行。COUNT([DISTINCT|ALL]<列名>)返回指定列中的所有非空值的記錄行數(shù)。5.2聚合函數(shù)查詢【例5-19】在course表中,查詢PreCourseID列的行數(shù),分別查詢包含NULL行和不包含NULL的行的行數(shù)。SELECTCOUNT(*)AS'行數(shù)',COUNT(PreCourseID)FROMcourse;5.2聚合函數(shù)查詢【例5-20】查詢student表中2022級計算機學院的學生的總數(shù)。SELECTCOUNT(*)FROMstudentWHERESUBSTRING(StudentID,1,6)='202263';5.2聚合函數(shù)查詢【例5-21】查詢selectcourse表中選修了課程的學生總?cè)藬?shù)。一名學生可以選修多門課程,在selectcourse表中對應多條記錄,為避免重復計算學生人數(shù),在COUNT()函數(shù)中使用DISTINCT關鍵字。SELECTCOUNT(DISTINCTStudentID)FROMselectcourse;5.2聚合函數(shù)查詢2.SUM()函數(shù)和AVG()函數(shù)SUM([DISTINCT|ALL]<列名>)返回指定列中的所有非空值的和。AVG([DISTINCT|ALL]<列名>)返回指定列中的所有非空值的平均值。5.2聚合函數(shù)查詢【例5-22】在selectcourse表中,查詢學生的總成績和平均成績。SELECTSUM(Score)總分,AVG(Score)平均分,SUM(Score)/COUNT(*)平均分數(shù)

FROMselectcourse;5.2聚合函數(shù)查詢3.MAX()函數(shù)和MIN()函數(shù)MAX([DISTINCT|ALL]<列名>) MIN([DISTINCT|ALL]<列名>)【例5-23】查詢selectcourse表中,求課程編號CourseID為630575的學生最高分、最低分、最高分與最高分之差、平均分。SELECTMAX(Score)最高分,MIN(Score)最低分,MAX(Score)-MIN(Score)分數(shù)差,AVG(Score)平均分FROMselectcourseWHERECourseID='630575';5.2聚合函數(shù)查詢5.2.2分組聚合查詢[GROUPBY分組表達式1,分組表達式2,…][HAVING條件表達式][WITHROLLUP](1)按單列分組【例5-24】在學生表student中,按照Sex單列分組,查詢學生信息。SELECTSex性別,COUNT(*)人數(shù)FROMstudentGROUPBYSex;5.2聚合函數(shù)查詢【例5-25】在成績表selectcourse中,統(tǒng)計每位學生的選課門數(shù)、最高分、最低分和平均分。SELECTstudentID,count(*)選課門數(shù),MAX(Score)最高分,MIN(Score)最低分,avg(Score)平均分

FROMselectcourseGROUPBYStudentID;5.2聚合函數(shù)查詢【例5-26】在selectcourse表中,先按照CourseID分組,再按照StudentID分組。SELECTCourseID,StudentID,COUNT(CourseID),AVG(Score)FROMselectcourseGROUPBYCourseID,StudentID;5.2聚合函數(shù)查詢2.HAVING子句【例5-27】在selectcourse表中,查詢平均分80以上的每位學生的選課門數(shù)、最高分、最低分和平均分。SELECTStudentID學號,COUNT(*)選課門數(shù),MAX(Score)最高分,MIN(Score)最低分,AVG(Score)平均分

FROMselectcourseWHEREScore>=60GROUPBYStudentIDHAVINGAVG(Score)>=80;5.2聚合函數(shù)查詢3.GROUPBY子句與WITHROLLUP【例5-28】在selectcourse表中,查詢每一門課的平均分數(shù)和所有課的平均分數(shù)。SELECTCourseID課程號,AVG(Score)每門課程的平均分FROMselectcourseGROUPBYCourseIDWITHROLLUP;5.2聚合函數(shù)查詢交叉連接內(nèi)連接外連接連接子句的語法格式如下:FROMtb_name1連接類型tb_name2[連接類型tb_name3[…]][ON連接條件]5.3多表連接查詢5.3.1交叉連接SELECT*FROMtb_name1CROSSJOINtb_name2;或SELECT*FROMtb_name1,tb_name2;【例5-29】將班級表class和院系表department進行交叉連接。SELECT*FROMclassCROSSJOINdepartment;5.3多表連接查詢5.3多表連接查詢5.3.2內(nèi)連接SELECTselection_list1,selection_list2,…,selection_listnFROMtb_name1INNERJOINtb_name2ON連接條件

[WHERE過濾條件];[表名1.]列名1比較運算符[表名2.]列名2表名[AS]表別名5.3多表連接查詢1.等值連接SELECTselection_list1,selection_list2,…,selection_listnFROMtb_name1INNERJOINtb_name2ONtb_name1.column_name1=tb_name2.column_name2[WHERE過濾條件];5.3多表連接查詢【例5-30】查詢選修課程號為630572的學生的學號、姓名和成績。本例中要求查詢的列分別在student表和selectcourse表中,通過StudentID列使用內(nèi)連接方式連接兩個表,找出選修課程號為630572的行。SELECTstudent.StudentID,StudentName,ScoreFROMstudentINNERJOINselectcourseONstudent.StudentID=selectcourse.StudentIDWHEREselectcourse.CourseID='630572';5.3多表連接查詢【例5-31】查詢選修了課程名稱為“數(shù)據(jù)結構”的學號、姓名和課程號、課程名、成績的學生。SELECTstudent.StudentID,StudentName,course.CourseID,CourseName,ScoreFROMstudentINNERJOINcourseINNERJOINselectcourseONstudent.StudentID=selectcourse.StudentIDANDcourse.CourseID=selectcourse.CourseIDWHERECourseName='數(shù)據(jù)結構';5.3多表連接查詢2.不等值連接【例5-32】對student表和selectcourse表做不等值連接,返回的結果集限制在5行以內(nèi)。SELECT*FROMstudentINNERJOINselectcourseONstudent.StudentID!=selectcourse.StudentID;5.3多表連接查詢3.自然連接(NATURALJOIN)SELECTselection_list1,selection_list2,…,selection_listnFROMtb_name1NATURALJOINtb_name2;【例5-33】對student表和selectcourse表做自然連接。SELECT*FROMstudentNATURALJOINselectcourse;5.3多表連接查詢SELECTStudentID,StudentName,CourseID,ScoreFROMstudentNATURALJOINselectcourse;5.3多表連接查詢SELECTStudentID,StudentName,CourseID,CourseName,ScoreFROMstudentNATURALJOINselectcourseNATURALJOINcourse;5.3多表連接查詢4.自連接【例5-34】查詢與“算法”這門課學分相同的課程信息。SELECTc1.*FROMcourseASc1JOINcourseASc2ONc1.Credit=c2.CreditWHEREc2.CourseName='算法';5.3多表連接查詢SELECTc1.*FROMcourseASc1,courseASc2WHEREc1.Credit=c2.CreditANDc2.CourseName='算法';SELECTc1.*FROMcourseASc1JOINcourseASc2ONc1.Credit=c2.CreditWHEREc2.CourseName='算法'ANDc1.CourseName!='算法';5.3多表連接查詢5.3.3外連接SELECTselection_list1,selection_list2,…,selection_listnFROMtb_name1LEFT|RIGHTJOINtb_name2ONtb_name1.column_name1=tb_name2.column_name25.3多表連接查詢1.左連接(LEFTJOIN)【例5-35】查詢所有學生及其選修課程的情況,包括沒有選修課程的學生,要求顯示學號、姓名、班號、選修的課程號和成績,使用左外連接。INSERTINTOstudent(StudentID,StudentName,Sex,Birthday,Address,ClassID)VALUES('202260010321','于得水','男','2003-10-22','山西','2022600103');SELECTa.StudentID,StudentName,ClassID,CourseID,ScoreFROMstudentASaLEFTJOINselectcourseASbONa.StudentID=b.StudentID;5.3多表連接查詢5.3多表連接查詢2.右連接(RIGHTJOIN)【例5-36】查詢所有學生及其選修課程的情況,包括沒有選修課程的學生,要求顯示學號、姓名、班號、選修的課程號和成績,使用右外連接。SELECTa.StudentID,StudentName,ClassID,CourseID,ScoreFROMstudentASaRIGHTJOINselectcourseASbONa.StudentID=b.StudentID;5.3多表連接查詢5.4.1子查詢的執(zhí)行過程和類型1.子查詢的執(zhí)行過程2.子查詢的類型3.子查詢中的常用運算4.使用子查詢時的注意事項5.4子查詢5.4.2選擇列表中的子查詢【例5-37】利用子查詢顯示學號為202263050133的學生的平均成績、考試次數(shù),同時顯示學號、姓名等信息。SELECTStudentID,StudentName,(SELECTAVG(Score)FROMselectcourseWHEREStudentID='202263050133')平均成績,(SELECTCOUNT(StudentID)FROMselectcourseWHEREStudentID='202263050133')考試次數(shù)

FROMstudentWHEREStudentID='202263050133';5.4子查詢5.4.3子查詢生成派生表【例5-38】查詢課程號為600131,成績高于60分的學生的學號、課程號和成績。SELECTT.StudentID,T.CourseID,T.ScoreFROM(SELECT*FROMselectcourseWHEREScore>60)AST WHERECourseID='600131';5.4子查詢5.4.4WHERE子句中的子查詢1.子查詢與比較運算符組成條件【例5-39】在成績表selectcourse中,查詢低于平均分的學生。SELECTStudentID,CourseID,ScoreFROMselectcourseWHEREScore<(SELECTAVG(Score)FROMselectcourse);SELECTAVG(Score)FROMselectcourse;SELECTStudentID,CourseID,ScoreFROMselectcourseWHEREScore<75.57143;5.4子查詢2.使用帶IN關鍵字的子查詢【例5-40】查詢考試成績低于60分的學生的學號、姓名等信息。SELECT*FROMstudentWHEREStudentIDIN(SELECTStudentIDFROMselectcourseWHEREScore<60);SELECTStudentIDFROMselectcourseWHEREScore<60;5.4子查詢3.使用帶EXISTS關鍵字的子查詢【例5-31】如果存在班號“2022600103”的班,則查詢該班的所有學生。SELECT*FROMstudentWHEREEXISTS(SELECT*FROMclassWHEREClassID='2022600103')ANDClassID='2022600103';5.4子查詢4.使用ANY、SOME或ALL的子查詢(1)使用ANY(或SOME)的子查詢<表達式>{=|<>|!=|>|>=|<|<=|!>|!<}ANY(子查詢)【例5-42】查詢男生中比某個女生出生年份晚的學生姓名和出生年份。SELECTDISTINCTYEAR(Birthday)FROMstudentWHERESex='女';5.4子查詢SELECTStudentName,YEAR(Birthday)FROMstudentWHERESex='男'ANDYEAR(Birthday)>ANY(SELECTDISTINCTYEAR(Birthday)FROMstudentWHERESex='女');5.4子查詢(2)使用ALL的子查詢【例5-43】查詢男生中比所有女生出生年份晚的學生姓名和出生年份。SELECTStudentName,YEAR(Birthday)FROMstudentWHERESex='男'ANDYEAR(Birthday)>ALL(SELECTDISTINCTYEAR(Birthday)FROMstudentWHERESex='女');5.4子查詢(3)ANY或ALL與聚合函數(shù)的對應關系5.4子查詢【例5-44】查詢男生中比某個女生出生年份晚的學生姓名和出生年份。SELECTStudentName,YEAR(Birthday)FROMstudentWHERESex='男'ANDYEAR(Birthday)>(SELECTMIN(YEAR(Birthday))FROMstudentWHERESex='女');5.4子查詢5.4.5用子查詢插入、修改或刪除記錄1.用子查詢插入記錄INSERTINTO表名[(列名列表1)](SELECT列名列表2FROM表名);【例5-45】把student表中2002年出生的學生記錄添加到student2002表中。INSERTINTOstudent2002(StudentID,StudentName,Sex,Birthday,Address,ClassID)(SELECT*FROMstudentWHEREYEAR(Birthday)='2002');SELECT*FROMstudent2002;5.4子查詢2.用子查詢修改記錄【例5-46】學號為202240010215的學生轉(zhuǎn)班為“數(shù)學2022-3班”,在student2002表中,修改該生的班級號。SELECTDISTINCTClassIDFROMclassWHEREClassName='數(shù)學2022-3班'LIMIT1;UPDATEstudent2002SETClassID=(SELECTDISTINCTClassIDFROMclassWHEREClassName='數(shù)學2022-3班'LIMIT1)WHEREStudentID='202240010215';5.4子查詢3.用子查詢刪除記錄【例5-47】在student2002表中,刪除“數(shù)學2022-3班”的所有記錄。DELETEFROMstudent2002WHEREClassID=(SELECTDISTINCTClassIDFROMclassWHEREClassName='數(shù)學2022-3班'LIMIT1);5.4子查詢祝賀你完成了一章《MySQL數(shù)據(jù)庫應用教程》劉瑞新主編配套資源第6章索引《MySQL數(shù)據(jù)庫應用教程》劉瑞新主編配套資源目錄第6章索引6.1索引概述6.2查看索引6.3創(chuàng)建索引6.4使用索引6.5刪除索引6.1.1表中數(shù)據(jù)的搜索方式1.全表搜索方式2.索引搜索方式6.1索引概述6.1.2索引的概念6.1.3索引的類型1.按數(shù)據(jù)結構分類(1)B樹索引(2)Hash索引6.1索引概述2.按邏輯區(qū)分類(1)普通索引(INDEX)(2)唯一(UNIQUE)索引(3)主鍵(PRIMARYKEY)索引(4)全文(FULLTEXT)索引(5)空間(SPATIAL)索引6.1索引概述3.按使用時分類(1)單列索引(2)多列索引6.1索引概述4.聚簇索引和非聚簇索引(1)聚簇索引(2)非聚簇索引6.1索引概述使用SHOWINDEX語句查看表上建立的索引名、索引類型及相關參數(shù),其語法格式為:SHOWINDEXFROMtb_name[FROMdb_name];SHOWINDEXFROM[db_name.]tb_name;6.2查看索引【例6-1】在studentinfo數(shù)據(jù)庫中,查看selectcourse表上建立的索引。USEstudentinfo;SHOWINDEXFROMselectcourse;6.2查看索引6.3.1創(chuàng)建索引的語句1.使用CREATETABLE語句創(chuàng)建索引CREATE[TEMPORARY]TABLE[db_name.]tb_name(column_namedata_type[列級完整性約束條件,][…,][表級完整性約束條件,][CONSTRAINTindex_name][UNIQUE|FULLTEXT][INDEX][index_name](index_column));6.3創(chuàng)建索引index_column索引列的語法格式如下:index_column_name[(length)][ASC|DESC]6.3創(chuàng)建索引2.使用CREATEINDEX語句創(chuàng)建索引CREATE[UNIQUE|FULLTEXT][INDEX]index_nameONtb_name(index_column_name[(length)][ASC|DESC]);6.3創(chuàng)建索引3.使用ALTERTABLE語句創(chuàng)建索引ALTERTABLEtb_nameADD[UNIQUE|FULLTEXT][INDEX][index_name](index_column_name[(length)][ASC|DESC]);4.自動創(chuàng)建索引6.3創(chuàng)建索引6.3.2創(chuàng)建索引實例1.沒有索引【例6-2】在studentinfo數(shù)據(jù)庫中,重新創(chuàng)建系表department,列定義有系編號DepartmentID、CHAR(2);系名稱DepartmentName、VARCHAR(10);系電話Telephone、VARCHAR(20)。DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(DepartmentIDCHAR(2),DepartmentNameVARCHAR(10),TelephoneCHAR(20));SHOWINDEXFROMdepartment;6.3創(chuàng)建索引2.普通索引【例6-3】重新創(chuàng)建department表,在定義表的同時為DepartmentID列定義普通索引,并按升序排列;創(chuàng)建表后為該表的DepartmentName列添加普通索引。DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(DepartmentIDCHAR(2),DepartmentNameVARCHAR(10),TelephoneCHAR(20),INDEXindex_id(IDASC));6.3創(chuàng)建索引CREATEINDEXindex_nameONdepartment(DepartmentName);SHOWINDEXFROMdepartment;6.3創(chuàng)建索引3.列值前綴普通索引【例6-4】在department表中,為DepartmentName列添加前3個字符的列值前綴普通索引;為Telephone列添加前14個字符的列值前綴普通索引。CREATEINDEXindex_name3ONdepartment(DepartmentName(3)DESC);ALTERTABLEdepartmentADDINDEXindex_telephone14(Telephone(14));SHOWINDEXFROMdepartment;6.3創(chuàng)建索引4.唯一索引【例6-5】重新創(chuàng)建department表,定義表的Telephone列是唯一鍵約束,在表的DepartmentName列上創(chuàng)建名為name的唯一索引。DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(DepartmentIDCHAR(2),DepartmentNameVARCHAR(10),TelephoneCHAR(20)UNIQUE,UNIQUEINDEXname(DepartmentName));6.3創(chuàng)建索引SHOWINDEXFROMdepartment;6.3創(chuàng)建索引【例6-6】使用CREATEINDEX在表department的DepartmentID列上創(chuàng)建唯一索引。CREATEUNIQUEINDEXdepartmentIDONdepartment(DepartmentID);6.3創(chuàng)建索引【例6-7】使用ALTERTABLE語句在表department的電話列Telephone上創(chuàng)建唯一索引。ALTERTABLEdepartmentADDUNIQUEINDEX(TelephoneDESC);6.3創(chuàng)建索引5.多列索引【例6-8】創(chuàng)建teacher表,列有TeacherID、CHAR(6);TeacherName、CHAR(20);Age、INT;DepartmentName、VARCHAR(10),DepartmentID、CHAR(2)。CREATETABLEteacher(TeacherIDCHAR(6),TeacherNameCHAR(20),AgeINT,DepartmentNameVARCHAR(10),DepartmentIDCHAR(2),INDEXname(DepartmentNameASC,TeacherNameDESC));6.3創(chuàng)建索引SHOWINDEXFROMteacher;CREATEINDEXname2ONteacher(DepartmentName,TeacherName);6.3創(chuàng)建索引6.全文索引【例6-9】在teacher表中添加簡歷列Note、VARCHAR(50),并指定Note列為全文索引。ALTERTABLEteacherADDCOLUMNNoteVARCHAR(50),ADDFULLTEXTINDEXindex_note(Note);6.3創(chuàng)建索引7.主鍵索引和外鍵索引【例6-10】重新創(chuàng)建department表,在定義列時對DepartmentID列設置主鍵約束,對Telephone列設置唯一鍵,對DepartmentName列創(chuàng)建唯一索引。DROPTABLEIFEXISTSdepartment;CREATETABLEdepartment(DepartmentIDCHAR(2)PRIMARYKEY,#設置主鍵約束

DepartmentNameVARCHAR(10),TelephoneCHAR(20)UNIQUE,#設置唯一約束

UNIQUEINDEXname(DepartmentName)#創(chuàng)建唯一索引);6.3創(chuàng)建索引SHOWINDEXdepartment;6.3創(chuàng)建索引【例6-11】在teacher表中,給TeacherID列添加主鍵約束。ALTERTABLEteacherADDPRIMARYKEY(TeacherID);6.3創(chuàng)建索引【例6-12】重新創(chuàng)建teacher表,設置TeachertID列為主鍵約束,設置外鍵約束FK_teacher,通過外鍵DepartmentID列與department表建立外鍵關系。DROPTABLEIFEXISTSteacher;CREATETABLEteacher(TeacherIDCHAR(6),TeacherNameCHAR(20),AgeINT,DepartmentIDCHAR(2),CONSTRAINTPK_teacherPRIMARYKEY(TeacherID),

CONSTRAINTFK_teacherFOREIGNKEY(DepartmentID)REFERENCESdepartment(DepartmentID));6.3創(chuàng)建索引SHOWINDEXFROMteacher;6.3創(chuàng)建索引6.4.1EXPLAIN語句的使用1.EXPLAIN語句的語法EXPLAINSQL_statement;【例6-13】在studentinfo數(shù)據(jù)庫中,顯示student表的索引,然后用EXPLAIN語句執(zhí)行查詢,了解EXPLAIN運行的結果。SHOWINDEXFROMstudent;6.4使用索引6.4使用索引6.4使用索引6.4使用索引6.4使用索引2.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論