學習MySQL主要還是學習通用的SQL語句,那么SQL語句包括增刪改查,SQL語句怎么分類呢? DQL(數(shù)據(jù)查詢語言): 查詢語句,凡是select語句都是DQL。 DML(數(shù)據(jù)操作語言):insert delete update,對表當中的數(shù)據(jù)進行增刪改。 DDL(數(shù)據(jù)定義語言):create drop alter,對表結構的增刪改。 TCL(事務控制語言):commit提交事務,rollback回滾事務。(TCL中的T是Transaction) DCL(數(shù)據(jù)控制語言): grant授權、revoke撤銷權限等。 一、DDL數(shù)據(jù)定義語言 1、連接數(shù)據(jù)庫 cmd-》mysql -uroot -p123456 2、創(chuàng)建數(shù)據(jù)庫 create database bj; 3、查看有哪些數(shù)據(jù)庫 show databases; 4、使用bj數(shù)據(jù)庫 use bj; 5、查看當前使用的數(shù)據(jù)庫中有哪些表 show tables; 6、導入數(shù)據(jù) source D:\bj.sql 7、查看表結構 desc dept; desc emp; desc salgrede; 8、查看表中的數(shù)據(jù) select * from emp; 8、刪除數(shù)據(jù)庫 drop database bj; 9、命令行外查看數(shù)據(jù)庫版本 mysql --version mysql -P 10、查看當前使用的是哪個數(shù)據(jù)庫 select database(); 11、查看mysql版本 select version(); 12、離開mysql exit 二、簡單查詢語句(DQL) 1、簡單的查詢語句,查詢員工的年薪? select ename,sal * 12 as '年薪' from emp; 三、條件查詢 1、查詢工資等于5000的員工姓名? select ename from emp where sal = 5000; 2、查詢SMITH的工資? select sal from emp where ename = 'SMITH'; // 字符串使用單引號括起來。 3、找出工資高于3000的員工? select ename,sal from emp where sal > 3000; 4、找出工資不等于3000的? select ename,sal from emp where sal <> 3000; select ename,sal from emp where sal != 3000; 5、找出工資在1100和3000之間的員工,包括1100和3000? select ename,sal from emp where sal >= 1100 and sal <= 3000; select ename,sal from emp where sal between 1100 and 3000; // between...and...是閉區(qū)間 [1100 ~ 3000] 6、找出哪些人津貼為NULL? 在數(shù)據(jù)庫當中NULL不是一個值,代表什么也沒有,為空。 必須使用 is null或者is not null select ename,sal,comm from emp where comm is null 7、找出哪些人沒有津貼? select ename,sal,comm from emp where comm is null or comm = 0; 8、找出工作崗位是MANAGER和SALESMAN的員工? select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN'; 9、and和or聯(lián)合起來用:找出薪資大于1000的并且部門編號是20或30部門的員工。 select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); // 正確的。 注意:當運算符的優(yōu)先級不確定的時候加小括號。 10、in等同于or:找出工作崗位是MANAGER和SALESMAN的員工? select ename,job from emp where job in('SALESMAN', 'MANAGER'); select ename,job from emp where sal in(800, 5000); // in后面的值不是區(qū)間,是具體的值。 11、not in: 不在這幾個值當中。 select ename,job from emp where sal not in(800, 5000); 12、模糊查詢like ? 找出名字當中含有O的? (在模糊查詢當中,必須掌握兩個特殊的符號,一個是%,一個是_) %代表任意多個字符,_代表任意1個字符。 select ename from emp where ename like '%O%'; 13、找出名字中第二個字母是A的? select ename from emp where ename like '_A%'; 14、找出名字中有下劃線的? select name from t_user where name like '%\_%'; // \轉義 15、找出名字中最后一個字母是T的? select ename from emp where ename like '%T'; 四、排序(升序、降序) 1、 按照工資升序,找出員工名和薪資? 注意:默認是升序。怎么指定升序或者降序呢?asc表示升序,desc表示降序。 select ename , sal from emp order by sal; // 升序 select ename , sal from emp order by sal asc; // 升序 select ename , sal from emp order by sal desc; // 降序。 2、按照工資的降序排列,當工資相同的時候再按照名字的升序排列。 select ename,sal from emp order by sal desc; select ename,sal from emp order by sal desc , ename asc; 注意:越靠前的字段越能起到主導作用。只有當前面的字段無法完成排序的時候,才會啟用后面的字段。 3、找出工作崗位是SALESMAN的員工,并且要求按照薪資的降序排列。 select ename,job,sal from emp where job = 'SALESMAN' order by sal desc; 五、分組函數(shù) count 計數(shù) sum 求和 avg 平均值 max 最大值 min 最小值 記?。核械姆纸M函數(shù)都是對“某一組”數(shù)據(jù)進行操作的。 1、找出工資總和? select sum(sal) from emp; 2、找出最高工資? select max(sal) from emp; 3、找出最低工資? select min(sal) from emp; 4、找出平均工資? select avg(sal) from emp; 5、找出總人數(shù)? select count(*) from emp; select count(ename) from emp; 6、找出工資高于平均工資的員工? select ename,sal from emp where sal > (select avg(sal) from emp); 7、計算每個員工的年薪? select ename,(sal+comm)*12 as yearsal from emp; 重點:所有數(shù)據(jù)庫都是這樣規(guī)定的,只要有NULL參與的運算結果一定是NULL。 使用ifnull函數(shù): select ename,(sal+ifnull(comm,0))*12 as yearsal from emp; ifnull() 空處理函數(shù)? ifnull(可能為NULL的數(shù)據(jù),被當做什么處理) : 屬于單行處理函數(shù)。 select ename,ifnull(comm,0) as comm from emp; 六、group by 和 having group by : 按照某個字段或者某些字段進行分組。 having : having是對分組之后的數(shù)據(jù)進行再次過濾。 1、找出每個工作崗位的最高薪資 select max(sal),job from emp group by job; 2、每個工作崗位的平均薪資? select job,avg(sal) from emp group by job; 3、找出每個部門不同工作崗位的最高薪資。 select DEPTNO,job,max(sal) from emp group by DEPTNO,job; 4、找出每個部門的最高薪資,要求顯示薪資大于2900的數(shù)據(jù)。 第一步:找出每個部門的最高薪資 select max(sal),deptno from emp group by deptno; 第二步:找出薪資大于2900 select max(sal),deptno from emp group by deptno having max(sal) > 2900; // 這種方式效率低。 select max(sal),deptno from emp where sal > 2900 group by deptno; // 效率較高,建議能夠使用where過濾的盡量使用where。 5、要求顯示薪資大于2000的數(shù)據(jù) select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000; where后面不能使用分組函數(shù): select deptno,avg(sal) from emp where avg(sal) > 2000 group by deptno;// 錯誤了。 這種情況只能使用having過濾。 |
|
來自: 飛絮輕 > 《數(shù)據(jù)庫》