SQL数据分析13:条件判断语句和语句优化
SQL数据分析13:
条件判断语句和语句优化
关注回复"1"获取SQL学习资料
条件判断相当于“如果……就……”例如:如果一个客户消费金额大于5000,该客户就是VIP客户。
在EXCEL或者其他编程语言中,判断一个客户是否为VIP客户
IF(`消费金额`> 5000) THEN “VIP” ELSE “普通”
在SQL中,以上条件判断写为:
CASE
WHEN `消费金额`> 5000 THEN “VIP”
ELSE “普通”
END
如上所示,在SQL语句中,我们用CASE 作为条件判断语句的开始关键字,然后使用WHEN,THEN来构建判断语句,使用ELSE来构建默认值,最后使用END来结束条件判断语句。
注意:在同一个条件判断语句中,可以有一个到多个判断条件。
需求:根据各位顾客的消费额计算消费级别。
第一步,通过数据字典和E-R图找到需要的数据表----“订单信息表”;
第二步,定义不同的消费级别
根据顾客总消费额所在的区间,计算顾客的消费级别
消费区间 |
消费级别 |
>=5000 |
VIP3 |
2000到4999 |
VIP2 |
1000到1999 |
VIP1 |
小于1000 |
普通 |
第三步,撰写条件判断语句获得结果
计算顾客总消费额
我们使用数据聚合语句来计算每位顾客的总消费额。在这个步骤中,我们使用SQL聚合语句来计算顾客消费额,将订单信息与按照顾客号码分类,使用聚合函数SUM来计算每位顾客的总消费金额,操作如下:
注意看,我们之前已经在E-R图中找到了所需的数据来源,在构建SQL语句中,注意在数据来源处要添加数据库为前缀online_sale.order_info.,否则运行结果会报错。点击运行按钮,我们会得到:
此时结果仅仅显示每一位顾客消费的总金额。我们使用这个返回的结果作为我们构建临表子查询的语句,得到我们最终的答案。
第三步,我们使用条件判断语句,构建条件过滤的级别,具体操作如下:
运行后,返回的结果如下所示:
我们成功地根据顾客金额区间,运用条件判断语句,得到了顾客的消费级别,需求达成√
接下来,我们学习SQL进阶用法,如何进行语句优化。
SQL语句是怎么运行的?
①客户端发送SQL请求到数据库的服务器
②数据库服务器进行运算,返回结果
③客户端显示SQL语句运行结果
在我们的学习中,客户端是mySQL 2016 workbench,数据库服务器是安装在本地上的mySQL数据库。客户端返回的结果会显示在UI上。
有哪些工作场景需要优化SQL语句?
①加快语句运行速度
②减少数据库资源开销
注意:在企业级别的数据库操作中,SQL语句优化是必备技能。
语句优化场景1:查询语句
①避免使用*返回所有数据
②只选择产生结果的必要数据列
需求:列出所有的产品号码对应的产品名称。
错误示范如下:
在实际的SQL数据分析工作中,如若必须,我们选用必要的数据列来构建查询语句。在这个需求中,我们只需要列出产品号码和产品名称这两种信息,来源在产品信息表中,其余信息非必要,无需选择。正确示范如下:
语句优化场景2:过滤语句
过滤查询语句结果,如有可能,使用BETWEEN 而不是IN。
需求:选取产品号码1到4号的产品信息。
在实际工作中,我们可以使用不同的运算符号来达到相同的运算结果。例如,在这个需求中,我们既可以用IN也可以用BETWEEN来达到逻辑运算的结果,此时,我们为了节省运算开销,优先选用BETWEEN运算符,而不是IN运算符。
复习一下IN和BETWEEN的用法:
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
优化场景3:过滤/聚合语句
过滤聚合语句结果
①优先使用WHERE语句过滤原数据表中数据再聚合
②避免不需要的聚合计算
需求:计算所有杭州市和深圳市的供应商数目。
在实际操作中,我们会优先用WHERE过滤原表格中符合条件的数据,而不是直接先聚合,再后面追加HAVING子句来过滤返回结果中的数据,以此来避免不必要的运算开销。若想复习WHERE和HAVING的区别,请戳这篇文章→
在这个需求中,我们先用WHERE来过滤杭州市和深圳市的供应商数目,然后再进行聚合运算。而不是使用HAVING来过滤聚合后的结果。
优化场景3:结果排序
子查询语句结果的排序
①尽量在最后执行排序
②避免不必要的ORDER BY语句
需求:列出产品数目大于3的供应商号码。
在这个需求中,如果我们在子查询语句中进行排序,就是对聚合的结果进行排序。如果我们把排序语句放在最后,就是对过滤后的语句进行排序,排序指令仅仅会作用于产品数目>3的结果上。我们尽量把排序放在语句的最后进行排序,以此来避免对不必要的数据进行排序。
3.1 条件判断语句的基本知识
3.2 SQL优化语句的基本知识
避免在查询语句中使用*返回所有数据
在过滤语句中,如有可能,使用BETWEEN而不是IN
在聚合语句中,优先使用WHERE语句过滤原数据表中的数据再聚合
在子查询语句中,尽量在最后执行排序ORDER BY语句
条件判断语句通常用于数据转换,基于现有数据创建新的数据列;
如果值为连续常量值(数字),优先选用BETWEEN操作符;如果值为非连续常量值,则使用IN操作符。
关注回复”1“获取SQL学习资料