SQL Supplement 3

Content: Mainly introduce complex query language and SQL addition, deletion and modification language (from entry to master)
1. Master SQL multi-table join query (join, left join, right join, etc.)
2. Master SQL complex query: nested query, subquery, Combination query, grouping and sorting functions, etc.
3. Master SQL definition and control language (addition, deletion, modification): update, delete, create, alter, etc.

Inner join: join is the same as inner join; table 1 joins table 2, returns the rows common to table 1 and table 2

--join
select a.*,b.province,b.area,c.category,c.small_category
from spm_order a
left join spm_area b on a.city=b.city
left join spm_product c on a.product_id = c.product_id;
SQL复杂查询   
1.条件函数(case when-- 计算出盈利订单,不盈利订单和不盈不亏订单的销售额

SELECT CASE
           WHEN profit > 0 THEN '盈利'
           WHEN profit = 0 THEN '不盈不亏'
           ELSE '亏损'
           END    AS '订单类型',
       sum(sales) AS '销售额'
FROM spm_order
GROUP BY CASE
             WHEN profit > 0 THEN '盈利'
             WHEN profit = 0 THEN '不盈不亏'
             ELSE '亏损'
             END;
--分组排序函数(row_number)
1.无分组排序
row_number() over(order by 字段 desc)
例如:row_number() over(order by 学生成绩 desc)
表示不分班级,所有学生的成绩从高到低排序
2.分组排序 
row_number() over(partition by 字段1 order by 字段2 desc)
表示根据字段1分组,在分组内根据字段2排序,这个函数计算的值就表示每组内部排序后的顺序编号
例如:row_number() over(partition by 班级 order by 学生成绩 desc)
表示根据"班级"分组,在每个"班级"内部根据"学生成绩"排序,这个函数计算的值就表示每组内部排序后的顺序编号
解释:
row_number() 起到编号的功能
partition by 将相同数据进行分区
order by 使得数据按一定顺序排序
--计算销售人员的销售额,结果按从高到低排序,查询结果中要包含销售的排名
select sales_name,sum(sales),row_number() over(order by sum(sales) desc) as 'rank'
from spm_order
group by sales_name

result: ![Insert picture description here](https://img-blog.csdnimg.cn/20210225142622260.png

--计算销售人员在不同城市的销售额;要求:结果根据销售人员在不同城市的销售额进行分组排序(降序),并且查询结果要包含分组功能
select sales_name,city,sum(sales),row_number() over(partition by sales_name order by sum(sales) desc) as 'rank'
from spm_order
group by sales_name,city;

Insert picture description here

--分组一般和嵌套查询同时使用
嵌套查询:
-- 计算每个销售人员销售额排名top5的城市
select t1.* 
from
(select sales_name,city,sum(sales),row_number() over(partition by sales_name order by sum(sales) desc) as 'rank'
from spm_order
group by sales_name,city) t1
where t1.rank<=5;

Insert picture description here

--子查询(in)
select 字段
from 表名
where 字段 in (select 字段 from 表名 where 条件)
where city in ('北京''上海','广州','深圳','杭州')
--组合查询(union,两个表的结构一样)
union:去重,返回去重后的结果
union all:不去重,返回所有

select 字段
from 表名

union
select 字段
from 表名

union
select 字段
from 表名
--
select * 
from spm_order
where profit>0
union all 

select * 
from spm_order
where city in ('北京''上海','广州','深圳','杭州');

select 789456+416
--更新表内数据(update)
update order_2017 set date="2017-08-19" where order_id = "2017-07-09";
--更改表结构
alter table order_2017 add spend DOUBLE(10,2) --定义数据类型
alter table order_2017 drop spend;

--删除行
delete from 表名 where 条件;
--删除表
drop table 表名;
--删除数据库
drop database 数据库名;

--delete与drop的区别
delete删除表中的内容,不删除表;
drop删除表或者数据库;

Guess you like

Origin blog.csdn.net/weixin_42224488/article/details/114075233