WHERE 子句
分页查询
当数据量比较大的时候,如果全部查询出来,一方面阅读感很差,一方面效率低下。使用分页查询技术可限制返回条目数。分页查询使用关键字 limit 来实现。
分页查询的语法如下:
select 列名 from 表名 limit 起始行行号,每页显示的行数
-
查询 city 表中的记录,从第 6 行开始,显示 5 行记录。
SELECT * FROM city LIMIT 5,5;
查询前!
查询后
-
显示 city 表中的前 5 行记录
SELECT * FROM city LIMIT 5;
查询后
ORDER BY 子句
在使用
select
from
子句时,查询出的记录的顺序是记录的添加顺序。如果我们需要记录按一定规则进行排序后输出,就需要对查询出的记录进行重新排序。
-
单列排序
查询 city 表数据,并按人口数量(population)进行排序,SQL 语句如下。
SELECT * FROM city ORDER BY population;
-
多列排序
查询 city 表中的数据,先根据国家代码排序,再根据人口数量排序
SELECT * FROM city ORDER BY countrycode,population;
注意: 非数值类型的字段的排序是按字典序。
升/降序
ORDER BY默认是升序在语句后面省略了asc,降序则只需要在语句后面加上desc
查询 city 表取前 5 条记录数据,并按人口数量(population)进行倒排序,SQL 语句如下。
SELECT * FROM city ORDER BY population DESC LIMIT 6;
注意: 是先排序再取前 5 条,而不是把前 5 条拿去做降序排序后输出。
GROUP BY 与 HAVING 子句
GROUP BY 语法
语法
select 列名 from city [where 条件] group by 列名;
group by
表示分组,从前面提到的统计要求来看,我们需要按countrycode
(国家代码)分组,并加总这些国家的城市的人口数
SELECT SUM(population) AS `citysum` FROM city GROUP BY countrycode;
HAVING 语法
having
也是条件筛选,和 where
的作用差不多,前者在分组基础上筛选,后者是基于行的筛选。也可以说,where
子句是在分组之前对表的行进行筛选,而 having
则是在分完组后对组进行条件筛选
select 列名 from city group by 列名 having 分组条件;
前面我们利用
group by
已经统计出来了,所有国家的人口总数,所以此处只需要在分组和加上我们的限制条件即可
select countrycode,sum(population) from city group by countrycode having sum(population)>100000000;
查询后
sum(population)
表示计算分组后的人口数量的和,即计算每个国家的人口数量。having
此时对分组后的结果进行筛选,此例中的筛选条件即是人口总数超过 1 亿
GROUP BY 与 HAVING 的作用
- 在 MySQL 数据库中
group by
是和聚合函数一起使用的,通过把一个或多个列分成多个组,然后使用聚合函数进行分组统计。having
的作用就是分组后再对组设置查询条件,过滤掉不符合条件的组。
小结
- SQL 语句不区分大小写,
select
和SELECT
是一个意思; - 在运用别名时,如果别名中有特殊符号,则别名必须使用引号括起来;
- 使用分页查询时,要注意第二个参数表示的是每页显示的数目,而不是结束标志;
- 注意
where
和having
的区别。
另外,可以扩展学习以下内容:
- 数据库导入方法:除了本章提到的方法,还有多种方法导入数据库,读者朋友们可以试试其它方法是否能成功;
- 提前学习统计函数的运用;
- 尝试学习通配符在 SQL 语句中的运用;
- 了解什么是正则表达式。