mysql子查询语句(sql数据库查询语句例子)

在开始之前,一些小白可能对于SQL和MySQL、SQLserver、Access,以及数据库管理工具的区别都还不清楚,用一句话解释:

SQL是一种标准的计算机语言,我们用SQL语句和数据库进行交互;

MySQL、SQLserver、Access则是不同的数据库,也就是我们的交互对象;

DataGrip、MySQL workbench这些则是数据库管理工具,是SQL语言和数据库的中介,我们在管理工具中编写SQL语言,同连接的数据库进行交互。

mysql子查询语句(sql数据库查询语句例子)

本次用到的数据库是MySQL 8.0

管理工具为 DataGrip 2022.1

对于产品或数分的一些同学,我们不需要和数仓的家伙们一样精通SQL,只需要达到「能把自己想要的数据拿到手」的技能水平即可。因此,本文只对平常用到最多的「取数」部分进行练习。

首先,我们要明确「取数」环节的语法结构。

select from

select「字段名」from「表名」;

从「表」中提取「字段」

select* from「表名」;

提取该表中的所有字段。

借着上面的语法,我们先看一下今天用来练习的全表长什么样子

select * from cpc;

(下图仅展示部分)

select「字段名」as「别名」from「表名」;

从表中提取字段,且重命名为as 后面的「别名」

2. where(筛选功能,和运算符搭配使用)

select* from cpcwhere日期 >=20191216;

返回「cpc」表中「日期」字段>=2019-12-16的部分

select平台i,日期 fromcpcwhere平台i in(’美团’,’饿了么’);

返回「cpc」表中的「平台i」,「日期」字段,并筛选出「平台i」包括「美团」或「饿了么」的部分

补充:模糊查询 like

3.group by(分组功能,一般同聚合函数搭配使用)

select 日期,count(平台i) from cpcgroup by 日期;

根据日期分组,并返回每个日期当天的平台计数

4.having (和where筛选一样,不过是where是在group by 分组前筛选,having是在之后的表再对聚合字段筛选)

5.order by(排序功能)

select 日期,count(平台i) from cpcgroup by 日期order by count(平台i);

根据日期分组,并返回每个日期当天的平台计数,随后按照计数列排序

6.子查询(查询语句中嵌套查询语句)

select 日期,cpc总费用 from cpc where cpc总费用=

(select max(cpc总费用) from cpc);

返回最高的cpc总费用(先用子查询查出来)以及当天的日期

7.case when 函数(创建新字段,对满足条件的行返回指定值)

case when 条件1 then 执行1 when 条件2 then 执行2 。。。end

select 日期,case when cpc总费用>=(select avg(cpc总费用) from cpc) then ‘高于平均’when cpc总费用<(select avg(cpc总费用) from cpc) then ‘低于平均’ end as 区间from cpc;

创建新字段并名为「区间」,该字段中,cpc总费用高于平均值的返回 “高于平均”反之“低于平均”

8.窗口函数(创建新字段,功能类似于group by 聚合函数,但是group by

会只返回分组后的表,窗口函数不改变原数据表)

「窗口函数」()over(partition by 「用于分组的字段名」order by 「用于排序的字段名」

select 日期,平台i,round(sum(cpc总费用),2) 平台cpc总和,

rank() over (order by sum(cpc总费用) desc) 排名

from cpc where 平台i = ‘美团’group by 日期;

返回平台是美团、根据日期分组后每个日期的cpc总和,并按照cpc总和进行排名。

发表评论

登录后才能评论