文章目录
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
- 1)简单查询
- 2)条件查询
- 3)模糊查询
- 4)字段控制查询
- 5)排序
- 6)聚合函数
- 7)分组查询
- 8)HAVING 子句
- 9)LIMIT
- 10)分页查询
DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
语法: SELECT 列名 FROM 表名 【WHERE --> BROUP BY–>HAVING–> ORDER BY】
SELECT 要查询的列名称
FROM 表名称
WHERE 限定条件 /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/
1)简单查询
# 查询所有列
SELECT * FROM stu;
# 查询指定列
SELECT sid, sname, age FROM stu;
2)条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=; BETWEEN…AND; IN(set); IS NULL; AND;OR; NOT;
3)模糊查询
语法: 列名 like ‘表达式’ //表达式必须是字符串
通配符:
- _(下划线): 任意一个字符
- %:任意0~n个字符,‘张%’
#查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '_i%';
#查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE '%a%';
4)字段控制查询
- 去除重复记录
关键字:DISTINCT
SELECT DISTINCT sal FROM emp;
- 查看两个列值相加结果
SELECT *,sal+comm FROM emp;
comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出 现NULL。下面使用了把NULL转换成数值0的函数IFNULL:
SELECT *,sal+IFNULL(comm,0) FROM emp;
- 给列名添加别名
SELECT *,sal+IFNULL(comm,0) as total FROM emp;
可以省略AS关键字!
5)排序
语法: order by 列名 asc/desc (asc:升序;desc:降序;默认不写是升序)
//查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
//多列排序:当前面的列的值相同的时候,才会按照后面的列值进行排序
SELECT * FROM emp ORDER BY sal DESC,empno ASC;
6)聚合函数
聚合函数是用来做纵向运算的函数:
COUNT(列名):统计指定列不为NULL的记录行数;
MAX(列名):计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN(列名):计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM(列名):计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG(列名):计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
SELECT MAX(sal), MIN(sal) FROM emp;
7)分组查询
注意如果查询语句中有分组操作,则select后面能添加的只能是聚合函数和被分组的列名
查询每个部门的部门编号以及每个部门的人数:
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
8)HAVING 子句
查询工资总和大于9000的部门编号以及工资和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
多列分组:
-- 统计出stu表中每个班级的男女生各多少人
select gradename,gender ,count(*) from stu
group by gradename,gender
注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
9)LIMIT
LIMIT用来限定查询结果的起始行,以及总行数。
limit 开始下标,显示条数; //开始下标从0开始
limit 显示条数; //表示默认从0开始获取数据
如:查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;
10)分页查询
如果一页记录为10条,希望查看第3页记录应该怎么查呢?
l 第一页记录起始行为0,一共查询10行; limit 0,10
l 第二页记录起始行为10,一共查询10行;limit 10,10
l 第三页记录起始行为20,一共查询10行; limit 20,10
pageIndex 页码值 pageSize 每页显示条数
limit (pageindex-1)*pagesize,pagesize;
查询语句书写顺序:select – from- where- groupby- having- order by-limit
查询语句执行顺序:from - where -group by -having - select - order by-limit