20000字干貨筆記一天搞定Mysql~_第1頁
20000字干貨筆記一天搞定Mysql~_第2頁
20000字干貨筆記一天搞定Mysql~_第3頁
20000字干貨筆記一天搞定Mysql~_第4頁
20000字干貨筆記一天搞定Mysql~_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

20000字干貨筆記,一天搞定Mysql~今天給大家分享的是我學(xué)習(xí)Mysql記錄的詳細(xì)筆記,有基礎(chǔ)知識,也有實戰(zhàn)案例,文章較長,建議收藏~

基本語法--顯示所有數(shù)據(jù)庫showdatabases;--創(chuàng)建數(shù)據(jù)庫CREATEDATABASEtest;--切換數(shù)據(jù)庫usetest;--顯示數(shù)據(jù)庫中的所有表showtables;--創(chuàng)建數(shù)據(jù)表CREATETABLEpet(nameVARCHAR(20),ownerVARCHAR(20),speciesVARCHAR(20),sexCHAR(1),birthDATE,deathDATE);--查看數(shù)據(jù)表結(jié)構(gòu)--describepet;descpet;--查詢表SELECT*frompet;--插入數(shù)據(jù)INSERTINTOpetVALUES('puffball','Diane','hamster','f','1990-03-30',NULL);--修改數(shù)據(jù)UPDATEpetSETname='squirrel'whereowner='Diane';--刪除數(shù)據(jù)DELETEFROMpetwherename='squirrel';--刪除表DROP

TABLE

myorder;

數(shù)據(jù)庫大三大設(shè)計范式1NF不可分割性,只要字段值還可以繼續(xù)拆分,就不滿足第一范式。不可分割的意思就按字面理解就是最小單位,不能再分成更小單位了。字段只能是一個值,不能被拆分成多個字段,否則的話,它就是可分割的,就不符合一范式。2NF第二范式就是要有主鍵,要求其他字段都依賴于主鍵。為什么要有主鍵?沒有主鍵就沒有唯一性,沒有唯一性在集合中就定位不到這行記錄,所以要主鍵。在滿足第一范式的前提下,主鍵外的每一列都必須完全依賴于主鍵。如果出現(xiàn)不完全依賴,只可能發(fā)生在聯(lián)合主鍵的情況下。3NF在滿足第二范式的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關(guān)系,即“消除冗余”。消除冗余,就是各種信息只在一個地方存儲,不出現(xiàn)在多張表中。范式總結(jié):范式,其實是用來學(xué)習(xí)參考的,設(shè)計的時候根據(jù)情況,未必一定要遵守,要靈活結(jié)合業(yè)務(wù)實際情況決定。

查詢練習(xí)準(zhǔn)備數(shù)據(jù)--創(chuàng)建數(shù)據(jù)庫CREATEDATABASEselect_test;--切換數(shù)據(jù)庫USEselect_test;--創(chuàng)建學(xué)生表CREATETABLEstudent(noVARCHAR(20)PRIMARYKEY,nameVARCHAR(20)NOTNULL,sexVARCHAR(10)NOTNULL,birthdayDATE,--生日classVARCHAR(20)--所在班級);--創(chuàng)建教師表CREATETABLEteacher(noVARCHAR(20)PRIMARYKEY,nameVARCHAR(20)NOTNULL,sexVARCHAR(10)NOTNULL,birthdayDATE,professionVARCHAR(20)NOTNULL,--職稱departmentVARCHAR(20)NOTNULL--部門);--創(chuàng)建課程表CREATETABLEcourse(noVARCHAR(20)PRIMARYKEY,nameVARCHAR(20)NOTNULL,t_noVARCHAR(20)NOTNULL,--教師編號--表示該tno來自于teacher表中的no字段值FOREIGNKEY(t_no)REFERENCESteacher(no));--成績表CREATETABLEscore(s_noVARCHAR(20)NOTNULL,--學(xué)生編號c_noVARCHAR(20)NOTNULL,--課程號degreeDECIMAL,--成績--表示該s_no,c_no分別來自于student,course表中的no字段值FOREIGNKEY(s_no)REFERENCESstudent(no),FOREIGNKEY(c_no)REFERENCEScourse(no),--設(shè)置s_no,c_no為聯(lián)合主鍵PRIMARYKEY(s_no,c_no));--查看所有表SHOWTABLES;--添加學(xué)生表數(shù)據(jù)INSERTINTOstudentVALUES('101','曾華','男','1977-09-01','95033');INSERTINTOstudentVALUES('102','匡明','男','1975-10-02','95031');INSERTINTOstudentVALUES('103','王麗','女','1976-01-23','95033');INSERTINTOstudentVALUES('104','李軍','男','1976-02-20','95033');INSERTINTOstudentVALUES('105','王芳','女','1975-02-10','95031');INSERTINTOstudentVALUES('106','陸軍','男','1974-06-03','95031');INSERTINTOstudentVALUES('107','王尼瑪','男','1976-02-20','95033');INSERTINTOstudentVALUES('108','張全蛋','男','1975-02-10','95031');INSERTINTOstudentVALUES('109','趙鐵柱','男','1974-06-03','95031');--添加教師表數(shù)據(jù)INSERTINTOteacherVALUES('804','李誠','男','1958-12-02','副教授','計算機系');INSERTINTOteacherVALUES('856','張旭','男','1969-03-12','講師','電子工程系');INSERTINTOteacherVALUES('825','王萍','女','1972-05-05','助教','計算機系');INSERTINTOteacherVALUES('831','劉冰','女','1977-08-14','助教','電子工程系');--添加課程表數(shù)據(jù)INSERTINTOcourseVALUES('3-105','計算機導(dǎo)論','825');INSERTINTOcourseVALUES('3-245','操作系統(tǒng)','804');INSERTINTOcourseVALUES('6-166','數(shù)字電路','856');INSERTINTOcourseVALUES('9-888','高等數(shù)學(xué)','831');--添加添加成績表數(shù)據(jù)INSERTINTOscoreVALUES('103','3-105','92');INSERTINTOscoreVALUES('103','3-245','86');INSERTINTOscoreVALUES('103','6-166','85');INSERTINTOscoreVALUES('105','3-105','88');INSERTINTOscoreVALUES('105','3-245','75');INSERTINTOscoreVALUES('105','6-166','79');INSERTINTOscoreVALUES('109','3-105','76');INSERTINTOscoreVALUES('109','3-245','68');INSERTINTOscoreVALUES('109','6-166','81');--查看表結(jié)構(gòu)SELECT*FROMcourse;SELECT*FROMscore;SELECT*FROMstudent;SELECT*FROMteacher;基礎(chǔ)查詢--查詢student表的所有行SELECT*FROMstudent;--查詢student表中的name、sex和class字段的所有行SELECTname,sex,classFROMstudent;--查詢teacher表中不重復(fù)的department列--department:去重查詢SELECTDISTINCTdepartmentFROMteacher;--查詢score表中成績在60-80之間的所有行(區(qū)間查詢和運算符查詢)--BETWEENxxANDxx:查詢區(qū)間,AND表示"并且"SELECT*FROMscoreWHEREdegreeBETWEEN60AND80;SELECT*FROMscoreWHEREdegree>60ANDdegree<80;--查詢score表中成績?yōu)?5,86或88的行--IN:查詢規(guī)定中的多個值SELECT*FROMscoreWHEREdegreeIN(85,86,88);--查詢student表中'95031'班或性別為'女'的所有行--or:表示或者關(guān)系SELECT*FROMstudentWHEREclass='95031'orsex='女';--以class降序的方式查詢student表的所有行--DESC:降序,從高到低--ASC(默認(rèn)):升序,從低到高SELECT*FROMstudentORDERBYclassDESC;SELECT*FROMstudentORDERBYclassASC;--以c_no升序、degree降序查詢score表的所有行SELECT*FROMscoreORDERBYc_noASC,degreeDESC;--查詢"95031"班的學(xué)生人數(shù)--COUNT:統(tǒng)計SELECTCOUNT(*)FROMstudentWHEREclass='95031';--查詢score表中的最高分的學(xué)生學(xué)號和課程編號(子查詢或排序查詢)。--(SELECTMAX(degree)FROMscore):子查詢,算出最高分SELECTs_no,c_noFROMscoreWHEREdegree=(SELECTMAX(degree)FROMscore);--排序查詢--LIMITr,n:表示從第r行開始,查詢n條數(shù)據(jù)SELECTs_no,c_no,degreeFROMscoreORDERBYdegreeDESCLIMIT0,1;--LIMITnoffsetr:表示查詢n條數(shù)據(jù),從第r行開始SELECTs_no,c_no,degreeFROMscoreORDERBYdegreeDESCLIMIT1offset0;分組計算平均成績查詢每門課的平均成績--AVG:平均值SELECTAVG(degree)FROMscoreWHEREc_no='3-105';SELECTAVG(degree)FROMscoreWHEREc_no='3-245';SELECTAVG(degree)FROMscoreWHEREc_no='6-166';--GROUPBY:分組查詢SELECTc_no,AVG(degree)FROMscoreGROUPBYc_no;分組條件與模糊查詢查詢score表中至少有2名學(xué)生選修,并以3開頭的課程的平均分?jǐn)?shù)分析表發(fā)現(xiàn),至少有2名學(xué)生選修的課程是3-105、3-245、6-166,以3開頭的課程是3-105、3-245。也就是說,我們要查詢所有3-105和3-245的degree平均分。--首先把c_no,AVG(degree)通過分組查詢出來SELECTc_no,AVG(degree)FROMscoreGROUPBYc_no+-------+-------------+|c_no|AVG(degree)|+-------+-------------+|3-105|85.3333||3-245|76.3333||6-166|81.6667|+-------+-------------+--再查詢出至少有2名學(xué)生選修的課程--HAVING:表示持有HAVINGCOUNT(c_no)>=2--并且是以3開頭的課程--LIKE表示模糊查詢,"%"是一個通配符,匹配"3"后面的任意字符。ANDc_noLIKE'3%';--把前面的SQL語句拼接起來,--后面加上一個COUNT(*),表示將每個分組的個數(shù)也查詢出來。SELECTc_no,AVG(degree),COUNT(*)FROMscoreGROUPBYc_noHAVINGCOUNT(c_no)>=2ANDc_noLIKE'3%';+-------+-------------+----------+|c_no|AVG(degree)|COUNT(*)|+-------+-------------+----------+|3-105|85.3333|3||3-245|76.3333|3|+-------+-------------+----------+多表查詢-1查詢所有學(xué)生的name,以及該學(xué)生在score表中對應(yīng)的c_no和degreeSELECTno,nameFROMstudent;+-----+-----------+|no|name|+-----+-----------+|101|曾華||102|匡明||103|王麗||104|李軍||105|王芳||106|陸軍||107|王尼瑪||108|張全蛋||109|趙鐵柱|+-----+-----------+SELECTs_no,c_no,degreeFROMscore;+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-105|92||103|3-245|86||103|6-166|85||105|3-105|88||105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+通過分析可以發(fā)現(xiàn),只要把score表中的s_no字段值替換成student表中對應(yīng)的name字段值就可以了,如何做呢?--FROM...:表示從student,score表中查詢--WHERE的條件表示為,只有在student.no和score.s_no相等時才顯示出來。SELECTname,c_no,degreeFROMstudent,scoreWHEREstudent.no=score.s_no;+-----------+-------+--------+|name|c_no|degree|+-----------+-------+--------+|王麗|3-105|92||王麗|3-245|86||王麗|6-166|85||王芳|3-105|88||王芳|3-245|75||王芳|6-166|79||趙鐵柱|3-105|76||趙鐵柱|3-245|68||趙鐵柱|6-166|81|+-----------+-------+--------+多表查詢-2查詢所有學(xué)生的no、課程名稱(course表中的name)和成績(score表中的degree)列。只有score關(guān)聯(lián)學(xué)生的no,因此只要查詢score表,就能找出所有和學(xué)生相關(guān)的no和degree:SELECTs_no,c_no,degreeFROMscore;+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-105|92||103|3-245|86||103|6-166|85||105|3-105|88||105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+然后查詢course表:SELECTno,nameFROMcourse;+-------+-----------------+|no|name|+-------+-----------------+|3-105|計算機導(dǎo)論||3-245|操作系統(tǒng)||6-166|數(shù)字電路||9-888|高等數(shù)學(xué)|+-------+-----------------+只要把score表中的c_no替換成course表中對應(yīng)的name字段值就可以了。--增加一個查詢字段name,分別從score、course這兩個表中查詢。--as表示取一個該字段的別名。SELECTs_no,nameasc_name,degreeFROMscore,courseWHEREscore.c_no=course.no;+------+-----------------+--------+|s_no|c_name|degree|+------+-----------------+--------+|103|計算機導(dǎo)論|92||105|計算機導(dǎo)論|88||109|計算機導(dǎo)論|76||103|操作系統(tǒng)|86||105|操作系統(tǒng)|75||109|操作系統(tǒng)|68||103|數(shù)字電路|85||105|數(shù)字電路|79||109|數(shù)字電路|81|+------+-----------------+--------+三表關(guān)聯(lián)查詢查詢所有學(xué)生的name、課程名(course表中的name)和degree。只有score表中關(guān)聯(lián)學(xué)生的學(xué)號和課堂號,我們只要圍繞著score這張表查詢就好了。SELECT*FROMscore;+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-105|92||103|3-245|86||103|6-166|85||105|3-105|88||105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+只要把s_no和c_no替換成student和course表中對應(yīng)的name字段值就好了。首先把s_no替換成student表中的name字段:SELECTname,c_no,degreeFROMstudent,scoreWHEREstudent.no=score.s_no;+-----------+-------+--------+|name|c_no|degree|+-----------+-------+--------+|王麗|3-105|92||王麗|3-245|86||王麗|6-166|85||王芳|3-105|88||王芳|3-245|75||王芳|6-166|79||趙鐵柱|3-105|76||趙鐵柱|3-245|68||趙鐵柱|6-166|81|+-----------+-------+--------+再把c_no替換成course表中的name字段:--課程表SELECTno,nameFROMcourse;+-------+-----------------+|no|name|+-------+-----------------+|3-105|計算機導(dǎo)論||3-245|操作系統(tǒng)||6-166|數(shù)字電路||9-888|高等數(shù)學(xué)|+-------+-----------------+--由于字段名存在重復(fù),使用"表名.字段名as別名"代替。SELECTass_name,asc_name,degreeFROMstudent,score,courseWHEREstudent.NO=score.s_noANDscore.c_no=course.no;子查詢加分組求平均分查詢95031班學(xué)生每門課程的平均成績。在score表中根據(jù)student表的學(xué)生編號篩選出學(xué)生的課堂號和成績:--IN(..):將篩選出的學(xué)生號當(dāng)做s_no的條件查詢SELECTs_no,c_no,degreeFROMscoreWHEREs_noIN(SELECTnoFROMstudentWHEREclass='95031');+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|105|3-105|88||105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+這時只要將c_no分組一下就能得出95031班學(xué)生每門課的平均成績:SELECTc_no,AVG(degree)FROMscoreWHEREs_noIN(SELECTnoFROMstudentWHEREclass='95031')GROUPBYc_no;+-------+-------------+|c_no|AVG(degree)|+-------+-------------+|3-105|82.0000||3-245|71.5000||6-166|80.0000|+-------+-------------+子查詢-1查詢在3-105課程中,所有成績高于109號同學(xué)的記錄。先用子查詢查找出109同學(xué)在3-105中的成績select*fromscorewherec_no='3-105'ands_no='109'然后再以課程3-105為條件,查找成績大76的記錄select*fromscorewherec_no='3-105'anddegree>(selectdegreefromscorewherec_no='3-105'ands_no='109');子查詢-2查詢所有成績高于109號同學(xué)的3-105課程成績記錄。--不限制課程號,只要成績大于109號同學(xué)的3-105課程成績就可以。SELECT*FROMscoreWHEREdegree>(SELECTdegreeFROMscoreWHEREs_no='109'ANDc_no='3-105');YEAR函數(shù)與帶IN關(guān)鍵字查詢查詢所有和101、108號學(xué)生同年出生的no、name、birthday列。selectno,name,birthdayfromstudentwhereyear(birthday)in(selectyear(birthday)fromstudentwherenoin(101,108));多層嵌套子查詢查詢'張旭'教師任課的學(xué)生成績表。用的三張表teacher、course、score,首先找到教師編號:SELECTNOFROMteacherWHERENAME='張旭'通過sourse表找到該教師課程號:selectnofromcoursewheret_no=(SELECTNOFROMteacherWHERENAME='張旭')通過篩選出的課程號查詢成績表:select*fromscorewherec_no=(selectnofromcoursewheret_no=(selectnofromteacherwherename='張旭'));多表查詢查詢某選修課程多于5個同學(xué)的教師姓名。首先在teacher表中,根據(jù)no字段來判斷該教師的同一門課程是否有至少5名學(xué)員選修:--查詢teacher表SELECTno,nameFROMteacher;+-----+--------+|no|name|+-----+--------+|804|李誠||825|王萍||831|劉冰||856|張旭|+-----+--------+SELECTnameFROMteacherWHEREnoIN(--在這里找到對應(yīng)的條件);查看和教師編號有有關(guān)的表的信息:SELECT*FROMcourse;--t_no:教師編號+-------+-----------------+------+|no|name|t_no|+-------+-----------------+------+|3-105|計算機導(dǎo)論|825||3-245|操作系統(tǒng)|804||6-166|數(shù)字電路|856||9-888|高等數(shù)學(xué)|831|+-------+-----------------+------+我們已經(jīng)找到和教師編號有關(guān)的字段就在course表中,但是還無法知道哪門課程至少有5名學(xué)生選修,所以還需要根據(jù)score表來查詢:--在此之前向score插入一些數(shù)據(jù),以便豐富查詢條件。INSERTINTOscoreVALUES('101','3-105','90');INSERTINTOscoreVALUES('102','3-105','91');INSERTINTOscoreVALUES('104','3-105','89');--查詢score表SELECT*FROMscore;+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|101|3-105|90||102|3-105|91||103|3-105|92||103|3-245|86||103|6-166|85||104|3-105|89||105|3-105|88||105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+--在score表中將c_no作為分組,并且限制c_no持有至少5條數(shù)據(jù)。SELECTc_noFROMscoreGROUPBYc_noHAVINGCOUNT(*)>5;+-------+|c_no|+-------+|3-105|+-------+根據(jù)篩選出來的課程號,找出在某課程中,擁有至少5名學(xué)員的教師編號:SELECTt_noFROMcourseWHEREnoIN(SELECTc_noFROMscoreGROUPBYc_noHAVINGCOUNT(*)>5);+------+|t_no|+------+|825|+------+在teacher表中,根據(jù)篩選出來的教師編號找到教師姓名:SELECTnameFROMteacherWHEREnoIN(--最終條件SELECTt_noFROMcourseWHEREnoIN(SELECTc_noFROMscoreGROUPBYc_noHAVINGCOUNT(*)>5));子查詢-3查詢“計算機系”課程的成績表。思路是,先找出teacher表中所有計算機系課程的編號,根據(jù)這個編號查詢course表中的課程編號,再用課程編號查找score表--通過teacher表查詢所有`計算機系`的教師編號SELECTno,name,departmentFROMteacherWHEREdepartment='計算機系'+-----+--------+--------------+|no|name|department|+-----+--------+--------------+|804|李誠|計算機系||825|王萍|計算機系|+-----+--------+--------------+--通過course表查詢該教師的課程編號SELECTnoFROMcourseWHEREt_noIN(SELECTnoFROMteacherWHEREdepartment='計算機系');+-------+|no|+-------+|3-245||3-105|+-------+--根據(jù)篩選出來的課程號查詢成績表SELECT*FROMscoreWHEREc_noIN(SELECTnoFROMcourseWHEREt_noIN(SELECTnoFROMteacherWHEREdepartment='計算機系'));+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-245|86||105|3-245|75||109|3-245|68||101|3-105|90||102|3-105|91||103|3-105|92||104|3-105|89||105|3-105|88||109|3-105|76|+------+-------+--------+UNION和NOTIN的使用查詢計算機系與電子工程系中的不同職稱的教師。+-----+------+-----+------------+------------+------------+|no|name|sex|birthday|profession|department|+-----+------+-----+------------+------------+------------+|804|李誠|男|1958-12-02|副教授|計算機系||825|王萍|女|1972-05-05|助教|計算機系||831|劉冰|女|1977-08-14|助教|電子工程系||856|張旭|男|1969-03-12|講師|電子工程系|+-----+------+-----+------------+------------+------------+--NOT:代表邏輯非SELECT*FROMteacherWHEREdepartment='計算機系'ANDprofessionNOTIN(SELECTprofessionFROMteacherWHEREdepartment='電子工程系')--合并兩個集UNIONSELECT*FROMteacherWHEREdepartment='電子工程系'ANDprofessionNOTIN(SELECTprofessionFROMteacherWHEREdepartment='計算機系');ANY表示至少一個-DESC(降序)查詢課程3-105且成績至少高于3-245的score表。SELECT*FROMscoreWHEREc_no='3-105';+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|101|3-105|90||102|3-105|91||103|3-105|92||104|3-105|89||105|3-105|88||109|3-105|76|+------+-------+--------+SELECT*FROMscoreWHEREc_no='3-245';+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-245|86||105|3-245|75||109|3-245|68|+------+-------+--------+--ANY:符合SQL語句中的任意條件。--也就是說,在3-105成績中,只要有一個大于從3-245篩選出來的任意行就符合條件,--最后根據(jù)降序查詢結(jié)果。SELECT*FROMscoreWHEREc_no='3-105'ANDdegree>ANY(SELECTdegreeFROMscoreWHEREc_no='3-245')ORDERBYdegreeDESC;+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-105|92||102|3-105|91||101|3-105|90||104|3-105|89||105|3-105|88||109|3-105|76|+------+-------+--------+表示所有的ALL查詢課程3-105且成績高于3-245的score表。--只需對上一道題稍作修改。--ALL:符合SQL語句中的所有條件。--也就是說,在3-105每一行成績中,都要大于從3-245篩選出來全部行才算符合條件。SELECT*FROMscoreWHEREc_no='3-105'ANDdegree>ALL(SELECTdegreeFROMscoreWHEREc_no='3-245');+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|101|3-105|90||102|3-105|91||103|3-105|92||104|3-105|89||105|3-105|88|+------+-------+--------+復(fù)制表的數(shù)據(jù)作為條件查詢查詢某課程成績比該課程平均成績低的score表。--查詢平均分SELECTc_no,AVG(degree)FROMscoreGROUPBYc_no;b表+-------+-------------+|c_no|AVG(degree)|+-------+-------------+|3-105|87.6667||3-245|76.3333||6-166|81.6667|+-------+-------------+--查詢score表select*fromscore;a表+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|101|3-105|90||102|3-105|91||103|3-105|92||103|3-245|86||103|6-166|85||104|3-105|89||105|3-105|88||105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+--將表b作用于表a中查詢數(shù)據(jù)--scorea(b):將表聲明為a(b),--如此就能用a.c_no=b.c_no作為條件執(zhí)行查詢了。SELECT*FROMscoreaWHEREdegree<((SELECTAVG(degree)FROMscorebWHEREa.c_no=b.c_no));+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|105|3-245|75||105|6-166|79||109|3-105|76||109|3-245|68||109|6-166|81|+------+-------+--------+子查詢-4查詢所有任課(在course表里有課程)教師的name和department。SELECTname,departmentFROMteacherWHEREnoIN(SELECTt_noFROMcourse);+--------+-----------------+|name|department|+--------+-----------------+|李誠|計算機系||王萍|計算機系||劉冰|電子工程系||張旭|電子工程系|+--------+-----------------+條件加組篩選查詢student表中至少有2名男生的class。--查看學(xué)生表信息SELECT*FROMstudent;+-----+-----------+-----+------------+-------+|no|name|sex|birthday|class|+-----+-----------+-----+------------+-------+|101|曾華|男|1977-09-01|95033||102|匡明|男|1975-10-02|95031||103|王麗|女|1976-01-23|95033||104|李軍|男|1976-02-20|95033||105|王芳|女|1975-02-10|95031||106|陸軍|男|1974-06-03|95031||107|王尼瑪|男|1976-02-20|95033||108|張全蛋|男|1975-02-10|95031||109|趙鐵柱|男|1974-06-03|95031||110|張飛|男|1974-06-03|95038|+-----+-----------+-----+------------+-------+--只查詢性別為男,然后按class分組,并限制class行大于1。select*fromstudentwheresex='男'groupbyclasshavingcount(class)>=2;+-----+------+-----+------------+-------+|no|name|sex|birthday|class|+-----+------+-----+------------+-------+|101|曾華|男|1977-09-01|95033||102|匡明|男|1975-10-02|95031|+-----+------+-----+------------+-------+NOTLIKE模糊查詢?nèi)》床樵僺tudent表中不姓"王"的同學(xué)記錄。--NOT:取反--LIKE:模糊查詢mysql>SELECT*FROMstudentWHEREnameNOTLIKE'王%';+-----+-----------+-----+------------+-------+|no|name|sex|birthday|class|+-----+-----------+-----+------------+-------+|101|曾華|男|1977-09-01|95033||102|匡明|男|1975-10-02|95031||104|李軍|男|1976-02-20|95033||106|陸軍|男|1974-06-03|95031||108|張全蛋|男|1975-02-10|95031||109|趙鐵柱|男|1974-06-03|95031||110|張飛|男|1974-06-03|95038|+-----+-----------+-----+------------+-------+YEAR與NOW函數(shù)查詢student表中每個學(xué)生的姓名和年齡。selectname,year(now())-year(birthday)asagefromstudent;+-----------+------+|name|age|+-----------+------+|曾華|42||匡明|44||王麗|43||李軍|43||王芳|44||陸軍|45||王尼瑪|43||張全蛋|44||趙鐵柱|45||張飛|45|+-----------+------+MAX與MIN函數(shù)查詢student表中最大和最小的birthday值。SELECTMAX(birthday),MIN(birthday)FROMstudent;+---------------+---------------+|MAX(birthday)|MIN(birthday)|+---------------+---------------+|1977-09-01|1974-06-03|+---------------+---------------+多段排序以class和birthday從大到小的順序查詢student表。SELECT*FROMstudentORDERBYclassDESC,birthdayDESC;+-----+--------+-----+------------+-------+|no|name|sex|birthday|class|+-----+--------+-----+------------+-------+|110|張飛|男|1974-06-03|95038||101|曾華|男|1977-09-01|95033||104|李軍|男|1976-02-20|95033||107|王尼瑪|男|1976-02-20|95033||103|王麗|女|1976-01-23|95033||102|匡明|男|1975-10-02|95031||105|王芳|女|1975-02-10|95031||108|張全蛋|男|1975-02-10|95031||106|陸軍|男|1974-06-03|95031||109|趙鐵柱|男|1974-06-03|95031|+-----+--------+-----+------------+-------+子查詢-5查詢"男"教師及其所上的課程。SELECT*FROMcourseWHEREt_noin(SELECTnoFROMteacherWHEREsex='男');+-------+--------------+------+|no|name|t_no|+-------+--------------+------+|3-245|操作系統(tǒng)|804||6-166|數(shù)字電路|856|+-------+--------------+------+MAX函數(shù)與子查詢查詢最高分同學(xué)的score表。--找出最高成績(該查詢只能有一個結(jié)果)SELECTMAX(degree)FROMscore;--根據(jù)上面的條件篩選出所有最高成績表,--該查詢可能有多個結(jié)果,假設(shè)degree值多次符合條件。SELECT*FROMscoreWHEREdegree=(SELECTMAX(degree)FROMscore);+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|103|3-105|92|+------+-------+--------+子查詢-6查詢和"李軍"同性別的所有同學(xué)name。selectnamefromstudentwheresex=(SELECTsexFROMstudentwherename='李軍');+--------+|name|+--------+|曾華||匡明||李軍||陸軍||王尼瑪||張全蛋||趙鐵柱||張飛|+--------+子查詢-7查詢和"李軍"同性別且同班的同學(xué)name。SELECTname,sex,classFROMstudentWHEREsex=(SELECTsexFROMstudentWHEREname='李軍')ANDclass=(SELECTclassFROMstudentWHEREname='李軍');+-----------+-----+-------+|name|sex|class|+-----------+-----+-------+|曾華|男|95033||李軍|男|95033||王尼瑪|男|95033|+-----------+-----+-------+子查詢-8查詢所有選修"計算機導(dǎo)論"課程的"男"同學(xué)成績表。需要的"計算機導(dǎo)論"和性別為"男"的編號可以在course和student表中找到。SELECT*FROMscoreWHEREc_no=(SELECTnoFROMcourseWHEREname='計算機導(dǎo)論')ANDs_noIN(SELECTnoFROMstudentWHEREsex='男');+------+-------+--------+|s_no|c_no|degree|+------+-------+--------+|101|3-105|90||102|3-105|91||104|3-105|89||109|3-105|76|+------+-------+--------+按等級查詢建立一個grade表代表學(xué)生的成績等級,并插入數(shù)據(jù):CREATETABLEgrade(lowINT(3),uppINT(3),gradechar(1));INSERTINTOgradeVALUES(90,100,'A');INSERTINTOgradeVALUES(80,89,'B');INSERTINTOgradeVALUES(70,79,'C');INSERTINTOgradeVALUES(60,69,'D');INSERTINTOgradeVALUES(0,59,'E');SELECT*FROMgrade;+------+------+-------+|low|upp|grade|+------+------+-------+|90|100|A||80|89|B||70|79|C||60|69|D||0|59|E|+------+------+-------+查詢所有學(xué)生的s_no、c_no和grade列。思路是,使用區(qū)間(BETWEEN)查詢,判斷學(xué)生的成績(degree)在grade表的low和upp之間。SELECTs_no,c_no,gradeFROMscore,gradeWHEREdegreeBETWEENlowANDupp;+------+-------+-------+|s_no|c_no|grade|+------+-------+-------+|101|3-105|A||102|3-105|A||103|3-105|A||103|3-245|B||103|6-166|B||104|3-105|B||105|3-105|B||105|3-245|C||105|6-166|C||109|3-105|C||109|3-245|D||109|6-166|B|+------+-------+-------+連接查詢準(zhǔn)備用于測試連接查詢的數(shù)據(jù):CREATEDATABASEtestJoin;CREATETABLEperson(idINT,nameVARCHAR(20),cardIdINT);CREATETABLEcard(idINT,nameVARCHAR(20));INSERTINTOcardVALUES(1,'飯卡'),(2,'建行卡'),(3,'農(nóng)行卡'),(4,'工商卡'),(5,'郵政卡');SELECT*FROMcard;+------+-----------+|id|name|+------+-----------+|1|飯卡||2|建行卡||3|農(nóng)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論