写点什么

sql task2 基础查询与排序

发布于: 3 小时前

SELECT 语句基础

select 后跟的是你想要的列名可以多个 from 后跟的是你的表名 或者你查询出来的结果也行 where 后跟的是条件整体语句表示 从某表选择相应的列,并筛选符合条件的值。结果如上图左下角所示所示整体数据如下图


*表示通配符,表示匹配所有结果如上图所示查询除了表中所有数据

如果我们想从 product(商品) 表中选取出“登记日期(regist)在 2009 年 4 月 28 日之后”的商品,查询结果要包含 product name 和 regist_date 两列。

可以这样写

SELECT product_name,regist_date  FROM product WHERE regist_date > '2009-04-28';
复制代码



SELECT *  FROM product WHERE purchase_price = NULL;
复制代码


SELECT *  FROM product WHERE purchase_price <> NULL;
复制代码


SELECT *  FROM product WHERE product_name > NULL;
复制代码

以上 3 个语句的结果都是空 第一个是条件列没有 NULL 后面两个是 NULL 是个不确定的值 不能进行比较


如果想从 product 表中取出“销售单价(saleprice)比进货单价(purchase price)高出 500 日元以上”的商品。可以这样写。

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 NOT sale_price - purchase_price <= 500;
复制代码



对表进行聚合查询

以下五个是最常用的聚合函数:

  • COUNT:计算表中的记录数(行数)

  • SUM:计算表中数值列中数据的合计值

  • AVG:计算表中数值列中数据的平均值

  • MAX:求出表中任意列中数据的最大值

  • MIN:求出表中任意列中数据的最小值

-- 计算全部数据的行数(包含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;
复制代码


-- 计算去除重复数据后的数据行数SELECT COUNT(DISTINCT product_type) FROM product;-- 是否使用DISTINCT时的动作差异(SUM函数)SELECT SUM(sale_price), SUM(DISTINCT sale_price) FROM product;
复制代码


因为这一列有两个 500 所有去重后求和就会少 500

-- 按照商品种类统计数据行数SELECT product_type, COUNT(*)  FROM product GROUP BY product_type; -- 不含GROUP BY     结果只会显示这一列第一行的属性,结果也不是我们想要的SELECT product_type, COUNT(*)  FROM product                 
复制代码



SELECT purchase_price, COUNT(*)  FROM product GROUP BY purchase_price;
复制代码

此时会将 NULL 作为一组特殊数据进行处理,因为他是不确定值也是一个类别

GROUP BY 书写位置

GROUP BY 的子句书写顺序有严格要求,不按要求会导致 SQL 无法正常执行,目前出现过的子句顺序为:

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

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

SELECT purchase_price, COUNT(*)  FROM product WHERE product_type = '衣服' GROUP BY purchase_price;
复制代码

HAVING 的用法类似 WHERE 但分组后不能用 WHERE

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

上图所示 HAVING 的必须在 GROUP BY 出现否则结果会是错误的


对查询结果进行排序

SELECT <列名1>, <列名2>, <列名3>, ……  FROM <表名> ORDER BY <排序基准列1>, <排序基准列2>, ……
复制代码

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

当用于排序的列名中含有 NULL 时,NULL 会在开头或末尾进行汇总。

用户头像

还未添加个人签名 2020.10.14 加入

python爱好者

评论

发布
暂无评论
sql task2  基础查询与排序