上一篇博客讲了单表查询的一部分sql语句,下面接着讲单表查询的下部分,而且这部分特别的重要,直接入正题,先创建一张学生表
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
chinese FLOAT,
english FLOAT,
math FLOAT
);
然后往表中插入一些值 方便我们演示一些sql语句
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'张小明',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'李进',67,53,95);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'王五',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'李一',88,98,92);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'李来财',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'张进宝',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
现在表结构为:
1):聚合查询(使用聚合函数的查询)
常用的聚合函数有
sum()求和函数
需求:求出所有学生的math成绩总和
SELECT SUM(math) FROM student;
avg() 求平均函数
需求:求出所有学生的math平均分
SELECT AVG(math) FROM student;
max() 求最大值函数
需求:求出所有学生中math成绩最高的
SELECT MAX(math) FROM student;
min() 求最小值函数
需求:求出所有学生中math成绩最差的
SELECT MIN(math) FROM student;
count() 求表中所有的记录的数量
SELECT COUNT(*) FROM student;
注意:使用count(*)是统计所有的字段值 然后取最大的个数,比如有得字段为null,这是不包含的,所以要使用count()记录表的总数,不能包含null的字段值
2):分页查询(关键字为limit) limit后面会跟二个数字,第一个表示从第几个开始,第二个数字表示查询几行,比如limit 2,4表示从第2条开始查询到第6条,
注意:这里的几始行是从0开始的
需求:查询前二条的数据
SELECT * FROM student LIMIT 0,2;
3):排序查询
平时我们查询select * from student 这样查询是按照插入记录顺序排序的,而有些时候我们会根据需求进行排序
排序的语句是order by (asc/desc)
说明:
asc: 顺序,正序。数值:递增,字母:自然顺序(a-z)
desc: 倒序,反序。数值:递减,字母:自然反序(z-a)
需求:按照id的正序 查询
SELECT * FROM student ORDER BY id ASC;
需求:按照id的倒序 查询
SELECT * FROM student ORDER BY id DESC;
这里要注意一点就是多条件排序 比如要求某一个字段正序 某一个条件倒序查询,记住order by在一条sql语句中只出现一次
需求:按照Chinese正序,按照math的倒序
SELECT * FROM student ORDER BY chinese ASC,math DESC;
4):分组查询
分组查询的关键词为 group by
需求:查询男女的人数
-- 预期结果:
-- 男 3
--- 女 2
SELECT sex,COUNT(*) FROM student1 GROUP BY sex;5):分组查询后筛选
需求: 查询总人数大于2的性别
这个分二步来完成-- 1) 查询男女的人数
-- 2) 筛选出人数大于2的记录(having)
注意: 分组之前条件使用where关键字,分组之前条件使用having关键字
SELECT sex,COUNT(*) FROM student1 GROUP BY sex HAVING COUNT(*)>2;