相关文章推荐
发怒的卤蛋  ·  ListView.View 属性 ...·  9 月前    · 
一、SQL 语句进行排序

ORDER BY 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

SELECT 字段名 FROM 表名 WHERE 字段= ORDER BY 字段名 [ASC|DESC];

ASC: 升序,默认值

DESC: 降序

1.1 单列排序:

只按某一个字段进行排序,单列排序。

select * from student order by score desc;

1.2 组合排序:

同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。

组合排序的语法: SELECT 字段名 FROM 表名 WHERE 字段 = ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];

--查询所有的数据 按照分数倒叙最高在最前面,年龄相同按照年纪正序,年龄越小在越前面

select * from student order by score desc , age asc;

二、聚合函数

max(列名) 求这一列的最大值

min(列名) 求这一列的最小值

avg(列名) 求这一列的平均值

count(列名) 统计这一列有多少条记录

sum(列名) 对这一列求总和


语法: SELECT 聚合函数(列名) FROM 表名

-- 查询学生总数

select count(id) as 总人数 from student;

select count(*) as 总人数 from student;

对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL也统计进去呢?

-- 查询 id 字段,如果为 null,则使用 0 代替

select ifnull(id,0) from student;

我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏

select count(ifnull(id,0)) from student;

三、SQL 语句进行分组查询

分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组

语法: SELECT 字段 1,****字段 2... FROM 表名 GROUP BY 分组字段 [HAVING 条件****];

3.1 GROUP BY 怎么分组的?

将分组字段结果中相同内容作为一组,如按性别将学生分成 2 组。

GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

-----例子1: 按性别进行分组,求男生和女生数学的平均分(实际上是将每组的 score 求了平均,返回每组统计的结果)

注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

select sex, avg(score) from student group by sex;

------例子2:查询男女各多少人

select sex, count(*) from student group by sex;

------例子3:查询年龄大于 25 岁的人,按性别分组,统计每组的人数

**select sex, count(*) from student where age > 25 group by sex ; **

------ 例子4:查询年龄大于 25 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据

只有分组后人数大于 2 的这组数据显示出来

**select sex, count( ) from student where age > 25 group by sex having count( )>2 ; **

3.2 having 与 where 的区别

where 子句 :

  1. 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤
    1. where 后面不可以使用聚合函数

    having 子句 :

    having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。

    having 后面可以使用聚合函数

题目: select product,sum(price) from orders group by product where sum(price) > 30;

运行有误,group by 后面不能出现 where,使用 having

3.3 limit 语句

LIMIT 的作用就是限制查询记录的条数。

LIMIT 语法格式:LIMIT offset,length;

offset :起始行数,从 0 开始计数,如果省略,默认就是 0

length : 返回的行数

-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。

select * from student3 limit 2,6;

LIMIT 的使用场景:

分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的

条数。 假设我们每页显示 5 条记录的方式来分页。

-- 如果第一个参数是 0 可以省略写:select * from student limit 5;

MySQL服务器设置权限 mysql设置权限语句

创建管理员:mysqladmin -u root password 123456 登录mysql -u root -p 建库及授权> create database bdp character set utf8; > use bdp; > grant all privileges on bd