MySQL条件查询
我们知道从 MySQL 表中使用 SELECT 语句来查询数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
SELECT 字段名 FROM 表名 WHERE 条件;
还有个运算符表:
运算符表**
关系运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
逻辑运算符 | 功能 |
---|---|
AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个条件任意成立一个) |
NOT 或 ! | 非,不是 |
其他 | 功能 |
---|---|
BETWEEN…AND… | 在某个范围之间(含最小、最大值) |
IN(…) | 在in之后的列表中的值,多选一 |
LIKE | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
IS [NOT] NULL | 是 NULL |
(我这就不一一演示了)
聚合函数(统计函数)
SQL 允许对表中的数据进行计算,将一列数据作为一个整体,进行纵向计算。
函数名 | 作用 |
---|---|
MAX(column) | 返回某列的最低值(没有则返回NULL) |
MIN(column) | 返回某列的最高值(没有则返回NULL) |
COUNT(column) | 返回某列的行数(不包括 NULL 值) |
COUNT(*) | 返回被选列行数(包括NULL) |
SUM(column) | 求和 |
AVG(column) | 求平均值 |
其中 COUNT 函数可用于任何数据类型 (因为它只是计数),而 SUM 、AVG 函数都只能对数值类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。
分组查询
1.统计函数一般是搭配分组查询;但是单独使用的情况一定是有的。
那么什么是分组呢?**
分组这个概念在生活中其实是很常见的,比如有以下需求:
- 1.在一个班级之中,要求男女各一组进行辩论赛
- 2.在公司中,要求每个部门一组进行拔河比赛
对于第一个需求,假设存在学生表,那么在学生表之中一定会存在一个性别字段,性别只可能是男或者女。
而在公司之中,如果要进行部门分组,肯定需要一个部门列的内容存在重复。
分组只对数据有重复的字段才有意义。
语法
SELECT 分组字段/聚合函数 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后条件];
查询需求:
注意事项**
- 如果一个查询之中不存在
GROUP BY
子句,那么在SELECT
子句之中只允许出现统计函数,其他任何字段都不允许出现。
#错误的语句
SELECT ename,COUNT(job) FROM emp;
#正确的语句
SELECT COUNT(job) FROM emp;
- 在统计查询之中(存在
GROUP BY
子句),SELECT
子句之中只允许出现分组字段(GROUP BY
之后定义的字段)和统计函数,其他的任何字段都不允许出现。
#错误的语句
SELECT ename,COUNT(job) FROM emp GROUP BY job;
#正确的语句
SELECT deptno,COUNT(job) FROM emp GROUP BY job;
在以后进行分组操作的时候,本着一个原则:GROUP BY
子句之中允许出现的字段才是SELECT
子句中允许出现的字段。
WHERE和HAVING区别
- WHERE:是在分组之前使用(可以没有GROUP BY),不允许使用统计函数;
- HAVING:是在分组之后使用(必须结合GROUP BY),允许使用统计函数。
排序查询
通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。
在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。
语法
SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名 [ASC|DESC];
语法说明:
- 排序字段名:表示需要排序的字段名称,多个字段时用逗号隔开。
- ASC|DESC:
ASC
表示字段按升序排序;DESC
表示字段按降序排序。其中ASC
为默认值。
特点
- ORDER BY子句一般放到查询语句的最后面,LIMIT字句除外。
- 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待。
- ORDER BY 指定多个字段进行排序时,MySQL 会按照字段的顺序从左到右依次进行排序。
- 注意:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。
分页查询
对于比较多的数据,如果在一个页面全部显示,查看起来会眼花缭乱。如果能进行分页显示,将更加快捷、清新的浏览!
语法
SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数;
特点
- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数;
- 如果查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 10。