DQL -- 数据查询语言(查询不会修改数据库表记录)
原文出處:https://blog.csdn.net/jianghao233/article/details/81180944
一、 基本查詢
1. 字段(列)控制
1) 查詢所有列
?SELECT * FROM 表名;
?SELECT * FROM emp;
?--> 其中“*”表示查詢所有列
2) 查詢指定列
?SELECT 列1 [, 列2, ... 列N] FROM 表名;
?SELECT empno, ename, sal, comm FROM 表名;
3) 完全重復的記錄只一次
?當查詢結果中的多行記錄一模一樣時,只顯示一行。一般查詢所有列時很少會有這種情況,但只查詢一列(或幾列)時,這總可能就大了!DISTINCT(去除重復)
?SELECT DISTINCT * | 列1 [, 列2, ... 列N] FROM 表名;
?SELECT DISTINCT sal FROM emp;
?--> 保查詢員工表的工資,如果存在相同的工資只顯示一次!
4) 列運算
?I 數量類型的列可以做加、減、乘、除運算
???SELECT sal*1.5 FROM emp;
???SELECT sal+comm FROM emp;
?II 字符串類型可以做連續運算
???SELECT CONCAT('$', sal) FROM emp;
?III 轉換NULL值
???有時需要把NULL轉換成其它值,例如com+1000時,如果com列存在NULL值,那么NULL+1000還是NULL,而我們這時希望把NULL當前0來運算。
???SELECT IFNULL(comm, 0)+1000 FROM emp;
???--> IFNULL(comm, 0):如果comm中存在NULL值,那么當成0來運算。
?IV 給列起別名
???你也許已經注意到了,當使用列運算后,查詢出的結果集中的列名稱很不好看,這時我們需要給列名起個別名,這樣在結果集中列名就顯示別名了
???SELECT IFNULL(comm, 0)+1000 AS 獎金 FROM emp;
???--> 其中AS可以省略(空格即可)
2. 條件控制
1) 條件查詢
??與前面介紹的UPDATE和DELETE語句一樣,SELECT語句也可以使用WHERE子句來控制記錄。
??* SELECT empno,ename,sal,comm FROM emp WHERE sal > 10000 AND comm IS NOT NULL;
??* SELECT empno,ename,sal FROM emp WHERE sal BETWEEN 20000 AND 30000;
??* SELECT empno,ename,job FROM emp WHERE job IN ('經理', '董事長');
?
2) 模糊查詢
??當你想查詢姓張,并且姓名一共兩個字的員工時,這時就可以使用模糊查詢
??* SELECT * FROM emp WHERE ename LIKE '張_';
??--> 模糊查詢需要使用運算符:LIKE,其中_匹配一個任意字符,注意,只匹配一個字符而不是多個。
??--> 上面語句查詢的是姓張,名字由兩個字組成的員工。
??* SELECT * FROM emp WHERE ename LIKE '___'; /*姓名由3個字組成的員工*/
??如果我們想查詢姓張,名字是幾個字都可以的員工時就要使用“%”了。
??SELECT * FROM emp WHERE ename LIKE '張%';
??--> 其中%匹配0~N個任意字符,所以上面語句查詢的是姓張的所有員工。
??SELECT * FROM emp WHERE ename LIKE '%阿%';
??--> 千萬不要認為上面語句是在查詢姓名中間帶有阿字的員工,因為%匹配0~N個字符,
所以姓名以阿開頭和結尾的員工也都會查詢到。
??SELECT * FROM emp WHERE ename LIKE '%';
??--> 這個條件等同與不存在,但如果姓名為NULL的查詢不出來!
二、排序
1) 升序
??SELECT * FROM??emp ORDER BY sal ASC;
??--> 按sal排序,升序!
??--> 其中ASC是可以省略的
2) 降序
??SELECT * FROM??emp ORDER BY comm DESC;
??--> 按comm排序,降序!
??--> 其中DESC不能省略
3) 使用多列作為排序條件
??SELECT * FROM WHERE emp ORDER BY sal ASC, comm DESC;
??--> 使用sal升序排,如果sal相同時,使用comm的降序排
三、聚合函數(都可以添加條件)
?
聚合函數用來做某列的縱向運算。
1) COUNT
??SELECT COUNT(*) FROM emp;
??--> 計算emp表中所有列都不為NULL的記錄的行數
??SELECT COUNT(comm) FROM emp;
??--> 云計算emp表中comm列不為NULL的記錄的行數
2) MAX
??SELECT MAX(sal) FROM emp;
??--> 查詢最高工資
3) MIN
??SELECT MIN(sal) FROM emp;
??--> 查詢最低工資
4) SUM
??SELECT SUM(sal) FROM emp;
??--> 查詢工資合
5) AVG
??SELECT AVG(sal) FROM emp;
??--> 查詢平均工資
四、分組查詢
??分組查詢是把記錄使用某一列進行分組,然后查詢組信息。
??例如:查看所有部門的記錄數。
??SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;
??--> 使用deptno分組,查詢部門編號和每個部門的記錄數
??SELECT job, MAX(SAL) FROM emp GROUP BY job;
??--> 使用job分組,查詢每種工作的最高工資
組條件
??以部門分組,查詢每組記錄數。條件為記錄數大于3
??SELECT deptno, COUNT(*) FROM emp GROUP BY deptno HAVING COUNT(*) > 3;
查詢工資 > 30000 的職位
五、limit子句(方言,只適用于 MySQL)
??LIMIT用來限定查詢結果的起始行,以及總行數。
??例如:查詢起始行為第5行,一共查詢3行記錄
??SELECT * FROM emp LIMIT 4, 3;
??--> 其中4表示從第5行開始,其中3表示一共查詢3行。即第5、6、7行記錄。
??select * from emp limit 0, 5;
??1. 一頁的記錄數:10行
??2. 查詢第3頁
??select * from emp limit 20, 10;
??(當前頁-1) * 每頁記錄數
??(3-1) * 10
順序:select / from /??where /?group by / having / order by
練習:
1. 查詢出部門編號為30的所有員工
select *from emp where deptno =30;
2. 所有銷售員的姓名、編號和部門編號。
select ename,empno,deptno from emp where job ='銷售員'
3. 找出獎金高于工資的員工。
select * from emp where comm>sal;
4. 找出獎金高于工資60%的員工。
select * from emp where comm>(sal * 0.6);
5. 找出部門編號為10中所有經理,和部門編號為20中所有銷售員的詳細資料。
select * from emp where (deptno=10 AND job='經理') OR (deptno=20 AND job='銷售員');
6. 找出部門編號為10中所有經理,部門編號為20中所有銷售員,還有即不是經理又不是銷售員但其工資大或等于20000的所有員工詳細資料。
select * from emp where (deptno=10 AND job='經理') OR (deptno=20 AND job='銷售員') OR (job not in ('經理','銷售員') AND sal>=20000);
7. 有獎金的工種。
select DISTINCT job from emp where comm is not Null;
8. 無獎金或獎金低于1000的員工。
select * from emp where comm < 1000 OR comm is Null;?
9. 查詢名字由三個字組成的員工。
select * from emp where ename like '___'
10.查詢2000年入職的員工。
select * from emp where hiredate like '2000%'
11. 查詢所有員工詳細信息,用編號升序排序
select * from emp order by empno ?asc;
12. 查詢所有員工詳細信息,用工資降序排序,如果工資相同使用入職日期升序排序
select * from emp order by sal desc,hiredate asc;
13. 查詢每個部門的平均工資
select deptno, AVG(sal) from emp group by deptno;
14. 查詢每個部門的雇員數量。?
select deptno, COUNT(1) from emp group by deptno;
15. 查詢每種工作的最高工資、最低工資、人數
select job, MAX(sal), MIN(sal), COUNT(1) from emp group by job;
16. 顯示非銷售人員工作名稱以及從事同一工作雇員的月工資的總和,并且要滿足從事同一工作的雇員的月工資合計大于50000,輸出結果按月工資的合計升序排列
select job, SUM(sal) ?from emp group by job having SUM(sal)>50000 order by SUM(sal) asc;
---------------------?
作者:姜皓?
來源:CSDN?
原文:https://blog.csdn.net/jianghao233/article/details/81180944?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的DQL -- 数据查询语言(查询不会修改数据库表记录)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数学中的向量
- 下一篇: 管理学习笔记(1)——高效团队的五大关键