版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Mysql從入門到精通講師:韓順平學(xué)習(xí)內(nèi)容 主講:韓順平(一)項目演示(二)php數(shù)據(jù)庫編程-mysql 2.1mysql數(shù)據(jù)庫-基礎(chǔ)部分 2.2mysql數(shù)據(jù)庫-加強部分1 --mysql表類型和存儲引擎 --mysql中事務(wù)處理 2.3mysql數(shù)據(jù)庫-加強部分2 --mysql表的基本查詢加強 --mysql表的復(fù)雜查詢 --維護(hù)數(shù)據(jù)的完整性—約束 --mysql內(nèi)連接、外連接 2.4mysql數(shù)據(jù)庫-加強部分3 --維護(hù)數(shù)據(jù)的完整性—約束 --mysql表自增 --mysql索引(三)數(shù)據(jù)庫用戶的管理PHP數(shù)據(jù)庫編程-mysql 主講:韓順平1.數(shù)據(jù)庫的基本概念2.mysql數(shù)據(jù)庫的基本操作3.mysql的curd操作4.mysql常用函數(shù)5.php如何操作mysql數(shù)據(jù)庫學(xué)習(xí)目標(biāo) 主講:韓順平1.mysql基本操作2.mysql簡單的crud操作3.php操作mysql解決之道 主講:韓順平數(shù)據(jù)庫簡介SQLServer、Oracle、MySQL、DB2、informix對當(dāng)前主流數(shù)據(jù)庫做一個比較介紹廠家、軟件工程師、類型、特點MySQL數(shù)據(jù)庫的安裝和配置(帶學(xué)生安裝)使用命令行窗口連接MYSQL數(shù)據(jù)庫mysql–h主機名-P端口–u用戶名–p密碼啟動mysql數(shù)據(jù)庫的常用方式:服務(wù)方式啟動(界面)netstopmysql服務(wù)名netstartmysql服務(wù)名如何在任何目錄下都可以連接到mysql數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)庫和表的關(guān)系 主講:韓順平所謂安裝數(shù)據(jù)庫服務(wù)器,只是在機器上裝了一個數(shù)據(jù)庫管理程序,這個管理程序可以管理多個數(shù)據(jù)庫,一般開發(fā)人員會針對每一個應(yīng)用創(chuàng)建一個數(shù)據(jù)庫。為保存應(yīng)用中實體的數(shù)據(jù),一般會在數(shù)據(jù)庫創(chuàng)建多個表,以保存程序中實體的數(shù)據(jù)。數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)庫和表的關(guān)系如圖所示:MySQLdbmsDBDB數(shù)據(jù)對象(表)數(shù)據(jù)對象(表)數(shù)據(jù)對象(表)Client命令行PHP文件數(shù)據(jù)在數(shù)據(jù)庫中的存儲方式 主講:韓順平雇員表(employee)行(row)列(column)表的一行稱之為一條記錄表中一條記錄對應(yīng)一個php數(shù)組或?qū)ο蟮臄?shù)據(jù)SQL語句分類 主講:韓順平DDL:數(shù)據(jù)定義語句DML:數(shù)據(jù)操作語句DQL:數(shù)據(jù)查詢語句DCL:數(shù)據(jù)控制語句小面試題:mysql數(shù)據(jù)庫的sql語句分幾類?并舉例說明.創(chuàng)建數(shù)據(jù)庫 主講:韓順平CREATEDATABASE[IFNOTEXISTS]db_name
[create_specification[,create_specification]...]create_specification:
[DEFAULT]CHARACTERSETcharset_name
|[DEFAULT]COLLATEcollation_nameCHARACTERSET:指定數(shù)據(jù)庫采用的字符集COLLATE:指定數(shù)據(jù)庫字符集的比較方式(默認(rèn)utf8_general_ci,一般不指定)練習(xí):創(chuàng)建一個名稱為db1的數(shù)據(jù)庫。創(chuàng)建一個使用utf8字符集的db2數(shù)據(jù)庫。創(chuàng)建一個使用utf8字符集,并帶校對規(guī)則的mydb3數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫-細(xì)節(jié)說明 主講:韓順平對字符集和排序規(guī)則的說明:CHARACTERSETcharset_nameCOLLATEcollation_nameshowcharacterset;[字符集]showcollation;[排序和校對規(guī)則]案例:分開測試ci是caseinsensitive,即"大小寫不敏感",a和A會在字符判斷中會被當(dāng)做一樣的;utf8_bin是二進(jìn)制,a和A會別區(qū)別對待.例如你運行:SELECT*FROMtableWHEREtxt='a'那么在utf8_bin中你就找不到txt='A'的那一行,而utf8_general_ci則可以排序規(guī)則了解Mysql字符集和校驗集 主講:韓順平collate:校對規(guī)則指:在對某個字段排序時,按照怎樣的規(guī)則來排序這里我們先簡單舉一個案例,大家了解即可(不用深入研究).?請查看Mysql關(guān)于校對規(guī)則手冊數(shù)據(jù)庫相關(guān)操作-查看、刪除數(shù)據(jù)庫主講:韓順平顯示數(shù)據(jù)庫語句:SHOWDATABASES顯示數(shù)據(jù)庫創(chuàng)建語句:SHOWCREATEDATABASEdb_name
數(shù)據(jù)庫刪除語句:DROPDATABASE[IFEXISTS]db_name
練習(xí):查看當(dāng)前數(shù)據(jù)庫服務(wù)器中的所有數(shù)據(jù)庫查看前面創(chuàng)建的db2數(shù)據(jù)庫的定義信息刪除前面創(chuàng)建的db1數(shù)據(jù)庫查看當(dāng)前mysql數(shù)據(jù)庫連接進(jìn)程情況修改、備份恢復(fù)數(shù)據(jù)庫 (重點) 主講:韓順平ALTERDATABASE[IFEXISTS]db_name
[alter_specification[,alter_specification]...]alter_specification:
[DEFAULT]CHARACTERSETcharset_name
|[DEFAULT]COLLATEcollation_name備份數(shù)據(jù)庫表中的數(shù)據(jù) mysqldump-u用戶名-p數(shù)據(jù)庫名>文件名.sql恢復(fù)數(shù)據(jù)庫 Source文件名.sql練習(xí)1查看服務(wù)器中的數(shù)據(jù)庫,并把其中某一個庫的字符集修改為utf8;2備份test庫中的數(shù)據(jù),并恢復(fù)12修改、備份恢復(fù)數(shù)據(jù)庫 主講:韓順平使用細(xì)節(jié)說明:mysqldump–u用戶名–p密碼數(shù)據(jù)庫表1表2表3..>d:\\文件名.sqlmysqldump–u用戶名–p密碼-B數(shù)據(jù)庫1數(shù)據(jù)庫2..>d:\\文件名.sql單庫,單庫多表,多庫安裝Ecshop數(shù)據(jù)庫 主講:韓順平課堂練習(xí)題:這是一個ecshop的數(shù)據(jù)庫,包括ecshop所有的表,請導(dǎo)入到mysql數(shù)據(jù)庫中將ecshop整個數(shù)據(jù)庫備份到你的c:盤ecshop.bak將ecshop的表ecs_goods備份到c:盤ecshop.goods.bak將mysql的ecshop數(shù)據(jù)庫刪除,并通過備份的ecshop.bak恢復(fù)刪除剛剛恢復(fù)的ecshop庫中的ecs_goods表,然后使用備份的ecshop.goods.bak來恢復(fù).使用php把ecs_goods表的商品名數(shù)據(jù)取出顯示到網(wǎng)頁(晚上一個練習(xí)題)表的創(chuàng)建(基本語句) 主講:韓順平CREATETABLEtable_name( field1datatype, field2datatype, field3datatype)characterset字符集collate校對規(guī)則engine存儲引擎方式field:指定列名datatype:指定列類型(字段類型)【說明下】注意:創(chuàng)建表時,要根據(jù)需保存的數(shù)據(jù)創(chuàng)建相應(yīng)的列,并根據(jù)數(shù)據(jù)的類型定義相應(yīng)的列類型。例:user表(快速入門案例) id整形 name字符串 password字符串 birthday日期創(chuàng)建表(基本語句) 主講:韓順平細(xì)節(jié)說明在創(chuàng)建表的時候可以指定engine通常使用InnoDB或者M(jìn)yISAM給說明一下創(chuàng)建的表對應(yīng)的文件在什么地方(不同的表存儲引擎對應(yīng)的文件不同InnoDB對應(yīng)一個文件,MyISAM對應(yīng)三個文件*.frm表信息*.MYD存儲數(shù)據(jù)*.MYI存儲索引信息)Mysql數(shù)據(jù)類型(重點) 主講:韓順平VARCHAR、BLOB和TEXT類是變長類型。每個類型的存儲需求取決于列值的實際長度。分類數(shù)據(jù)類型說明數(shù)值類型BIT(M)TINYINT[UNSIGNED]BOOL,BOOLEANSMALLINT[UNSIGNED]INT[UNSIGNED]BIGINT[UNSIGNED]FLOAT[(M,D)][UNSIGNED]DOUBLE[(M,D)][UNSIGNED]DECIMAL(M,D)[UNSIGNED]位類型。M指定位數(shù),默認(rèn)值1,范圍1-64帶符號的范圍是-128到127。無符號0到255。默認(rèn)是有符號使用0或1表示真或假帶符號是負(fù)的2的15次方到2的15次方-1,無符號2的16方-1帶符號是負(fù)的2的31次方到2的31次方-1,無符號2的32方-1帶符號是負(fù)的2的63次方到2的63次方-1,無符號2的64方-1M指定顯示長度,d指定小數(shù)位數(shù),占用空間4個字節(jié)表示比float精度更大的小數(shù),占用空間8個字節(jié)定點數(shù)M指定長度,D表示小數(shù)點的位數(shù),文本、二進(jìn)制類型CHAR(size)char(20)VARCHAR(size)varchar(20)BLOBLONGBLOBTEXTLONGTEXT固定長度字符串最大255可變長度字符串最大65532【在mysql5.0中最大21844】二進(jìn)制數(shù)據(jù)大文本,不支持全文索引,不支持默認(rèn)值,建議使用varchar時間日期DATE/DATETIME/TimeStamp日期類型(YYYY-MM-DD)(YYYY-MM-DDHH:MM:SS),TimeStamp表示時間戳,它可用于自動記錄insert、update操作的時間Mysql常用數(shù)據(jù)類型 主講:韓順平分類數(shù)據(jù)類型說明String類型ENUM類型(枚舉)SET類型(集合)ENUM是一個字符串對象,其值來自表創(chuàng)建時在列規(guī)定中顯式枚舉的一列值。在某些情況下,ENUM值也可以為空字符串('')或NULL:SET是一個字符串對象,可以有零或多個值,其值來自表創(chuàng)建時規(guī)定的允許的一列值。指定包括多個SET成員的SET列值時各成員之間用逗號(‘,’)間隔開。這樣SET成員值本身不能包含逗號。SET最多可以有64個不同的成員可以使用FIND_IN_SET()函數(shù)或LIKE操作符搜索SET值?在表設(shè)計時,為提高效率和安全,最好notnulldefaul值的形式來控制Mysql常用數(shù)據(jù)類型 主講:韓順平數(shù)值型(整數(shù))的基本使用Mysql常用數(shù)據(jù)類型 主講:韓順平數(shù)值型(整數(shù))的使用細(xì)節(jié)如何定義一個無符號的整數(shù)?createtablet10(idintnotnulldefault0);//默認(rèn)是有符號的createtablet11(idintunsignednotnulldefault0);有符號的2.解釋一下整數(shù)范圍的原因(深入)Mysql常用數(shù)據(jù)類型 主講:韓順平數(shù)值型(整數(shù))的使用細(xì)節(jié)2.關(guān)于zerofill的說明在數(shù)據(jù)庫定義是int(6)這個6到底表示什么意思?對于數(shù)值型(也可以是tinyint等),我們這樣定義時int(6)unsignedzerofill/*①zerofill只能和unsinged配合使用*//*②6表示當(dāng)zerofill時,填充的寬度,就是如果數(shù)據(jù)不足6位,則這個字段將被0填充,如果不設(shè)置zerofill,則這個6沒有什么含義*//*③int(6)zerofill/*只要指定zerofill則默認(rèn)就是unsigned*//*④6并不是表示,存放的數(shù)不能超過6位,這點請注意哈*/測試案例:createtabletest(num1int,num2int(4)zerofill,num3int(6)unsignedzerofill);insertintotestvalues(345,345,345);//看結(jié)果就清楚insertintotestvalues(34578,34578,34578);//看結(jié)果就清楚insertintotestvalues(-345,-345,-345);//num2字段就存放不了,因為是unsigned的.Mysql常用數(shù)據(jù)類型 主講:韓順平數(shù)值型(bit)的使用基本使用mysql>createtabletest2(idint,abit(1));mysql>insertintotest2(1,3);mysql>insertintotest2values(2,65);細(xì)節(jié)說明bit字段在顯示時,按ascii碼對應(yīng)的字符顯示.查詢的時候仍然可以用數(shù)值位類型。M指定位數(shù),默認(rèn)值1,范圍1-64Mysql常用數(shù)據(jù)類型 主講:韓順平數(shù)值型(小數(shù))的基本使用FLOAT[(M,D)][UNSIGNED]M指定顯示長度,d指定小數(shù)位數(shù),占用空間4個字節(jié)小數(shù):float(4,2)表示的范圍是-99.99~99.99float(4,2)unsigned表示的范圍是0-99.99DECIMAL(M,D)[UNSIGNED]定點數(shù)M指定長度,D表示小數(shù)點的位數(shù)decimal(5,2)表示的范圍是-999.99~999.99decaimal(5,2)unsigned表示的范圍是0-999.99思考加入99.999會是什么結(jié)果?Mysql常用數(shù)據(jù)類型 主講:韓順平數(shù)值型(小數(shù))的細(xì)節(jié)說明FLOAT[(M,D)][UNSIGNED]單精度浮點數(shù)精確到大約7位小數(shù)位。DECIMAL(M,D)[UNSIGNED]可以支持更加精確的小數(shù)位,壓縮的“嚴(yán)格”定點數(shù)。M是小數(shù)位數(shù)(精度)的總數(shù),D是小數(shù)點(標(biāo)度)后面的位數(shù)。小數(shù)點和(負(fù)數(shù))的‘-’符號不包括在M中。如果D是0,則值沒有小數(shù)點或分?jǐn)?shù)部分。DECIMAL整數(shù)最大位數(shù)(M)為65。支持的十進(jìn)制數(shù)的最大位數(shù)(D)是30。如果D被省略,默認(rèn)是0。如果M被省略,默認(rèn)是10。建議:如果希望小數(shù)的精度高,推薦使用decimalMysql常用數(shù)據(jù)類型 主講:韓順平字符串的基本使用CHAR(size)固定長度字符串最大255字符VARCHAR(size)可變長度字符串最大65532字節(jié)【utf-8編碼最大21844字符1-3個字節(jié)用于記錄大小】Mysql常用數(shù)據(jù)類型 主講:韓順平字符串使用細(xì)節(jié)1char(4)//這個4表示字符數(shù)(絕對最大255),不是字節(jié)數(shù),不管是中文還是字母都是放四個,按字符計算.varchar(4)//這個4表示字符數(shù),不管是字母還是中文都以定義好的表的編碼來存放數(shù)據(jù).不管是中文還是英文字母,都是最多存放2個,是按照字符來存放的.Mysql常用數(shù)據(jù)類型 主講:韓順平字符串使用細(xì)節(jié)2char(4)是定長,就是說,即使你插入'aa',也會占用分配的4個字符.varchar(4000)是變長,就是說,如果你插入了'aa',實際占用空間大小是L+1[注:同CHAR對比,VARCHAR值保存時只保存需要的字符數(shù),另加一個字節(jié)來記錄長度(如果列聲明的長度超過255,則使用兩個字節(jié))。]Mysql常用數(shù)據(jù)類型 主講:韓順平字符串使用細(xì)節(jié)3什么時候使用char,什么時候使用varchar答:如果數(shù)據(jù)是定長,推薦使用char,比如md5的密碼,郵編,手機號,身份證號碼等.如果一個字段的長度是不確定,我們使用varchar,比如留言,文章查詢速度,char>varcharMysql常用數(shù)據(jù)類型 主講:韓順平字符串使用細(xì)節(jié)4char在存放空格時會丟失,一定要小心,varchar不會丟失比如在char中存放了'aaa'取出來就是'aaa’'了而varchar中存放了‘a(chǎn)aa’,取出來還是‘a(chǎn)aa’,后面的那個空格沒有丟失為什么,因為char的存放規(guī)則是當(dāng)數(shù)據(jù)放入不夠時,后面全面補空格,這樣就導(dǎo)致mysql數(shù)據(jù)庫會誤殺你希望的空格,小心通過php獲取數(shù)據(jù)在頁面來證明Mysql常用數(shù)據(jù)類型 主講:韓順平字符串使用細(xì)節(jié)5在存放文本時,也可以使用Text數(shù)據(jù)類型.可以將TEXT列視為VARCHAR列,注意Text不能有默認(rèn)值.Mysql常用數(shù)據(jù)類型 主講:韓順平字符串使用細(xì)節(jié)6表的所有字段加起來不能超過65535個字節(jié)下面的能創(chuàng)建成功嗎?Mysql常用數(shù)據(jù)類型 主講:韓順平日期類型的基本使用CREATETABLEbirthday(idINT,t1DATE,t2DATETIME,t3TimeStamp);timestamp時間戳mysql>INSERTINTObirthday(t1,t2)VALUES('2016-01-01','2016-01-0112:12:12');日期類型的細(xì)節(jié)說明TimeStamp在Insert和update時,自動聯(lián)動Mysql常用數(shù)據(jù)類型 主講:韓順平Enum,SET類型基本使用看一個需求:有一個調(diào)查表votes,需求調(diào)查人的喜好,比如(蘋果,西瓜,菠蘿)中去選擇(可以多選)。(男,女,保密)【單選】名字[非空]基本語法enum('值1','值2',...)set('值1','值2',....)Mysql常用數(shù)據(jù)類型 主講:韓順平enum枚舉類型基本使用枚舉類型,其實就是“單選”類型,對應(yīng)網(wǎng)頁表單中的“單選項”的數(shù)據(jù)值;形式:enum(‘選項值1’,‘選項值2’,‘選項值3’,......);該設(shè)定只是提供了若干個選項的值,最終一個單元格中,實際只存儲了其中的一個值;而且,出于效率的考慮,這些值實際存儲的是“數(shù)字”,因為這些選項,每個選項值,依次對應(yīng)如下數(shù)字:1,2,3,4,5,.......最多65535個;Mysql常用數(shù)據(jù)類型 主講:韓順平SET類型基本使用就是“多選”類型,對應(yīng)網(wǎng)頁表單中的“多選項”的數(shù)據(jù)值形式:set(‘選項值1’,‘選項值2’,‘選項值3’,......);該設(shè)定只是提供了若干個選項的值,最終一個單元格中,實際可存儲了任何其中的多個值(就是多選);而且,出于效率的考慮,這些值實際存儲的是“數(shù)字”,因為這些選項,每個選項值,依次對應(yīng)如下數(shù)字:1,2,4,8,16,32,......最多64個;[偶數(shù)]1=Mysql常用數(shù)據(jù)類型 主講:韓順平Enum,SET類型基本使用添加數(shù)據(jù)INSERTINTOusersvalues('zs','男','足球');INSERTINTOusersvalues('zs',1,'足球');INSERTINTOusersvalues('zs',3,'足球');//失敗INSERTINTOusersvalues('zs','中','足球');//失敗INSERTINTOusersvalues('zs',2,'足球,籃球');//okINSERTINTOusersvalues('zs',2,'足球,大球');//失敗,沒有大球INSERTINTOusersvalues('zs',2,2);//okINSERTINTOusersvalues('zs',2,4);//okINSERTINTOusersvalues('zs',2,5);//ok5=1+4Mysql常用數(shù)據(jù)類型 主講:韓順平Enum,SET類型的查詢以后只要是對set的查詢,使用find_in_set()Mysql常用數(shù)據(jù)類型 主講:韓順平圖片,電影,音頻數(shù)據(jù)類型怎么存放?
創(chuàng)建表練習(xí) 主講:韓順平創(chuàng)建一個員工表(課堂練習(xí)/評講),選用適當(dāng)?shù)臄?shù)據(jù)類型,添加2條數(shù)據(jù),然后通過php來網(wǎng)頁中顯示。字段屬性Id整形name字符型sex枚舉類型brithday日期型(date)entry_date日期型(date)job字符型Salary小數(shù)型resume文本型創(chuàng)建表練習(xí) 主講:韓順平顯示表的細(xì)節(jié)問題:如何在顯示表有較長中文字符時,可以對其顯示的技巧先將控制臺的寬度設(shè)置大一點比如800寬登錄的時候這樣登錄mysql--default-character-set=latin1-uroot-pxxxx然后進(jìn)入后再設(shè)置成setnamesgbk即可對其顯示中文了.修改表(重點)-基本介紹 主講:韓順平使用ALTERTABLE語句追加,修改,或刪除列的語法.ALTERTABLEtablenameADD (columndatatype[DEFAULTexpr] [,columndatatype]...);ALTERTABLEtablenameMODIFY (columndatatype[DEFAULTexpr] [,columndatatype]...);ALTERTABLEtablenameDROP (column);修改表的名稱:Renametable表名to新表名修改表的字符集:altertablestudentcharactersetutf8;修改表-課堂練習(xí) 主講:韓順平練習(xí)在上面員工表的上增加一個image列(要求在resume后面)。修改job列,使其長度為60。刪除sex列。表名改為employee。修改表的字符集為utf8列名name修改為user_namealtertableuserchangecolumnnameusernamevarchar(20);?修改表的注意事項總結(jié)給5min學(xué)生練習(xí)幫助命令的使用 主講:韓順平在mysql使用中,我們可能忘記一個mysql命令的使用,我們可以通過幫助命令?來查看相關(guān)命令的使用方式1.?create方式2?createtable提示:控制臺給出的都是英文說明,如果英文不好,還是用mysql中文手冊吧!數(shù)據(jù)庫CRUD語句主講:韓順平Insert語句(增加數(shù)據(jù))Update語句(更新數(shù)據(jù))Delete語句(刪除數(shù)據(jù))Select語句(查找數(shù)據(jù))Insert語句 -基本介紹 主講:韓順平INSERTINTO tablename[(column[,column...])]VALUES (value[,value...]);使用INSERT語句向表中插入數(shù)據(jù)??焖偃腴T案例:創(chuàng)建一張商品表(有idint,goods_namevarchar(50),pricefloat);//飲料添加2條記錄Insert-課堂練習(xí) 主講:韓順平練習(xí):使用insert語句向表中插入三個員工的信息。字段屬性Id整形name字符型sex字符型brithday日期型Entry_date日期型job字符型Salary小數(shù)型resume文本型Insert語句 -使用細(xì)節(jié) 主講:韓順平?細(xì)節(jié)說明(為講解的比較清楚,創(chuàng)建幾個小表來說明問題)插入的數(shù)據(jù)應(yīng)與字段的數(shù)據(jù)類型相同。比如把'abc'添加到int類型會錯誤數(shù)據(jù)的大小應(yīng)在字段的規(guī)定范圍內(nèi),例如:不能將一個長度為80的字符串加入到長度為40的列中。在values中列出的數(shù)據(jù)位置必須與被加入的列的排列位置相對應(yīng)。字符和日期型數(shù)據(jù)應(yīng)包含在單引號中。插入空值[前提是該字段允許為空],不指定或insertintotablevalue(null)insertinto(),(),()形式添加多條記錄如果是給表中的所有字段添加數(shù)據(jù),可以不寫前面的字段名稱默認(rèn)值的使用,當(dāng)不給某個字段值時,如果有默認(rèn)值就會添加,否則報錯建議我們以后添加數(shù)據(jù),都給我把''引起了.Insert語句課堂練習(xí) 主講:韓順平練習(xí):寫一個PHP,通過PHP來添加/顯示/刪除/修改學(xué)生表要求:加入js前端驗證和php后臺驗證[可選]驗證要求編號、語文、數(shù)學(xué)、英語是數(shù)字并且不為空,學(xué)生名字不能為空。刪除修改刪除修改刪除修改刪除修改刪除修改刪除修改1.分析程序框架圖2.設(shè)計好表和數(shù)據(jù)3.關(guān)鍵技術(shù)提示(計算器)update語句 主講:韓順平UPDATE tbl_name
SETcol_name1=expr1[,col_name2=expr2...]
[WHEREwhere_definition]
使用update語句修改表中數(shù)據(jù)?基本使用練習(xí):在上面創(chuàng)建的employee表中修改表中的紀(jì)錄。要求將所有員工薪水修改為5000元。將姓名為'小妖怪’的員工薪水修改為3000元。將'老妖怪'的薪水在原有基礎(chǔ)上增加1000元。 update語句 主講:韓順平?使用細(xì)節(jié):UPDATE語法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要給予哪些值。WHERE子句指定應(yīng)更新哪些行。如沒有WHERE子句,則更新所有的行。如果需要修改多個字段,可以通過set字段1=值1,字段2=值2....delete語句 -基本介紹 主講:韓順平deletefromtbl_name
[WHEREwhere_definition]
使用delete語句刪除表中數(shù)據(jù)。快速入門案例(可以創(chuàng)建一些表來測試/可以復(fù)制一張表測試)刪除表中名稱為’zs’的記錄。刪除表中所有記錄。使用truncate刪除表中記錄。delete語句 -使用細(xì)節(jié) 主講:韓順平使用delete語句刪除表中數(shù)據(jù)。?使用細(xì)節(jié):如果不使用where子句,將刪除表中所有數(shù)據(jù)。Delete語句不能刪除某一列的值(可使用update設(shè)為null或者'')使用delete語句僅刪除記錄,不刪除表本身。如要刪除表,使用droptable語句。同insert和update一樣,從一個表中刪除記錄將引起其它表的參照完整性問題,在修改數(shù)據(jù)庫數(shù)據(jù)時,頭腦中應(yīng)該始終不要忘記這個潛在的問題。[外鍵基本介紹]delete語句 -使用細(xì)節(jié) 主講:韓順平使用delete語句刪除表中數(shù)據(jù)。?使用細(xì)節(jié):刪除表中數(shù)據(jù)也可使用TRUNCATETABLE語句,它和delete有所不同。如果要清空表中的所有記錄,可以使用下面的兩種方法:DELETEFROMtable1
TRUNCATETABLEtable1效果一樣,TRUNCATE速度快DELETE可以帶WHERE條件,刪除更加靈活,truncate不能帶whereDELETE可以返回被刪除的記錄數(shù),而TRUNCATETABLE返回的是0推薦使用DELETE查詢表select語句(1) 主講:韓順平SELECT[DISTINCT]*|{column1,column2.column3..} FROM tablename;?注意事項(需要創(chuàng)建新的學(xué)生表)Select指定查詢哪些列的數(shù)據(jù)。column指定列名。*號代表查詢所有列。From指定查詢哪張表。DISTINCT可選,指顯示結(jié)果時,是否剔除重復(fù)數(shù)據(jù)基本select[重點,難點]語句select語句(1) 主講:韓順平課堂練習(xí):查詢表中所有學(xué)生的信息。查詢表中所有學(xué)生的姓名和對應(yīng)的英語成績。過濾表中重復(fù)數(shù)據(jù)[distinct]。學(xué)員練習(xí),再評講select語句(2)-對列進(jìn)行運算和別名操作 主講:韓順平SELECT*|{column1|expression,column2|expression,..} FROM tablename;在select語句中可使用表達(dá)式對查詢的列進(jìn)行運算在select語句中可使用as語句SELECTcolumnnameas別名from表名;三種形式select語句(2) 主講:韓順平練習(xí)在所有學(xué)生分?jǐn)?shù)上加10分特長分(即查詢所有學(xué)生總分再加10分)。統(tǒng)計每個學(xué)生的總分。使用別名表示學(xué)生分?jǐn)?shù)。課堂練習(xí)在姓趙的學(xué)生分?jǐn)?shù)上增加60%(即查詢總分再加60%)。統(tǒng)計姓李的學(xué)生的總分。使用別名表示學(xué)生的數(shù)學(xué)分?jǐn)?shù)。select語句(3)-使用where子句,進(jìn)行過濾查詢主講:韓順平使用where子句,進(jìn)行過濾查詢。練習(xí):查詢姓名為wu的學(xué)生成績查詢英語成績大于90分的同學(xué)查詢總分大于200分的所有同學(xué)使用where子句,課堂練習(xí):查詢姓名為趙并且(and)id大于90的學(xué)生成績查詢英語成績大于語文成績的同學(xué)查詢總分大于200分并且數(shù)學(xué)成績小于語文成績,的姓宋的學(xué)生.select語句(4) 主講:韓順平在where子句中經(jīng)常使用的運算符比較運算符><<=>==<>!=大于、小于、大于(小于)等于、不等于BETWEEN...AND...顯示在某一區(qū)間的值IN(set)顯示在in列表中的值,例:in(100,200)LIKE‘張pattern’NOTLIKE‘’模糊查詢模糊查詢ISNULL判斷是否為空邏輯運算符and多個條件同時成立or多個條件任一成立not不成立,例:wherenot(salary>100);select語句(4) 主講:韓順平查詢英語分?jǐn)?shù)在80-90之間的同學(xué)。查詢數(shù)學(xué)分?jǐn)?shù)為89,90,91的同學(xué)。查詢所有姓李的學(xué)生成績。查詢數(shù)學(xué)分>80,語文分>80的同學(xué)。課堂練習(xí)查詢語文分?jǐn)?shù)在70-80之間的同學(xué)。查詢總分為189,190,191的同學(xué)。查詢所有姓李或者姓宋的學(xué)生成績。查詢數(shù)學(xué)比語文多30分的同學(xué)。select語句(5) 主講:韓順平SELECTcolumn1,column2,column3.. FROM table orderbycolumnasc|desc,...使用orderby子句排序查詢結(jié)果。Orderby指定排序的列,排序的列即可是表中的列名,也可以是select語句后指定的列名。Asc升序[默認(rèn)]、Desc降序ORDERBY子句應(yīng)位于SELECT語句的結(jié)尾。課堂練習(xí):對數(shù)學(xué)成績排序后輸出【升序】。對總分排序后輸出,然后再按從高到低的順序輸出對不姓李的學(xué)生成績排序輸出合計函數(shù)-count 主講:韓順平Selectcount(*)|count(列名)fromtablename [WHEREwhere_definition]
課堂練習(xí):統(tǒng)計一個班級共有多少學(xué)生?統(tǒng)計數(shù)學(xué)成績大于90的學(xué)生有多少個?統(tǒng)計總分大于250的人數(shù)有多少?count(*)和count(列名)的區(qū)別[單獨建表]Count(列名)返回某一列,行的總數(shù)合計函數(shù)-sum 主講:韓順平Selectsum(列名){,sum(列名)…}fromtablename [WHEREwhere_definition]
課堂練習(xí):統(tǒng)計一個班級數(shù)學(xué)總成績?統(tǒng)計一個班級語文、英語、數(shù)學(xué)各科的總成績統(tǒng)計一個班級語文、英語、數(shù)學(xué)的成績總和統(tǒng)計一個班級語文成績平均分注意1.:sum僅對數(shù)值起作用,否則會報錯。注意2.:sum函數(shù)中,如果有null值,對結(jié)果有影響,舉例說明(創(chuàng)建測試表)注意:對多列求和,“,”號不能少。Sum函數(shù)返回滿足where條件的行的和合計函數(shù)-avg 主講:韓順平Selectavg(列名){,avg(列名)…}fromtablename [WHEREwhere_definition]
練習(xí):求一個班級數(shù)學(xué)平均分?求一個班級總分平均分AVG函數(shù)返回滿足where條件的一列的平均值合計函數(shù)-Max/min 主講:韓順平Selectmax(列名)fromtablename [WHEREwhere_definition]
練習(xí):求班級最高分和最低分(數(shù)值范圍在統(tǒng)計中特別有用)Max/min函數(shù)返回滿足where條件的一列的最大/最小值select語句(6) 主講:韓順平SELECTcolumn1,column2.column3..FROM table groupbycolumn使用groupby子句對列進(jìn)行分組SELECTcolumn1,column2.column3.. FROM table groupbycolumnhaving...使用having子句過濾groupby用于對查詢的結(jié)果分組統(tǒng)計,(畫出分組示意圖)having子句用于限制分組顯示結(jié)果.?如何顯示每個部門的平均工資和最高工資?顯示每個部門的每種崗位的平均工資和最低工資?顯示平均工資低于2000的部門號和它的平均工資[別名]Mysql函數(shù)-一覽 主講:韓順平CURRENT_DATE(
)當(dāng)前日期CURRENT_TIME(
)當(dāng)前時間CURRENT_TIMESTAMP()當(dāng)前時間戳DATE(datetime)返回datetime的日期部分DATE_ADD(date2,INTERVALd_valued_type)在date2中加上日期或時間DATE_SUB(date2,INTERVALd_valued_type)在date2上減去一個時間DATEDIFF(date1,date2)兩個日期差(結(jié)果是天)TIMEDIFF(date1,date2)兩個時間差(多少小時多少分鐘多少秒)NOW(
)當(dāng)前時間YEAR|Month|DATE(datetime)FROM_UNIXTIME()年月日時間日期相關(guān)函數(shù) 主講:韓順平CURRENT_DATE(
)當(dāng)前日期CURRENT_TIME(
)當(dāng)前時間CURRENT_TIMESTAMP()當(dāng)前時間戳selectcurrent_date()fromdual;selectcurrent_time()fromdual;時間日期相關(guān)函數(shù) 主講:韓順平DATE(datetime)返回datetime的日期部分DATE_ADD(date2,INTERVALd_valued_type)在date2中加上日期或時間DATE_SUB(date2,INTERVALd_valued_type)在date2上減去一個時間DATEDIFF(date1,date2)兩個日期差(結(jié)果是天)四個函數(shù)的基本使用,創(chuàng)建一張留言表:mysql>createtablemes(idint,contentvarchar(256),sendtimedatetime);添加一些數(shù)據(jù)mysql>insertintomessagevalues(3,'hello1',now());mysql>insertintomessagevalues(4,'hello1',now());查詢顯示所有留言信息,發(fā)布日期只顯示日期,不用顯示時間.請查詢在10分鐘內(nèi)發(fā)布的帖子請在mysql的sql語句中求出2011-11-11和1990-1-1相差多少天請用mysql的sql語句求出你活了多少天?時間日期相關(guān)函數(shù) 主講:韓順平DATE(datetime)返回datetime的日期部分DATE_ADD(date2,INTERVALd_valued_type)在date2中加上日期或時間DATE_SUB(date2,INTERVALd_valued_type)在date2上減去一個時間DATEDIFF(date1,date2)兩個日期差(結(jié)果是天)上面函數(shù)的細(xì)節(jié)說明:DATE_ADD()中的interval后面可以是yearminuteseconddayDATE_SUB()中的interval后面可以是yearminuteseconddayDATEDIFF(date1,date2)得到的是天數(shù),而且是date1-date2的天數(shù),因此可以取負(fù)數(shù)這四個函數(shù)的日期類型可以是date,datetime或者timestamp這幾個函數(shù)經(jīng)常在論壇留言表中使用.時間日期相關(guān)函數(shù) 主講:韓順平四個函數(shù)的基本使用,創(chuàng)建一張留言表:mysql>createtablemes(idint,contentvarchar(30),sendtimedatetime);添加一些數(shù)據(jù)mysql>insertintomessagevalues(10'第一條留言',now());mysql>insertintomessagevalues(20,'第二條留言',now());課堂練習(xí)查詢:顯示所有留言信息,發(fā)布日期只顯示日期,不用顯示時間.請查詢在30秒以前發(fā)布的帖子select*frommeswheredate_add(sendtime,interval30second)<=now();請在mysql的sql語句中求出2009-11-11和1997-1-1相差多少天你活了多少年,取整數(shù)時間日期相關(guān)函數(shù) 主講:韓順平TIMEDIFF(date1,date2)兩個時間差(多少小時多少分鐘多少秒)NOW(
)當(dāng)前時間YEAR|Month|DATE(datetime)FROM_UNIXTIME()unix_timestamp();年月日這里用的比較多的是now()另外函數(shù)演示一下即可mysql>selecttimediff(now()+10,now());mysql>selectyear(now());mysql>selectunix_timestamp();from_unixtime默認(rèn)顯示時間日期相關(guān)函數(shù) 主講:韓順平TIMEDIFF(date1,date2)兩個時間差(多少小時多少分鐘多少秒)NOW(
)當(dāng)前時間YEAR|Month|DATE(datetime)FROM_UNIXTIME()unix_timestamp();年月日在實際開發(fā)中,我們也經(jīng)常使用int來保存一個unix時間戳.請設(shè)計一張留言表,使用int保存時間,在顯示時,可以按年-月-日時:分:秒的形式顯示在控制臺(控制臺添加和顯示)能夠通過php程序添加時間,并且可以在php頁面也安年-月-日時分秒形式顯示在頁面date_default_timezone_set(PHP添加顯示)時間日期相關(guān)函數(shù) 主講:韓順平TIMEDIFF(date1,date2)兩個時間差(多少小時多少分鐘多少秒)NOW(
)當(dāng)前時間YEAR|Month|DATE(datetime)FROM_UNIXTIME()unix_timestamp();年月日上機練習(xí)題,先練后講.思考,如何查詢在10秒/1天/2小時內(nèi)發(fā)布的消息如何查詢在10秒/1天/2小時前發(fā)布的消息字符串相關(guān)函數(shù) 主講:韓順平CHARSET(str)返回字串字符集CONCAT(string2
[,...])連接字串INSTR(string,substring)返回substring在string中出現(xiàn)的位置,沒有返回0UCASE(string2)轉(zhuǎn)換成大寫LCASE(string2)轉(zhuǎn)換成小寫LEFT(string2,length)從string2中的左邊起取length個字符LENGTH(string)string長度[按照字節(jié)]REPLACE(str,search_str,replace_str)在str中用replace_str替換search_strSTRCMP(string1,string2)逐字符比較兩字串大小,SUBSTRING(str,position
[,length])從str的position開始,取length個字符LTRIM(string2)RTRIM(string2)trim去除前端空格或后端空格綜合練習(xí):以首字母小寫的方式顯示所有員工的姓名數(shù)學(xué)相關(guān)函數(shù) 主講:韓順平ABS(number2)絕對值BIN(decimal_number)十進(jìn)制轉(zhuǎn)二進(jìn)制CEILING(number2)向上取整CONV(number2,from_base,to_base)進(jìn)制轉(zhuǎn)換FLOOR(number2)向下取整FORMAT(number,decimal_places)保留小數(shù)位數(shù),格式化一把xx,xxx形式顯示HEX(DecimalNumber)轉(zhuǎn)十六進(jìn)制LEAST(number,number2
[,..])求最小值MOD(numerator,denominator)求余RAND([seed])RAND([seed])其范圍為0≤v≤1.0rand()返回一個隨機浮點值v,范圍在0到1之間(即,其范圍為0≤v≤1.0)。若已指定一個整數(shù)參數(shù)N,則它被用作種子值,用來產(chǎn)生重復(fù)序列。
流程控制函數(shù)[了解] 主講:韓順平IF(expr1,expr2,expr3)如果expr1為True,則返回expr2否則返回expr3IFNULL(expr1,expr2)如果expr1不為空NULL,則返回expr1,否則返回expr2SELECTCASEWHENexpr1THENexpr2WHENexpr1THENexpr3ELSEexpr4END;[也可以多重分支.]其它函數(shù) 主講:韓順平USER()查詢用戶DATABASE()數(shù)據(jù)庫名稱MD5(str)為字符串算出一個MD5128比特檢查和,通常用于對應(yīng)用程序使用到的表的某個字段(比如用戶密碼)加密PASSWORD(str)select*frommysql.user\G從原文密碼str計算并返回密碼字符串,通常用于對mysql數(shù)據(jù)庫的用戶密碼加密基本使用mysql>createtableusers(idint,namevarchar(64)notnulldefault'',pwdchar(32)notnulldefault'');添加一個用戶名.PHP對Mysql進(jìn)行操作實例 主講:韓順平//1.對mysql完成查詢,得到連接$conn=mysql_connect("localhost","root","root");//選擇數(shù)據(jù)mysql_select_db("hspdb1",$conn); //查詢數(shù)據(jù),返回結(jié)果$res=mysql_query("select*fromusers",$conn);//得到查詢到多少記錄$recs=mysql_num_rows($res);echo"共".$recs."條記錄<br/>";//取出記錄.while($row=mysql_fetch_array($res)){ //打印 echo"編號:".$row[0]."名稱".$row[1]."郵件".$row[2]."<br/>";}//添加記錄//mysql_query("insertintousers(name,email)values('abc1','beijing')",$conn) //修改 //mysql_query("updateuserssetemail=''whereid=4",$conn);//刪除mysql_query("deletefromuserswhereid=4",$conn);echo"<br/>執(zhí)行ok!";課后練習(xí)題 主講:韓順平練習(xí):寫一個PHP,可以顯示任意一張表的信息要求:編寫一個php程序,顯示一張表的全部信息要求,只需要給$sql="select*from表名"即可顯示表的信息,表頭是動態(tài)顯示的。不需要指定.提示:使用mysql_num_fields()函數(shù)和mysql_field_name()就可以搞定php數(shù)據(jù)庫編程(2)-mysql 主講:韓順平1.mysql表的基本查詢加強2.mysql表的復(fù)雜查詢3.維護(hù)數(shù)據(jù)的完整性—約束mysql表的基本查詢--加強 主講:韓順平■介紹-公欲善其事,必先利其器在前面我們講過mysql表的基本查詢,但是都是對一張表進(jìn)行的查詢,這在實際的軟件開發(fā)中,還遠(yuǎn)遠(yuǎn)的不夠。下面我們講解的過程中,將模擬一個簡單的公司管理系統(tǒng),創(chuàng)建三張表(emp,dept,salgrade)為大家演示如何進(jìn)行多表查詢,select語句在軟件編程中非常的有用,希望大家好好的掌握。mysql表的基本查詢--加強 主講:韓順平■查看表結(jié)構(gòu)■查詢所有列■查詢指定列■如何取消重復(fù)行distinct?查詢SMITH的薪水,工作,所在部門mysql表的基本查詢--加強 主講:韓順平■使用算數(shù)表達(dá)式?顯示每個雇員的年工資■使用列的別名selectename"姓名",sal*12as"年收入"fromemp;
mysql表的基本查詢--加強 主講:韓順平■使用where子句 ?如何顯示工資高于3000的員工 ?如何查找1982.1.1后入職的員工//日期類型是可以比較 ?如何顯示工資在2000到2500的員工情況//比較運算符between■如何使用like操作符 %:表示任意0到多個字符_:表示任意單個字符 ?如何顯示首字符為S的員工姓名和工資 ?如何顯示第三個字符為大寫O的所有員工的姓名和工資■在where條件中使用in?如何顯示empno為123,345,800...的雇員情況■?如何顯示沒有上級的雇員的情況mysql表的基本查詢--加強 主講:韓順平■使用邏輯操作符號?查詢工資高于500或是崗位為MANAGER的雇員,同時還要滿足他們的姓名首寫字母為大寫的J■使用orderby字句(示意圖)?如何按照工資的從低到高的順序顯示雇員的信息?按照部門號升序而雇員的工資降序排列■使用列的別名排序[津貼]對所有員工的年工資進(jìn)行排序.
mysql表的基本查詢--加強 主講:韓順平■分頁查詢按雇員的id號升序取出,每頁顯示3條記錄。請分別顯示第一頁,第二頁,第三頁
課堂練習(xí)題:按雇員的id號降序取出,每頁顯示4條記錄。請分別顯示第3頁,第5頁對應(yīng)的sql語句mysql表的基本查詢--加強 主講:韓順平■說明在實際應(yīng)用中經(jīng)常需要執(zhí)行復(fù)雜的數(shù)據(jù)統(tǒng)計,經(jīng)常需要顯示多張表的數(shù)據(jù),現(xiàn)在我們給大家介紹較為復(fù)雜的select語句■數(shù)據(jù)分組-max,min,avg,sum,count?如何顯示所有員工中最高工資和最低工資?顯示所有員工的平均工資和工資總和?計算共有多少員工?請統(tǒng)計部門編號為10的平均工資.擴展要求:[上機練習(xí),同學(xué)們先做]?請顯示工資最高的員工的名字,工作崗位?請顯示工資高于平均工資的員工信息mysql表的基本查詢--加強 主講:韓順平■groupby和having子句groupby用于對查詢的結(jié)果分組統(tǒng)計,having子句用于限制分組顯示結(jié)果.同學(xué)們先思考?如何顯示每個部門的平均工資和最高工資?顯示每個部門的每種崗位的平均工資和最低工資?顯示平均工資低于2000的部門號和它的平均工資[別名可用]擴展要求:mysql表的基本查詢--加強主講:韓順平課堂練習(xí)(后面評講):使用分組函數(shù)和數(shù)據(jù)分組子句(1)顯示所有雇員的平均工資、總計工資、最高工資、最低工資。(2)顯示每種崗位的雇員總數(shù)、平均工資。(3)顯示雇員總數(shù),以及獲得補助的雇員數(shù)。(4)顯示管理者的總?cè)藬?shù)。(5)顯示雇員工資的最大差額。(6)顯示每個部門每個崗位的平均工資[1]、每個部門的平均工資[2]、每個崗位的平均工資[3]。mysql表的基本查詢--加強主講:韓順平■對數(shù)據(jù)分組的總結(jié)1.如果在select語句種同時包含有g(shù)roupby,having,orderby那么他們的順序是groupby,having,orderby請統(tǒng)計各個部門的平均工資,并且是大于1000的,并且按照平均工資從高到低排序wheresalin('xxx');mysql表的復(fù)雜查詢 主講:韓順平■多表查詢問題的引出(重點,難點)后面,要求大家能夠完成!mysql表的復(fù)雜查詢-多表查詢主講:韓順平■說明課堂練習(xí):顯示雇員名,雇員工資及所在部門的名字,并按部門排序[降序排].思考題:請查詢出雇員的名字,薪水,工作,部門的名稱,工資的級別多表查詢是指基于兩個和兩個以上的表或是視圖的查詢.在實際應(yīng)用中,查詢單個表可能不能滿足你的需求,(如顯示sales部門位置和其員工的姓名),這種情況下需要使用到(dept表和emp表)?顯示雇員名,雇員工資及所在部門的名字【笛卡爾集】規(guī)定:多表查詢的條件是至少不能少于表的個數(shù)-1?如何顯示部門號為10的部門名、員工名和工資?顯示各個員工的姓名,工資,及其工資的級別mysql表的復(fù)雜查詢-自連接主講:韓順平■自連接自連接是指在同一張表的連接查詢。?顯示某個員工的上級領(lǐng)導(dǎo)的姓名比如顯示’FORD’的上級. 課堂練習(xí)題[同學(xué)們先做!]思考題:顯示公司每個員工名字和他的上級的名字mysql表的復(fù)雜查詢-子查詢主講:韓順平■什么是子查詢子查詢是指嵌入在其它sql查詢語句中的select語句,也叫嵌套查詢■單行子查詢單行子查詢是指只返回一行數(shù)據(jù)的子查詢語句請思考:如何顯示與SMITH同一部門的所有員工?■多行子查詢多行子查詢指返回多行數(shù)據(jù)的子查詢使用關(guān)鍵字in課堂練習(xí):如何查詢和10號部門的工作相同的雇員的名字、崗位、工資、部門號,但是不含10號部門的雇員.mysql表的復(fù)雜查詢- 主講:韓順平?上機練習(xí)題查詢ecshop中各個類別中,價格最高的商品.提示,會使用到:ecs_goods的字段goods_idcat_idgoods_nameshop_pricegroupby會默認(rèn)返回第一行.mysql表的復(fù)雜查詢- 主講:韓順平■在多行子查詢中使用all操作符請思考:如何顯示工資比部門30的所有員工的工資高的員工的姓名、工資和部門號selectename,sal,deptnofromempwheresal>all(selectsalfromempwheredeptno=30);
擴展要求:大家想想還有沒有別的查詢方法.Selectename,sal,deptnofromempwheresal>(selectmax(sal)fromempwheredeptno=30);mysql表的復(fù)雜查詢- 主講:韓順平■在多行子查詢中使用any操作符請思考:如何顯示工資比部門30的其中一個員工的工資高的員工的姓名、工資和部門號selectename,sal,deptnofromempwheresal>any(selectsalfromempwheredeptno=30)擴展要求:大家想想還有沒有別的查詢方法.selectename,sal,deptnofromempwheresal>(selectmin(sal)fromempwheredeptno=30)mysql表的復(fù)雜查詢 主講:韓順平■多列子查詢單行子查詢是指子查詢只返回單列、單行數(shù)據(jù),多行子查詢是指返回單列多行數(shù)據(jù),都是針對單列而言的,而多列子查序則是指查詢返回多個列數(shù)據(jù)的子查詢語句請思考如何查詢與smith的部門和崗位完全相同的所有雇員(并且不含smith本人)(字段1,字段2...)=(select字段1,字段2from。。。。)請查詢和宋江數(shù)學(xué),英語,語文完全相同的學(xué)生[查作弊學(xué)生]mysql表的復(fù)雜查詢 主講:韓順平好好琢磨琢磨吧■在from子句中使用子查詢請思考:如何顯示高于自己部門平均工資的員工的信息(名字,薪水,和該部門的平均薪水)這里要用到數(shù)據(jù)查詢的小技巧,把一個子查詢當(dāng)作一個臨時表使用解法①【課堂練習(xí)】selecte1.*,e2.myavgfromempe1,(selectavg(sal)myavg,deptnofromempgroupbydeptno)e2wheree1.deptno=e2.deptnoande1.sal>e2.myavg解法②selecte1.*fromempe1wheree1.sal>(selectavg(sal)fromempe2wheree2.deptno=e1.deptno)mysql表的復(fù)雜查詢 主講:韓順平好好琢磨琢磨吧■在from子句中使用子查詢請思考:查找每個部門工資最高的人的詳細(xì)資料(雇員們,薪水,部門編號,最高工資)解法①解法②思路:得到所有的員工,進(jìn)行篩選,每拿到一個員工,判斷該員工的工資是否是他們部門的最高工資。select*fromempase1wheree1.sal=(selectmax(sal)fromempase2wheree2.deptno=e1.deptno);mysql表的復(fù)雜查詢 主講:韓順平好好琢磨琢磨吧■在from子句中使用子查詢—課堂小練習(xí)先練,再講:顯示每個部門的信息(部門名,編號,地址)和人員數(shù)量,我們一起完成。思路:1.先將人員信息和部門信息關(guān)聯(lián)顯示2.然后統(tǒng)計mysql表的復(fù)雜查詢 主講:韓順平■在from子句中使用子查詢這里需要說明的當(dāng)在from子句中使用子查詢時,為了查詢方便,需要給子查詢指定別名.總結(jié)一下mysql表的復(fù)雜查詢 主講:韓順平■自我復(fù)制數(shù)據(jù)(蠕蟲復(fù)制)有時,為了對某個sql語句進(jìn)行效率測試,我們需要海量數(shù)據(jù)時,可以使用此法為表創(chuàng)建海量數(shù)據(jù)。insertintomytable(id,name,sal,job,deptno)selectempno,ename,sal,job,deptnofromemp;
思考題:如何刪除掉一張表重復(fù)記錄temp_table是一張臨時表[使用createtable表名likexxx]aa:是你要處理表(有重復(fù)行的.)insertintotemp_tableselectdistinct*fromaadeletefromaainsertintoaaselect*fromtemp_tabledroptabletemp_tablemysql表的復(fù)雜查詢-合并查詢主講:韓順平■合并查詢【了解】有時在實際應(yīng)用中,為了合并多個select語句的結(jié)果,可以使用集合操作符號union,unionall1)union該操作符用于取得兩個結(jié)果集的并集。當(dāng)使用該操作符時,會自動去掉結(jié)果集中重復(fù)行。selectename,sal,jobfromempwheresal>2000unionselectename,sal,jobfromempwherejob='MANAGER'; mysql表的復(fù)雜查詢-合并查詢主講:韓順平2)unionall該操作賦與union相似,但是它不會取消重復(fù)行,而且不會排序。selectename,sal,jobfromempwheresal>2000unionallselectename,sal,jobfromempwherejob='manager';mysql表的內(nèi)連接和外連接主講:韓順平■概述表連接分為內(nèi)連接和外連接?!鰞?nèi)連接內(nèi)連接實際上就是利用where子句對兩張(多表)表形成的笛卡爾積進(jìn)行篩選,我們前面學(xué)習(xí)的查詢都是內(nèi)連接,也是在開發(fā)過程中用的最多的連接查詢?;菊Z法:select字段from表1innerjoin表2on連接條件AND其它條件;請顯示雇員的名字,工作,和部門的名稱??mysql表的內(nèi)連接和外連接主講:韓順平■外連接①左外連接 (如果左側(cè)的表完全顯示我們就說是左外連接)②右外連接 (如果右側(cè)的表完全顯示我們就說是右外連接)為了講清楚,我們舉例說明。--表stuidname1,Jack2,Tom3,Kity4,nono--表examidgrade1,562,7611,8mysql表的內(nèi)連接和外連接主講:韓順平■外連接1)左連接(顯示所有人的成績,如果沒有成績,也要顯示該人的姓名和id號,成績顯示為空)selectstu.id,,exam.gradefromstuleftjoinexamonstu.id=exam.idmysql表的內(nèi)連接和外連接主講:韓順平■外連接2)右連接(顯示所有成績,如果沒有名字匹配,顯示空)思考題,實現(xiàn)學(xué)生表(stu)和考試成績(exam)的完全顯示效果?mysql表的內(nèi)連接和外連接主講:韓順平■一個小練習(xí)(課堂練習(xí))為加深大家對外連接的理解,我們做一個小練習(xí)列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門。要求兩種方式使用左外連接實現(xiàn)使用右外連接實現(xiàn)php數(shù)據(jù)庫編程(3)-mysql主講:韓順平1.維護(hù)數(shù)據(jù)的完整性—約束2.mysql表自增3.mysql索引mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■約束約束用于確保數(shù)據(jù)庫數(shù)據(jù)滿足特定的商業(yè)規(guī)則。在mysql中,約束包括:notnull、unique,primarykey,foreignkey,和check五種.mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■primarykey(主鍵)-基本使用用于唯一標(biāo)示表行的數(shù)據(jù),當(dāng)定義主鍵約束后,該列不能重復(fù),不能null字段名字段類型primarykeyuser表字段:id name emailmysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■primarykey(主鍵)-細(xì)節(jié)說明primarykey不但不能重復(fù)而且不能為null。一張表最多只能有一個主鍵,但可以是復(fù)合主鍵一般來說一張表總有primarykey,而且是整數(shù)類型的(ecs_vote、ecs_users、ecs_goods等等)主鍵的指定方式有兩種直接在字段名后指定:字段名primakrykey在表定義最后寫primarykey(列名);如果一個字段設(shè)置成notnull并unique,從使用效果上非常像primarykey使用desc表名,可以看到primarykey的情況.mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■notnull(非空)如果在列上定義了notnull,那么當(dāng)插入數(shù)據(jù)時,必須為列提供數(shù)據(jù)?!鰑nique(唯一)當(dāng)定義了唯一約束后,該列值是不能重復(fù)的.。字段名字段類型notnull字段名字段類型uniqueunique細(xì)節(jié)(注意):指定notnull和不指定notnull,會怎樣?一張表可以有幾個unique?mysql維護(hù)數(shù)據(jù)的完整性-約束主講:韓順平■foreignkey(外鍵)-基本使用用于定義主表和從表之間的關(guān)系:外鍵約束要定義在從表上,主表則必須具有主鍵約束或是unique約束.,當(dāng)定義外鍵約束后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或是為null(學(xué)生/班級圖示)InnoDBFOREIGNKEY(本表字段名)REFERENCES主鍵表名(主鍵名或unique字段名)學(xué)生表(從表) 班級表(主表)idnameclass_id id class_nameintroducestu_nummysql維護(hù)數(shù)據(jù)的完整性-約束主講
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國單工位水簾式噴臺數(shù)據(jù)監(jiān)測研究報告
- 2024版國際貿(mào)易信用證擔(dān)保合同范本與結(jié)算風(fēng)險控制3篇
- 2025版汽車零部件出口供應(yīng)合同
- 二零二五年度企業(yè)間公轉(zhuǎn)私短期借款合同范本3篇
- 二零二五年度醫(yī)療器械臨床試驗研究者違規(guī)處理辦法2篇
- 2025年貴州省建筑安全員-C證考試題庫
- 半年安全管理工作匯報
- 【名師伴你行】2022年高考物理一輪復(fù)習(xí)課時作業(yè)36光的折射-全反射-
- 二零二五年度專業(yè)醫(yī)療機構(gòu)兼職醫(yī)生聘用協(xié)議3篇
- 2024鍋爐練習(xí)測試題附答案
- 家裝工地形象及成品保護(hù)驗收標(biāo)準(zhǔn)
- 2018年海南公務(wù)員考試申論真題
- GB/T 28799.2-2020冷熱水用耐熱聚乙烯(PE-RT)管道系統(tǒng)第2部分:管材
- 《毛澤東思想概論》題庫
- 勞務(wù)派遣人員考核方案
- 意志力講解學(xué)習(xí)課件
- 生產(chǎn)作業(yè)員質(zhì)量意識培訓(xùn)課件
- 固定資產(chǎn)報廢管理辦法
- 《路由與交換》課程標(biāo)準(zhǔn)
- 工程開工令模板
- 福建省漳州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
評論
0/150
提交評論