MySQL MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle旗下產(chǎn)品。MySQL 是最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數(shù)據(jù)庫管理系統(tǒng)) 應用軟件。
--增 insertinsertinto 表名 values(字段值1,字段值2,...);--全字段插入insertinto 表名(字段1)values(字段值1);--部分字段插入insertinto 表名 values(記錄1的所有字段),(記錄2的所有字段)...;--一次性插入多條 數(shù)據(jù)--改 updateupdate 表名 set 列名1=列值1,列名2=列值2...where 列名=值;--修改操作update 表名 set 列名1=列值1;--沒有where條件的,會直接修改所有列名的值update 表名 set 列名1=replace(列名1,'原內容','要替換的內容');--批量替換字段里的字符串--刪 deletedeletefrom 表名 where 列名=值;--刪除表中條件是where的deletefrom 表名;--刪除表中所有數(shù)據(jù),表結構還在,刪除后的數(shù)據(jù)可以找回truncatetable 表名;--刪除表中所有數(shù)據(jù),把表直接drop掉,然后再創(chuàng)建一個同樣的新表-刪除的數(shù)據(jù)不能找回。該命令會讓id重新從1開始自動遞增
DQL
Data Query Language 數(shù)據(jù)查詢語言
作用:用來查詢記錄(數(shù)據(jù)) 查詢語句的順序 書寫順序:select → from →join on → where → group by → having → order by → limit 執(zhí)行順序:from → join on → where → group by → having → select → order by → limit
/* 簡單查詢 */select*from emp;--查詢所有列select empno,ename,job from emp;--查詢指定的列select empno as'編號',ename as'別名'from emp;--給列起別名(as可以省略可以使用"",''或者不使用引號)select e.empno,e.ename from emp as e;--給表起別名,表中的字段也能通過表的別名來調用/* 條件查詢 */--條件語句 > < >= <= !=(<>) =--and(&&)select*from emp where deptno=10and sal>2000;--可以使用&&帶代替--or(||)select*from emp where ename='smith'or sal=5000;--可以使用||來代替--between...andselect*from emp where ename between'A'and'F';--BETWEEN AND作用于字符型的數(shù)據(jù)的時候,包含第一個邊界值,但是不包含第二個邊界值--in(set)select*from emp where sal in(800,1600);--in表示包含的意思--is nullselect*from emp where comm isnull;--對于null的判斷不能使用=號--notselect*from emp where deptno !=10;select*from emp where deptno <>10;select*from emp wherenot deptno =10;select*from emp where comm isnotnull;select*from emp wherenot comm isnull;--注意--對于字符型的數(shù)據(jù),是嚴格區(qū)分大小寫的--Oracle在任何的平臺上都是嚴格區(qū)分字符型數(shù)據(jù)大小寫的--MySql在Liunx/Unix平臺上嚴格區(qū)分字符型數(shù)據(jù)大小寫,但是在window平臺上不區(qū)分字符型數(shù)據(jù)大小寫--可以使用BINARY關鍵字,讓MySql在window平臺上也嚴格字符字符型數(shù)據(jù)的大小寫select*from emp wherebinary ename='smith';/* 模糊查詢 */select*from emp where ename like'_M%';-- _ :任意一個字母 查詢第二個字母是m的人select*from emp where ename like'%m%';-- %:任意0~n個字母 查詢名字包含m的人 /* 字段控制查詢 */select salary*12as'年薪'from emp;--可以使用算術表達式將月薪以年薪的形式顯示selectdistinct deptno from emp;--去掉重復值查詢select*,sal+ifnull(comm,0)from emp;/* 排序 */select*from emp orderby sal asc;--升序排序,可默認不寫select*from emp orderby sal desc;--降序排序select*from emp orderby sal desc,empno asc;--按月薪降序排序,如果月薪相同,按編號升序排序/* 單行函數(shù) */--year(日期字段) 將日期格式化為年(月日時分秒同理)selectyear(now())--輸出今年selectyear('2018-01-01');--2018--substr(被截取字段名稱,起啟下標,截取長度) 截取字符串的函數(shù)select ename,substr(ename,2,1)from emp;--length(str) 返回字符型數(shù)據(jù)的長度select ename,length(ename)from emp;select*from emp where length(ename)=5;--查詢名字的長是5的員工--lower(str) 把字符型數(shù)據(jù)轉換為小寫的字符select ename,lower(ename)from emp;--upper(str) 把字符型數(shù)據(jù)轉換為大寫的字符select*from emp wherebinary ename=upper('smith');/* 聚合函數(shù) */--count() 統(tǒng)計指定列不為NULL的記錄行數(shù)selectcount(*)from emp;selectcount(*)from emp where sal+ifnull(comm,0)>2500--max() 計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運算selectmax(sal)from emp;--min() 計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運算selectmin(sal)from emp;--sum() 計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計算結果為0selectsum(sal)from emp;--avg() 計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結果為0selectavg(sal)from emp;/* 分組查詢 */--分組查詢select deptno,sum(sal)from emp groupby deptno;--HAVING子句select deptno,sum(sal)from emp groupby deptno havingsum(sal)>9000;--having與where的區(qū)別:where是先篩選后分組;having是先分組后篩選/* LIMIT */--分頁查詢select*from emp limit5;--查詢5行記錄,默認從0開始select*from emp limit0,5;--查詢5行記錄,起始行從0開始select*from emp limit3,10;--查詢10行記錄,起始行從3開始--注意:LIMIT只能在MySql和SqlServer中有效/* 多表查詢(跨表查詢) */--聯(lián)合查詢--說明:合并結果集就是把兩個select語句的查詢結果合并到一起,被合并的兩個結果:列數(shù)、列類型必須相同--union 去除重復記錄--union all 不去除重復記錄--連接查詢--內連接--等值連接:建立在父子表關系上,用等號來連接兩個表select e.empno,e.ename,e.job,e.sal,d.deptno,d.dnamefrom emp e,dept dwhere e.deptno=d.deptno;--SQL1992語法select e.empno,e.ename,e.job,e.sal,d.deptno,d.dnamefrom emp einnerjoin dept d on(e.deptno=d.deptno);--SQL1999語法--使用內連接的時候,inner可以忽略--非等值連接:兩個表之間沒有父子關系,用非等號來連接兩個表select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisalfrom emp e,salgrade swhere e.sal between s.losal and s.hisal;--SQL1992語法select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisalfrom emp ejoin salgrade s on e.sal between s.losal and s.hisal--SQL1999語法--自連接:使用別名將一個表虛擬成兩個表(父子表),然后再這兩個表上面做等值連接select e.empno '員工編號',e.ename '員工姓名',m.empno '經(jīng)理編號',m.ename '經(jīng)理姓名'from emp e,emp mwhere e.mgr=m.empno && m.empno=7698--SQL1992語法select e.empno '員工編號',e.ename '員工姓名',m.empno '經(jīng)理編號',m.ename '經(jīng)理姓名'from emp ejoin emp m on(e.mgr=m.empno)where m.empno=7698--SQL1999語法--外連接--左外連接(LEFT OUTER JOIN):左外連接可以把左表中不滿足對應關系的數(shù)據(jù)查詢出來select e.empno,e.ename,e.job,e.sal,d.deptno,d.dnamefrom emp eleftouterjoin dept d on e.deptno=d.deptno;--使用外連接的時候,outer可以忽略select e.empno,e.ename,e.job,e.sal,d.deptno,d.dnamefrom dept dleftjoin emp e on e.deptno=d.deptno;--左表的位置是相對的--右外連接(RIGHT OUTER JOIN):右外連接可以把右表中不滿足對應關系的數(shù)據(jù)查詢出來select e.empno,e.ename,e.job,e.sal,d.deptno,d.dnamefrom emp erightjoin dept d on e.deptno=d.deptno;--全外連接(FULL OUTER JOIN):可以把左右兩個表中不滿足對應關系的數(shù)據(jù)都查詢出來select e.empno,e.ename,e.job,e.sal,d.deptno,d.dnamefrom emp efulljoin dept d on e.deptno=d.deptno;--Oracle支持全外連接,MySql不支持全外連接--join的更多用法見下表--子查詢--1.用來給主查詢提供查詢條件或查詢數(shù)據(jù)而首先執(zhí)行的一個查詢--2.主查詢使用子查詢的結果--子查詢必須要放在()里面--分類--出現(xiàn)在where中的子查詢,用來給查詢提供查詢條件的select*from empwhere sal>(selectmax(sal)from emp where deptno=30);--查詢高于30部門所有人工資的員工信息--出現(xiàn)下from后面的子查詢,用來給主查詢提供查詢數(shù)據(jù)的(all,any)select*from empwhere sal>all(select sal from emp);--查詢高于30部門所有人工資的員工信息--(了解)出現(xiàn)在查詢列表中的子查詢,功能類似于外連接的效果