MYSQL講課時的課件_第1頁
MYSQL講課時的課件_第2頁
MYSQL講課時的課件_第3頁
MYSQL講課時的課件_第4頁
MYSQL講課時的課件_第5頁
已閱讀5頁,還剩120頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章MySql學(xué)生第一次課時,將筆記本帶到課堂---演示軟件安裝第三章MySql學(xué)生第一次課時,將筆記本帶到課堂---演概述學(xué)習(xí)目標(biāo):掌握Word文檔的建立、編輯、格式化、保存、輸出的基本操作熟悉Word模板的使用掌握Word表格的相關(guān)操作圖形了解在Word中處理圖片、圖形的方法了解樣式、域的基本使用概述學(xué)習(xí)目標(biāo):第三章主要內(nèi)容8.1數(shù)據(jù)庫8.2SQL語句3.33.4輸入文本內(nèi)容——“插入”菜單3.5修改內(nèi)容——“編輯”菜單3.6文檔排版——“格式”菜單3.7Word對象的創(chuàng)建與設(shè)置3.8表格——“表格”菜單3.9打印輸出3.10綜合實例第三章主要內(nèi)容8.1數(shù)據(jù)庫3.1 數(shù)據(jù)庫3.1.1數(shù)據(jù)庫概念3.1.2安裝MYSQL數(shù)據(jù)庫 3.1.3MySQL服務(wù)器啟動與客戶端的登錄3.1 數(shù)據(jù)庫3.1.1數(shù)據(jù)庫概念3.1.1數(shù)據(jù)庫概念(了解)數(shù)據(jù)庫就是用來存儲和管理數(shù)據(jù)的倉庫!數(shù)據(jù)庫存儲數(shù)據(jù)的優(yōu)先:

可存儲大量數(shù)據(jù);方便檢索;保持?jǐn)?shù)據(jù)的一致性、完整性;安全,可共享;通過組合分析,可產(chǎn)生新數(shù)據(jù)。3.1.1數(shù)據(jù)庫概念(了解)數(shù)據(jù)庫就是用來存儲和管理數(shù)據(jù)數(shù)據(jù)庫的發(fā)展歷程沒有數(shù)據(jù)庫,使用磁盤文件存儲數(shù)據(jù);層次結(jié)構(gòu)模型數(shù)據(jù)庫;網(wǎng)狀結(jié)構(gòu)模型數(shù)據(jù)庫;關(guān)系結(jié)構(gòu)模型數(shù)據(jù)庫:使用二維表格來存儲數(shù)據(jù);關(guān)系-對象模型數(shù)據(jù)庫;注意:MySQL就是關(guān)系型數(shù)據(jù)庫!Java---面向?qū)ο?;?shù)據(jù)庫---面向關(guān)系;二者之間有一個映射。數(shù)據(jù)庫的發(fā)展歷程沒有數(shù)據(jù)庫,使用磁盤文件存儲數(shù)據(jù);常見數(shù)據(jù)庫Oracle:市場使用率最高!業(yè)界霸主;(1)“神喻”---國外應(yīng)用的名字;(2)甲骨文---在中國注冊的名字。DB2:IBM;SQLServer:微軟;(課堂上,.net平臺使用自己的東西)Sybase:賽爾斯;MySQL:甲骨文;(起始時免費,新版本也開始收費,目前用的5.5版本還是免費的)常見數(shù)據(jù)庫Oracle:市場使用率最高!業(yè)界霸主;理解數(shù)據(jù)庫我們現(xiàn)在所說的數(shù)據(jù)庫泛指“關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS-Relationaldatabasemanagementsystem

)”,即“數(shù)據(jù)庫服務(wù)器”。

理解數(shù)據(jù)庫我們現(xiàn)在所說的數(shù)據(jù)庫泛指“關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(理解數(shù)據(jù)庫當(dāng)我們安裝了數(shù)據(jù)庫服務(wù)器后,就可以在數(shù)據(jù)庫服務(wù)器中創(chuàng)建數(shù)據(jù)庫,每個數(shù)據(jù)庫中還可以包含多張表。

理解數(shù)據(jù)庫當(dāng)我們安裝了數(shù)據(jù)庫服務(wù)器后,就可以在數(shù)據(jù)庫服務(wù)器理解數(shù)據(jù)庫數(shù)據(jù)庫表就是一個多行多列的表格。在創(chuàng)建表時,需要指定表的列數(shù),以及列名稱,列類型等信息。而不用指定表格的行數(shù),行數(shù)是沒有上限的。下面是tab_student表的結(jié)構(gòu):

理解數(shù)據(jù)庫數(shù)據(jù)庫表就是一個多行多列的表格。在創(chuàng)建表時,需要理解數(shù)據(jù)庫當(dāng)把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據(jù)了。向表格添加數(shù)據(jù)是以行為單位的!下面是s_student表的記錄:

注意:大家要學(xué)會區(qū)分什么是表結(jié)構(gòu),什么是表記錄。理解數(shù)據(jù)庫當(dāng)把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據(jù)了。應(yīng)用程序與數(shù)據(jù)庫應(yīng)用程序使用數(shù)據(jù)庫完成對數(shù)據(jù)的存儲!

應(yīng)用程序與數(shù)據(jù)庫應(yīng)用程序使用數(shù)據(jù)庫完成對數(shù)據(jù)的存儲!應(yīng)用程序與數(shù)據(jù)庫(1)數(shù)據(jù)庫和應(yīng)用程序(如Java)不在同一臺機器上,遠(yuǎn)程訪問數(shù)據(jù)庫。例如家(應(yīng)用程序)和倉庫(專門存放數(shù)據(jù)的,數(shù)據(jù)庫)在兩個地點。講課時,為了方便數(shù)據(jù)庫和應(yīng)用程序是在同一臺機器上的。(2)數(shù)據(jù)庫和應(yīng)用程序離得很遠(yuǎn)。遠(yuǎn)程數(shù)據(jù)庫。如家和倉庫離得很遠(yuǎn)。應(yīng)用程序與數(shù)據(jù)庫(1)數(shù)據(jù)庫和應(yīng)用程序(如Java)不在同3.1.2 安裝MySQL數(shù)據(jù)庫1、安裝MySQL

2、MySQL目錄結(jié)構(gòu)

3.1.2 安裝MySQL數(shù)據(jù)庫1、安裝MySQL安裝MySQL安裝參考:MySQL安裝圖解.doc

校驗安裝:MySQL安裝圖解.doc

重點內(nèi)容:開啟關(guān)閉服務(wù)器以及登錄退出客戶端。卸載方法:MySQL安裝圖解.doc

安裝MySQL安裝參考:MySQL安裝圖解.docMySQL目錄結(jié)構(gòu)參見:MySQL安裝目錄介紹.doc MySQL目錄結(jié)構(gòu)參見:MySQL安裝目錄介紹.doc 3.1.3MySQL服務(wù)器啟動與客戶端的登錄服務(wù)器操作開啟服務(wù)器(必須保證mysql為windows服務(wù)):兩種方法。>驗證方法:查看進(jìn)程表中是否存在:mysqld.exe進(jìn)程(存在)客戶登操作開始---運行---cmd1.登錄服務(wù)器:mysql-uroot-p123-hlocalhost>-u:后面跟隨用戶名>-p:后面跟隨密碼>-h:后面跟隨IP,可以省略,也可以為-hlocalhost或者-h,表示本機IP

驗證方法:查看進(jìn)程表中是否存在:mysql.exe進(jìn)程(存在)2.退出服務(wù)器:exit或quit

3.1.3MySQL服務(wù)器啟動與客戶端的登錄服務(wù)器操作8.2 SQL語句8.2.1SQL概述8.2.2SQL

分類 8.2.3DDL(用的不太多)8.2.4DML(用的多)8.2.5DCL(用的很少)8.2.6DQL(用的多)8.2 SQL語句8.2.1SQL概述SQL概述SQL(StructuredQueryLanguage)是“結(jié)構(gòu)化查詢語言”,它是對關(guān)系型數(shù)據(jù)庫的操作語言。它可以應(yīng)用到所有關(guān)系型數(shù)據(jù)庫中,例如:MySQL、Oracle、SQLServer等。

通俗地講,SQL

語言用于服務(wù)器端與客戶端對話使用。即客戶端使用SQL來操作服務(wù)器。

>啟動mysql.exe,連接服務(wù)器后,就可以使用sql來操作服務(wù)器了。

>將來會使用Java程序連接服務(wù)器,然后使用sql來操作服務(wù)器。

SQL概述SQL(StructuredQueryLangSQL概述SQL標(biāo)準(zhǔn)(例如SQL99,即1999年制定的標(biāo)準(zhǔn),不斷升級版本):

>由國際標(biāo)準(zhǔn)化組織(ISO)制定的,對DBMS的統(tǒng)一操作方式(例如相同的語句可以操作:mysql、oracle、SQLServer等,即這些數(shù)據(jù)庫通用該語言)。SQL方言

>雖然SQL可以用在所有關(guān)系型數(shù)據(jù)庫中,但很多數(shù)據(jù)庫還會有一些自己獨有的語法,這就稱之為方言!例如limit語句只在MySQL中可以使用,其它數(shù)據(jù)庫都不支持!當(dāng)然,Oracle或SQLServer都有自己的方言。

SQL概述SQL標(biāo)準(zhǔn)(例如SQL99,即1999年制定的標(biāo)準(zhǔn)SQL概述語法要求SQL語句可以單行或多行書寫,以分號結(jié)尾(注意:不同的使用環(huán)境對是否具有分號的要求也不同);可以用空格和縮進(jìn)來來增強語句的可讀性;關(guān)鍵字不區(qū)別大小寫,建議使用大寫;

如:SELECT*FROMbook;SQL概述語法要求SQL語句分類1.DDL(DataDefinitionLanguage):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象:庫、表、列等;

>創(chuàng)建、刪除、修改:庫、表結(jié)構(gòu)!??!2.DML(DataManipulationLanguage):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄(數(shù)據(jù));

>增、刪、改:表記錄3.DCL(DataControlLanguage):數(shù)據(jù)控制語言,用來定義訪問權(quán)限和安全級別;4.DQL*****(DataQueryLanguage):數(shù)據(jù)查詢語言,用來查詢記錄(數(shù)據(jù))。本質(zhì)上屬于2的一部分。ddl:數(shù)據(jù)庫或表的結(jié)構(gòu)操作(重點)dml:對表的記錄進(jìn)行更新(增、刪、改)(重點)dql:對表的記錄的查詢(重點,難點)dcl:對用戶的創(chuàng)建,及授權(quán)!(盡量不用使用root,創(chuàng)建其他普通用戶并使用)SQL語句分類1.DDL(DataDefinitionDDL知識---數(shù)據(jù)庫操作1.數(shù)據(jù)庫操作查看所有數(shù)據(jù)庫:SHOWDATABASES;切換(選擇要操作的)數(shù)據(jù)庫:USE數(shù)據(jù)庫名;創(chuàng)建數(shù)據(jù)庫:CREATEDATABASE[IFNOTEXISTS]mydb1[CHARSET=utf8]創(chuàng)建數(shù)據(jù)庫,例如:CREATEDATABASEmydb1;,創(chuàng)建一個名為mydb1的數(shù)據(jù)庫。如果這個數(shù)據(jù)已經(jīng)存在,那么會報錯。例如CREATEDATABASEIFNOTEXISTSmydb1,在名為mydb1的數(shù)據(jù)庫不存在時創(chuàng)建該庫,這樣可以避免報錯?!癈HARSET=utf8”選項可以省略,因為在安裝MySql時,已經(jīng)指定了符號集。如果不指定字符集,則默認(rèn)使用utf8。DDL知識---數(shù)據(jù)庫操作1.數(shù)據(jù)庫操作DDL知識1.數(shù)據(jù)庫操作刪除數(shù)據(jù)庫:DROPDATABASE[IFEXISTS]mydb1

刪除數(shù)據(jù)庫,例如:DROPDATABASEmydb1;,刪除名為mydb1的數(shù)據(jù)庫。如果這個數(shù)據(jù)庫不存在,那么會報錯。DROPDATABASEIFEXISTSmydb1,就算mydb1不存在,也不會的報錯。修改數(shù)據(jù)庫編碼:ALTERDATABASEmydb1CHARACTERSETutf8;

修改數(shù)據(jù)庫mydb1的編碼為utf8。注意,在MySQL中所有的UTF-8編碼都不能使用中間的“-”,即UTF-8要書寫為UTF8。DDL知識1.數(shù)據(jù)庫操作DDL知識(軟件SQLyog)---數(shù)據(jù)類型2.數(shù)據(jù)類型(參見“MySQL數(shù)據(jù)類型.doc”,MySQL中數(shù)據(jù)類型后面括號內(nèi)的數(shù)字通常表示實際數(shù)據(jù)的位數(shù))MySQL與Java一樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應(yīng)用在列上。int:整型double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大值為999.99;decimal:浮點型,在表示錢方面使用該類型,因為不會出現(xiàn)精度缺失問題;DDL知識(軟件SQLyog)---數(shù)據(jù)類型2.數(shù)據(jù)類型(DDL知識2.數(shù)據(jù)類型char:固定長度字符串類型;char(255),數(shù)據(jù)的長度不足指定長度,補足到指定長度!如char(4),當(dāng)數(shù)據(jù)長度為2時,會在后面添加2個空格補位。注意:255表示字符串的長度或者255Byte,此時一個字符便為一個Byte。適合于身份證號碼、時間等固定長度場合的表示。varchar:可變長度字符串類型;varchar(65535),數(shù)據(jù)的長度不足指定長度,不補足到指定長度!如zhangSan。缺點:需要使用一個字節(jié)用來記錄長度。當(dāng)數(shù)據(jù)長度大于255時,記錄長度就需要2個字節(jié)了。DDL知識2.數(shù)據(jù)類型DDL知識text(對應(yīng)“標(biāo)準(zhǔn)”里的clob類型):字符串類型;MySQL獨有的類型。>很小---tinytext>小---text>中---mediumtext>大---longtext,存儲一本小說blob:字節(jié)類型;>很小---tinyblob>小---blob>中---mediumblob>大---longblobdate:日期類型,格式為:yyyy-MM-dd;time:時間類型,格式為:hh:mm:sstimestamp:時間戳類型;包含時間和日期。DDL知識text(對應(yīng)“標(biāo)準(zhǔn)”里的clob類型):字符串類DDL知識---表的操作1、創(chuàng)建表語法如下:CREATE[IFNOTEXISTS]TABLE表名(

列名列類型,

列名列類型,......

列名列類型);DDL知識---表的操作1、創(chuàng)建表DDL知識---表的操作1、創(chuàng)建表例如,創(chuàng)建如下表:CREATETABLEstu( sid CHAR(6), sname VARCHAR(20), age INT, gender VARCHAR(10));

表的字段名稱:學(xué)號、姓名、年齡和性別。DDL知識---表的操作1、創(chuàng)建表DDL知識---表的操作又如,創(chuàng)建如下表(雇工表):CREATETABLEemp(

eid CHAR(6), ename VARCHAR(50), age INT, gender VARCHAR(6), birthday DATE, hiredate DATE, salary DECIMAL(7,2), resume VARCHAR(1000));表的字段名稱:工號、姓名、年齡、性別、生日、雇用日期、薪水、個人簡歷。DDL知識---表的操作又如,創(chuàng)建如下表(雇工表):DDL知識---表的操作2、查看當(dāng)前數(shù)據(jù)庫中所有表名稱:SHOWTABLES;3、查看指定表的創(chuàng)建語句:SHOWCREATETABLE表名(了解);

如:SHOWCREATETABLEemp;,查看emp表的創(chuàng)建語句;4、查看表結(jié)構(gòu):DESC表名;如:DESCemp;,查看emp表結(jié)構(gòu);5、刪除表:DROPTABLE表名;如:DROPTABLEemp;,刪除emp表;DDL知識---表的操作2、查看當(dāng)前數(shù)據(jù)庫中所有表名稱:SHDDL知識---表的操作6、修改表:前綴:ALTERTABLE表名>修改之添加列:ALTERTABLE表名

ADD(

列名列類型,列名列類型,...

列名列類型);

如:給stu表添加classname列:

ALTERTABLEstuADD(classnamevarchar(100));

DDL知識---表的操作6、修改表:前綴:ALTERTADDL知識---表的操作6、修改表:>修改之修改列類型(如果被修改的列已存在數(shù)據(jù),那么新的類型可能會影響到已存在數(shù)據(jù)),語法如下:

ALTERTABLE表名

MODIFY列名列類型;

如:修改stu表的gender列類型為CHAR(2):ALTERTABLEstuMODIFYgenderCHAR(2);DDL知識---表的操作6、修改表:DDL知識---表的操作6、修改表:修改之修改列名,語法如下:

ALTERTABLE表名

CHANGE原列名新列名列類型;如:修改stu表的gender列名為sex:ALTERTABLEstuchangegendersexCHAR(10);

DDL知識---表的操作6、修改表:DDL知識---表的操作6、修改表:修改之刪除列,語法如下:

ALTERTABLE表名

DROP列名;如:刪除stu表的classname列:ALTERTABLEstuDROPclassname;

DDL知識---表的操作6、修改表:DDL知識---表的操作6、修改表>修改表名稱,語法如下:ALTERTABLE原表名

RENAMETO新表名;如:修改stu表名稱為student:ALTERTABLEstuRENAMETOstudent;DDL知識---表的操作6、修改表DML知識---插入數(shù)據(jù)DML(數(shù)據(jù)操作語言,它是對表記錄的操作(增、刪、改)!)預(yù)備知識:DQL查詢表記錄:SELECT*FROM表名;1.插入數(shù)據(jù)INTERTINTO表名(列名1,列名2,...)VALUES(列值1,列值2,...);>在表名后給出要插入的列名,其他沒有指定的列等同于插入null值。所以插入記錄總是插入一行,不可能是半行。

>在VALUES后給出列值,值的順序和個數(shù)必須與前面指定的列對應(yīng)。DML知識---插入數(shù)據(jù)DML(數(shù)據(jù)操作語言,它是對表記錄的DML知識---插入數(shù)據(jù)例如:INSERTINTOstu(sid,sname,age,gender)VALUES('s_1001','zhangSan',23,'male');

注意:(1)在數(shù)據(jù)庫中所有的字符串類型,必須使用單引,不能使用雙引?。?)日期類型也要使用單引!又如:INSERTINTOstu(sid,sname)VALUES('s_1001','zhangSan');注意:因為沒有插入age和gender列的數(shù)據(jù),所以該條記錄的age和gender值上為NULLDML知識---插入數(shù)據(jù)例如:DML知識---插入數(shù)據(jù)又如:INSERTINTOstu(sname,age,sid,gender)VALUES('wangwu',23,'s_1003','female');

注意:在VALUES后給出列值,值的順序和個數(shù)必須與前面指定的列對應(yīng)。DML知識---插入數(shù)據(jù)又如:DML知識---插入數(shù)據(jù)1.插入數(shù)據(jù)INTERTINTO表名VALUES(列值1,列值2);>沒有給出要插入的列,那么表示插入所有列。

>值的個數(shù)必須是該表列的個數(shù)。>值的順序,必須與表創(chuàng)建時給出的列的順序相同。>不建議使用此種方式。如:INSERTINTOstuVALUES('s_1002','liSi',32,'female');

注意:插入記錄中盡可能不出現(xiàn)漢字。DML知識---插入數(shù)據(jù)1.插入數(shù)據(jù)DML知識---修改數(shù)據(jù)2.修改數(shù)據(jù)(一次可以同時修改表中的多條記錄)UPDATE表名SET列名1=列值1,列名2=列值2,...[WHERE條件]說明:條件(條件可選的):

>條件必須是一個boolean類型的值或表達(dá)式:UPDATEstuSETsname='zhangSanSan',age='32',gender='male'WHEREsid='s_1002';>運算符:=、!=(不等于)、<>(不等于)

、>、<、>=、<=、BETWEEN...AND、IN(...)、ISNULL、NOT、OR、ANDMs-dos下,命令切換的三個鍵:F3\F5\F8 。DML知識---修改數(shù)據(jù)2.修改數(shù)據(jù)(一次可以同時修改表中DML知識---修改數(shù)據(jù)例如:(1)UPDATEstuSETsname='liSi',age='20'WHEREage>30ANDgender='male';(2)UPDATEstuSETgender='female'WHEREgenderISNULL;(3)UPDATEstuSETage=age+1WHEREsname='liSi';注意:在SQL中賦值和等于都是用“=”,根據(jù)上下文進(jìn)行判斷具體含義。DML知識---修改數(shù)據(jù)例如:DML知識---修改數(shù)據(jù)例如:(4)UPDATEstuSETage=age+1WHEREage>=22ANDage<=41;等同于UPDATEstuSETage=age+1WHEREagebetween22AND41;DML知識---修改數(shù)據(jù)例如:DML知識---修改數(shù)據(jù)(5)UPDATEstuSETage=37WHEREsname='wangwu'orsname='lisi';等同于UPDATEstuSETage=39WHEREsnamein('wangwu','lisi');(6)UPDATEstuSETage=31WHEREnotsnamein('wangwu','lisi');將名字不是wangwu和lisi的人員的年齡修改為31。DML知識---修改數(shù)據(jù)(5)UPDATEstuSETDML知識---修改數(shù)據(jù)(7)UPDATEstuSETage=nullWHEREsname='wangwu'orsname='lisi';錯誤用法:UPDATEstuSETage=55WHEREage=null;正確用法:UPDATEstuSETage=55WHEREageisnull;同理:UPDATEstuSETage=66WHEREageisnotnull;DML知識---修改數(shù)據(jù)(7)UPDATEstuSETDML知識---刪除數(shù)據(jù)3.刪除數(shù)據(jù)

DELETEFROM表名[WHERE條件];例如:

(1)DELETEFROMstuWHEREsid='s_1001'andgender='female';(2)DELETEFROMstu;//刪除表所有記錄DML知識---刪除數(shù)據(jù)3.刪除數(shù)據(jù)DML知識---刪除數(shù)據(jù)3.刪除數(shù)據(jù)TRUNCATETABLE表名;雖然TRUNCATE和DELETE都可以刪除表的所有記錄,但有原理不同。DELETE的效率沒有TRUNCATE高!

TRUNCATE其實屬性DDL語句,因為它是先DROPTABLE,再CREATETABLE。而且TRUNCATE刪除的記錄是無法回滾的,但DELETE刪除的記錄是可以回滾的(回滾是事務(wù)的知識?。ML知識---刪除數(shù)據(jù)3.刪除數(shù)據(jù)DCL知識---項目、用戶、數(shù)據(jù)庫之間的關(guān)系。

一個項目創(chuàng)建一個用戶!一個項目對應(yīng)的數(shù)據(jù)庫只有一個!上述創(chuàng)建的這個用戶只能對這個數(shù)據(jù)庫有權(quán)限,其他數(shù)據(jù)庫你就操作不了了!實際當(dāng)中并不能總是使用root用戶。Root為超級用戶(管理員),不受IP限制,即在任何IP的計算機上都能登錄數(shù)據(jù)庫。DCL知識---項目、用戶、數(shù)據(jù)庫之間的關(guān)系。DCL知識---創(chuàng)建用戶1.創(chuàng)建用戶(1)CREATEUSER用戶名@IP地址IDENTIFIEDBY'密碼';>用戶只能在指定的IP地址上登錄(2)CREATEUSER用戶名@'%'IDENTIFIEDBY'密碼';>用戶可以在任意IP地址上登錄DCL知識---創(chuàng)建用戶1.創(chuàng)建用戶DCL知識---創(chuàng)建用戶1.創(chuàng)建用戶(使用root登錄(此時權(quán)限最大),而后進(jìn)行創(chuàng)建用戶操作)例如:(1)CREATEUSERuser1@localhostIDENTIFIEDBY'123';user1用戶只能在localhost這個IP登錄mysql服務(wù)器

驗證方法:mysql-uuser1-p123或者mysql-uuser1-p123-hlocalhost驗證登錄。(2)CREATEUSERuser2@'%'IDENTIFIEDBY'123';user2用戶可以在任何電腦上登錄mysql服務(wù)器。驗證方法:mysql-uuser2-p123驗證登錄。注意:user1和user2權(quán)限很有限,還需授權(quán)。如:此時在user1或者user2登錄的情況下,鍵入showdatabases;命令,將顯示不出mydb1數(shù)據(jù)庫,即user1或者user2沒有對mydb1數(shù)據(jù)庫操作的權(quán)限。DCL知識---創(chuàng)建用戶1.創(chuàng)建用戶(使用root登錄(此DCL知識---給用戶授權(quán)2.給用戶授權(quán)(使用root登錄(此時權(quán)限最大),而后進(jìn)行用戶授權(quán)操作)(1)GRANT權(quán)限1,…,權(quán)限nON數(shù)據(jù)庫.*TO用戶名@IP地址>權(quán)限、用戶、數(shù)據(jù)庫>給用戶分派在指定的數(shù)據(jù)庫上的指定的權(quán)限>例如:GRANTCREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECTONmydb1.*TOuser1@localhost;給user1用戶分派在mydb1數(shù)據(jù)庫上的create、alter、drop、insert、update、delete、select權(quán)限。此時在user1登錄的情況下,鍵入showdatabases;命令,將能夠顯示出mydb1數(shù)據(jù)庫,即user1擁有了對mydb1數(shù)據(jù)庫操作的權(quán)限

同樣可以進(jìn)行select等操作。DCL知識---給用戶授權(quán)2.給用戶授權(quán)(使用root登錄DCL知識---給用戶授權(quán)2.給用戶授權(quán)(使用root登錄(此時權(quán)限最大),而后進(jìn)行用戶授權(quán)操作)

(2)GRANTALLON數(shù)據(jù)庫.*TO用戶名@IP地址;>給用戶分派指定數(shù)據(jù)庫上的所有權(quán)限。例如:GRANTALLONmydb1.*TOuser2@localhost;

此時在user2登錄的情況下,鍵入showdatabases;命令,將能夠顯示出mydb1數(shù)據(jù)庫,即user2擁有了對mydb1數(shù)據(jù)庫操作的權(quán)限,同樣可以進(jìn)行select等操作。DCL知識---給用戶授權(quán)2.給用戶授權(quán)(使用root登錄DCL知識---撤銷授權(quán)3.撤銷授權(quán)(使用root登錄(此時權(quán)限最大),而后進(jìn)行撤銷授權(quán)操作)REVOKE權(quán)限1,…,權(quán)限nON數(shù)據(jù)庫.*FROM用戶名@IP地址;>撤消指定用戶在指定數(shù)據(jù)庫上的指定權(quán)限>例如;REVOKECREATE,ALTER,DROPONmydb1.*FROMuser1@localhost;撤消user1用戶在mydb1數(shù)據(jù)庫上的create、alter、drop權(quán)限D(zhuǎn)CL知識---撤銷授權(quán)3.撤銷授權(quán)(使用root登錄DCL知識---撤銷授權(quán)3.撤銷授權(quán)(使用root登錄(此時權(quán)限最大),而后進(jìn)行撤銷授權(quán)操作)例如:REVOKEdeleteONmydb1.*FROMuser1@localhost;

驗證方法:使用user1登錄,而后切換到mydb1數(shù)據(jù)庫,執(zhí)行delete操作將錯誤。具體如下:

(1)mysql-uuser1-p123(2)

usemydb1;(3)deletefromstu;DCL知識---撤銷授權(quán)3.撤銷授權(quán)(使用root登錄DCL知識---查看權(quán)限4.查看權(quán)限(使用root登錄(此時權(quán)限最大),而后進(jìn)行查看權(quán)限操作)SHOWGRANTSFOR用戶名@IP地址

>查看指定用戶的權(quán)限如:SHOWGRANTSFORuser1@localhost;

DCL知識---查看權(quán)限4.查看權(quán)限(使用root登錄DCL知識---刪除用戶5.刪除用戶(使用root登錄(此時權(quán)限最大),而后進(jìn)行刪除用戶操作)

DROPUSER用戶名@IP地址如:DROPUSERuser1@localhost;

此時再用user1登錄將出錯。DCL知識---刪除用戶5.刪除用戶(使用root登錄DQL就是數(shù)據(jù)查詢語言,數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進(jìn)行改變,而是讓數(shù)據(jù)庫發(fā)送結(jié)果集給客戶端。

創(chuàng)建學(xué)生表:stu字段名稱字段類型說明sidchar(6)學(xué)生學(xué)號snamevarchar(50)學(xué)生姓名ageint學(xué)生年齡gendervarchar(50)學(xué)生性別DQL知識---

準(zhǔn)備工作DQL就是數(shù)據(jù)查詢語言,數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進(jìn)行改DQL知識---

準(zhǔn)備工作創(chuàng)建代碼:CREATETABLEstu(

sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50));DQL知識---準(zhǔn)備工作創(chuàng)建代碼:DQL知識---

準(zhǔn)備工作插入記錄: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);DQL知識---準(zhǔn)備工作插入記錄:創(chuàng)建雇員表:empDQL知識---

準(zhǔn)備工作字段名稱字段類型說明empnoint員工編號enamevarchar(50)員工姓名jobvarchar(50)員工工作mgrint領(lǐng)導(dǎo)編號hiredatedate入職日期saldecimal(7,2)月薪commdecimal(7,2)獎金deptnoint部分編號創(chuàng)建雇員表:empDQL知識---準(zhǔn)備工作字段名稱字段類DQL知識---

準(zhǔn)備工作創(chuàng)建代碼:CREATETABLEemp(

empno INT, ename VARCHAR(50), job VARCHAR(50), mgr INT, hiredate DATE, sal DECIMAL(7,2), comm decimal(7,2), deptno INT);DQL知識---準(zhǔn)備工作創(chuàng)建代碼:DQL知識---

準(zhǔn)備工作插入記錄:INSERTINTOempVALUES(1009,'zenganiu','chairman',NULL,'2001-11-17',50000,NULL,10);INSERTINTOempVALUES(1004,'liubei','manager',1009,'2001-04-02',29750,NULL,20);INSERTINTOempVALUES(1006,'guanyu','manager',1009,'2001-05-01',28500,NULL,30);INSERTINTOempVALUES(1007,'zhangfei','manager',1009,'2001-09-01',24500,NULL,10);INSERTINTOempVALUES(1008,'zhugeliang','analyst',1004,'2007-04-19',30000,NULL,20);INSERTINTOempVALUES(1013,'pangtong','analyst',1004,'2001-12-03',30000,NULL,20);DQL知識---準(zhǔn)備工作插入記錄:DQL知識---

準(zhǔn)備工作INSERTINTOempVALUES(1002,'daiyisi','salesman',1006,'2001-02-20',16000,3000,30);INSERTINTOempVALUES(1003,'yintianzheng','salesman',1006,'2001-02-22',12500,5000,30);INSERTINTOempVALUES(1005,'xiexun','salesman',1006,'2001-09-28',12500,14000,30);INSERTINTOempVALUES(1010,'weiyixiao','salesman',1006,'2001-09-08',15000,0,30);INSERTINTOempVALUES(1012,'chengpu','clerk',1006,'2001-12-03',9500,NULL,30);INSERTINTOempVALUES(1014,'huanggai','clerk',1007,'2002-01-23',13000,NULL,10);INSERTINTOempVALUES(1011,'zhoutai','clerk',1008,'2007-05-23',11000,NULL,20);INSERTINTOempVALUES(1001,'ganning','clerk',1013,'2000-12-17',8000,NULL,20);DQL知識---準(zhǔn)備工作INSERTINTOemp創(chuàng)建部分表:deptDQL知識---

準(zhǔn)備工作字段名稱字段類型說明deptnoint部分編碼dnamevarchar(50)部分名稱locvarchar(50)部分所在地點創(chuàng)建部分表:deptDQL知識---準(zhǔn)備工作字段名稱字DQL知識---

準(zhǔn)備工作創(chuàng)建代碼:CREATETABLEdept(

deptno INT, dname varchar(50), loc varchar(50));DQL知識---準(zhǔn)備工作創(chuàng)建代碼:DQL知識---

準(zhǔn)備工作插入記錄:INSERTINTOdeptVALUES(10,'jiaoyanbu','beijing');INSERTINTOdeptVALUES(20,'xuegongbu','shanghai');INSERTINTOdeptVALUES(30,'xiaoshoubu','guangzhou');INSERTINTOdeptVALUES(40,'caiwubu','wuhan');DQL知識---準(zhǔn)備工作插入記錄:DQL知識---基本查詢一、基本查詢1.字段(列)控制1)查詢所有列

SELECT*FROM表名;

如:SELECT*FROMemp;-->其中“*”表示查詢所有列DQL知識---基本查詢一、基本查詢DQL知識---基本查詢2)查詢指定列SELECT列1[,列2,...列N]FROM表名;如:SELECTempno,ename,sal,commFROMemp;DQL知識---基本查詢2)查詢指定列DQL知識---基本查詢3)完全重復(fù)的記錄只一次當(dāng)查詢結(jié)果中的多行記錄一模一樣時,只顯示一行。一般查詢所有列時很少會有這種情況,但只查詢一列(或幾列)時,這總可能就大了!SELECTDISTINCT*|列1[,列2,...列N]FROM表名;SELECTDISTINCTjobFROMemp;SELECTDISTINCTdeptnoFROMemp;-->保查詢員工表的部門編號,如果存在相同的部門只顯示一次!注意:該操作并不刪除數(shù)據(jù)庫中的重復(fù)記錄,只是查詢。DQL知識---基本查詢3)完全重復(fù)的記錄只一次DQL知識---基本查詢4)列運算(調(diào)節(jié)ms-dos窗口寬度的方法:單擊左上角圖標(biāo)---屬性---布局---窗口大小---寬度)Ⅰ.數(shù)量類型的列可以做加、減、乘、除運算

例如:

SELECT*,salFROMemp;

SELECT*,sal*1.5FROMemp;SELECT*,sal+commFROMemp;注意:任何數(shù)據(jù)+NULL=NULL,處理方法見下頁。ename+100=100,此時ename值處理成0。DQL知識---基本查詢4)列運算(調(diào)節(jié)ms-dos窗口寬DQL知識---基本查詢Ⅱ.轉(zhuǎn)換NULL值有時需要把NULL轉(zhuǎn)換成其它值,例如com+1000時,如果com列存在NULL值,那么NULL+1000還是NULL,而我們這時希望把NULL處理為0來運算。SELECT*,sal+IFNULL(comm,0)FROMemp;說明:IFNULL(comm,0):如果comm中存在NULL值,那么當(dāng)成0來運算。又如:selectempno,ename,job,ifnull(mgr,'boss'),hiredate,sal,comm,deptnofromemp;DQL知識---基本查詢Ⅱ.轉(zhuǎn)換NULL值DQL知識---基本查詢Ⅲ.字符串類型可以做連續(xù)運算。Java中字符串連接符號為+;Oracle中字符串連接符號為||;MySQL中字符串連接符號為CONCAT

例如:SELECTCONCAT('$',sal)FROMemp;又如:selectconcat(ename,job)fromemp;selectconcat('mynameis',ename,'myjobis',job)fromemp;DQL知識---基本查詢Ⅲ.字符串類型可以做連續(xù)運算。DQL知識---基本查詢

Ⅳ.給列起別名

你也許已經(jīng)注意到了,當(dāng)使用列運算后,查詢出的結(jié)果集中的列名稱很不好看,這時我們需要給列名起個別名,這樣在結(jié)果集中列名就顯示別名了

SELECT*,sal+IFNULL(comm,0)ASjiangjinFROMemp;-->其中AS可以省略又如:selectconcat('mynameis',ename,'myjobis',job)asdescrfromemp;DQL知識---基本查詢Ⅳ.給列起別名DQL知識---基本查詢

Ⅳ.給列起別名

以下兩者等價:selectenameasname,jobasworkfromemp;等價于:selectenamename,jobworkfromemp;問題:selectempno,enamejob,sal,commfromemp;是否有錯,結(jié)果如何?DQL知識---基本查詢Ⅳ.給列起別名DQL知識---基本查詢2、條件控制1)條件查詢與前面介紹的UPDATE和DELETE語句一樣,SELECT語句也可以使用WHERE子句來控制記錄。說明:條件必須是一個boolean類型的值或表達(dá)式;運算符:=、!=(不等于)、<>(不等于)

、>、<、>=、<=、BETWEEN...AND、IN(...)、ISNULL、NOT、OR、AND。DQL知識---基本查詢2、條件控制DQL知識---基本查詢1)條件查詢舉例如下:SELECTempno,ename,sal,commFROMempWHEREsal>10000ANDcommISNOTNULL;SELECTempno,ename,salFROMempWHEREsalBETWEEN20000AND30000;SELECTempno,ename,jobFROMempWHEREjobIN('chairman','manager');DQL知識---基本查詢1)條件查詢DQL知識---基本查詢2)模糊查詢當(dāng)你想查詢姓名中以“Z”開頭,并且名字包含7個字符的員工時,就可以使用模糊查詢:

SELECT*FROMempWHEREenameLIKE'z______';

注意:模糊查詢需要使用運算符:LIKE,其中_匹配一個任意字符,注意,只匹配一個字符而不是多個。SELECT*FROMempWHEREenameLIKE'______';

表示姓名由6個字符組成的員工。DQL知識---基本查詢2)模糊查詢DQL知識---基本查詢2

)模糊查詢?nèi)绻氩樵冃彰幸浴癦”開頭的所有員工(姓名中字符個數(shù)任意),就要使用“%”了。

SELECT*FROMempWHEREenameLIKE'z%';

注意:其中%匹配0~n個任意字符。

查詢姓名中包含“Z”的所有員工。

SELECT*FROMempWHEREenameLIKE'%z%';注意:千萬不要認(rèn)為上面語句是在查詢姓名中間帶有阿字的員工,因為%匹配0~n個字符,所以姓名以阿開頭和結(jié)尾的員工也都會查詢到。DQL知識---基本查詢2)模糊查詢DQL知識---基本查詢2)模糊查詢SELECT*FROMempWHEREenameLIKE'%';

注意:這個條件等同于不存在(該條件有無均可,既可以去掉),但如果姓名為NULL的查詢不出來!查詢姓名中第二個字符為“h”的所有員工。SELECT*FROMempWHEREenameLIKE'_h%';DQL知識---基本查詢2)模糊查詢DQL知識---排序二、排序1、升序

SELECT*FROMempORDERBYsalASC;-->按sal排序,升序!

-->其中ASC是可以省略的DQL知識---排序二、排序DQL知識---排序2、降序

SELECT*FROMempORDERBYcommDESC;-->按comm排序,降序!-->其中DESC不能省略DQL知識---排序2、降序DQL知識---排序3、使用多列作為排序條件SELECT*FROMempORDERBYsalASC,commDESC;-->使用sal升序排,如果sal相同時,使用comm的降序排。SELECT*FROMempORDERBYsalASC,commDESC,empnoASC;-->使用sal升序排,如果sal相同時,使用comm的降序排,如果sal和comm都相同時,使用empno升序排列。DQL知識---排序3、使用多列作為排序條件DQL知識---聚合函數(shù)聚合函數(shù)用來做某列的縱向運算。1、COUNT功能:統(tǒng)計指定列不為NULL的記錄行數(shù);

(1)SELECTCOUNT(*)FROMemp;-->計算emp表中所有列都不為NULL的記錄的行數(shù)。(2)SELECTCOUNT(comm)FROMemp;-->計算emp表中comm列不為NULL的記錄的行數(shù)。DQL知識---聚合函數(shù)聚合函數(shù)用來做某列的縱向運算。DQL知識---聚合函數(shù)1、COUNT(3)查詢emp表中月薪大于25000的人數(shù):SELECTCOUNT(*)FROMempWHEREsal>25000;(4)統(tǒng)計月薪與傭金之和大于25000元的人數(shù):SELECTCOUNT(*)AScntFROMempWHEREsal+IFNULL(comm,0)>25000;(5)查詢有傭金的人數(shù),以及有上級領(lǐng)導(dǎo)的人數(shù):SELECTCOUNT(comm),COUNT(mgr)FROMemp;DQL知識---聚合函數(shù)1、COUNTDQL知識---聚合函數(shù)2、SUM功能:計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計算結(jié)果為0;(1)查詢所有雇員月薪和:SELECTSUM(sal)FROMemp;(2)查詢所有雇員月薪和,以及所有雇員傭金和:SELECTSUM(sal),SUM(comm)FROMemp;(3)查詢所有雇員月薪+傭金和:SELECTSUM(sal+IFNULL(comm,0))FROMemp;(4)統(tǒng)計所有員工平均工資:SELECTSUM(sal)/COUNT(sal)FROMemp;

(5)SELECTSUM(ename)FROMemp;

DQL知識---聚合函數(shù)2、SUMDQL知識---聚合函數(shù)3、AVG功能:計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結(jié)果為0。

(1)SELECTAVG(sal)FROMemp;-->查詢平均工資(2)SELECTAVG(ename)FROMemp;-->查看結(jié)果DQL知識---聚合函數(shù)3、AVGDQL知識---聚合函數(shù)4、MAX功能:計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算。(1)SELECTMAX(sal)FROMemp;-->查詢最高工資(2)SELECTMAX(ename)FROMemp;-->查詢最大姓名DQL知識---聚合函數(shù)4、MAXDQL知識---聚合函數(shù)5、MIN功能:計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算。(1)SELECTMIN(sal)FROMemp;-->查詢最低工資(2)SELECTMIN(ename)FROMemp;-->查詢最小姓名DQL知識---聚合函數(shù)5、MINDQL知識---聚合函數(shù)綜合應(yīng)用:SELECTcount(*)asrenshu,sum(sal)gongzihe,avg(sal)pingjunz,max(sal)zuida,min(sal)aszuixiaoFROMemp;DQL知識---聚合函數(shù)綜合應(yīng)用:DQL知識---分組查詢四、分組查詢1、基本形式分組查詢是把記錄使用某一列進(jìn)行分組(例如,按照性別將同學(xué)們分成兩組,又如,按照是否戴眼鏡將同學(xué)們也可以分為兩組),然后查詢組信息。注意:(1)用于分組的列必須有重復(fù)記錄的。例如在emp表中,如果對empno或者ename列進(jìn)行分組,則無任何意義。而對job列進(jìn)行分組就很有意義,因為在該列中包含眾多重復(fù)記錄。(2)分組查詢,最終查詢的為組信息,不是個人信息。若查詢組信息,必須使用聚合函數(shù)來操作。DQL知識---分組查詢DQL知識---分組查詢舉例:(1)例如,使用job分組,查詢工作名稱和每個工作的記錄數(shù)SELECTjob,COUNT(*)FROMempGROUPBYjob;特點:select后面的列如果不加聚合函數(shù),如job,則該列必須為分組列,即位于GROUPBY后(技巧:實際操作時,先添加二者),否則select后面的列必須加聚合函數(shù)。(2)使用deptno分組,查詢部門編號和每個部門的記錄數(shù)SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;(3)使用job分組,查詢每種工作的最高工資SELECTjob,MAX(SAL)FROMempGROUPBYjob;DQL知識---分組查詢舉例:DQL知識---分組查詢2、組條件(1)分組前條件:根據(jù)條件去除的記錄沒有參見分組。(WHERE是對分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那么這行記錄不會參加分組)例如,以部門編號分組,查詢每組記錄數(shù)。要求只保留sal大于15000的記錄。SELECTdeptno,COUNT(*)FROMempwheresal>15000GROUPBYdeptno;與下面比較:SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;DQL知識---分組查詢2、組條件DQL知識---分組查詢2、組條件(2)分組后條件:HAVING后的條件部分必須使用聚合函數(shù)作為條件。以部門編號分組,查詢每組記錄數(shù)。條件為記錄數(shù)大于3。SELECTdeptno,COUNT(*)FROMempGROUPBYdeptnoHAVINGCOUNT(*)>3;與下面比較SELECTdeptno,COUNT(*)FROMempGROUPBYdeptno;DQL知識---分組查詢2、組條件DQL知識---總結(jié)selectfromwheregroupbyhavingorderby在select語句中,如果同時使用上述關(guān)鍵字,則各個關(guān)鍵字的出現(xiàn)順序如上,實際的執(zhí)行順序也為上。DQL知識---總結(jié)selectDQL知識---limit子句(方言)五、limit子句(方言)---其他數(shù)據(jù)如果想實現(xiàn)limit的對應(yīng)功能,必須使用多表查詢(子查詢)來實現(xiàn)。

功能:LIMIT用來限定查詢結(jié)果的起始行,以及總行數(shù)。主要用于分頁查詢場合。(1)例如:查詢起始行為第5行,一共查詢3行記錄

SELECT*FROMempLIMIT4,3;-->其中4表示從第5行開始,其中3表示一共查詢3行。即第5、6、7行記錄。DQL知識---limit子句(方言)DQL知識---limit子句(方言)(2)例如:查詢起始行為第1行,一共查詢5行記錄select*fromemplimit0,5;(3)例如:查詢起始行為第13行,一共查詢5行記錄select*fromemplimit12,5;注意:因為表中只剩下兩條記錄,所以只查到兩條記錄。DQL知識---limit子句(方言)(2)例如:查詢起始DQL知識---limit子句(方言)適用場合:分頁查詢問題描述:如果一頁記錄為10條,希望查看第3頁記錄應(yīng)該怎么查呢?實現(xiàn):select*fromemplimit20,10;分析:(1)第一頁記錄起始行為0,一共查詢10行,即0~9;(2)第二頁記錄起始行為10,一共查詢10行,即10~19;(3)第三頁記錄起始行為20,一共查詢10行,即20~29;公式:limit數(shù)字1,數(shù)字2數(shù)字1公式:(當(dāng)前頁-1)*每頁記錄數(shù)數(shù)字2公式:每頁記錄數(shù)舉例:每頁8條記錄,查詢第17頁記錄?limit(17-1)*8,8DQL知識---limit子句(方言)適用場合:分頁查詢單表查詢練習(xí):準(zhǔn)備知識:SQLyog軟件的安裝與使用。該軟件能夠?qū)崿F(xiàn)創(chuàng)建數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)表、插入表記錄等操作。但這些操作都是在可視化界面下通過鼠標(biāo)操作來完成的,其本質(zhì)也是轉(zhuǎn)換成SQL語句。直接使用該軟件,不利于我們對基本SQL語法的學(xué)習(xí)。本節(jié)只是使用該軟件來演示查詢的結(jié)果。注意該軟件保存的文件擴展名為.sql。

該文件中可以包含多個select查詢語句。單表查詢練習(xí):準(zhǔn)備知識:。單表查詢練習(xí):單表查詢練習(xí):在屏幕中可以輸入多條語句,選中需要執(zhí)行的,單擊F9即可。在屏幕中可以輸入多條語句,選中需要執(zhí)行的,單擊F9即可。在做具體操作之前,首先切換至當(dāng)前數(shù)據(jù)表所在的數(shù)據(jù)庫。在做具體操作之前,首先切換至當(dāng)前數(shù)據(jù)表所在的數(shù)據(jù)庫。單表查詢練習(xí):1.查詢出部門編號為30的所有員工SELECT*FROMempWHEREdeptno=30;2.查詢出所有銷售員的姓名、編號和部門編號。SELECTename,empno,deptnoFROMempWHEREjob='salesman';3.找出獎金高于工資的員工。SELECT*FROMempWHEREcomm>sal;4.找出獎金高于工資30%的員工。SELECT*FROMempWHEREcomm>sal*0.3;單表查詢練習(xí):1.查詢出部門編號為30的所有員工單表查詢練習(xí):5.找出部門編號為10中所有經(jīng)理,和部門編號為20中所有銷售員的詳細(xì)資料。SELECT*FROMempWHERE(deptno=10ANDjob='manager')OR(deptno=20ANDjob='salesman');6.找出部門編號為10中所有經(jīng)理,部門編號為20中所有銷售員,還有即不是經(jīng)理又不是銷售員但其工資大或等于20000的所有員工詳細(xì)資料。SELECT*FROMempWHERE(deptno=10ANDjob='manager')OR(deptno=20ANDjob='salesman')OR(jobNOTIN('manager','salesman')ANDsal>=20000);單表查詢練習(xí):5.找出部門編號為10中所有經(jīng)理,和部門編號為單表查詢練習(xí):7.無獎金或獎金低于1000的員工。SELECT*FROMempWHEREcommISNULLORcomm<1000;8.查詢名字由8個字符組成的員工。SELECT*FROMempWHEREenameLIKE'________';9.查詢2000年入職的員工。SELECT*FROMempWHEREhiredateLIKE'2000%';10.查詢所有員工詳細(xì)信息,用編號升序排序SELECT*FROMempORDERBYempnoASC;單表查詢練習(xí):7.無獎金或獎金低于1000的員工。單表查詢練習(xí):11.查詢所有員工詳細(xì)信息,用工資降序排序,如果工資相同使用入職日期升序排序SELECT*FROMempORDERBYsalDESC,hiredateASC;12.查詢每個(提示:分組信號詞---“每個”、“各個”)部門的平均工資SELECTdeptno,AVG(sal)ASpingjungzFROMempGROUPBYdeptno;13.查詢每個部門的雇員數(shù)量。SELECTdeptno,COUNT(*)ASshuliangFROMempGROUPBYdeptno;單表查詢練習(xí):11.查詢所有員工詳細(xì)信息,用工資降序排序,如單表查詢練習(xí):14.查詢每種工作的最高工資、最低工資、人數(shù)SELECTjob,MAX(sal),MIN(sal),COUNT(*)FROMempGROUPBYjob;*15.顯示非銷售人員工作名稱以及從事同一工作雇員的月工資的總和,并且要滿足從事同一工作的雇員的月工資合計大于50000,輸出結(jié)果按月工資的合計升序排列SELECTjob,SUM(sal)FROMempWHEREjobNOTIN('salesman')GROUPBYjobHAVINGSUM(sal)>50000ORDERBYSUM(sal)ASC;16.查詢出有獎金的工種SELECTDISTINCTjobFROMempWHEREcommISNOTNULL;單表查詢練習(xí):14.查詢每種工作的最高工資、最低工資、人數(shù)第三章結(jié)束!第三章結(jié)束!MySQL編碼問題---解決不支持漢字問題1.查看MySQL數(shù)據(jù)庫編碼SHOWVARIABLESLIKE'char%';因為當(dāng)初安裝時指定了字符集為UTF8,所以所有的編碼都是UTF8。MySQL編碼問題---解決不支持漢字問題1.查看MySQMySQL編碼問題2.編碼解釋(只關(guān)心兩個即可)

(1)character_set_client:MySQL使用該編碼來解讀客戶端發(fā)送過來的數(shù)據(jù),例如該編碼為UTF8,那么如果客戶端發(fā)送過來的數(shù)據(jù)不是UTF8,那么就會出現(xiàn)亂碼。注意:你發(fā)送的數(shù)據(jù)編碼必須與client指定的編碼一致?。?!

詳細(xì)解釋如下:如果character_set_client=utf8,無論客戶端發(fā)送的是什么編碼的數(shù)據(jù),mysql都當(dāng)成是utf8的數(shù)據(jù)!

>若客戶端發(fā)送的是GBK編碼的數(shù)據(jù)>服務(wù)器會當(dāng)成utf8編碼的數(shù)據(jù)對待

>總結(jié):必然亂碼!MySQL編碼問題2.編碼解釋(只關(guān)心兩個即可)MySQL編碼問題(1)character_set_client:處理問題的手段有兩種;

>讓客戶端發(fā)送utf8的數(shù)據(jù)(行不通)>把character_set_client修改為gbk,具體語句如下setcharacter_set_client=gbk;注意:該方法只在當(dāng)前窗口內(nèi)有效,也就是說,關(guān)閉窗口后,再打開,又回到utf8了。即每次打開窗口時,均執(zhí)行上述語句一次,不爽。MySQL編碼問題(1)character_set_clieMySQL編碼問題2.編碼解釋(2)character_set_results:響應(yīng)的編碼,即查詢結(jié)果返回給客戶端的編碼。這說明客戶端必須使用result指定的編碼來解碼。MySQL會把數(shù)據(jù)轉(zhuǎn)換成該編碼后,再發(fā)送給客戶端,例如該編碼為UTF8,那么如果客戶端不使用UTF8來解讀,那么就會出現(xiàn)亂碼。

具體解釋如下:如果character_set_results=utf8,則表示MySQL把數(shù)據(jù)用utf8編碼發(fā)送給客戶端!

>若服務(wù)器發(fā)送給客戶端的是utf8的數(shù)據(jù)

>客戶端會把它當(dāng)成gbk,因為我們的小黑屏,只能顯示gbk(cmd下默認(rèn)使用GBK)>總結(jié):必然亂碼!MySQL編碼問題2.編碼解釋MySQL編碼問題(2)character_set_results:處理問題的手段有兩種:

>讓服務(wù)器發(fā)送gbk的數(shù)據(jù):即使用該語句進(jìn)行設(shè)置。setcharacter_set_results=gbk>讓小黑屏使用utf8來解讀(行不通)MySQL編碼問題MySQL編碼問題綜上所述:(1)character_set_client|utf8(必須修改為gbk)注意:通過該語句,mysql把我們客戶端傳遞的數(shù)據(jù)都當(dāng)成是utf8!如果我們客戶端傳遞的數(shù)據(jù)是gbk,那么需要修改這個變量為gbk。(2)chara

溫馨提示

  • 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

提交評論