SQL核心语句

  • Post author:
  • Post category:其他




基本的查询语法

  • 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
  1. 先对会员的订单金额累计汇总后,只去大于100的记录,这个用having
  2. 我要统计的是订单金额大于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);



版权声明:本文为BurningSilence原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。