02.mysql查询与排序(纯干货)

本文详细介绍了MySQL的查询与排序操作,包括基础的SELECT语句、WHERE子句、ORDER BY子句,以及聚合函数如COUNT、SUM、AVG、MAX的使用。还通过实例讲解了分组、HAVING子句的应用,以及GROUP BY和ORDER BY的配合使用。同时提供了多个练习题,帮助读者巩固所学知识。
摘要由CSDN通过智能技术生成

02.MySQL查询与排序

一、select语句基础

1.1 从表中选取数据
SELECT <列名>,
  FROM <表名>;
1.2 选取符合条件的数据
#select
select id,name,math from student;  #指定查询
select distinct math from student;  #去重查询
select id,name,(chinese,math,english) as '总成绩' from student;  #进行运算

#where 查询器过滤
...... where name like '李%';  #查询所有姓李的成绩
...... where english > 90;

#order by 排序 
select math from student order by math;  #升序排列
select math from student order by math desc;  #降序排列

#常用函数
select count(*) from student;  #一共多少学生,*可以写成math
select sum(math) from student;  #统计总数
select avg(math) from student;  #去除null后求平均数
select max(chinese+math+english) as '最高成绩' from student;
#最大值,最小值

在这里插入图片描述

【例子】

 -- 用来选取product type列为衣服’的记录的SELECT语句
SELECT product_name, product_type
  FROM product
 WHERE product_type = '衣服';
1.3 练习
#1.31 编写一条SQL语句,从product(商品)表中选取出“登记日期(regist在2009年4月28日之后”的商品,查询结果要包含product_name和regist_date两列。
select product_name,regist_date
	from product
 where regist_date > '2009-04-28'
#1.32 写出返回结果
SELECT *
  FROM product
 WHERE purchase_price = NULL;  #选出免费的商品
 
SELECT *
  FROM product
 WHERE purchase_price <> NULL;  #选出要钱的商品
 
SELECT *
  FROM product
 WHERE product_name > NULL;  #选出有名字的商品
#1.33 取出“销售单价(saleprice)比进货单价(purchase price)高出500日元以上”的商品。
select product_name,sale_price,purchase_price
	from `product` 
    WHERE `purchase_price` - `sale_price`<=-500;
    
select product_name,sale_price,purchase_price
	from `product` 
    WHERE `sale_price` - `purchase_price`>=500;

在这里插入图片描述

#2.4 从product表中选取出满足“销售单价打九折之后利润高于100日元的办公用品和厨房用具”条件的记录。
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!='衣服';

在这里插入图片描述

二、聚合,分组,排序

2.1 聚合
#1. count()函数
select count(*) as num from product;  #返回数据行数
select count(name) as num from product;  #name列的行数
select age,count(name) from 表名 group by age;  #不同年龄的姓名个数

#2. sum()函数
select sum (price) AS Total from 表名;  #price的价格总和
select id,sum(price) AS items_price from 表名 group by id;
#返回每个分组的总和

#3. avg()函数
select avg(math) from student;  #去除null后求平均数
#4. max()函数
select max(chinese+math+english) as '最高成绩' from student;
#5. min()函数
2.2 分组
# 1. group by语句
# 当你想将进行分组汇总时(即:将现有的数据按照某列来汇总统计)
# 1.SELECT → 2. FROM → 3. WHERE → 4. GROUP BY
# 在group by 语句中使用 where ,因为group by 是在 where 的基础上   对数据进行分组的;

select name,sum(number) from test group by name,number;

在这里插入图片描述

# 2. having 函数
# 用于对分组进行过滤,可以使用数字、聚合函数和GROUP BY中指定的列名。
SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type
HAVING COUNT(*) = 2;
2.3 排序
#order by 排序
select math from student order by math;  #升序排列
select math from student order by math desc;  #降序排列
  • 注:

        where 即在分组之前过滤数据,将不符合where条件的行去掉,where条件中不能包含聚组函数group by,使用where条件过滤出特定的行。
    
        having 即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
    
2.4 练习
# 1.找错
SELECT product_id, SUM(product_name)
--本SELECT语句中存在错误。
  FROM product 
 GROUP BY product_type 
 WHERE regist_date > '2009-09-01';
 #group by在where后面,
# 2.销售单价(sale_price列)合计值大于进货单价(purchase_price列)合计值1.5倍的商品种类
 SELECT product_type,sum(sale_price) as s_sum,sum(purchase_price) as p_sum
 	from `product`
    group by product_type
    having sum(sale_price) > sum(purchase_price)*1.5;
#对日期降序排列
SELECT * FROM `product` order by `regist_date` DESC ,sale_price;

在这里插入图片描述

问题:依然不知道如何把运动t恤放在第一个,如有大佬求告知!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值