MySQL数据库之DQL查询语句详解操作
Posted bfhonor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库之DQL查询语句详解操作相关的知识,希望对你有一定的参考价值。
DQL:查询语句
CREATE TABLE `student` (
`id` int NOT NULL,
`name` varchar(255),
`age` int NULL DEFAULT NULL,
`sex` varchar(255),
`address` varchar(255),
`math` varchar(255),
`english` varchar(255),
PRIMARY KEY (`id`) USING BTREE
);
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (1, '马云', 55, '男', '杭州', '66', '78');
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (2, '马化腾', 45, '女', '深圳', '98', '97');
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (3, '马景涛', 55, '男', '香港', '56', '77');
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (4, '柳岩', 20, '女', '湖南', '76', '65');
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (5, '柳青', 20, '男', '湖南', '86', NULL);
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (6, '刘德华', 57, '男', '香港', '99', '99');
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (7, '马德', 22, '女', '香港', '99', '99');
INSERT INTO `student` (`id`, `name`, `age`, `sex`, `address`, `math`, `english`) VALUES (8, '德玛西亚', 18, '男', '南京', '56', '65');
一、排序查询
- 语法:
order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
- 排序方式:
①、ASC:升序,默认的。
②、DESC:降序。 - 注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
- 按照数学成绩排名,如果数学成绩一样,则按照英语成绩排名。
SELECT * FROM student ORDER BY math ASC , english ASC;
二. 聚合函数:将一列数据作为一个整体,进行纵向的计算。
- count:计算个数
①、一般选择非空的列:主键
②、count(*)
SELECT COUNT(english) FROM student;
SELECT COUNT(IFNULL(english,0)) FROM student;
- max:计算最大值
SELECT MAX(math) FROM student;
- min:计算最小值
SELECT MIN(math) FROM student;
- sum:计算和
SELECT SUM(math) FROM student;
- avg:计算平均值
SELECT AVG(math) FROM student;
- 注意:聚合函数的计算,排除null值。
- 解决方案:
①、选择不包含非空的列进行计算
②、IFNULL函数
三、分组查询:
- 语法:
group by 分组字段;
1. 注意:
- 分组之后查询的字段:分组字段、聚合函数
- ❗❗❗❗❗❗❗ where 和 having 的区别?
①、where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
②、where 后不可以跟聚合函数,having可以进行聚合函数的判断。
- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT
sex ,
AVG(math),
COUNT(id)
FROM
student
GROUP BY
sex;
- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT
sex,
AVG( math ),
COUNT( id )
FROM
student
WHERE
math > 70
GROUP BY
sex;
- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT
sex,
AVG( math ),
COUNT( id )
FROM
student
WHERE
math > 70
GROUP BY
sex
HAVING
COUNT( id ) > 2;
SELECT
sex,
AVG( math ),
COUNT( id ) 人数
FROM
student
WHERE
math > 70
GROUP BY
sex
HAVING
人数 > 2;
四、分页查询
- 语法:
limit 开始的索引,每页查询的条数;
- 公式:
开始的索引 = (当前的页码 - 1) * 每页显示的条数
- 每页显示3条记录
SElECT
*
FROM
student
LIMIT
0,3 -- 第1页
SELECT
*
FROM
student
LIMIT
3,3; -- 第2页
SELECT
*
FROM
student
LIMIT
6,3;-- 第3页
- limit 是一个mysql"方言"
以上是关于MySQL数据库之DQL查询语句详解操作的主要内容,如果未能解决你的问题,请参考以下文章