vlambda博客
学习文章列表

SQL数据分析13:条件判断语句和语句优化


SQL数据分析13:

条件判断语句和语句优化

关注回复"1"获取SQL学习资料

01
什么是条件判断?

条件判断相当于“如果……就……”例如:如果一个客户消费金额大于5000,该客户就是VIP客户。

EXCEL或者其他编程语言中,判断一个客户是否为VIP客户

IF(`消费金额`> 5000) THEN  “VIP”  ELSE  普通


SQL中,以上条件判断写为:

CASE 

WHEN `消费金额`> 5000 THEN “VIP” 

ELSE 普通 

END


如上所示,在SQL语句中,我们用CASE 作为条件判断语句的开始关键字,然后使用WHENTHEN来构建判断语句,使用ELSE来构建默认值,最后使用END来结束条件判断语句。

注意:在同一个条件判断语句中,可以有一个到多个判断条件。


02
实际案例

需求:根据各位顾客的消费额计算消费级别

第一步,通过数据字典和E-R图找到需要的数据表----“订单信息表”;

 

 第二步,定义不同的消费级别

根据顾客总消费额所在的区间,计算顾客的消费级别

消费区间

消费级别

>=5000

VIP3

20004999

VIP2

10001999

VIP1

小于1000

普通


第三步,撰写条件判断语句获得结果

计算顾客总消费额

我们使用数据聚合语句来计算每位顾客的总消费额。在这个步骤中,我们使用SQL聚合语句来计算顾客消费额,将订单信息与按照顾客号码分类,使用聚合函数SUM来计算每位顾客的总消费金额,操作如下:

 

SQL数据分析13:条件判断语句和语句优化


注意看,我们之前已经在E-R图中找到了所需的数据来源,在构建SQL语句中,注意在数据来源处要添加数据库为前缀online_sale.order_info.,否则运行结果会报错。点击运行按钮,我们会得到:

 

SQL数据分析13:条件判断语句和语句优化


此时结果仅仅显示每一位顾客消费的总金额。我们使用这个返回的结果作为我们构建临表子查询的语句,得到我们最终的答案。


第三步,我们使用条件判断语句,构建条件过滤的级别,具体操作如下:

 

SQL数据分析13:条件判断语句和语句优化

运行后,返回的结果如下所示:

 

SQL数据分析13:条件判断语句和语句优化

我们成功地根据顾客金额区间,运用条件判断语句,得到了顾客的消费级别,需求达成√


接下来,我们学习SQL进阶用法,如何进行语句优化。

SQL语句是怎么运行的?

①客户端发送SQL请求到数据库的服务器

②数据库服务器进行运算,返回结果

③客户端显示SQL语句运行结果


在我们的学习中,客户端是mySQL 2016 workbench,数据库服务器是安装在本地上的mySQL数据库。客户端返回的结果会显示在UI上。


有哪些工作场景需要优化SQL语句?

①加快语句运行速度

②减少数据库资源开销

注意:在企业级别的数据库操作中,SQL语句优化是必备技能。


语句优化场景1:查询语句

①避免使用*返回所有数据

②只选择产生结果的必要数据列

需求:列出所有的产品号码对应的产品名称。

错误示范如下:

SQL数据分析13:条件判断语句和语句优化

 

在实际的SQL数据分析工作中,如若必须,我们选用必要的数据列来构建查询语句。在这个需求中,我们只需要列出产品号码和产品名称这两种信息,来源在产品信息表中,其余信息非必要,无需选择。正确示范如下:

SQL数据分析13:条件判断语句和语句优化

 

语句优化场景2:过滤语句

过滤查询语句结果,如有可能,使用BETWEEN 而不是IN


需求:选取产品号码14号的产品信息。

 

SQL数据分析13:条件判断语句和语句优化

在实际工作中,我们可以使用不同的运算符号来达到相同的运算结果。例如,在这个需求中,我们既可以用IN也可以用BETWEEN来达到逻辑运算的结果,此时,我们为了节省运算开销,优先选用BETWEEN运算符,而不是IN运算符。


复习一下INBETWEEN的用法:

IN 操作符允许我们在 WHERE 子句中规定多个值。

SQL IN 语法

SELECT column_name(s)

FROM table_name

WHERE column_name IN (value1,value2,...)


操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

SQL BETWEEN 语法

SELECT column_name(s)

FROM table_name

WHERE column_name

BETWEEN value1 AND value2

SQL数据分析13:条件判断语句和语句优化

 


优化场景3:过滤/聚合语句

过滤聚合语句结果

①优先使用WHERE语句过滤原数据表中数据再聚合

②避免不需要的聚合计算


需求:计算所有杭州市和深圳市的供应商数目。

SQL数据分析13:条件判断语句和语句优化 


在实际操作中,我们会优先用WHERE过滤原表格中符合条件的数据,而不是直接先聚合,再后面追加HAVING子句来过滤返回结果中的数据,以此来避免不必要的运算开销。若想复习WHEREHAVING的区别,请戳这篇文章→

SQL数据分析13:条件判断语句和语句优化 


在这个需求中,我们先用WHERE来过滤杭州市和深圳市的供应商数目,然后再进行聚合运算。而不是使用HAVING来过滤聚合后的结果。


优化场景3:结果排序

子查询语句结果的排序

①尽量在最后执行排序

②避免不必要的ORDER BY语句

需求:列出产品数目大于3的供应商号码。

SQL数据分析13:条件判断语句和语句优化 


在这个需求中,如果我们在子查询语句中进行排序,就是对聚合的结果进行排序。如果我们把排序语句放在最后,就是对过滤后的语句进行排序,排序指令仅仅会作用于产品数目>3的结果上。我们尽量把排序放在语句的最后进行排序,以此来避免对不必要的数据进行排序。

SQL数据分析13:条件判断语句和语句优化

03
 知识点

3.1 条件判断语句的基本知识

 

3.2 SQL优化语句的基本知识

避免在查询语句中使用*返回所有数据

在过滤语句中,如有可能,使用BETWEEN而不是IN

在聚合语句中,优先使用WHERE语句过滤原数据表中的数据再聚合

在子查询语句中,尽量在最后执行排序ORDER BY语句

04
温馨提示

条件判断语句通常用于数据转换,基于现有数据创建新的数据列;

如果值为连续常量值(数字),优先选用BETWEEN操作符;如果值为非连续常量值,则使用IN操作符。

END

关注回复”1“获取SQL学习资料