Mysql-基础查询与排序练习(task2)

SELECT语句

基础版本:
SELECT <列名>,
FROM <表名>;
条件查询:
SELECT <列名1>,<列名2>,<列名3>……
FROM <表名>
WHERE <条件表达式>;

SELECT product_name,product_type
	FROM product
    WHERE product_type = '衣服';

在这里插入图片描述

SELECT product_name
	FROM product
    WHERE product_type = '衣服';

在这里插入图片描述
在这里插入图片描述

#查询所有列:
#SELECT * FROM <表名>;
#为列取别名:(AS 别名)
SELECT  product_id     AS id,
		product_name   AS name,
		purchase_price AS "进货价"
FROM product;
#删除重复行数据:
SELECT DISTINCT product_type
FROM product;
#查询特定的行记录:
SELECT product_name,product_type
FROM product
WHERE sale_price=500;

!!!注意不等关系的表达式: <>
在这里插入图片描述
使用运算表达式:

SELECT product_name,sale_price,sale_price*2 AS "sale_price*2"
FROM product;

SELECT product_name,sale_price,purchase_price
FROM product
WHERE sale_price-purchase_price>=500;

SELECT product_name,purchase_price
FROM product
WHERE purchase_price IS NULL;

逻辑运算符

NOT,AND,OR运算符
!!!AND运算符要优先于OR运算符,可利用()改变运算符优先级

SELECT product_name,product_type,sa;e_price
FROM product
WHERE sale_price >=1000;
SELECT product_name,product_type,sa;e_price
FROM product
WHERE NOT sale_price >=1000;

SELECT	product_name,product_type,regist_date
FROM product
WHERE product_type="办公用品"
	 AND(regist_date='2009-09-11'
	 OR regist_data='2009-09020');

在这里插入图片描述
对于NULL的值,视为不确定(UNKNOWN),在逻辑运算中:

  • AND运算中,都为真才为真,只要有一个是假,结果就是假,否则为不确定
  • OR运算中,都为假才为假,只要有一个真就是真,否则为不确定
    在这里插入图片描述

练习题 第一部分

#练习题第一部分
#2.1
SELECT product_name,regist_date
FROM product
WHERE regist_date > '2009-04-28';
#2.2 对于NULL的判别 要用 IS(NOT)NULL
#空记录
SELECT *
FROM product
WHERE purchase_price=NULL;
#全部购买价格非空的记录
SELECT *
FROM product
WHERE purchase_price IS NOT NULL;
#输出为空记录
SELECT *
FROM product
WHERE purchase_price <>NULL;
#输出为空
SELECT *
FROM product
WHERE purchase_price > 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
	AND (product_type ='办公用品' OR product_type='厨房用具'));

2.4截图
在这里插入图片描述

聚合查询

SQL中用于汇总的函数叫做聚合函数,例如:

  • COUNT:计算表中的记录数(行数)
  • SUM:计算表中数值列中数据的合计值
  • AVG:平均值(同SUM)
  • MAX:求出表中任意列中数据的最大值
  • MIN:最小值(同MAX)
#统计行数
SELECT COUNT(*)
FROM product;
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;
SELECT SUM(sale_price),SUM(DISTINCT sale_price)
FROM product;

在这里插入图片描述

对表进行分组

GROUP BY语句

上述的聚合函数是在整个表进行数据处理和统计,使用GROUP BY可以对数据集进行按列汇总统计。类似EXCEL中的“筛选”
SELECT <列名1>,<列名2>,<列名3>
FROM <表名>
GROUP BY <列名1>,<列名2>,<列名3>;
在GROUP BY 子句中指定的列称为聚合键或者分组列

SELECT product_type,COUNT(*)
FROM product
GROUP BY product_type;

SELECT product_type,COUNT(*)
FROM product

聚合键中包含NULL时,会将其作为特殊的一组数据进行处理

SELECT purchase_price,COUNT(*)
FROM product
GROUP BY purchase_price;

在这里插入图片描述

GROUP BY书写位置

GROUP BY的⼦句书写顺序有严格要求:
1 SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
其中前三项⽤于筛选数据,GROUP BY对筛选出的数据进⾏处理

常见错误

在这里插入图片描述

为聚合结果指定条件

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

SELECT product_type,COUNT(*)
FROM product
GROUP BY product_type
HAVING COUNT(*) = 2;

对查询结果进行排序

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;

ORDER BY 列名可使用别名

SQL在使⽤ HAVING ⼦句时 SELECT 语句的顺序为:
在这里插入图片描述

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。
其中SELECT的执⾏顺序在 GROUP BY ⼦句之后,ORDER BY ⼦句之前。也就是说,当在ORDER BY中使⽤别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使⽤别名时还不知道别名的存在,所以不能在ORDER BY中可以使⽤别名,但是在GROUP BY中不能使⽤别名

练习题-第二部分

#----------task2 第二部分练习题
#2.5
#顺序错误:SELECT-FROM-WHERE-GROUP BY
#列名错误:GROUP BY 中出现的列名为product_type,SELECT中聚合函数不能够对product_name,进行检索
#聚合函数操作对象错误:SUM只能用于数值列,而product_name是字符串字段
#改正:
SELECT product_id,product_name
FROM product
WHERE regist_date > '2009-09-01'
GROUP BY product_type;
#2.6
SELECT product_type,SUM(sale_price) AS sum,SUM(purchase_price) AS sum
FROM product
GROUP BY product_type
HAVING SUM(sale_price)>=1.5*SUM(purchase_price)
ORDER BY sum DESC;
#2.7
SELECT *
FROM product
ORDER BY regist_date DESC,sale_price,product_id DESC;

2.6截图
在这里插入图片描述

2.7截图(运动T恤在最后)
在这里插入图片描述

参考资料

DataWhale:SQL编程语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值