笔记开头格式如下:本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql;
一、SELECT语句基础
select<列名>from<表名> where<条件>
二、算术运算符和比较运算符
1.SQL语句中可以使用的四则运算的主要运算符如下:
含义 | 运算符 |
---|---|
加法 | + |
减法 | - |
乘法 | * |
除法 | / |
2.SQL常见比较运算符如下:
运算符 | 含义 |
---|---|
= | 和~相等 |
<>or != | 和~不相等 |
>= | 大于等于~ |
> | 大于~ |
<= | 小于等于~ |
< | 小于~ |
三、逻辑运算符
1.基本概念
NOT 表示不是,不存在,例如not in,is not null;
AND 相当于“并且”,类似数学中的取交集;
OR 相当于“或者”,类似数学中的取并集;
2.真假值判断
AND 运算符**:**两侧的真值都为真时返回真,除此之外都返回假。
OR 运算符**:**两侧的真值只要有一个不为假就返回真,只有当其两侧的真值都为假时才返回假。
NOT运算符**:**只是单纯的将真转换为假,将假转换为真。
练习题第一部分代码
1.select product_name,regist_date
from product
where regist_date>'2009-04-28';
2.1 选择<product>表中<purchase_price>列 条件为空的所有列
2.2 选择<product>表中<purchase_price>列 条件不为空的所有列
2.3选择<product>表中<purchase_price>列 条件大于空的所有列
3.select product_name ,sale_price,purchase_price
from product
where sale_price-purchase_price>=500;
select product_name ,sale_price,purchase_price
from product
where purchase_price-sale_price<=-500;
4.select product_name,product_type, (sale_price*0.9)-purchase_price as profit
from product
where (sale_price*0.9)-purchase_price>=100
ORDER BY 3 desc ;
四、对表进行聚合查询
1.
- COUNT:计算表中的记录数(行数)
- SUM:计算表中数值列中数据的合计值
- AVG:计算表中数值列中数据的平均值
- MAX:求出表中任意列中数据的最大值
- MIN:求出表中任意列中数据的最小值
2.
- COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。
- 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL。
- MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
- 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
- 在聚合函数的参数中使用DISTINCT,可以删除重复数据。
五、对表进行分组
1.GROUP BY对表进行分类汇总,注意再用聚合函数时候一定要配合GROUP BY使用;在 GROUP BY 子句中指定的列称为聚合键或者分组列。group by可以将NULL指作为一类分类
汇总
2.GROUP BY写法顺序
1.SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
3.常见错误
在使用聚合函数及GROUP BY子句时,经常出现的错误有:
- 在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
- 在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。
- 在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。
六、为聚合结果指定条件
HAVING子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)。
七、对查询结果进行排序
1.默认为升序排列,降序排列为ORDER BY <列名>DESC
#排序可以是已经有的列名,也可以是新增条件排序#
2.ORDER BY中列名可使用别名
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
其中SELECT的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。也就是说,当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以在ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名。
练习题-第二部分
1.第一个错误 GROUP BY应该为product_id,第二个错误 where 要在group by前面
2.select product_type,sum(sale_price)AS 单价合计,sum(purchase_price) as 进货价合计
from product
GROUP BY product_type
having sum(sale_price)> sum(purchase_price)*1.5
3.select *
from product
ORDER BY regist_date Desc,sale_price;