排序
升序(默认)
SELECT * FROM [表名] ORDER BY [列名] ASC;
降序
SELECT * FROM [表名] ORDER BY [列名] DESC;
多列排序
先对第一列排序,第一列相同后再对第二例进行排序
SELECT * FROM [表名] ORDER BY [列名1] [ASC/DESC],[列名2] [ASC/DESC]...;
聚合函数
聚合函数是用来做纵向运算的函数:
COUNT()
统计指定列不为NULL的记录行数;
SELECT COUNT([列名]) FROM 表名;
MAX()
计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
SELECT MAX([列名]) FROM [表名];
MIN()
计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SELECT MIN([列名]) FROM [表名];
SUM()
计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
SELECT SUM([列名]) FROM [表名];
AVG()
计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
SELECT AVG([列名]) FROM [表名];
分组查询
当需要分组查询时需要使用GROUP BY子句
注:凡和聚合函数同时出现的列名,一定要写在group by 之后
select [列名]count(*) from [表名] group by[列名];
HAVING子句
select [列名]count(*) from [表名] group by[列名] HAVING [条件];
注:having与where的区别:
1.having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
2.having后面可以使用聚合函数(统计函数)
where后面不可以使用聚合函数。
WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
LIMIT
LIMIT语法
LIMIT用来限定查询结果的起始行,以及总行数。
SELECT * FROM [表名] LIMIT [参数1], [参数2];
第一个参数是开始的条数(从0开始),第二个参数是查询的条数
查询语句书写顺序:select – from- where- group by- having- order by-limit
查询语句执行顺序:from - where -group by - having - select - order by-limit
附录:示例代码
-- 查询所有学生,按年龄升序排列
SELECT * FROM stu ORDER BY age ASC;
-- 查询所有学生,按年龄升序排列
SELECT * FROM stu ORDER BY age DESC;
-- 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
SELECT * FROM emp ORDER BY sal DESC,empno ASC;
-- 查询emp表中记录数
SELECT COUNT(*)FROM emp;
-- 查询emp表中月薪大于2500的人数
SELECT COUNT(*)FROM emp WHERE sal>2500;
-- 查询所有雇员月薪和
SELECT SUM(sal) FROM emp;
-- 统计所有员工的平均工资
SELECT AVG(sal) FROM emp;
-- 查询最高工资和最低工资
SELECT MAX(sal),MIN(sal) FROM emp;
-- 查询男生女生分别多少人
select gender,count(*) from stu group by(gender);
-- 查询工资总和大于9000的部门编号以及工资和:
SELECT deptno, SUM(sal)FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
-- 查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;