WHERE 子句

分页查询

当数据量比较大的时候,如果全部查询出来,一方面阅读感很差,一方面效率低下。使用分页查询技术可限制返回条目数。分页查询使用关键字 limit 来实现。

分页查询的语法如下:

select 列名 from 表名 limit 起始行行号,每页显示的行数

  • 查询 city 表中的记录,从第 6 行开始,显示 5 行记录。

    SELECT * FROM city LIMIT 5,5;
    

    查询前!分页1.png

    查询后

    分页2.png

  • 显示 city 表中的前 5 行记录

    SELECT * FROM city LIMIT 5;
    

    分页1.png

    查询后

    分页3.png

ORDER BY 子句

在使用 select from 子句时,查询出的记录的顺序是记录的添加顺序。如果我们需要记录按一定规则进行排序后输出,就需要对查询出的记录进行重新排序。

  • 单列排序

    查询 city 表数据,并按人口数量(population)进行排序,SQL 语句如下。

    SELECT * FROM city ORDER BY population;
    

    order1.png

  • 多列排序

    查询 city 表中的数据,先根据国家代码排序,再根据人口数量排序

    SELECT * FROM city ORDER BY countrycode,population;
    

    多列1.png

    注意: 非数值类型的字段的排序是按字典序。

升/降序

ORDER BY默认是升序在语句后面省略了asc,降序则只需要在语句后面加上desc

查询 city 表取前 5 条记录数据,并按人口数量(population)进行倒排序,SQL 语句如下。

SELECT * FROM city ORDER BY population DESC LIMIT 6;

orderdesc1.png

注意: 是先排序再取前 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;

citysum1.png

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;

having2.png

having3.png

查询后

having1.png

sum(population) 表示计算分组后的人口数量的和,即计算每个国家的人口数量。having 此时对分组后的结果进行筛选,此例中的筛选条件即是人口总数超过 1 亿

GROUP BY 与 HAVING 的作用

  • 在 MySQL 数据库中 group by 是和聚合函数一起使用的,通过把一个或多个列分成多个组,然后使用聚合函数进行分组统计。having 的作用就是分组后再对组设置查询条件,过滤掉不符合条件的组。

小结

  1. SQL 语句不区分大小写,selectSELECT 是一个意思;
  2. 在运用别名时,如果别名中有特殊符号,则别名必须使用引号括起来;
  3. 使用分页查询时,要注意第二个参数表示的是每页显示的数目,而不是结束标志;
  4. 注意 wherehaving 的区别。

另外,可以扩展学习以下内容:

  1. 数据库导入方法:除了本章提到的方法,还有多种方法导入数据库,读者朋友们可以试试其它方法是否能成功;
  2. 提前学习统计函数的运用;
  3. 尝试学习通配符在 SQL 语句中的运用;
  4. 了解什么是正则表达式。

mysql1 1.png