天池龙珠计划SQL_TASK2

本文档详细介绍了SQL中的SELECT语句基础,包括星号、换行符、别名和DISTINCT的使用。接着讲解了运算符,聚合查询如COUNT、SUM、AVG、MAX和MIN函数的应用。重点阐述了GROUP BY语句,如何处理NULL值,以及GROUP BY与SELECT、WHERE子句的关系。HAVING子句用于在分组后设置条件,而ORDER BY用于对查询结果进行升序或降序排序。
摘要由CSDN通过智能技术生成

Task02:SQL基础查询与排序

本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql;

一、SELECT语句基础

SELECT <列名>, ……
  FROM <表名>
 WHERE <条件表达式>;

相关法则

  • 星号代表全部列
  • SQL中可以随意使用换行符,不影响语句执行(但不可插入空行)。
  • 设定汉语别名时需要使用双引号(")括起来。
  • 在SELECT语句中使用DISTINCT可以删除重复行。
  • 注释是SQL语句中用来标识说明或者注意事项的部分。分为1行注释"-- “和多行注释”/* */"

二、运算符

  • 通过括号优先处理在这里插入图片描述

三、聚合查询

最常用的聚合函数:
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值

常用法则
  • COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。
  • 聚合函数会将NULL排除在外。但COUNT(*)例外,并不会排除NULL
  • MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
  • 想要计算值的种类时,可以在COUNT函数的参数中使用DISTINCT。
  • 在聚合函数的参数中使用DISTINCT,可以删除重复数据。

四、对表进行分组

4.1 GROUP BY语句

之前使用聚合函数都是会整个表的数据进行处理,当你想将进行分组汇总时(即:将现有的数据按照某列来汇总统计),使用group by 。
在 GROUP BY 子句中指定的列称为聚合键或者分组列

4.2 聚合键中包含NULL时

会将NULL作为一组特殊数据进行处理

4.3 GROUP BY书写位置

SELECT → 2. FROM → 3. WHERE → 4. GROUP BY

其中前三项用于筛选数据,GROUP BY对筛选出的数据进行处理

4.4 注意点:
  • SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
  • 在GROUP BY子句中不能使用列的别名: SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行
  • WHERE中不能使用聚合函数: 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。 如果想指定条件,可以在SELECT,HAVING以及ORDER BY子句中使用聚合函数

五、为聚合结果指定条件

6.1 用HAVING得到特定分组

将表使用GROUP BY分组后,怎样才能只取出其中两组?
这里WHERE不可行,因为,WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件(例如,“数据行数为 2 行”或者“平均值为 500”等)。

可以在GROUP BY后使用HAVING子句。

HAVING的用法类似WHERE

6.2 HAVING特点

HAVING子句用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名(聚合键)。

-- 数字
SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type
HAVING COUNT(*) = 2;
-- 错误形式(因为product_name不包含在GROUP BY聚合键中)
SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type
HAVING product_name = '圆珠笔';

七、对查询结果进行排序

ORDER BY

默认为升序排列,降序排列为DESC

-- 降序排列
SELECT product_id, product_name, sale_price, purchase_price
  FROM product
 ORDER BY sale_price DESC;
-- 多个排序键
SELECT product_id, product_name, sale_price, purchase_price
  FROM product
 ORDER BY sale_price, product_id;
-- 当用于排序的列名中含有NULL时,NULL会在开头或末尾进行汇总。
SELECT product_id, product_name, sale_price, purchase_price
  FROM product
 ORDER BY purchase_price;
ORDER BY中列名可使用别名

而Group by不可以
因为:SQL在使用 HAVING 子句时 SELECT 语句的执行顺序为:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值