SQL 入门版学习

前言:

本篇文章几乎是sql查询相关,不涉及delete、update等操作。

本人非计算机专业背景,如果有表述不恰当的,欢迎指正,一切都以能快速使用,简单了解为主。

一、基本概念

语句中函数不区分大小写;

所有的输入要英文状态下;

“#”表示注释

mac电脑推荐使用软件:Sequel pro

二、常用函数

1、通用结构


select  (变量)

from    (数据表)

where  (条件1)and (条件2)

说明:

1)大概的逻辑就是 需要什么数据,从那个数据表里拿,满足什么条件的数据

2)where 中,同时满足条件用and,满足任意条件用or,使用or的时候注意使用大括号,以免重复选择

3)where 中的条件,eg:

where o.uid in (select A from B) ,括号里面的select只能有一个变量;

where o.uid in (33,44,55,66);

where o.uid not in (33,44,55,66);

where o.time>=‘2020-1-1’,只能用>=(大于等于),<=(小于等于),<>(不等于),!=(不等于)

4)select 后面可以直接计算变量,比如A+B

5)select * from A 选取所有变量

2、常见函数的混合使用

eg:


select o.uid,max(o.time) as otime,count(o.id),sum(o.money)

from   this_order o

group by o.uid

order by otime DESC

having otime>=‘2020-1-1'

说明:

1)max()求最大值,count()求个数,sum()求和,这一类函数的使用类似excel函数的使用;

2)给数据表命名,也可以使用 from this_order as o,给数据表命名方便变量的区分

3)group by 是统计维度,上述例子的意思是统计每个用户的最大下单时间、下单数、总的订单金额

4)order by 根据变量排序,DESC倒序,ASC升序

5)having 满足某一条件

6)order by 和having 都是在where 执行完之后对结果的一个整理

3、合并其他表格

eg:


select o.uid,u.mobile

from this_order o

join this_user u on o.uid=u.id

说明:

1)例句表达的意思是:选取this_order中下单的uid,并且从this_user表中找到对应的手机号

2)合并表格通用函数: join 数据表 on 数据表A.变量=数据表B.某变量

join前面的表是主表,后面的表是需要选取的部分

join 是选取数据表A、B都有的部分

left join 是全部保留数据表A的部分,数据B中有A的部分

right join 与left join 相反

2)表格变化:join (select S from B)as temp on temp.S=o.A

4、时间函数

eg:


select o.uid,DATE_FORMAT(o.time, '%Y-%m-%d’) as datet,
current_date() as 今天,sysdate() as 当前时间,
TIMESTAMPDIFF(DAY,start_time,end_time)

from   this_order o

说明:

1)时间格式变化:DATE_FORMAT(o.time, '%Y-%m-%d’) 意思是将时间转化为年月日

2)current_date() 意思是当前的年月日

3)sysdate() 意思是当前的年月日+时分秒

4)TIMESTAMPDIFF(DAY,start_time,end_time) 意思是计算start_time和end_time之间间隔多长时间,DAY表示用天表示,即两个时间中间隔了多少天,里面的时间变量可以改为特定的时间格式,方便计算

5、判断

eg:


select o.uid,

case when o.time>=‘2020-1-1 00:00:00’ then '今年有下单' when o.store_id=1 then '线下门店' else ‘其他' end as 类型

from   this_order o

where o.channel=2

说明:

1)上述例句的意思是提取this_order表中的uid,和一个新的变量类型,当满足store_id=1是线下门店,还有今年有下单,剩下的为其他

2)使用case when 条件1 then A else B end as C,注意区分条件间隔/区间

6、disitnct

eg:


select  distinct uid 
from   this_order o

提取表里非重复的uid


select  count(distinct uid)
from   this_order o

计算表里非重复的uid有多少个

三、总结

1、一定要清楚数据表的结构和逻辑,比如订单逻辑,一个用户一次购买是一条数据,很多里面的变量是另一些表的id值,需要相互连接,因为为了简化储存;

2、定义好条件,比如下单的gmv,那么选取的是未取消的订单;

3、根据实际情况,多操作多联系,多踩坑,利用已有的sql语句学习,根据这些改成自己需要的语句,这样学习并掌握的快一点;

4、如果是全表操作,比如group by这种,耗时可能会长一点,耐心一点;

好好学习,据说每一个运营/产品都得会SQL

你可能感兴趣的:(SQL 入门版学习)