《數(shù)據(jù)庫系統(tǒng)與應(yīng)用技術(shù)》課件 第4章 MySQL數(shù)據(jù)操縱功能_第1頁
《數(shù)據(jù)庫系統(tǒng)與應(yīng)用技術(shù)》課件 第4章 MySQL數(shù)據(jù)操縱功能_第2頁
《數(shù)據(jù)庫系統(tǒng)與應(yīng)用技術(shù)》課件 第4章 MySQL數(shù)據(jù)操縱功能_第3頁
《數(shù)據(jù)庫系統(tǒng)與應(yīng)用技術(shù)》課件 第4章 MySQL數(shù)據(jù)操縱功能_第4頁
《數(shù)據(jù)庫系統(tǒng)與應(yīng)用技術(shù)》課件 第4章 MySQL數(shù)據(jù)操縱功能_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

MySQL數(shù)據(jù)操縱功能匯報(bào)人:Kimi

AI時(shí)間:2025/01/01目錄MySQL數(shù)據(jù)操縱功能完整知識(shí)體系01數(shù)據(jù)更新操作INSERT、UPDATE、DELETE語句詳解,包含完整數(shù)據(jù)插入、部分?jǐn)?shù)據(jù)插入、批量插入、REPLACE機(jī)制、數(shù)據(jù)修改與刪除的多種方式及安全設(shè)置10頁02簡單查詢SELECT完整語法、條件查詢、范圍查詢、模糊查詢、排序、聚合函數(shù)、GROUPBY分組、HAVING過濾等核心查詢技術(shù)10頁03多表查詢內(nèi)連接、外連接、交叉連接、自連接、聯(lián)合查詢UNION、三表及以上連接、視圖應(yīng)用等高級(jí)多表數(shù)據(jù)檢索技術(shù)7頁04嵌套查詢子查詢基礎(chǔ)、比較運(yùn)算符子查詢、IN子查詢、ANY/ALL子查詢、EXISTS子查詢、子查詢實(shí)現(xiàn)批量增刪改操作6頁01數(shù)據(jù)更新操作01MMS醫(yī)療信息管理系統(tǒng)數(shù)據(jù)庫本章使用的核心數(shù)據(jù)庫表結(jié)構(gòu)及示例數(shù)據(jù)Patients患者表字段名類型說明PatientIDVARCHAR(10)患者編號(hào)(主鍵)PatientNameVARCHAR(50)患者姓名DateOfBirthDATE出生日期GenderCHAR(1)性別(M/F)PhoneNumberVARCHAR(15)聯(lián)系方式AddressVARCHAR(100)地址示例:p001,張文文,1990-01-01,F建設(shè)路1號(hào)Doctors醫(yī)生表字段名類型說明DoctorIDVARCHAR(10)醫(yī)生編號(hào)(主鍵)DoctorNameVARCHAR(50)醫(yī)生姓名GenderCHAR(1)性別(M/F)SpecializationVARCHAR(50)科室WorkingYearsINT工作年限示例:d001,李明,M,五官科,15Appointments預(yù)約表字段名類型說明AppointmentIDINT預(yù)約編號(hào)(主鍵)PatientIDVARCHAR(10)患者編號(hào)(外鍵)DoctorIDVARCHAR(10)醫(yī)生編號(hào)(外鍵)ConditionsVARCHAR(100)健康狀況AppointmentDateDATE預(yù)約日期AppointmentTimeTIME預(yù)約時(shí)間示例:1,p001,d001,聽覺受限,2024-08-01,10:00:00表關(guān)系說明Patients與Appointments通過PatientID關(guān)聯(lián)(1:N)Doctors與Appointments通過DoctorID關(guān)聯(lián)(1:N)通過Appointments實(shí)現(xiàn)多對(duì)多關(guān)系插入數(shù)據(jù):INSERT語句基本語法INSERTINTO語句基本格式與核心原則基本語法格式INSERTINTO[(column1,column2,...)]VALUES(value1,value2,...);tb_name:指定要插入數(shù)據(jù)的表名column1,column2:指定要插入數(shù)據(jù)的列名(可選)value1,value2:對(duì)應(yīng)的插入數(shù)據(jù)值核心原則1列名與值數(shù)量必須一致指定n個(gè)列名,必須提供n個(gè)對(duì)應(yīng)的值2數(shù)據(jù)類型必須匹配值的數(shù)據(jù)類型需與列定義的數(shù)據(jù)類型一致3字符串必須用引號(hào)單引號(hào)或雙引號(hào)包裹字符型、日期型數(shù)據(jù)4省略列名需為所有列提供值按表定義時(shí)的列順序依次提供所有列值方式一:省略列名INSERTINTOtb_nameVALUES(value1,value2,...);必須為表中所有列依次提供值,值的順序與表定義時(shí)列的順序一致方式二:指定列名INSERTINTOtb_name(col1,col2,...)VALUES(value1,value2,...);只向指定列插入數(shù)據(jù),未指定列使用默認(rèn)值或允許為NULL推薦:指定列名的方式更靈活,可只插入部分?jǐn)?shù)據(jù),其他列自動(dòng)使用默認(rèn)值或NULL插入完整與部分?jǐn)?shù)據(jù)記錄通過Patients表實(shí)例演示兩種插入方式1插入完整數(shù)據(jù)記錄向Patients表插入一條完整記錄(6個(gè)字段):INSERTINTOPatientsVALUES('p001','張文文','1990-01-01','F',,'建設(shè)路1號(hào)');要點(diǎn):?未指定列名,必須為所有6列提供值?字符串值用單引號(hào)包裹?日期格式:YYYY-MM-DD?值順序與表定義列順序一致執(zhí)行后可通過SELECT*FROMPatients;查看插入結(jié)果2插入部分?jǐn)?shù)據(jù)記錄向Patients表插入部分?jǐn)?shù)據(jù)(Address暫缺):INSERTINTOPatients(PatientID,PatientName,DateOfBirth,Gender,PhoneNumber)VALUES('p002','李思思','1992-05-15','F',);要點(diǎn):?明確指定要插入的5個(gè)列名?未指定的Address列使用默認(rèn)值?若Address允許NULL,則自動(dòng)為NULL?后續(xù)可通過UPDATE補(bǔ)充缺失數(shù)據(jù)--后續(xù)補(bǔ)充Address數(shù)據(jù)UPDATEPatientsSETAddress='文明路10號(hào)'WHEREPatientID='p002';插入后的Patients表示例數(shù)據(jù)PatientIDPatientNameDateOfBirthGenderPhoneNumberAddressp001張文文1990-01-01設(shè)路1號(hào)p002李思思1992-05-15ULL完整插入:所有字段有值|部分插入:Address為NULL批量插入與REPLACE插入高效插入多條記錄及處理主鍵沖突批量插入多條記錄使用單條INSERT語句插入多條記錄,值列表之間用逗號(hào)分隔INSERTINTOPatients(PatientID,PatientName,DateOfBirth,Gender,PhoneNumber,Address)VALUES('p003','王明杰','1994-08-05','M',,'創(chuàng)意路8號(hào)'),('p004','吳英俊','1993-08-10','M',,'青年路9號(hào)'),('p005','陳楠楠','1992-09-14','F',,'愛國路5號(hào)');優(yōu)勢:?比逐條插入效率更高,減少客戶端與數(shù)據(jù)庫交互次數(shù)?一次網(wǎng)絡(luò)往返插入多條數(shù)據(jù)?適合批量初始化數(shù)據(jù)或數(shù)據(jù)遷移場景REPLACE語句插入當(dāng)存在主鍵沖突或唯一索引沖突時(shí),REPLACE先刪除舊記錄,再插入新記錄--創(chuàng)建表并插入數(shù)據(jù)CREATETABLEPatients1LIKEPatients;INSERTINTOPatients1SELECT*FROMPatients;--REPLACE插入(假設(shè)p004已存在)REPLACEINTOPatients1(PatientID,PatientName,DateOfBirth,Gender,PhoneNumber,Address)VALUES('p004','吳英俊','1993-08-10','M',,'青年路9號(hào)');注意:REPLACE實(shí)質(zhì)是DELETE+INSERT組合操作,會(huì)刪除舊記錄后插入新記錄,可能導(dǎo)致自增ID不連續(xù)INSERTvsREPLACE對(duì)比INSERT?無沖突:直接插入新記錄?有沖突:報(bào)錯(cuò)(需處理異常)?保留原有自增IDREPLACE?無沖突:直接插入新記錄?有沖突:刪除舊記錄,插入新記錄?可能導(dǎo)致自增ID變化應(yīng)用場景建議:?INSERT:常規(guī)數(shù)據(jù)插入,避免沖突?REPLACE:需要覆蓋舊數(shù)據(jù)時(shí)使用INSERTINTO...SELECT復(fù)制插入通過查詢結(jié)果集快速插入目標(biāo)表基本語法格式INSERT[INTO][(col1,col2,...)]SELECTcol1,col2,...FROM[WHEREcondition];tb_name1:待插入數(shù)據(jù)的目標(biāo)表tb_name2:數(shù)據(jù)來源表SELECT:返回要插入的結(jié)果集關(guān)鍵要求1列數(shù)必須相同SELECT查詢的列數(shù)必須與目標(biāo)表列數(shù)一致2數(shù)據(jù)類型必須匹配對(duì)應(yīng)列的數(shù)據(jù)類型必須兼容或可轉(zhuǎn)換3可指定列名目標(biāo)表和查詢均可指定列名,實(shí)現(xiàn)部分列復(fù)制應(yīng)用場景:數(shù)據(jù)備份、數(shù)據(jù)遷移、創(chuàng)建測試數(shù)據(jù)、快速復(fù)制表結(jié)構(gòu)實(shí)戰(zhàn)案例:復(fù)制女性醫(yī)生數(shù)據(jù)步驟1:創(chuàng)建新表(復(fù)制原表結(jié)構(gòu))CREATETABLEDoctors1LIKEDoctors;步驟2:復(fù)制女性醫(yī)生數(shù)據(jù)INSERTINTODoctors1SELECT*FROMDoctorsWHEREGender='F';步驟3:驗(yàn)證插入結(jié)果SELECT*FROMDoctors1;插入結(jié)果:DoctorIDDoctorNameGenderSpecializationWorkingYearsd003李思美F眼科12d004陳艾明F中醫(yī)護(hù)理10d005吳晴晴F骨科13修改數(shù)據(jù):UPDATE語句詳解UPDATE語句結(jié)構(gòu)與核心要點(diǎn)基本語法格式UPDATE

SETcolumn1=value1[,column2=value2,...][WHERE];tb_name:要修改的表名SET:指定要修改的列及其新值WHERE:限定要修改的記錄范圍(可選)SQL_SAFE_UPDATES安全設(shè)置MySQLWorkbench默認(rèn)開啟安全更新模式,防止批量更新或刪除操作--查看當(dāng)前設(shè)置SHOWVARIABLESLIKE'SQL_SAFE_UPDATES';--禁用安全更新模式(當(dāng)前會(huì)話)SETSQL_SAFE_UPDATES=0;--啟用安全更新模式SETSQL_SAFE_UPDATES=1;安全模式下UPDATE必須滿足:?使用WHERE子句,且條件中包含KEY列?或使用LIMIT限制更新行數(shù)?或同時(shí)使用WHERE和LIMIT1更新特定記錄使用WHERE子句限定要修改的記錄--將\"李思思\"的出生日期修改UPDATEPatientsSETDateOfBirth='1991-05-15'WHEREPatientName='李思思';結(jié)果:只修改PatientName='李思思'的記錄,其他記錄不受影響2更新所有記錄省略WHERE子句,修改表中所有記錄--將所有醫(yī)生工作年限增加2年UPDATEDoctorsSETWorkingYears=WorkingYears+2;注意:無WHERE子句將修改表中所有記錄,操作前務(wù)必確認(rèn)結(jié)果:Doctors表中所有記錄的工作年限都增加2年UPDATE實(shí)戰(zhàn)案例修改特定記錄與所有記錄的實(shí)際應(yīng)用案例1:修改特定記錄場景:將患者"李思思"的出生日期從1992-05-15修改為1991-05-15--修改前查詢SELECTPatientName,DateOfBirthFROMPatientsWHEREPatientName='李思思';--結(jié)果:李思思,1992-05-15--執(zhí)行修改UPDATEPatientsSETDateOfBirth='1991-05-15'WHEREPatientName='李思思';--修改后查詢SELECTPatientName,DateOfBirthFROMPatientsWHEREPatientName='李思思';--結(jié)果:李思思,1991-05-15修改前后對(duì)比:狀態(tài)PatientNameDateOfBirth修改前李思思1992-05-15修改后李思思1991-05-15←已更新影響行數(shù):1行(只修改了滿足WHERE條件的記錄)案例2:修改所有記錄場景:將所有醫(yī)生工作年限增加2年(作為統(tǒng)一調(diào)薪依據(jù))--修改前查詢SELECTDoctorName,WorkingYearsFROMDoctorsORDERBYDoctorID;--執(zhí)行修改(無WHERE子句)UPDATEDoctorsSETWorkingYears=WorkingYears+2;--修改后查詢SELECTDoctorName,WorkingYearsFROMDoctorsORDERBYDoctorID;修改前后對(duì)比:DoctorName修改前修改后變化李明1517+2張浩2022+2李思美1214+2陳艾明1012+2吳晴晴1315+2影響行數(shù):5行(表中所有記錄都被修改)刪除數(shù)據(jù):DELETE語句三種方式DELETE、DROP、TRUNCATE的區(qū)別與應(yīng)用場景方式1:DELETEDELETEFROM[WHEREcondition];特點(diǎn):?刪除表中記錄,保留表結(jié)構(gòu)?支持WHERE條件,可刪除指定記錄?支持事務(wù)回滾(ROLLBACK)?屬于DML(數(shù)據(jù)操縱語言)示例:刪除指定記錄刪除所有記錄(省略WHERE)方式2:DROPDROPTABLE;特點(diǎn):?徹底刪除表(結(jié)構(gòu)+數(shù)據(jù))?刪除后表不復(fù)存在?不可回滾,操作需謹(jǐn)慎?屬于DDL(數(shù)據(jù)定義語言)警告:DROP操作不可恢復(fù),會(huì)刪除表結(jié)構(gòu)、數(shù)據(jù)、索引、約束等所有信息方式3:TRUNCATETRUNCATE[TABLE];特點(diǎn):?快速清空表數(shù)據(jù),保留表結(jié)構(gòu)?不可指定WHERE條件?不可回滾,操作需謹(jǐn)慎?屬于DDL(數(shù)據(jù)定義語言)優(yōu)勢:執(zhí)行速度最快,重置自增計(jì)數(shù)器,適合清空大表三種刪除方式全方位對(duì)比比較維度DELETEDROPTRUNCATE刪除內(nèi)容只刪除記錄刪除表結(jié)構(gòu)+數(shù)據(jù)只刪除記錄表結(jié)構(gòu)保留刪除保留WHERE條件支持不支持不支持事務(wù)回滾支持不支持不支持執(zhí)行速度慢(逐行刪除)中等最快自增計(jì)數(shù)器不重置刪除重置為初始值SQL分類DMLDDLDDLDELETE實(shí)戰(zhàn)應(yīng)用刪除指定記錄與所有記錄的實(shí)際操作案例1:刪除指定記錄場景:刪除預(yù)約編號(hào)為4的記錄(患者吳英俊的預(yù)約)--刪除前查詢SELECT*FROMAppointmentsWHEREAppointmentID=4;--執(zhí)行刪除DELETEFROMAppointmentsWHEREAppointmentID=4;--刪除后查詢SELECT*FROMAppointmentsWHEREAppointmentID=4;--結(jié)果:空集刪除前后對(duì)比:AppointmentIDPatientIDDoctorIDConditions1p001d001聽覺受限2p002d003近視治療3p003d004康復(fù)治療4p004d005運(yùn)動(dòng)扭傷刪除AppointmentID=4的記錄后,表中剩余3條記錄案例2:刪除所有記錄場景:清空Appointments表所有數(shù)據(jù)(保留表結(jié)構(gòu)用于后續(xù)操作)--刪除前查詢SELECTCOUNT(*)FROMAppointments;--結(jié)果:3條記錄--方式1:DELETE(推薦,可回滾)DELETEFROMAppointments;--方式2:TRUNCATE(速度快,不可回滾)TRUNCATEAppointments;--刪除后查詢SELECTCOUNT(*)FROMAppointments;--結(jié)果:0條記錄DELETE方式?逐行刪除,支持事務(wù)回滾?保留自增計(jì)數(shù)器當(dāng)前值?適合需要恢復(fù)的場景TRUNCATE方式?快速清空,不可回滾?重置自增計(jì)數(shù)器為初始值?適合清空大表數(shù)據(jù)安全建議?執(zhí)行DELETE前先用SELECT驗(yàn)證WHERE條件?重要數(shù)據(jù)刪除前做好備份?生產(chǎn)環(huán)境優(yōu)先使用DELETE(可回滾)02簡單查詢02SELECT語句完整語法結(jié)構(gòu)7大子句及其執(zhí)行順序詳解SELECT完整語法SELECT[ALL|DISTINCT|DISTINCTROW]columns...FROM[,]...[WHERE][GROUPBY{grouping_columns|expression}][HAVING][ORDERBY[ASC|DESC]][LIMIT{[offset,]row_count|row_countOFFSEToffset}];1SELECT子句指定要查詢的列或表達(dá)式,ALL返回重復(fù)行,DISTINCT消除重復(fù)行,*表示所有列2FROM子句指定要查詢的數(shù)據(jù)源表、視圖等,可指定多個(gè)表用逗號(hào)分隔3WHERE子句可選項(xiàng),按指定條件過濾記錄,只有滿足條件的記錄才會(huì)出現(xiàn)在結(jié)果集中子句執(zhí)行順序1FROM確定數(shù)據(jù)源2WHERE過濾記錄3GROUPBY分組聚合4HAVING過濾分組5SELECT查詢列6ORDERBY排序結(jié)果7LIMIT限制行數(shù)重要說明?所有可選子句必須按照語法順序使用?WHERE在GROUPBY之前,HAVING在GROUPBY之后?LIMIT必須是SELECT語句的最后一個(gè)子句?理解執(zhí)行順序有助于編寫高效查詢不帶條件的單表查詢SELECT子句的四種基礎(chǔ)查詢方式1查詢所有列使用*通配符查詢表中所有列--查詢Patients表所有記錄USEMMS;SELECT*FROMPatients;結(jié)果集:PatientIDPatientNameGenderPhoneNumberp001張文文002李思思003王明杰004吳英俊005陳楠楠明:結(jié)果集中各列順序與表定義時(shí)的順序相同2查詢指定列列出需要在結(jié)果集中顯示的列名--查詢患者姓名、電話、地址SELECTPatientName,PhoneNumber,AddressFROMPatients;結(jié)果集:PatientNamePhoneNumberAddress張文設(shè)路1號(hào)李思明路10號(hào)王明意路8號(hào)吳英年路9號(hào)說明:結(jié)果集中各列依照指定的列名次序顯示不帶條件的單表查詢SELECT子句的四種基礎(chǔ)查詢方式3查詢表達(dá)式與別名查詢表達(dá)式的值,并為表達(dá)式定義別名--查詢患者姓名、性別、年齡(計(jì)算表達(dá)式)SELECTPatientName,Gender,YEAR(NOW())-YEAR(DateOfBirth)ASPatientAgeFROMPatients;結(jié)果集:PatientNameGenderPatientAge張文文F34李思思F32王明杰M30吳英俊M31說明:Age是計(jì)算列別名,表達(dá)式:YEAR(NOW())-YEAR(DateOfBirth)4消除重復(fù)記錄使用DISTINCT去除重復(fù)行--不使用DISTINCT(有重復(fù))SELECTGenderFROMPatients;--使用DISTINCT(無重復(fù))SELECTDISTINCTGenderFROMPatients;無DISTINCT:GenderFFMM有DISTINCT:GenderFM說明:DISTINCT消除結(jié)果集中的重復(fù)行,只保留唯一值WHERE條件查詢:比較與多條件WHERE子句6大條件類型及多條件連接WHERE子句常用條件類型查詢條件操作符/關(guān)鍵字比較查詢<,<=,=,>,>=,<>,!=,!>,!<范圍查詢BETWEENAND,NOTBETWEENAND集合查詢IN,NOTIN模糊查詢LIKE,NOTLIKE多條件查詢AND(&&),OR(||),NOT(!),XOR空值查詢ISNULL,ISNOTNULL重要說明:?<>與!=均表示不等于?!>表示不大于(與<=等價(jià))?!<表示不小于(與>=等價(jià))?字符型和日期型數(shù)據(jù)值必須放在引號(hào)中1比較查詢與AND多條件查詢6-8月出生的男性患者SELECTPatientID,PatientName,DateOfBirthFROMPatientsWHEREGender='M'AND(MONTH(DateOfBirth)>=6ANDMONTH(DateOfBirth)<=8);結(jié)果:王明杰(1994-08-05)2OR多條件查詢查詢1990年或1992年出生的患者SELECT*FROMPatientsWHEREYEAR(DateOfBirth)=1990ORYEAR(DateOfBirth)=1992;結(jié)果:?張文文(1990-01-01)?李思思(1992-05-15)?陳楠楠(1992-09-14)范圍查詢與集合查詢BETWEEN...AND與IN的使用方法范圍查詢:BETWEEN...AND語法:expression[NOT]BETWEENexp1ANDexp2;示例1:查詢工作年限10-12年的醫(yī)生SELECTDoctorName,WorkingYearsFROMDoctorsWHEREWorkingYearsBETWEEN10AND12;結(jié)果:李思美(12年)、陳艾明(10年)示例2:查詢工作年限不在10-12年的女醫(yī)生SELECTDoctorName,WorkingYearsFROMDoctorsWHEREGender='F'ANDWorkingYearsNOTBETWEEN10AND12;結(jié)果:吳晴晴(13年)注意:BETWEEN包含邊界值(exp1和exp2)集合查詢:IN語法:expression[NOT]IN(value1,value2,...);示例1:查詢6-8月出生的男性患者SELECTPatientID,PatientName,DateOfBirthFROMPatientsWHEREGender='M'ANDMONTH(DateOfBirth)IN(6,7,8);結(jié)果:王明杰(1994-08-05)對(duì)比:BETWEENvsIN--BETWEENWHEREWorkingYearsBETWEEN10AND12--范圍:10,11,12--INWHEREWorkingYearsIN(10,12)--集合:10,12應(yīng)用場景:?離散值查詢(如特定科室、特定狀態(tài))?子查詢結(jié)果匹配(后續(xù)嵌套查詢章節(jié))?多選條件(如查詢多個(gè)特定編號(hào)的醫(yī)生)模糊查詢與空值判斷LIKE通配符與ISNULL的使用模糊查詢:LIKE語法:expression[NOT]LIKE'pattern'[ESCAPE'char'];通配符說明:通配符功能%表示任意多個(gè)字符_表示任意一個(gè)字符--查詢姓\"李\"且名字是三個(gè)字、姓\"陳\"的醫(yī)生SELECT*FROMDoctorsWHEREDoctorNameLIKE'李__'ORDoctorNameLIKE'陳%';結(jié)果:?李思美(李__匹配三個(gè)字)?陳艾明(陳%匹配任意長度)LIKE模式匹配示例模式匹配說明'李%'以"李"開頭的任意字符串'%李%'包含"李"的任意字符串'李_'以"李"開頭且共2個(gè)字符'李__'以"李"開頭且共3個(gè)字符'%李'以"李"結(jié)尾的任意字符串'\%李'包含"%李"(%為普通字符)模糊查詢與空值判斷LIKE通配符與ISNULL的使用空值判斷:ISNULL語法:expressionIS[NOT]NULL;重要說明:ISNULL不能用=NULL替換使用=NULL或!=NULL不會(huì)報(bào)錯(cuò),但查詢不出結(jié)果,返回空集--插入一條地址為NULL的記錄INSERTINTOPatients(PatientName,DateOfBirth,Gender,PhoneNumber)VALUES('王麗珊','1991-06-20','F','16782732451');--查詢地址為NULL的患者SELECT*FROMPatientsWHEREAddressISNULL;結(jié)果:王麗珊(Address為NULL)NULL值查詢對(duì)比正確:WHEREAddressISNULL--查詢地址為空WHEREAddressISNOTNULL--查詢地址非空錯(cuò)誤:WHEREAddress=NULL--查詢不出結(jié)果WHEREAddress!=NULL--查詢不出結(jié)果原則:判斷NULL值必須使用ISNULL或ISNOTNULL結(jié)果排序:ORDERBY子句對(duì)查詢結(jié)果進(jìn)行升序或降序排序單列排序示例1:按地址降序排序SELECT*FROMPatientsORDERBYAddressDESC;結(jié)果:PatientNameAddress陳楠楠愛國路5號(hào)王明杰創(chuàng)意路8號(hào)張文文建設(shè)路1號(hào)吳英俊青年路9號(hào)注:NULL值在降序排序時(shí)顯示在最后NULL值排序規(guī)則:?升序排序(ASC):NULL值在最前面?降序排序(DESC):NULL值在最后面?NULL值被理解為最小值多列排序示例2:先按性別升序,再按工作年限降序SELECTDoctorName姓名,Gender性別,Specialization科室,WorkingYears*0.9工作年限FROMDoctorsWHEREWorkingYears*0.9>=12ORDERBYGender,WorkingYears*0.9DESC;排序邏輯:1.先按Gender升序排序(F→M)2.Gender相同時(shí),按WorkingYears降序多列排序語法:ORDERBYcolumn1[ASC|DESC],column2[ASC|DESC],...?先按column1排序?column1相同,按column2排序?以此類推ORDERBY要點(diǎn)ASC升序默認(rèn)排序方式,從小到大,A→ZDESC降序從大到小,Z→A,NULL值在最后限制不能用于TEXT、BLOB、LONGTEXT等類型限制行數(shù):LIMIT子句控制查詢結(jié)果集返回的記錄數(shù)LIMIT語法格式格式1:LIMIT[offset,]row_count;格式2:LIMITrow_countOFFSEToffset;參數(shù)說明:?offset:起始位置偏移量(從0開始)?row_count:返回的記錄條數(shù)?不指定offset時(shí),默認(rèn)從第1條記錄開始LIMIT參數(shù)示例SQL示例說明LIMIT5返回前5條記錄(1-5)LIMIT0,3從第1條開始,返回3條(1-3)LIMIT3,2從第4條開始,返回2條(4-5)LIMIT3,4從第4條開始,返回4條(4-7)LIMIT2OFFSET1從第2條開始,返回2條(2-3)示例1:排名前N查詢工作年限前4名醫(yī)生SELECTDoctorName姓名,Specialization科室,WorkingYears工作年限FROMDoctorsORDERBYWorkingYearsDESCLIMIT4;排名姓名年限1張浩202李明153吳晴晴134李思美12示例2:分頁查詢獲取第2到第5名醫(yī)生(分頁場景)SELECTDoctorName,WorkingYearsFROMDoctorsORDERBYWorkingYearsDESCLIMIT1,4;--從第2條開始,取4條--或SELECTDoctorName,WorkingYearsFROMDoctorsORDERBYWorkingYearsDESCLIMIT4OFFSET1;排名姓名年限2李明153吳晴晴134李思美125陳艾明10應(yīng)用場景:分頁顯示、Top-N查詢、數(shù)據(jù)抽樣聚合函數(shù)統(tǒng)計(jì)查詢MySQL常用聚合函數(shù)及應(yīng)用場景常用聚合函數(shù)函數(shù)功能COUNT([ALL|DISTINCT]*|expr)統(tǒng)計(jì)表中記錄個(gè)數(shù)或非空列的行數(shù)SUM([ALL|DISTINCT]expr)求列表達(dá)式的值(數(shù)值型)的總和AVG([ALL|DISTINCT]expr)求列表達(dá)式的值(數(shù)值型)的平均值MAX([ALL|DISTINCT]expr)求列表達(dá)式的值(數(shù)值型)的最大值MIN([ALL|DISTINCT]expr)求列表達(dá)式的值(數(shù)值型)的最小值A(chǔ)LL與DISTINCT區(qū)別:?ALL(默認(rèn)):計(jì)算列中的所有值(含重復(fù)值)?DISTINCT:計(jì)算時(shí)取消列中的重復(fù)值?除COUNT(*)外,其余聚合函數(shù)均忽略NULL值示例1:COUNT統(tǒng)計(jì)統(tǒng)計(jì)女性患者人數(shù):SELECTCOUNT(*)FROMPatientsWHEREGender='F';--結(jié)果:3統(tǒng)計(jì)不同性別數(shù)量(DISTINCT):SELECTCOUNT(DISTINCTGender)FROMPatientsWHEREGender='F';--結(jié)果:1示例2:綜合統(tǒng)計(jì)查詢醫(yī)生工作年限的極值和平均值:SELECTMAX(WorkingYears)最大值,MIN(WorkingYears)最小值,AVG(WorkingYears)平均值FROMDoctors;統(tǒng)計(jì)項(xiàng)值最大值20最小值10平均值14應(yīng)用場景:數(shù)據(jù)統(tǒng)計(jì)分析、報(bào)表生成、業(yè)務(wù)指標(biāo)計(jì)算GROUPBY分組查詢將查詢結(jié)果按指定列分組聚合GROUPBY基本語法GROUPBYgroupexpr1,groupexpr2,...[HAVINGcondition]?對(duì)查詢結(jié)果按分組表達(dá)式列表進(jìn)行分組?值相等的記錄分為一組?常與聚合函數(shù)結(jié)合使用?HAVING對(duì)分組后的結(jié)果進(jìn)行過濾GROUPBY使用注意事項(xiàng)1列名必須在SELECT中GROUPBY中的列名必須是SELECT子句中的列,或可通過表達(dá)式計(jì)算2支持多列分組可使用多個(gè)列進(jìn)行分組,列之間用逗號(hào)分隔3數(shù)據(jù)類型限制不能使用TEXT、BLOB、LONGTEXT等類型列分組4與聚合函數(shù)結(jié)合對(duì)每個(gè)分組計(jì)算聚合結(jié)果,如COUNT、SUM、AVG等5默認(rèn)排序結(jié)果集會(huì)按分組列順序排序,可用ORDERBY自定義排序1單列分組按性別分組,統(tǒng)計(jì)各組人數(shù):SELECTGender,COUNT(DoctorID)人數(shù)FROMDoctorsGROUPBYGender;Gender人數(shù)F3M22多列分組按性別和科室分組:SELECTGender,Specialization,COUNT(Specialization)人數(shù)FROMDoctorsGROUPBYGender,Specialization;Gender科室人數(shù)F中醫(yī)護(hù)理1F眼科1F骨科1M兒科1M五官科1說明:先按Gender分組,再按Specialization分組,統(tǒng)計(jì)各組合人數(shù)HAVING子句過濾分組分組后條件篩選與WHERE、HAVING對(duì)比HAVING子句基礎(chǔ)作用:HAVING用于對(duì)分組后的結(jié)果進(jìn)行過濾,類似于WHERE對(duì)行進(jìn)行過濾,但HAVING在GROUPBY之后執(zhí)行語法:[HAVINGcondition]示例1:查詢平均工作年限≥12SELECTAVG(WorkingYears)平均年限FROMDoctorsHAVINGAVG(WorkingYears)>=12;結(jié)果:14(平均值>=12,滿足條件)示例2:WHERE+GROUPBY+HAVING組合SELECTDoctorName醫(yī)生姓名,Gender性別,WorkingYears工作年限FROMDoctorsWHEREDoctorID<=4GROUPBYDoctorNameHAVINGWorkingYears>10ORDERBYGender,WorkingYearsDESC;執(zhí)行順序:1.WHERE篩選DoctorID<=42.GROUPBY按姓名分組3.HAVING篩選年限>104.ORDERBY排序輸出WHEREvsHAVINGWHERE?分組前過濾記錄?不能使用聚合函數(shù)?在GROUPBY之前執(zhí)行?過濾行數(shù)據(jù)HAVING?分組后過濾分組?可以使用聚合函數(shù)?在GROUPBY之后執(zhí)行?過濾分組數(shù)據(jù)使用建議能用WHERE的盡量用WHERE,性能更高(先過濾后分組)需要對(duì)分組結(jié)果進(jìn)行過濾時(shí)使用HAVINGHAVING通常與GROUPBY配合使用單獨(dú)使用HAVING不符合規(guī)范,應(yīng)避免03多表查詢03內(nèi)連接INNERJOIN基礎(chǔ)內(nèi)連接概念與兩種表示形式內(nèi)連接概念I(lǐng)NNERJOIN使用比較運(yùn)算符進(jìn)行表間數(shù)據(jù)的比較操作,列出與連接條件相匹配的數(shù)據(jù)行特點(diǎn):?只返回兩個(gè)表中匹配的行?是SQL中最常用的連接類型?不匹配的行不會(huì)出現(xiàn)在結(jié)果集中形式1:INNERJOIN顯式連接SELECTexpr1,expr2,...,exprnFROM[INNER]JOIN

ON[WHERE];說明:?INNER可省略,簡寫為JOIN?ON指定連接條件?WHERE指定過濾條件?推薦使用顯式連接,結(jié)構(gòu)清晰形式2:WHERE隱式連接SELECTexpr1,expr2,...,exprnFROM,WHERE[AND];說明:?在WHERE子句中定義連接條件?使用逗號(hào)分隔多個(gè)表?連接條件和過濾條件都用WHERE?可讀性較差,不推薦連接條件語法[tb_name1.]col_name1comp_operator[tb_name2.]col_name2;要點(diǎn):?comp_operator為比較運(yùn)算符(=、>、<等)?連接列的數(shù)據(jù)類型必須可比?重復(fù)列名必須用表名限定?可為表指定別名簡化引用表別名語法:表名[AS]表別名等值連接與不等值連接基于=運(yùn)算符和非=運(yùn)算符的連接等值連接定義:連接條件中的運(yùn)算符為"="時(shí),稱為等值連接,是最常用的連接方式示例1:不帶WHERE條件的等值連接SELECTPatients.*,Appointments.*FROMPatientsJOINAppointmentsONPatients.PatientID=Appointments.PatientID;示例2:帶過濾條件的等值連接SELECTp.PatientID,p.PatientName,a.DoctorID,Conditions,AppointmentDate,AppointmentTimeFROMPatientsASpJOINAppointmentsaONp.PatientID=a.PatientIDWHEREGender='F';說明:?INNERJOIN可簡寫為JOIN?相同列名需用表名限定?使用表別名簡化代碼?ON后是連接條件,WHERE后是過濾條件不等值連接定義:連接條件中的比較運(yùn)算符不是"="時(shí),稱為不等值連接或非等值連接示例:非等值連接SELECT*FROMPatientsJOINAppointmentsONPatients.PatientID!=Appointments.PatientIDLIMIT5;結(jié)果分析:?返回PatientID不相等的所有組合?結(jié)果集為笛卡爾積的子集?實(shí)際應(yīng)用較少?注意使用LIMIT限制返回行數(shù)應(yīng)用場景:?比較兩個(gè)表的差異數(shù)據(jù)?查找不匹配的記錄?生成測試數(shù)據(jù)自然連接與自連接NATURALJOIN自動(dòng)匹配與表自連接技術(shù)自然連接定義:自然連接根據(jù)表關(guān)系中相同列名自動(dòng)匹配,去掉重復(fù)列語法:SELECT...FROMtb_name1NATURALJOINtb_name2;示例:SELECTp.PatientID,p.PatientName,Gender,a.DoctorID,a.Conditions,AppointmentDate,AppointmentTimeFROMPatientspJOINAppointmentsaONp.PatientID=a.PatientID;特點(diǎn):?自動(dòng)匹配兩個(gè)表中相同列名的列?在等值連接基礎(chǔ)上去掉重復(fù)列?要求兩個(gè)表的連接列名相同?使用較少,可讀性不如顯式JOIN自連接定義:某張表與自身進(jìn)行連接,需要為表指定多個(gè)不同的別名示例:查詢與"王明杰"同性別患者SELECTp1.*FROMPatientsASp1,PatientsASp2WHEREp1.Gender=p2.GenderANDp2.PatientName='王明杰'ANDp1.PatientName!='王明杰';說明:?為同一張表指定不同別名(p1,p2)?所有列引用必須使用別名限定?通過別名區(qū)分表的兩次使用?適合查詢表中數(shù)據(jù)間的關(guān)系應(yīng)用場景:?查找同部門員工?查詢同級(jí)或同組數(shù)據(jù)?比較表中不同行的數(shù)據(jù)外連接:左外連接與右外連接LEFTJOIN、RIGHTJOIN返回至少一個(gè)表的所有記錄左外連接LEFTJOIN定義:返回左表的所有記錄,右表無匹配記錄時(shí)對(duì)應(yīng)列為NULL語法:SELECT...FROMtb1LEFT[OUTER]JOINtb2ONtb1.col=tb2.col;示例:SELECT*FROMPatientsLEFTOUTERJOINAppointmentsONPatients.PatientID=Appointments.PatientID;執(zhí)行邏輯:1.從左表Patients第1條記錄開始2.到右表Appointments查找匹配記錄3.找到匹配則合并輸出4.未找到則輸出左表記錄,右表列為NULL右外連接RIGHTJOIN定義:返回右表的所有記錄,左表無匹配記錄時(shí)對(duì)應(yīng)列為NULL語法:SELECT...FROMtb1RIGHT[OUTER]JOINtb2ONtb1.col=tb2.col;示例:SELECT*FROMAppointmentsRIGHTOUTERJOINDoctorsONAppointments.DoctorID=Doctors.DoctorID;結(jié)果特點(diǎn):?包含右表Doctors所有記錄?如果某醫(yī)生沒有預(yù)約記錄?Appointments表列顯示為NULL外連接三種類型LEFTJOIN返回左表所有記錄?左表:全部?右表:匹配+NULLRIGHTJOIN返回右表所有記錄?右表:全部?左表:匹配+NULLFULLJOIN返回兩表所有記錄?兩表:全部?不匹配:NULL填充?MySQL不支持交叉連接與聯(lián)合查詢CROSSJOIN笛卡爾積與UNION合并結(jié)果集交叉連接CROSSJOIN定義:返回兩個(gè)表中所有可能的記錄組合,生成笛卡爾積語法:--方式1:顯式CROSSJOINSELECT*FROMtable1CROSSJOINtable2;--方式2:隱式逗號(hào)連接SELECT*FROMtable1,table2;示例:SELECT*FROMPatientsCROSSJOINDoctors;結(jié)果:Patients5條×Doctors5條=25條記錄警告:交叉連接結(jié)果集行數(shù)=表1行數(shù)×表2行數(shù)大數(shù)據(jù)表交叉連接會(huì)產(chǎn)生巨大結(jié)果集,應(yīng)謹(jǐn)慎使用聯(lián)合查詢UNION定義:UNION將兩個(gè)或多個(gè)查詢結(jié)果集合并成一個(gè)結(jié)果集語法:SELECTexpr1UNION[ALL]SELECTexpr2;示例:--查詢年齡<=31歲或女性患者SELECT*FROMPatientsWHEREYEAR(NOW())-YEAR(DateOfBirth)<=31UNIONSELECT*FROMPatientsWHEREGender='F';UNION與JOIN區(qū)別:UNION?合并多個(gè)SELECT結(jié)果?縱向擴(kuò)展(增加行數(shù))?要求列數(shù)和數(shù)據(jù)類型兼容JOIN?在一個(gè)SELECT中連接表?橫向擴(kuò)展(增加列數(shù))?通過連接條件匹配行三表連接與多表查詢多表連接策略與實(shí)戰(zhàn)案例三表連接查詢場景:查詢患者姓名、醫(yī)生姓名及預(yù)約詳情SELECTp.PatientID,p.PatientName,d.DoctorID,d.DoctorName,Conditions,AppointmentDate,AppointmentTimeFROMPatientspJOINAppointmentsaONp.PatientID=a.PatientIDJOINDoctorsdONd.DoctorID=a.DoctorID;連接策略:1.Patients與Appointments通過PatientID連接2.結(jié)果再與Doctors通過DoctorID連接3.逐步將多張表連接成一張大表4.以此類推,可連接4張、5張或更多表查詢結(jié)果示例:患者醫(yī)生健康狀況日期張文文李明聽覺受限2024-08-01李思思李思美近視治療2024-08-02王明杰陳艾明康復(fù)治療2024-08-03吳英俊吳晴晴運(yùn)動(dòng)扭傷2024-08-02性能建議:多表連接時(shí),先連接小表,再連接大表;確保連接列有索引多表連接要點(diǎn)1連接順序先連接兩張表,再將結(jié)果與第三張表連接,以此類推2列名限定多張表有相同列名時(shí),必須使用表別名限定3性能優(yōu)化確保連接列有索引,先過濾后連接,選擇小表作為驅(qū)動(dòng)表4可讀性使用表別名,每行一個(gè)JOIN子句,代碼結(jié)構(gòu)清晰視圖在多表查詢中的價(jià)值視圖概念:視圖本身不存儲(chǔ)數(shù)據(jù),而是存儲(chǔ)查詢邏輯核心優(yōu)勢:?封裝復(fù)雜的多表連接查詢?簡化查詢操作,提高代碼可讀性?提高代碼的可維護(hù)性?隱藏底層表結(jié)構(gòu),提供安全訪問?動(dòng)態(tài)執(zhí)行視圖定義的查詢語句當(dāng)查詢視圖時(shí),MySQL會(huì)動(dòng)態(tài)執(zhí)行視圖定義的查詢語句并返回結(jié)果視圖在多表查詢中的應(yīng)用創(chuàng)建視圖封裝復(fù)雜查詢,簡化數(shù)據(jù)訪問創(chuàng)建視圖場景:創(chuàng)建男性患者預(yù)約視圖CREATEVIEWp_a_viewASSELECTp.PatientID,p.PatientName,a.DoctorID,Conditions,AppointmentDate,AppointmentTimeFROMPatientspJOINAppointmentsaONp.PatientID=a.PatientIDWHEREGender='M';查詢視圖:--查詢男性患者預(yù)約數(shù)據(jù)SELECT*FROMp_a_view;視圖特點(diǎn):?視圖名:p_a_view?存儲(chǔ)查詢邏輯,不存儲(chǔ)實(shí)際數(shù)據(jù)?查詢時(shí)動(dòng)態(tài)執(zhí)行底層SQL?在MMS數(shù)據(jù)庫Views目錄下可見視圖查詢結(jié)果查詢結(jié)果:PatientIDPatientNameDoctorIDConditionsp003王明杰d004康復(fù)治療p004吳英俊d005運(yùn)動(dòng)扭傷只包含Gender='M'的男性患者視圖管理:--查看所有視圖SHOWFULLTABLESINMMSWHERETable_type='VIEW';--刪除視圖DROPVIEW[IFEXISTS]p_a_view;動(dòng)態(tài)性:視圖查詢結(jié)果隨底層表數(shù)據(jù)變化而自動(dòng)更新04嵌套查詢04嵌套查詢基礎(chǔ)與子查詢類型主查詢+子查詢的執(zhí)行機(jī)制與分類嵌套查詢結(jié)構(gòu)定義:嵌套查詢是指包含一個(gè)或多個(gè)子查詢的SQL語句結(jié)構(gòu)。子查詢是嵌套在SELECT、INSERT、UPDATE、DELETE或其他子查詢中的SELECT查詢執(zhí)行過程:1首先執(zhí)行內(nèi)層查詢(子查詢)2子查詢結(jié)果不顯示,傳遞給外層查詢3子查詢結(jié)果作為外層查詢的條件4執(zhí)行外層查詢(主查詢),返回最終結(jié)果術(shù)語:?主查詢:外層的SELECT查詢?子查詢:嵌入在外層查詢中的SELECT查詢?內(nèi)層查詢:子查詢的另一個(gè)名稱?外層查詢:主查詢的另一個(gè)名稱6大子查詢類型1.比較運(yùn)算符子查詢使用=、>、<等比較運(yùn)算符2.IN子查詢判斷值是否在子查詢結(jié)果集中3.ANY子查詢與結(jié)果集中任意值匹配4.ALL子查詢與結(jié)果集中所有值匹配5.EXISTS子查詢返回真假值,不返回實(shí)際數(shù)據(jù)6.子查詢實(shí)現(xiàn)增刪改INSERT/UPDATE/DELETE中使用子查詢子查詢應(yīng)用位置SELECT語句的WHERE或HAVING子句INSERT語句中UPDATE語句中DELETE語句中其他子查詢中(多層嵌套)比較運(yùn)算符子查詢使用比較運(yùn)算符連接主查詢與子查詢語法與說明適用場景:當(dāng)用戶明確知道內(nèi)層查詢返回的是單值時(shí),可以使用比較運(yùn)算符支持的比較運(yùn)算符:=><>=<=<>重要說明:子查詢必須返回單值(一行一列),否則報(bào)錯(cuò)。如果可能返回多值,應(yīng)使用IN、ANY或ALL實(shí)戰(zhàn)案例案例1:查詢高于平均工作年限的醫(yī)生SELECT*FROMDoctorsWHEREWorkingYears>(SELECTAVG(WorkingYears)FROMDoctors);結(jié)果:張浩(20年)、李明(15年)案例2:查詢地址非空且年齡>平均年齡的患者SELECT*FROMPatientsWHEREAddressISNOTNULLANDYEAR(NOW())-YEAR(DateOfBirth)>(SELECTAVG(YEAR(NOW())-YEAR(DateOfBirth))FROMPatients);應(yīng)用場景:?查找高于/低于平均值的數(shù)據(jù)?查詢最大/最小值對(duì)應(yīng)的記錄?單值比較的業(yè)務(wù)場景IN子查詢與多層嵌套IN/NOTIN子查詢與多層級(jí)嵌套查詢IN子查詢語法:[NOT]IN();功能說明:IN子查詢用來確定指定的值是否與子查詢返回的一列值中的任意一個(gè)相匹配示例1:查詢工作年限>13年的醫(yī)生SELECTDoctorID,DoctorNameFROMDoctorsWHEREDoctorIDIN(SELECTDoctorIDFROMDoctorsWHEREWorkingYears>13);結(jié)果:d001(李明,15年)、d002(張浩,20年)、d005(吳晴晴,13年)NOTIN:查找不在結(jié)果集中的記錄SELECT*FROMDoctorsWHEREDoctorIDNOTIN(SELECTDoctorIDFROMDoctorsWHEREWorkingYears>13);多層嵌套查詢案例:查詢未預(yù)約"李思美"醫(yī)生的患者SELECTPatientID,PatientNameFROMPatientsWHEREPatientIDNOTIN(SELECTPatientIDFROMAppointmentsWHEREDoctorIDIN(SELECTDoctorIDFROMDoctorsWHEREDoctorName='李思美'));三層嵌套執(zhí)行順序:1.最內(nèi)層:查找"李思美"的DoctorID2.中間層:查找該醫(yī)生的預(yù)約記錄3.最外層:排除這些患者,返回結(jié)果查詢結(jié)果:PatientIDPatientNamep001張文文p003王明杰p004吳英俊應(yīng)用場景:復(fù)雜業(yè)務(wù)邏輯、多層數(shù)據(jù)篩選、關(guān)聯(lián)查詢IN子查詢與多層嵌套IN/NOTIN子查詢與多層級(jí)嵌套查詢INvsEXISTS對(duì)比IN子查詢?子查詢返回一列值?判斷值是否在集合中?適合靜態(tài)值列表?子查詢先執(zhí)行,結(jié)果緩存EXISTS子查詢?子查詢返回真假值?判斷是否存在匹配記錄?適合關(guān)聯(lián)子查詢?子查詢對(duì)外查詢每行執(zhí)行ANY與ALL子查詢ANY/SOME與ALL比較ANY與ALL說明ANY/SOME同義詞,可替換使用。將每一行指定的表達(dá)式的值與查詢的結(jié)果集進(jìn)行比較,若有某一行記錄的比較結(jié)果為真,就返回該記錄ALL將指定表達(dá)式的值與查詢結(jié)果集中的每個(gè)值進(jìn)行比較,若查詢結(jié)果集中每個(gè)值的比較結(jié)果都為真,則返回真語法:[ANY|ALL]();ANY和ALL用法說明用法說明>ANY/ALL大于查詢結(jié)果中的某個(gè)值/所有值小于查詢結(jié)果中的某個(gè)值/所有值>=ANY/ALL大于等于查詢結(jié)果中的某個(gè)值/所有值<=ANY/ALL小于等于查詢結(jié)果中的某個(gè)值/所有值=ANY/ALL等于查詢結(jié)果中的某個(gè)值/所有值!=ANY/ALL不等于查詢結(jié)果中的某個(gè)值/所有值A(chǔ)NY示例查詢男性患者比女性患者出生年份晚的姓名和出生年份:SELECTPatientName,YEAR(DateOfBirth)FROMPatientsWHEREGender='M'ANDYEAR(DateOfBirth)>ANY(SELECTDISTINCTYEAR(DateOfBirth)FROMPatientsWHEREGender='F');執(zhí)行過程:?子查詢找出女性患者出生年份:1990,1991,1992?外層查詢找出比其中任意一個(gè)年份晚的男性患者?結(jié)果:王明杰(1994)、吳英?。?993)ALL示例查詢比所有女性患者出生年份都晚的男性患者:SELECTPatientName,YEAR(DateOfBirth)FROMPatientsWHEREGender='M'ANDYEAR(DateOfBirth)>ALL(SELECTDISTINCTYEAR(DateOfBirth)FROMPatientsWHEREGender='F');執(zhí)行過程:?子查詢得到女性患者出生年份:1990,1991,1992?外層查詢查找比這三個(gè)年份都晚的男性患者?結(jié)果:王明杰(1994)對(duì)比:ANY返回滿足任意條件的數(shù)據(jù),ALL返回滿足所有條件的數(shù)據(jù)EXISTS子查詢返回真假值的關(guān)聯(lián)子查詢EXISTS語法與特點(diǎn)語法:[NOT]EXISTS;特點(diǎn):?不需要返回實(shí)際數(shù)據(jù),只返回真或假值?EXISTS表示存在,NOTEXISTS表示不存在?子查詢查到滿足條件的記錄返回真值1?未查到記錄返回假值0示例1:查詢預(yù)約了d003醫(yī)生的患者SELECTPatientNameFROMPatientsWHEREEXISTS(SELECT*FROMAppointmentsWHEREPatients.PatientID=Appointments.PatientIDANDAppointments.DoctorID='d003');關(guān)鍵說明:使用EXIST

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論