1、GROUP BY子句
GROUP BY子句主要用于根据字段对行分组。例如,根据学生所学的专业对学生基本表中的所有行分组,结果是每个专业的学生成为一组。
语法格式:GROUP BY[ 列名 ] [ ASC | DESC ],...[ WITH ROLLUP ]
GROUP BY可以根据一个或多个列进行分组,也可以根据表达式进行分组,经常和聚合函数一起使用。
例:输出Book表中图书类别名
SELECT 图书类别
FROM Book
GROUP BY 图书类别;
例:按图书类别统计Book表中各类图书的库存数
SELECT 图书类别,COUNT(*)AS '库存数'
FROM Book
GROUP BY 图书类别;
使用带ROLLUP操作符的GROUP BY子句,指定在结果集内不包含由GROUP BY提供的正常行,还包括汇总行。
例:按图书类别、出版社分类统计Book表中各类图书的库存数,并进行分类小计
SELECT 图书类别,出版社,Sum(数量)AS '库存数'
FROM Book
GROUP BY 图书类别,出版社
WITH ROLLUP;
2、HAVING子句
使用HAVING子句的目的与WHERE子句类似,不同的是WHERE子句是用来在FROM子句之后选择行,而HAVING子句用来在GROUP BY子句后选择行。
语法格式:HAVING 条件
SQL标准要求HAVING必须引用GROUP BY子句中的列或用于聚合函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING引用SELECT清单中的列和外部子查询中的列。
例:查找Sell表中每个会员平均订购册数在10本以上的会员的身份证号和平均订购册数。
SELECT 身份证号,AVG(订购册数)AS '平均订购册数'
FROM Sell
GROUP BY 身份证号
HAVING AVG(订购册数)>10;
3、ORDER BY子句
在一条SELECT语句中,若不使用ORDER BY子句,结果中的行的顺序是不可预料的。使用ORDER BY子句后可以保证结果中的行按一定顺序排列。
语法格式:ORDER BY{列名 | 表达式 | 列编号}[ ASC | DESC ],...
关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC
例:将Book表中记录按出版时间先后排序
SELECT *
FROM Book
ORDER BY 出版时间;
例:将Sell表中记录按订购册数从高到底排列
SELECT *
FROM Sell
ORDER BY 订购册数 DESC;
4、LIMIT子句
LIMIT子句是SELECT语句的最后一个子句,主要用于限制被SELECT语句返回的行数
语法格式:LIMIT{ [ 偏移量,]行数 | 行数OFFSET 偏移量}
例如,LIMIT 5表示返回SELECT语句的结果集中最前面5行,而LIMIT 3,5则表示从第4行开始返回5行。
例:查找Members表中注册时间最靠前的5位会员的信息
SELECT * FROM Members
ORDER BY 注册时间
LIMIT 5;
当初始化不是从头开始时,要使用两个参数LIMIT偏移量,行数,值得注意的是初始行的偏移量为0而不是1。
例:查找Book表中从第4条记录开始的5条记录
SELECT *
FROM Book
ORDER BY 学号
LIMIT 3,5;