select
`select <column>
from <table>;`
where
`
SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;`
算术运算符
加:+
减:-
乘:*
除:/
比较运算符
= 和 ~ 相等
<> 和 ~ 不相等
>= 大于等于~
> 大于~
<= 小于等于 ~
<小于 ~
-- 计算全部数据的行数(包含NULL)
聚合函数
SELECT COUNT(*)
FROM product;
-- 计算NULL以外数据的行数
SELECT COUNT(purchase_price)
FROM product;
-- 计算销售单价和进货单价的合计值
SELECT SUM(sale_price), SUM(purchase_price)
FROM product;
-- 计算销售单价和进货单价的平均值
SELECT AVG(sale_price), AVG(purchase_price)
FROM product;
-- MAX和MIN也可用于非数值型数据
SELECT MAX(regist_date), MIN(regist_date)
FROM product;
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值
包含null和不包含null的情况
– 计算全部数据的行数(包含NULL)
SELECT COUNT(*)
FROM product;
– 计算NULL以外数据的行数SELECT COUNT(purchase_price)
FROM product;
– 计算销售单价和进货单价的合计值
使用distinct剔除重复值计数
– 计算去除重复数据后的数据行数
SELECT COUNT(DISTINCT product_type)
FROM product;
总结
- COUNT函数的结果根据参数的不同而不同。 COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。
- 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。
- MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
- 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
- 在聚合函数的参数中使用DISTINCT,可以删除重复数据。
having和where的区分
HAVING子句用于对**分组**进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键);
WHERE子句用户对**行数据**进行过滤
排序order by
顺序排序:oder by
逆序排序: order by desc
语法执行顺序
前文讲GROUP BY中提到,GROUP BY 子句中不能使用SELECT 子句中定义的别名,但是在 ORDER BY 子句中却可以使用别名。为什么在GROUP BY中不可以而在ORDER BY中可以呢?
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
其中SELECT的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。也就是说,当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以不能在ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名