目录
分组:
GROUP BY子句的真正作用:
分组函数:
分组函数重要规则:
HAVING子句
HAVING与WHERE的区别
MySQL 多行数据合并 GROUP_CONCAT
联合查询
查询结果限定
MySQL中的通配符:
分组:
把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。
GROUP BY子句的真正作用:
在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组。
分组函数:
分组函数忽略空值。
结果集隐式按升序排列,如果需要改变排序方式可以使用Order by 子句。
分组函数重要规则:
如果使用了分组函数,或者使用GROUP BY 的查询:出现在SELECT列表中的字段,要么出现在组合函数里,要么出现在GROUP BY 子句中。
GROUP BY 子句的字段可以不出现在SELECT列表当中。
使用集合函数可以不使用GROUP BY子句,此时所有的查询结果作为一组。
HAVING子句
——数据分组--限定组的结果
HAVING子句用来对分组后的结果再进行条件过滤。
HAVING与WHERE的区别
WHERE是在分组前进行条件过滤
HAVING子句是在分组后进行条件过滤
WHERE子句中不能使用聚合函数
HAVING子句可以使用聚合函数。
分组函数的错误用法:
不能在WHERE 子句中限制组.
限制组必须使用HAVING 子句.
不能在WHERE 子句中使用组函数
MySQL 多行数据合并 GROUP_CONCAT
语法: GROUP_CONCAT(expr)
示例:fruits表按s_id,将供应水果名称合并为一行数据
mysql> select s_id, group_concat(f_name)
-> from fruits
-> group by s_id;
使用 GROUP_CONCAT()函数必须对源数据进行分组,否则所有数据会被合并成一行
联合查询
-- 中国或美国城市信息
SELECT * FROM city
WHERE countrycode IN ('CHN' ,'USA');
SELECT * FROM city WHERE countrycode='CHN'
UNION ALL
SELECT * FROM city WHERE countrycode='USA'
说明:一般情况下,我们会将 IN 或者 OR 语句 改写成 UNION ALL,来提高性能
UNION 去重复
UNION ALL 不去重复
查询结果限定
在SELECT语句最后可以用LIMLT来限定查询结果返回的起始记录和总数量(MySQL特有)
语法格式:
SELECT … LIMIT offset_start,row_count;
offset_start:第一个返回记录行的偏移量。默认为0.
row_count:要返回记录行的最大数目。
例子:
SELECT * FROM TB_EMP LIMIT 5;/*检索前5个记录*/
SELECT * FROM TB_EMP LIMIT 5,10;/*检索记录行6-15*/
MySQL中的通配符:
MySQL中的常用统配符有三个:
%:用来表示任意多个字符,包含0个字符
_ : 用来表示任意单个字符
escape:用来转义特定字符