基本的查询语法
-
Select 列名—查询指定要显示的字段;如果是要查看所有的列,则用*表示
-
From 表A----选择要查询的表
-
Where 限制条件----各种过滤条件,例如:大于,小于等
-
Group by 列名-----按指定列名进行分组统计
-
Having 列名------对分组统计后的结果进行限制
-
Order by 列名--------对查询结果进行排序(ASC 升序,Desc降序),默认是升序
-
Limit N -----给出N条数据
-
如果对数据库或者数据库下面的数据表不熟悉,我们会使用 select * from 表名 limit 来限制查询,主要目的是为了了解表
select *
from andy_order_20201104
limit 5;
- distinct 知识点介绍:
- 查询结果不重复
- 1.用于去重
select distinct memeber_id
from db_demo.andy_order_20201104;
select distinct order_money
,memeber_id
,id
from andy_order_20201104
where memeber_id = 1;
Where:查询条件
*比较:=,<,<=,>,>=,<>
- 指定范围:(not) between and
- 集合:in ,not in
- 空值判断:not null ,null
- And:并列,同时满足条件
- OR:或,满足其中一个条件
- 案例:
- 购买金额大于20购买金额小于200的会员列表
- 购买金额大于0且购买品牌是XXX的会员列表
-- 购买金额大于0的记录
select *
from andy_order_20201104
where order_money > 0;
-- 购买金额大于100
select *
from andy_order_20201104
where order_money > 100;
-- 如果过滤的是文本型
select *
from andy_order_20201104
where id = 'A001';
-- 找出会员号为:1,2,21的会员消费记录
select *
from andy_order_20201104
where memeber_id in (1,2,21);
-- 查找订单金额记录为空的消费记录
-- null表示空值,0表示有值,只是值为0
insert into db_demo.andy_order_20201104 (id, memeber_id) values ('A000000', 99);
select *
from db_demo.andy_order_20201104
where order_money is null ;
-- 购买金额大于20小于200的会员列表
select *
from db_demo.andy_order_20201104
where order_money > 20 and order_money < 200;
-- between and 两个边界都包括
select *
from db_demo.andy_order_20201104
where order_money between 100 and 200;
模糊查询 LIKE
- % :表示任意长度的字符串,长度可以为0;例如:like ‘a%b’,以a开头,b结尾任意长度的内容;
- _:一个下划线就表示一个字符;例如:like ‘a_b’,以a开头,b结尾任意长度为3个字符的内容;
*/
-- 查询订单表中,ID以5结尾的订单号
select *
from db_demo.andy_order_20201104
where id like '%5';
select *
from db_demo.andy_order_20201104
where id like 'A_15';
group by
对相关字段统计group by
- 用于对相关列进行汇总类的统计
- 所以要与相关汇总一起
- 知识点:as
- 用于给表或者字段表取别名
-- 统计累计购金额
select sum(order_money)
from db_demo.andy_order_20201104;
select sum(order_money) as sum_money
from db_demo.andy_order_20201104;
select sum(temp.order_money) as sum_money
from db_demo.andy_order_20201104 as temp;
-- 统计各个顾客购买金额
-- 放入到group by 的后面的字段:select 后面,汇总函数前面的所有字段
select memeber_id
,sum(order_money) as sum_money
from db_demo.andy_order_20201104
group by memeber_id ;
select memeber_id
,status
,sum(order_money) as sum_money
from db_demo.andy_order_20201104
group by memeber_id, status
order by memeber_id ;
-- 统计各个顾客,在不同订单状态下的平均购买金额,累计购买金额,订单数
select memeber_id
,status
,avg(order_money) avg_money
,sum(order_money) sum_money
,count(id) order_number
from db_demo.andy_order_20201104
group by memeber_id
,status ;
-- 在计数,判断是否要加进去
-- 统计累计顾客数
-- 对顾客ID去重后再计数
select count(distinct memeber_id)
from andy_order_20201104 ao;
HAVING
- 针对汇总后的结果进行过滤
- 如果不是针对汇总后的结果过滤,我们用的是where
- 先对会员的订单金额累计汇总后,只去大于100的记录,这个用having
- 我要统计的是订单金额大于100的会员记录,这个是用的where一定是和group by一起使用
-- 统计每个会员累计购买金额,要求累计购买金额大于100
select memeber_id
,sum(order_money) as sum_money
from db_demo.andy_order_20201104 ao
group by memeber_id
having sum(order_money) > 100
order by sum(order_money);
-- 统计每个会员累计购买金额,要求累计购买金额大于200,订单金额大于100
select memeber_id
,sum(order_money) as sum_money
from db_demo.andy_order_20201104 ao
where order_money > 100
group by memeber_id
having sum(order_money) > 200
order by sum(order_money);