WonderfulSQL-task2
(Datawhale28期组队学习)
基础点
- 查询
- select
- where
- 运算符
- 算术运算符
- 比较运算符
- 逻辑运算符
- 聚合查询
- 分组
- group by
- 指定条件:having
- 排序:order by
知识点
1 查询
1.1 select语句
- SELECT子句中列举了从表中查询出的列的名称 (可以是常数、也可是函数、运算符、正则、表达式的结果)
- 而FROM子句则指定了选取出数据的表的名称(可以是各种操作整理后的新表)
select xx
from yy;
1.2 where语句
- 指定查询数据的条件,约束条件(可以是各种操作整理后的表达式)
select xx
from yy
where zz;
1.3 规则
- (*)代表全部列
- 汉语别名需加双引号“”
- DISTINCT可以去重
2 运算符
2.1 算术运算符
+ - * /
2.2 比较运算符
= <> >= > <= <
2.3逻辑运算符
NOT 非
AND 并(交集)
OR 或(并集)
2.4 规则
- 选取NULL记录时,用IS NULL运算符,不可以用**“=”**
- 选取不是NULL的记录时,用IS NOT NULL运算符,不可以用**“!=”**
- 优先处理括号
- 真值:真(TRUE)、假 (FALSE)、不确定(UNKNOWN)
3 聚合查询
3.1 聚合函数
- COUNT:计算某列或(*所有)记录数(行数)
- SUM:计算某数值列数据和
- AVG:计算某数值列数据均值
- MAX:求任意列中数据的最大值
- MIN:求任意列中数据的最小值
3.2 删除重复值
DISTINCT关键字
COUNT(DISTINCT product_type)
//计算去除重复数据后的数据行数
3.3规则
- 聚合函数不计算null的数据,但是count(*)会计算,把null的数据包含在内。
- count(列),得到除null外的该列记录数。
- sum/avg函数 适用于数值类型的列。
- 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。(去重取巧)
- 在聚合函数的参数中使用DISTINCT关键字。
4 分组
4.1GROUP BY语句
- GROUP BY 子句根据指定的列划分组
- GROUP BY 子句中指定的列称为聚合键或者分组列
SELECT xx1, xx2 ……
FROM yy
(WHERE xx)
GROUP BY xx1, xx2 ……;
4.2 规则
- NULL作为一组特殊数据进行处理
- 逻辑顺序不可变:
- SELECT → FROM → WHERE → GROUP BY;GROUP BY对筛选出的数据进行处理
- SELECT子句只能写聚合键及聚合函数
- 在SELECT,HAVING以及ORDER BY子句中使用聚合函数,不可在where中使用聚合函数(where处于结果集确定过程中)
4.3 HAVING得到特定分组
- 在GROUP BY后使用HAVING子句,指定组
- 限定分组时不能用where,WHERE子句只能指定记录(行)的条件
- Having过滤条件要从聚合键、聚合函数里选
5 排序
5.1order 语句
SELECT <列名1>, <列名2>, <列名3>, ……
FROM <表名>
ORDER BY <排序基准列1>, <排序基准列2>, ……
- 默认升序,降序desc
- 可设置多个排序键
- 排序的列名中含有NULL时,NULL会在开头或末尾进行汇总。
- 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。
- 列名可使用别名
- FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- 当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以不能在ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名
练习
#2.1
select product name, regist_date
from product
where regist_date > '2009-04-28'
#2.2
#(1)查询purchase_price为空的product表商品所有信息
#(2)查询purchase_price非空的product表商品所有信息
#(3)查询purchase_name非空的product表商品所有信息
#2.3
SELECT product_name, sale_price, purchase_price
FROM product
WHERE sale_price >= purchase_price + 500;
#2.4
SELECT product_name, product_type, (sale_price*90%-purchase_price) as profit
FROM product
WHERE profit >= 100
AND product_type in ('办公用品','厨房用具')
#2.5
#(1)sum(product_name)错误,sum适用于数值类型的列
#(2)先写where子句,再写group by 子句
#(3) SELECT子句只能写聚合键及聚合函数,不对应
#2.6
select product_type, sum(sale_price) sale_sum, sum(purchase_price) purchase_sum
from product
GROUP BY product_type
HAVING sale_sum > purchase_sum*1.5
#2.7
order by regist_date desc, sale_price;
参考
- https://github.com/datawhalechina/wonderful-sql