版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
MySql必備基礎(chǔ)知識MySql必備基礎(chǔ)知識/NUMPAGES49MySql必備基礎(chǔ)知識MySql必備基礎(chǔ)知識正文:1數(shù)據(jù)庫概念(了解)1.1什么是數(shù)據(jù)庫數(shù)據(jù)庫就是用來存儲(chǔ)和管理數(shù)據(jù)的倉庫!數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)的優(yōu)先:可存儲(chǔ)大量數(shù)據(jù);方便檢索;保持?jǐn)?shù)據(jù)的一致性、完整性;安全,可共享;通過組合分析,可產(chǎn)生新數(shù)據(jù)。1.2數(shù)據(jù)庫的發(fā)展歷程沒有數(shù)據(jù)庫,使用磁盤文件存儲(chǔ)數(shù)據(jù);層次結(jié)構(gòu)模型數(shù)據(jù)庫;網(wǎng)狀結(jié)構(gòu)模型數(shù)據(jù)庫;關(guān)系結(jié)構(gòu)關(guān)系型!模型數(shù)據(jù)庫:使用二維表格來存儲(chǔ)數(shù)據(jù);關(guān)系型!關(guān)系-對象模型數(shù)據(jù)庫;MySQL就是關(guān)系型數(shù)據(jù)庫!1.3常見數(shù)據(jù)庫Oracle(神諭):甲骨文DB2:IBM;SQLServer:微軟;Sybase:賽貝斯;MySQL:甲骨文;MysqlAB--sun--oracle1.4理解數(shù)據(jù)庫RDBMS=管理員(manager)+倉庫(database)database=N個(gè)tabletable:表結(jié)構(gòu):定義表的列名和列類型!表記錄:一行一行的記錄!我們現(xiàn)在所說的數(shù)據(jù)庫泛指“關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS-Relationaldatabasemanagementsystem關(guān)系型數(shù)據(jù)庫管理系統(tǒng))”,即“數(shù)據(jù)庫服務(wù)器”。關(guān)系型數(shù)據(jù)庫管理系統(tǒng)當(dāng)我們安裝了數(shù)據(jù)庫服務(wù)器后,就可以在數(shù)據(jù)庫服務(wù)器中創(chuàng)建數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫中還可以包含多張表。數(shù)據(jù)庫表就是一個(gè)多行多列的表格。在創(chuàng)建表時(shí),需要指定表的列數(shù),以及列名稱,列類型等信息。而不用指定表格的行數(shù),行數(shù)是沒有上限的。下面是tab_student表的結(jié)構(gòu):當(dāng)把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據(jù)了。向表格添加數(shù)據(jù)是以行為單位的!下面是s_student表的記錄:s_ids_names_ages_sexS_1001zhangSan23maleS_1002liSi32femaleS_1003wangWu44male大家要學(xué)會(huì)區(qū)分什么是表結(jié)構(gòu),什么是表記錄。應(yīng)用程序與數(shù)據(jù)庫應(yīng)用程序使用數(shù)據(jù)庫完成對數(shù)據(jù)的存儲(chǔ)!安裝MySQL數(shù)據(jù)庫2.1安裝MySQL參考:MySQL安裝圖解.doc2.2MySQL目錄結(jié)構(gòu)MySQL的數(shù)據(jù)存儲(chǔ)目錄為data,data目錄通常在C:\DocumentsandSettings\AllUsers\ApplicationData\MySQL\MySQLServer5.1\data位置。在data下的每個(gè)目錄都代表一個(gè)數(shù)據(jù)庫。MySQL的安裝目錄下:bin目錄中都是可執(zhí)行文件;my.ini文件是MySQL的配置文件;3基本命令3.1啟動(dòng)和關(guān)閉mysql服務(wù)器啟動(dòng):netstartmysql;關(guān)閉:netstopmysql;在啟動(dòng)mysql服務(wù)后,打開windows任務(wù)管理器,會(huì)有一個(gè)名為mysqld.exe的進(jìn)程運(yùn)行,所以mysqld.exe才是MySQL服務(wù)器程序。3.2客戶端登錄退出mysql在啟動(dòng)MySQL服務(wù)器后,我們需要使用管理員用戶登錄MySQL服務(wù)器,然后來對服務(wù)器進(jìn)行操作。登錄MySQL需要使用MySQL的客戶端程序:mysql.exe登錄:mysql-uroot-p123-hlocalhost;-u:后面的root是用戶名,這里使用的是超級管理員root;-p:后面的123是密碼,這是在安裝MySQL時(shí)就已經(jīng)指定的密碼;退出:quit或exit;在登錄成功后,打開windows任務(wù)管理器,會(huì)有一個(gè)名為mysql.exe的進(jìn)程運(yùn)行,所以mysql.exe是客戶端程序。SQL語句SQL概述1.1什么是SQLSQL(StructuredQueryLanguage)是“結(jié)構(gòu)化查詢語言”,它是對關(guān)系型數(shù)據(jù)庫的操作語言。它可以應(yīng)用到所有關(guān)系型數(shù)據(jù)庫中,例如:MySQL、Oracle、SQLServer等。SQ標(biāo)準(zhǔn)(ANSI/ISO)有:SQL-92:1992年發(fā)布的SQL語言標(biāo)準(zhǔn);SQL:1999:1999年發(fā)布的SQL語言標(biāo)準(zhǔn);SQL:2003:2003年發(fā)布的SQL語言標(biāo)準(zhǔn);這些標(biāo)準(zhǔn)就與JDK的版本一樣,在新的版本中總要有一些語法的變化。不同時(shí)期的數(shù)據(jù)庫對不同標(biāo)準(zhǔn)做了實(shí)現(xiàn)。雖然SQL可以用在所有關(guān)系型數(shù)據(jù)庫中,但很多數(shù)據(jù)庫還都有標(biāo)準(zhǔn)之后的一些語法,我們可以稱之為“方言”。例如MySQL中的LIMIT語句就是MySQL獨(dú)有的方言,其它數(shù)據(jù)庫都不支持!當(dāng)然,Oracle或SQLServer都有自己的方言。1.2語法要求SQL語句可以單行或多行書寫,以分號結(jié)尾;可以用空格和縮進(jìn)來來增強(qiáng)語句的可讀性;關(guān)鍵字不區(qū)別大小寫,建議使用大寫;2分類DDL(DataDefinitionLanguage):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象:庫、表、列等;DML(DataManipulationLanguage):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄(數(shù)據(jù));3DDL3.1基本操作查看所有數(shù)據(jù)庫名稱:SHOWDATABASES;切換數(shù)據(jù)庫:USEmydb1,切換到mydb1數(shù)據(jù)庫;3.2操作數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫:CREATEDATABASE[IFNOTEXISTS]mydb1;創(chuàng)建數(shù)據(jù)庫,例如:CREATEDATABASEmydb1,創(chuàng)建一個(gè)名為mydb1的數(shù)據(jù)庫。如果這個(gè)數(shù)據(jù)已經(jīng)存在,那么會(huì)報(bào)錯(cuò)。例如CREATEDATABASEIFNOTEXISTSmydb1,在名為mydb1的數(shù)據(jù)庫不存在時(shí)創(chuàng)建該庫,這樣可以避免報(bào)錯(cuò)。刪除數(shù)據(jù)庫:DROPDATABASE[IFEXISTS]mydb1;刪除數(shù)據(jù)庫,例如:DROPDATABASEmydb1,刪除名為mydb1的數(shù)據(jù)庫。如果這個(gè)數(shù)據(jù)庫不存在,那么會(huì)報(bào)錯(cuò)。DROPDATABASEIFEXISTSmydb1,就算mydb1不存在,也不會(huì)的報(bào)錯(cuò)。修改數(shù)據(jù)庫編碼:ALTERDATABASEmydb1CHARACTERSETutf8修改數(shù)據(jù)庫mydb1的編碼為utf8。注意,在MySQL中所有的UTF-8編碼都不能使用中間的“-”,即UTF-8要書寫為UTF8。3.3數(shù)據(jù)類型MySQL與Java一樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應(yīng)用在列上。常用類型:int:整型double:浮點(diǎn)型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99;decimal:泛型型,在表單錢方面使用該類型,因?yàn)椴粫?huì)出現(xiàn)精度缺失問題;char:固定長度字符串類型;varchar:可變長度字符串類型;text:字符串類型;blob:字節(jié)類型;date:日期類型,格式為:yyyy-MM-dd;time:時(shí)間類型,格式為:hh:mm:sstimestamp:時(shí)間戳類型;3.4操作表創(chuàng)建表:CREATETABLE表名(列名列類型,列名列類型,);例如:CREATETABLEstu( sid CHAR(6), sname VARCHAR(20), age INT, gender VARCHAR(10));再例如:CREATETABLEemp( eid CHAR(6), ename VARCHAR(50), age INT, gender VARCHAR(6), birthday DATE, hiredate DATE, salary DECIMAL(7,2), resume VARCHAR(1000));查看當(dāng)前數(shù)據(jù)庫中所有表名稱:SHOWTABLES;查看指定表的創(chuàng)建語句:SHOWCREATETABLEemp,查看emp表的創(chuàng)建語句;查看表結(jié)構(gòu):DESCemp,查看emp表結(jié)構(gòu);刪除表:DROPTABLEemp,刪除emp表;修改表:修改之添加列:給stu表添加classname列:ALTERTABLEstuADD(classnamevarchar(100));修改之修改列類型:修改stu表的gender列類型為CHAR(2):ALTERTABLEstuMODIFYgenderCHAR(2);修改之修改列名:修改stu表的gender列名為sex:ALTERTABLEstuchangegendersexCHAR(2);修改之刪除列:刪除stu表的classname列:ALTERTABLEstuDROPclassname;修改之修改表名稱:修改stu表名稱為student:ALTERTABLEstuRENAMETOstudent;3基本命令3.1啟動(dòng)和關(guān)閉mysql服務(wù)器啟動(dòng):netstartmysql;關(guān)閉:netstopmysql;在啟動(dòng)mysql服務(wù)后,打開windows任務(wù)管理器,會(huì)有一個(gè)名為mysqld.exe的進(jìn)程運(yùn)行,所以mysqld.exe才是MySQL服務(wù)器程序。3.2客戶端登錄退出mysql在啟動(dòng)MySQL服務(wù)器后,我們需要使用管理員用戶登錄MySQL服務(wù)器,然后來對服務(wù)器進(jìn)行操作。登錄MySQL需要使用MySQL的客戶端程序:mysql.exe登錄:mysql-uroot-p123-hlocalhost;-u:后面的root是用戶名,這里使用的是超級管理員root;-p:后面的123是密碼,這是在安裝MySQL時(shí)就已經(jīng)指定的密碼;-h:后面給出的localhost是服務(wù)器主機(jī)名,它是可以省略的,例如:mysql-uroot-p123;退出:quit或exit;在登錄成功后,打開windows任務(wù)管理器,會(huì)有一個(gè)名為mysql.exe的進(jìn)程運(yùn)行,所以mysql.exe是客戶端程序。SQL語句SQL概述1.1什么是SQLSQL(StructuredQueryLanguage)是“結(jié)構(gòu)化查詢語言”,它是對關(guān)系型數(shù)據(jù)庫的操作語言。它可以應(yīng)用到所有關(guān)系型數(shù)據(jù)庫中,例如:MySQL、Oracle、SQLServer等。SQ標(biāo)準(zhǔn)(ANSI/ISO)有:SQL-92:1992年發(fā)布的SQL語言標(biāo)準(zhǔn);SQL:1999:1999年發(fā)布的SQL語言標(biāo)簽;SQL:2003:2003年發(fā)布的SQL語言標(biāo)簽;這些標(biāo)準(zhǔn)就與JDK的版本一樣,在新的版本中總要有一些語法的變化。不同時(shí)期的數(shù)據(jù)庫對不同標(biāo)準(zhǔn)做了實(shí)現(xiàn)。雖然SQL可以用在所有關(guān)系型數(shù)據(jù)庫中,但很多數(shù)據(jù)庫還都有標(biāo)準(zhǔn)之后的一些語法,我們可以稱之為“方言”。例如MySQL中的LIMIT語句就是MySQL獨(dú)有的方言,其它數(shù)據(jù)庫都不支持!當(dāng)然,Oracle或SQLServer都有自己的方言。1.2語法要求SQL語句可以單行或多行書寫,以分號結(jié)尾;可以用空格和縮進(jìn)來來增強(qiáng)語句的可讀性;關(guān)鍵字不區(qū)別大小寫,建議使用大寫;2分類DDL(DataDefinitionLanguage):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象:庫、表、列等;DML(DataManipulationLanguage):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄(數(shù)據(jù));3DDL3.1基本操作查看所有數(shù)據(jù)庫名稱:SHOWDATABASES;切換數(shù)據(jù)庫:USEmydb1,切換到mydb1數(shù)據(jù)庫;3.2操作數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫:CREATEDATABASE[IFNOTEXISTS]mydb1;創(chuàng)建數(shù)據(jù)庫,例如:CREATEDATABASEmydb1,創(chuàng)建一個(gè)名為mydb1的數(shù)據(jù)庫。如果這個(gè)數(shù)據(jù)已經(jīng)存在,那么會(huì)報(bào)錯(cuò)。例如CREATEDATABASEIFNOTEXISTSmydb1,在名為mydb1的數(shù)據(jù)庫不存在時(shí)創(chuàng)建該庫,這樣可以避免報(bào)錯(cuò)。刪除數(shù)據(jù)庫:DROPDATABASE[IFEXISTS]mydb1;刪除數(shù)據(jù)庫,例如:DROPDATABASEmydb1,刪除名為mydb1的數(shù)據(jù)庫。如果這個(gè)數(shù)據(jù)庫不存在,那么會(huì)報(bào)錯(cuò)。DROPDATABASEIFEXISTSmydb1,就算mydb1不存在,也不會(huì)的報(bào)錯(cuò)。修改數(shù)據(jù)庫編碼:ALTERDATABASEmydb1CHARACTERSETutf8修改數(shù)據(jù)庫mydb1的編碼為utf8。注意,在MySQL中所有的UTF-8編碼都不能使用中間的“-”,即UTF-8要書寫為UTF8。3.3數(shù)據(jù)類型MySQL與Java一樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應(yīng)用在列上。常用類型:int:整型double:浮點(diǎn)型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99;decimal:泛型型,在表單錢方面使用該類型,因?yàn)椴粫?huì)出現(xiàn)精度缺失問題;char:固定長度字符串類型;varchar:可變長度字符串類型;text:字符串類型;blob:字節(jié)類型;date:日期類型,格式為:yyyy-MM-dd;time:時(shí)間類型,格式為:hh:mm:sstimestamp:時(shí)間戳類型;3.4操作表創(chuàng)建表:CREATETABLE表名(列名列類型,列名列類型,);例如:CREATETABLEstu( sid CHAR(6), sname VARCHAR(20), age INT, gender VARCHAR(10));再例如:CREATETABLEemp( eid CHAR(6), ename VARCHAR(50), age INT, gender VARCHAR(6), birthday DATE, hiredate DATE, salary DECIMAL(7,2), resume VARCHAR(1000));查看當(dāng)前數(shù)據(jù)庫中所有表名稱:SHOWTABLES;查看指定表的創(chuàng)建語句:SHOWCREATETABLEemp,查看emp表的創(chuàng)建語句;查看表結(jié)構(gòu):DESCemp,查看emp表結(jié)構(gòu);刪除表:DROPTABLEemp,刪除emp表;修改表:修改之添加列:給stu表添加classname列:ALTERTABLEstuADD(classnamevarchar(100));修改之修改列類型:修改stu表的gender列類型為CHAR(2):ALTERTABLEstuMODIFYgenderCHAR(2);修改之修改列名:修改stu表的gender列名為sex:ALTERTABLEstuchangegendersexCHAR(2);修改之刪除列:刪除stu表的classname列:ALTERTABLEstuDROPclassname;修改之修改表名稱:修改stu表名稱為student:ALTERTABLEstuRENAMETOstudent;4DML4.1插入數(shù)據(jù)語法:INSERTINTO表名(列名1,列名2,…)VALUES(值1,值2)INSERTINTOstu(sid,sname,age,gender)VALUES('s_1001','zhangSan',23,'male');INSERTINTOstu(sid,sname)VALUES('s_1001','zhangSan');因?yàn)闆]有插入age和因?yàn)闆]有插入age和gender列的數(shù)據(jù),所以該條記錄的age和gender值上為NULL語法:INSERTINTO表名VALUES(值1,值2,…)因?yàn)闆]有指定要插入的列,表示按創(chuàng)建表時(shí)列的順序插入所有列的值:INSERTINTOstuVALUES('s_1002','liSi',32,'female');注意:所有字符串?dāng)?shù)據(jù)必須使用單引用!4.2修改數(shù)據(jù)語法:UPDATE表名SET列名1=值1,…列名n=值n[WHERE條件]UPDATEstuSETsname=’zhangSanSan’,age=’32’,gender=’female’WHEREsid=’s_1001’;UPDATEstuSETsname=’liSi’,age=’20’WHEREage>50ANDgender=’male’;UPDATEstuSETsname=’wangWu’,age=’30’WHEREage>60ORgender=’female’;UPDATEstuSETgender=’female’WHEREgenderISNULLUPDATEstuSETage=age+1WHEREsname=’zhaoLiu’;updatepersonsetgender='男'whereid=2;4.3刪除數(shù)據(jù)語法:DELETEFROM表名[WHERE條件]DELETEFROMstuWHEREsid=’s_1001’003BDELETEFROMstuWHEREsname=’chenQi’ORage>30;DELETEFROMstu;刪除表所有記錄刪除表所有記錄語法:TRUNCATETABLE表名TRUNCATETABLEstu;刪除stu表,再創(chuàng)建刪除stu表,再創(chuàng)建stu表。等同與刪除stu表所有記錄。雖然TRUNCATE和DELETE都可以刪除表的所有記錄,但有原理不同。DELETE的效率沒有TRUNCATE高!TRUNCATE其實(shí)屬性DDL語句,因?yàn)樗窍菵ROPTABLE,再CREATETABLE。而且TRUNCATE刪除的記錄是無法回滾的,但DELETE刪除的記錄是可以回滾的(回滾是事務(wù)的知識!)。數(shù)據(jù)查詢語法(DQL)DQL就是數(shù)據(jù)查詢語言,數(shù)據(jù)庫執(zhí)行DQL語句不會(huì)對數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集給客戶端。語法:SELECTselection_list/*要查詢的列名稱*/FROMtable_list/*要查詢的表名稱*/WHEREcondition/*行條件*/GROUPBYgrouping_columns/*對結(jié)果分組*/HAVINGcondition/*分組后的行條件*/ORDERBYsorting_columns/*對結(jié)果分組*/LIMIToffset_start,row_count/*結(jié)果限定*/創(chuàng)建名:學(xué)生表:stu字段名稱字段類型說明sidchar(6)學(xué)生學(xué)號snamevarchar(50)學(xué)生姓名ageint學(xué)生年齡gendervarchar(50)學(xué)生性別CREATETABLEstu( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50));INSERTINTOstuVALUES('S_1001','liuYi',35,'male');INSERTINTOstuVALUES('S_1002','chenEr',15,'female');INSERTINTOstuVALUES('S_1003','zhangSan',95,'male');INSERTINTOstuVALUES('S_1004','liSi',65,'female');INSERTINTOstuVALUES('S_1005','wangWu',55,'male');INSERTINTOstuVALUES('S_1006','zhaoLiu',75,'female');INSERTINTOstuVALUES('S_1007','sunQi',25,'male');INSERTINTOstuVALUES('S_1008','zhouBa',45,'female');INSERTINTOstuVALUES('S_1009','wuJiu',85,'male');INSERTINTOstuVALUES('S_1010','zhengShi',5,'female');INSERTINTOstuVALUES('S_1011','xxx',NULL,NULL);雇員表:emp字段名稱字段類型說明empnoint員工編號enamevarchar(50)員工姓名jobvarchar(50)員工工作mgrint領(lǐng)導(dǎo)編號hiredatedate入職日期saldecimal(7,2)月薪commdecimal(7,2)獎(jiǎng)金deptnoint部分編號CREATETABLEemp( empno INT, ename VARCHAR(50), job VARCHAR(50), mgr INT, hiredate DATE, sal DECIMAL(7,2), comm decimal(7,2), deptno INT);INSERTINTOempvalues(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);INSERTINTOempvalues(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);INSERTINTOempvalues(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);INSERTINTOempvalues(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);INSERTINTOempvalues(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);INSERTINTOempvalues(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);INSERTINTOempvalues(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);INSERTINTOempvalues(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);INSERTINTOempvalues(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);INSERTINTOempvalues(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);INSERTINTOempvalues(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);INSERTINTOempvalues(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);INSERTINTOempvalues(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);INSERTINTOempvalues(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);部分表:dept字段名稱字段類型說明deptnoint部分編碼dnamevarchar(50)部分名稱locvarchar(50)部分所在地點(diǎn)CREATETABLEdept( deptno INT, dname varchar(14), loc varchar(13));INSERTINTOdeptvalues(10,'ACCOUNTING','NEWYORK');INSERTINTOdeptvalues(20,'RESEARCH','DALLAS');INSERTINTOdeptvalues(30,'SALES','CHICAGO');INSERTINTOdeptvalues(40,'OPERATIONS','BOSTON');1基礎(chǔ)查詢1.1查詢所有列SELECT*FROMstu;1.2查詢指定列SELECTsid,sname,ageFROMstu;2條件查詢2.1條件查詢介紹條件查詢就是在查詢時(shí)給出WHERE子句,在WHERE子句中可以使用如下運(yùn)算符及關(guān)鍵字:=、!=、<>、<、<=、>、>=;BETWEEN…AND;IN(set);ISNULL;AND;OR;NOT;2.2查詢性別為女,并且年齡50的記錄SELECT*FROMstuWHEREgender='female'ANDge<50;2.3查詢學(xué)號為S_1001,或者姓名為liSi的記錄SELECT*FROMstuWHEREsid='S_1001'ORsname='liSi';2.4查詢學(xué)號為S_1001,S_1002,S_1003的記錄SELECT*FROMstuWHEREsidIN('S_1001','S_1002','S_1003');2.5查詢學(xué)號不是S_1001,S_1002,S_1003的記錄SELECT*FROMtab_studentWHEREs_numberNOTIN('S_1001','S_1002','S_1003');2.6查詢年齡為null的記錄SELECT*FROMstuWHEREageISNULL;2.7查詢年齡在20到40之間的學(xué)生記錄SELECT*FROMstuWHEREage>=20ANDage<=40;或者SELECT*FROMstuWHEREageBETWEEN20AND40;2.8查詢性別非男的學(xué)生記錄SELECT*FROMstuWHEREgender!='male';或者SELECT*FROMstuWHEREgender<>'male';或者SELECT*FROMstuWHERENOTgender='male';2.9查詢姓名不為null的學(xué)生記錄SELECT*FROMstuWHERENOTsnameISNULL;或者SELECT*FROMstuWHEREsnameISNOTNULL;3模糊查詢當(dāng)想查詢姓名中包含a字母的學(xué)生時(shí)就需要使用模糊查詢了。模糊查詢需要使用關(guān)鍵字LIKE。3.1查詢姓名由5個(gè)字母構(gòu)成的學(xué)生記錄SELECT*FROMstuWHEREsnameLIKE'_____';模糊查詢必須使用LIKE關(guān)鍵字。其中“_”匹配任意一個(gè)字母,5個(gè)“_”表示5個(gè)任意字母。3.2查詢姓名由5個(gè)字母構(gòu)成,并且第5個(gè)字母為“i”的學(xué)生記錄SELECT*FROMstuWHEREsnameLIKE'____i';3.3查詢姓名以“z”開頭的學(xué)生記錄SELECT*FROMstuWHEREsnameLIKE'z%';其中“%”匹配0~n個(gè)任何字母。3.4查詢姓名中第2個(gè)字母為“i”的學(xué)生記錄SELECT*FROMstuWHEREsnameLIKE'_i%';3.5查詢姓名中包含“a”字母的學(xué)生記錄SELECT*FROMstuWHEREsnameLIKE'%a%';4字段控制查詢4.1去除重復(fù)記錄去除重復(fù)記錄(兩行或兩行以上記錄中系列的上的數(shù)據(jù)都相同),例如emp表中sal字段就存在相同的記錄。當(dāng)只查詢emp表的sal字段時(shí),那么會(huì)出現(xiàn)重復(fù)記錄,那么想去除重復(fù)記錄,需要使用DISTINCT:SELECTDISTINCTsalFROMemp;4.2查看雇員的月薪與傭金之和因?yàn)閟al和comm兩列的類型都是數(shù)值類型,所以可以做加運(yùn)算。如果sal或comm中有一個(gè)字段不是數(shù)值類型,那么會(huì)出錯(cuò)。SELECT*,sal+commFROMemp;comm列有很多記錄的值為NULL,因?yàn)槿魏螙|西與NULL相加結(jié)果還是NULL,所以結(jié)算結(jié)果可能會(huì)出現(xiàn)NULL。下面使用了把NULL轉(zhuǎn)換成數(shù)值0的函數(shù)IFNULL:SELECT*,sal+IFNULL(comm,0)FROMemp;4.3給列名添加別名在上面查詢中出現(xiàn)列名為sal+IFNULL(comm,0),這很不美觀,現(xiàn)在我們給這一列給出一個(gè)別名,為total:SELECT*,sal+IFNULL(comm,0)AStotalFROMemp;給列起別名時(shí),是可以省略AS關(guān)鍵字的:SELECT*,sal+IFNULL(comm,0)totalFROMemp;5排序5.1查詢所有學(xué)生記錄,按年齡升序排序SELECT*FROMstuORDERBYsageASC;或者SELECT*FROMstuORDERBYsage;5.2查詢所有學(xué)生記錄,按年齡降序排序SELECT*FROMstuORDERBYageDESC;5.3查詢所有雇員,按月薪降序排序,如果月薪相同時(shí),按編號升序排序SELECT*FROMempORDERBYsalDESC,empnoASC;6聚合函數(shù)聚合函數(shù)是用來做縱向運(yùn)算的函數(shù):COUNT():統(tǒng)計(jì)指定列不為NULL的記錄行數(shù);MAX():計(jì)算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算;MIN():計(jì)算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算;SUM():計(jì)算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;AVG():計(jì)算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計(jì)算結(jié)果為0;6.1COUNT當(dāng)需要縱向統(tǒng)計(jì)時(shí)可以使用COUNT()。查詢emp表中記錄數(shù):SELECTCOUNT(*)AScntFROMemp;查詢emp表中有傭金的人數(shù):SELECTCOUNT(comm)cntFROMemp;注意,因?yàn)閏ount()函數(shù)中給出的是comm列,那么只統(tǒng)計(jì)comm列非NULL的行數(shù)。查詢emp表中月薪大于2500的人數(shù):SELECTCOUNT(*)FROMempWHEREsal>2500;統(tǒng)計(jì)月薪與傭金之和大于2500元的人數(shù):SELECTCOUNT(*)AScntFROMempWHEREsal+IFNULL(comm,0)>2500;查詢有傭金的人數(shù),以及有領(lǐng)導(dǎo)的人數(shù):SELECTCOUNT(comm),COUNT(mgr)FROMemp;6.2SUM和AVG當(dāng)需要縱向求和時(shí)使用sum()函數(shù)。查詢所有雇員月薪和:SELECTSUM(sal)FROMemp;查詢所有雇員月薪和,以及所有雇員傭金和:SELECTSUM(sal),SUM(comm)FROMemp;查詢所有雇員月薪+傭金和:SELECTSUM(sal+IFNULL(comm,0))FROMemp;統(tǒng)計(jì)所有員工平均工資:SELECTSUM(sal),COUNT(sal)FROMemp;或者SELECTAVG(sal)FROMemp;6.3MAX和MIN查詢最高工資和最低工資:SELECTMAX(sal),MIN(sal)FROMemp;分組查詢當(dāng)需要分組查詢時(shí)需要使用GROUPBY子句,例如查詢每個(gè)部門的工資和,這說明要使用部分來分組。7.1分組查詢查詢每個(gè)部門的部門編號和每個(gè)部門的工資和:SELECTdeptno,SUM(sal)FROMempGROUPBYdeptno;查詢每個(gè)部門的部門編號以及每個(gè)部門的人數(shù):SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;查詢每個(gè)部門的部門編號以及每個(gè)部門工資大于1500的人數(shù):SELECTdeptno,COUNT(*)FROMempWHEREsal>1500GROUPBYdeptno;7.2HAVING子句查詢工資總和大于9000的部門編號以及工資和:SELECTdeptno,SUM(sal)FROMempGROUPBYdeptnoHAVINGSUM(sal)>9000;注意,WHERE是對分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那么這行記錄不會(huì)參加分組;而HAVING是對分組后數(shù)據(jù)的約束。8LIMITLIMIT用來限定查詢結(jié)果的起始行,以及總行數(shù)。8.1查詢5行記錄,起始行從0開始SELECT*FROMempLIMIT0,5;注意,起始行從0開始,即第一行開始!8.2查詢10行記錄,起始行從3開始SELECT*FROMempLIMIT3,10;8.3分頁查詢?nèi)绻豁撚涗洖?0條,希望查看第3頁記錄應(yīng)該怎么查呢?第一頁記錄起始行為0,一共查詢10行;第二頁記錄起始行為10,一共查詢10行;第三頁記錄起始行為20,一共查詢10行;多表連接查詢連接查詢內(nèi)連接外連接左外連接右外連接全外連接(MySQL不支持)自然連接子查詢連接查詢連接查詢就是求出多個(gè)表的乘積,例如t1連接t2,那么查詢出的結(jié)果就是t1*t2。連接查詢會(huì)產(chǎn)生笛卡爾積,假設(shè)集合A={a,b},集合B={0,1,2},則兩個(gè)集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}??梢詳U(kuò)展到多個(gè)集合的情況。那么多表查詢產(chǎn)生這樣的結(jié)果并不是我們想要的,那么怎么去除重復(fù)的,不想要的記錄呢,當(dāng)然是通過條件過濾。通常要查詢的多個(gè)表之間都存在關(guān)聯(lián)關(guān)系,那么就通過關(guān)聯(lián)關(guān)系去除笛卡爾積。你能想像到emp和dept表連接查詢的結(jié)果么?emp一共14行記錄,dept表一共4行記錄,那么連接后查詢出的結(jié)果是56行記錄。也就你只是想在查詢emp表的同時(shí),把每個(gè)員工的所在部門信息顯示出來,那么就需要使用主外鍵來去除無用信息了。使用主外鍵關(guān)系做為條件來去除無用信息SELECT*FROMemp,deptWHEREemp.deptno=dept.deptno在多表查詢中,在使用列時(shí)必須指定列所從屬的表,例如emp.deptno表示emp表的deptno列。;在多表查詢中,在使用列時(shí)必須指定列所從屬的表,例如emp.deptno表示emp表的deptno列。上面查詢結(jié)果會(huì)把兩張表的所有列都查詢出來,也許你不需要那么多列,這時(shí)就可以指定要查詢的列了。SELECTemp.ename,emp.sal,m,dept.dnameFROMemp,deptWHEREemp.deptno=dept.deptno;還可以為表指定別名,然后在引用列時(shí)使用別名即可。SELECTe.ename,e.sal,m,d.dnameFROMempASe,deptASdWHEREe.deptno=d.deptno;其中AS是可以省略的其中AS是可以省略的2.1內(nèi)連接上面的連接語句就是內(nèi)連接,但它不是SQL標(biāo)準(zhǔn)中的查詢方式,可以理解為方言!SQL標(biāo)準(zhǔn)的內(nèi)連接為:SELECT*FROMempeINNERINNER可以省略,MySQL默認(rèn)的連接方式就是內(nèi)連接JOINdeptdINNER可以省略,MySQL默認(rèn)的連接方式就是內(nèi)連接ON不使用WHERE,而是使用ONe.deptno=d.deptno;不使用WHERE,而是使用ON內(nèi)連接的特點(diǎn):查詢結(jié)果必須滿足條件。例如我們向emp表中插入一條記錄:其中deptno為50,而在dept表中只有10、20、30、40部門,那么上面的查詢結(jié)果中就不會(huì)出現(xiàn)“張三”這條記錄,因?yàn)樗荒軡M足e.deptno=d.deptno這個(gè)條件。2.2外連接(左連接、右連接)外連接的特點(diǎn):查詢出的結(jié)果存在不滿足條件的可能。左連接:SELECT*FROMempeLEFTOUTEROUTER可以省略JOINdeptdOUTER可以省略O(shè)Ne.deptno=d.deptno;左連接是先查詢出左表(即以左表為主),然后查詢右表,右表中滿足條件的顯示出來,不滿足條件的顯示NULL。這么說你可能不太明白,我們還是用上面的例子來說明。其中emp表中“張三”這條記錄中,部門編號為50,而dept表中不存在部門編號為50的記錄,所以“張三”這條記錄,不能滿足e.deptno=d.deptno這條件。但在左連接中,因?yàn)閑mp表是左表,所以左表中的記錄都會(huì)查詢出來,即“張三”這條記錄也會(huì)查出,但相應(yīng)的右表部分顯示NULL。2.3右連接右連接就是先把右表中所有記錄都查詢出來,然后左表滿足條件的顯示,不滿足顯示NULL。例如在dept表中的40部門并不存在員工,但在右連接中,如果dept表為右表,那么還是會(huì)查出40部門,但相應(yīng)的員工信息為NULL。SELECT*FROMempeRIGHTOUTERJOINdeptdONe.deptno=d.deptno;連接查詢心得:連接不限與兩張表,連接查詢也可以是三張、四張,甚至N張表的連接查詢。通常連接查詢不可能需要整個(gè)笛卡爾積,而只是需要其中一部分,那么這時(shí)就需要使用條件來去除不需要的記錄。這個(gè)條件大多數(shù)情況下都是使用主外鍵關(guān)系去除。兩張表的連接查詢一定有一個(gè)主外鍵關(guān)系,三張表的連接查詢就一定有兩個(gè)主外鍵關(guān)系,所以在大家不是很熟悉連接查詢時(shí),首先要學(xué)會(huì)去除無用笛卡爾積,那么就是用主外鍵關(guān)系作為條件來處理。如果兩張表的查詢,那么至少有一個(gè)主外鍵條件,三張表連接至少有兩個(gè)主外鍵條件。自然連接大家也都知道,連接查詢會(huì)產(chǎn)生無用笛卡爾積,我們通常使用主外鍵關(guān)系等式來去除它。而自然連接無需你去給出主外鍵等式,它會(huì)自動(dòng)找到這一等式:兩張連接的表中名稱和類型完成一致的列作為條件,例如emp和dept表都存在deptno列,并且類型一致,所以會(huì)被自然連接找到!當(dāng)然自然連接還有其他的查找條件的方式,但其他方式都可能存在問題!SELECT*FROMempNATURALJOINdept;內(nèi)連接內(nèi)連接SELECT*FROM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《域名品牌保護(hù)介紹》課件
- 《吆喝課件》課件
- 電力電工基礎(chǔ)習(xí)題庫含答案
- 養(yǎng)老院老人生活設(shè)施管理制度
- 養(yǎng)老院老人財(cái)產(chǎn)保管制度
- 《皮內(nèi)針刺法》課件
- 旅客運(yùn)輸合同(2篇)
- 2024全新生物制品檢測與質(zhì)量保證合同2篇
- 電器課件-交流發(fā)電機(jī)
- 2025年廣東貨運(yùn)從業(yè)資格仿真考題
- 蓬萊19-3油田溢油事故案例分析工程倫理
- 【創(chuàng)業(yè)企業(yè)商業(yè)模式創(chuàng)新調(diào)研分析報(bào)告3000字(論文)】
- 550kta MTO (甲醇制烯烴)反應(yīng)工段的工藝設(shè)計(jì)
- 國家OTC藥品目錄(全部品種)
- 社會(huì)主義發(fā)展簡史智慧樹知到課后章節(jié)答案2023年下北方工業(yè)大學(xué)
- 2022年考研數(shù)學(xué)(二)真題(含答案及解析)【可編輯】
- 學(xué)生填涂答題卡注意事項(xiàng)詳解(中小學(xué)生考試專題講解培訓(xùn)課件)
- Android課程設(shè)計(jì)報(bào)告
- 三相橋式全控整流及有源逆變電路仿真
- 法學(xué)院學(xué)生職業(yè)生涯規(guī)劃書模板
- 課題研究技術(shù)路線圖
評論
0/150
提交評論