Mysql基础-(3)

​ ”明月如霜,好风如水,清景无限 “

上一篇文章Mysql基础-(2)与python的在VScode下连接,快Task02的deadline了,链接如下
本篇是主要介绍基础的查询和排序。当然,文远觉得查询和排序的难点,最后都归结到了一个地方,也就是关键字的执行顺序。

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

没弄清语句执行顺序,会出现以下三种错误:
在使用聚合函数及GROUP BY子句时,经常出现的错误有:

  • 在聚合函数的SELECT子句中写了聚合健以外的列 使用COUNT等聚合函数时,SELECT子句中如果出现列名,只能是GROUP BY子句中指定的列名(也就是聚合键)。
  • 在GROUP BY子句中使用列的别名 SELECT子句中可以通过AS来指定别名,但在GROUP BY中不能使用别名。因为在DBMS中 ,SELECT子句在GROUP BY子句后执行。
  • 在WHERE中使用聚合函数 原因是聚合函数的使用前提是结果集已经确定,而WHERE还处于确定结果集的过程中,所以相互矛盾会引发错误。如果想指定条件,可以在SELECT,HAVING(下面马上会讲)以及ORDER BY子句中使用聚合函数。
    总结一下:
    1.了解以下那5个常见函数:count(计数),sum(求和),ave(均值),max(最大),min(最小),这几个是和group by 配套的,而且先执行分组。
    2.因为select在group by后面执行,所以group by中不能使用select里定义的别名,相当于为声明的函数。
    3.因为where在group by前执行,因此where不能使用聚合(可以理解成分好组的那个组,而不是单条)的函数,而Having在group by后执行,因此可以包含里面的5个常见函数。

    举的例子见源码,即点击阅读原文

习题:见上面的链接。

2.1

SELECT product_name , regist_date
    FROM product
    WHERE regist_date > '2009-04-28'

2.2

--1.叉子和圆珠笔行
SELECT *
  FROM product
 WHERE purchase_price IS NULL;
 --啥都不是
 SELECT *
  FROM product
 WHERE purchase_price = NULL;
 --1.purchase_price非空行
SELECT *
  FROM product
 WHERE purchase_price IS NOT NULL;
  --啥都不是
SELECT *
  FROM product
 WHERE purchase_price <> NULL;
  --啥都不是
SELECT *
  FROM product
 WHERE product_name > NULL;

2.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 NOT sale_price - purchase_price < 500;

2.4

SELECT product_name, product_type,
    (sale_price * 0.9 - purchase_price) AS profit
    FROM product
    WHERE (sale_price * 0.9 - purchase_price) > 100;
--报错,别名,执行顺序
SELECT product_name, product_type,
    (sale_price * 0.9 - purchase_price) AS profit
    FROM product
    WHERE profit > 100;


2.5

SELECT product_id, SUM(product_name)
--本SELECT语句中存在错误。
  FROM product 
 GROUP BY product_type 
 WHERE regist_date > '2009-09-01';---SUM有问题,总和应该是有组的product_type
---WHERE位置有问题
 SELECT product_id,product_type, COUNT(product_type)
    FROM product 
    WHERE regist_date > '2009-09-01'
    GROUP BY product_type ;SELECT * FROM product;SELECT product_id, COUNT(product_name)
    FROM product 
    WHERE regist_date > '2009-09-01'
    GROUP BY product_type  
    HAVING COUNT(product_name) > 1;

2.6

 SELECT product_type , 
        SUM(sale_price) ,
        SUM(purchase_price) 
    FROM product 
    -- WHERE regist_date > '2009-09-01'
    GROUP BY product_type  
    HAVING SUM(sale_price) >  1.5 * SUM(purchase_price);

2.7

SELECT *
    FROM product 
    ORDER BY  regist_date IS NULL DESC,regist_date DESC,sale_price;
-----如何把运动T恤放前面,此处很经典

数据原顺序如下:(即SELECT * FROM product)
在这里插入图片描述

第2.7题排序后:

在这里插入图片描述

源码可点击阅读原文,有帮助的话记得点赞,关注

想来好笑,文远在面对deadline如牛马一般,牛马拉东西累了,停下不愿动了,便有鞭子来打。等到deadline前一秒完成了任务,便欣喜骄傲,而牛马则可能觉得免受几鞭吧。

END

作者:不爱跑马的影迷不是好程序猿
喜欢的话请关注点赞👇 👇👇 👇
在这里插入图片描述

公众号:文远的学习笔记
壹句: 朱颜辞镜花辞树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值