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恤放在第一个,如有大佬求告知!