• select表示查询结果。• from表示从哪个表中查找数据。• where表示查询条件,用于筛选出符合条件的数据。• group by表示对数据按某列分组。• having表示对分组后的结果指定条件。• order by表示对查询结果进行升序或者降序的排列。• limit表示从查询结果中取出限定行。

SQL查询的基础语法:

select 列名,列名,…

from 表名

where 列名 = 条件;

select表示查询结果

from 从哪一个表中查询数据

where表示查询条件

SQL查询语句书写规范:

(1)SQL语句以英文分号;结尾

(2)SQL语句不区分大小写

(3)SQL语句不能加单引号

(4)使用英文符号

(1)查询空值 where is null ; where is not null;

select *

from 教师表

where 教师姓名 is null;

select *

from 教师表

where 教师姓名 is not null;

(2)在SQL查询中重命名列名

在查询的过程中使用as 关键字来定义一个新列名

select 列名 , 列名 as 新定义列名,…

from 表名

where 条件;

(3)在SQL查询中去掉重复数据

在SQL查询中去除重复数据需要关键字distinct

select distinct 列名1,列名2…

from 表名;

distinct 关键字必须在第一个查询列名之前

这里的去重指的是当两个列名整体出现重复时,才会去除

现在需要知道店铺里每个访客和对应的浏览日期(每个访客同一天浏览多次算作一次记录)。

分析:一个访客可能一天有多次访问,所以会有重复值,所以要去重

*select distinct 访客id , 浏览日期*

*from 用户行为表;*

面试题:

表3.6所示为某电商公司的“用户购买信息表”,你作为公司的业务人员,为了更好地分析数据,要求对数据做以下处理。(1)剔除表中重复的购买记录。(2)查询表中数据是否有空值的记录。(3)将列“用户行为发生时间”重命名为“用户交易时间”。

(1)

查询重复记录

select distinct *

from 用户购买信息表;

(2)

查询是否有空的值,那么就说明每一种数据都有可能存在空值

select *

from 用户购买信息表

where 用户id is null

or 商品id is null

or 用户行为类型 is null

or 地理位置 is null

or 用户行为发生时间 is null;

(3)select 用户id,商品id,用户行为类型,地理位置 , 用户行为发生时间 as 用户交易时间

from 用户购买信息表;

聚合函数是把查询结果当做函数参数后,然后根据函数的功能返回函数结果,并且把这个结果可视化返回出来

聚合函数:

(1)sum() 对查询结果是,数值结果进行相加

(2)count() 对某列数量的函数进行求和

(3)avg() 对某列的数据进行求平均值

(4)max() min()

当条件判读语句和聚合函数一起的时候要将where 替换成having

分组汇总 group by

group by 就是通过列名逻辑上将整个表分成多个小表,其中每个表中通过group by 的列名的内容都是一样的。

当面试题中涉及“查找重复数据”或者类似“每个”“每天”这样的词汇时,要马上想到可以用分组汇总来实现。

面试题:

通过数据来分析用户的总数、用户的平均年龄

应该先按照“用户ID”对重复数据进行去重(用distinct关键字),再分析用户的总数及平均年龄。

用户的总数(可以将查询的结果通过关键字as 将列重命名)

select sum(distinct 用户id) as 用户总数,

avg(用户年龄) as 用户平均年龄

from 用户登录信息表;

分析购买人数、总销售金额、客单价、客单件、人均购买频次。

select count(distinct 顾客ID) as 购买人数

from 销售订单表;

select sum(销售数量 * 零售价) as 总销售金额

from 销售订单表;

select

sum(销售数量) / count(distinct 顾客ID) as 客单价

from 销售订单表;

select

count(订单号) /count(distinct 顾客ID) as 人均购买频次

from 销售订单表;

查找表3.13所示“学生表”中所有重复的学生姓名。

select 姓名

from (

select 姓名,count(姓名) as 数量

from 学生表

group by 姓名

) as 辅助表

where 数量 > 1;

select 姓名

from 学生表

group by 姓名

having count(姓名) > 1;

如何分析每个城市的总流入人口数量?

select 流入城市 as 城市 , sum (数量) as 总流入人口数量

from 各城市人口流入表

group by 流入城市;