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. 注意:

  1. 分组之后查询的字段:分组字段、聚合函数
  2. ❗❗❗❗❗❗❗ 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;

四、分页查询

  1. 语法:limit 开始的索引,每页查询的条数;
  2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
  • 每页显示3条记录
SElECT
	* 
FROM
	student
LIMIT
	0,3 -- 第1页

SELECT 
	* 
FROM 
	student 
LIMIT 
	3,3; -- 第2页

SELECT
	* 
FROM
	student 
LIMIT 
	6,3;-- 第3页

  1. limit 是一个mysql"方言"

以上是关于MySQL数据库之DQL查询语句详解操作的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库之DQL查询语句详解操作

数据库之MySQL的DQL语句(查询语句)

MySQL之DQL——查询语言

MySQL 数据查询语言(DQL)& 事务控制语言(TCL)详解

DQL查询语句

Mysql之DQL,各种查查查