博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复杂sql书写方法
阅读量:4987 次
发布时间:2019-06-12

本文共 1680 字,大约阅读时间需要 5 分钟。

给你一个复杂sql连接不同的表,多个嵌套查询条件等的语句时,你是非常的胆怯由于对语法的不熟悉以及没有经验和自信,现在我们来学习一下如何写复杂的sql,我们把它分解为很多小的步骤进行

一、集中最后的输出结果

开始在头脑中想到要输出的最终结果并且写下期待的结果集从查询中得到的,评估有多少记录你需要取回并且哪些表用于这些结果的输出。

二、理解数据库表关系

主要理解这些表之间的关系是一对一,还是一对多,还是多对多关系,ER图更能理清它们之间的关系,确保你需要哪些字段在这个表中进行连接。

三、将查询拆分为可管理的部分

请记住你不必须一个写下完整的sql语句。首先要确定表所需要的连接,并适当的引入相应的表。记住那个复杂的sql是简单sql的集合。测试那个查询在每个阶段一个接一个确保输出我们需要得到的结果。 一旦查询被创建,就应该在添加新表时一次又一次的进行测试。

四、聚合结果集

这是使用Group By语句聚合不同结果集的时间。您还可以根据需要使用多个聚合函数,如COUNT、MAX、SUM、MIN、SUM或AVG等。此外,如果结果集的顺序很重要,那么将它们按照语句order的正确顺序排列。

五、确保查询容易读

在需要的地方为SQL查询添加注释。不要添加不必要的注释,否则会使查询变得冗长乏味。请记住,SQL语句越长,执行语句就需要越多的带宽。尽量使用大多数开发人员经常使用的标准约定。

六、其它考虑的因素

对于一个复杂的sql查询,为查询使用存储过程是很常见的,但是在编写复杂的SQL查询时还需要考虑许多其他事实。

(1)复杂的sql查询是不可移植的对于其它数据库.
(2)众所周知,当调试很少时,测试是非常困难的.
(3)它们减少了应用服务器上的负载,但增加了web服务器上的负载.
您可以使用简单的SQL语句,然后在需要时使用更多的SQL语句将它们循环起来。经验丰富的数据库开发人员绝不会推荐这种方法,因为它既困难又混乱。最好的方法是实践SQL代码,并使用正确的技术或方法提高编写复杂SQL查询的效率。

七、为什么你应该避免复杂sql查询

一个复杂的SQL查询是许多连接和子查询的组合,很快您就会意识到长查询也是bug的根源,因此,这里的问题是,要么您应该寻找原始创建者来调试查询,要么您应该自己重新设计查询,以深入理解隐藏的复杂性。

复杂SQL查询的最大好处是从多个数据源获取数据,但是当开发人员过度使用时,它可能会产生问题。对于复杂的SQL查询,开发人员必须定义不同数据块之间的关系、连接表、对结果集进行分组、对结果集进行排序等等。
当您对修改数据库模式感兴趣时,它通常涉及重新设计查询,有时候,开发人员不喜欢更改数据模型,因为他们害怕重新创建大量SQL查询并将其按指定的顺序排列。

当复杂的SQL查询设计带来如此多的麻烦时,大多数开发人员都对使用替代方案(如果有的话)感兴趣.

八、复杂的sql查询替代方案。

对于复杂的SQL查询,有两种流行的替代方法,如下所示。

(1)使用大量的小的sql查询。
(2)你可以使用查询生成器。
第一个方案是简单的,而不是用一个包含所有内容的大型查询来访问数据库,将查询分解为更小的可管理单元。编写多个子查询来获取不同的数据段,单独处理它们,而不是一直使用聚合函数。对于新手程序员来说,它是最强大的方法,可以帮助彻底理解复杂的查询,而不必直接跳到最高效的解决方案。
当您希望使用小型查询时,不要忘记考虑效率方面的权衡。小查询通常不太倾向于管理职责,它们可以在不同的情况下自由应用。根据经验丰富的dba的说法,带有一组选定职责的小型查询通常很适合他们的工作,易于调试,而且语法错误也更少。
第二种方案涉及使用查询生成器。将大型查询分解为描述查询不同方面的小的可管理部分,这是最好的方法。它将提供一组具有共享概念的多个查询。您可以单独处理特定的集合,并尝试对其进行全面的逻辑或语法错误测试,以便稍后成功执行。

 

转载于:https://www.cnblogs.com/Hackerman/p/10934413.html

你可能感兴趣的文章
软件工程——理论、方法与实践⑦
查看>>
跟牛牛老师学习python自动化的第六天
查看>>
Vim 加 Gmail 变身 Vmail
查看>>
(5) Orchard 开发之 Localization and NullLocalizer
查看>>
分类算法(1)--KNN
查看>>
妙用python之编码转换
查看>>
hdu 4451 Dressing 衣服裤子鞋 简单容斥
查看>>
linux一些基本常识(四)
查看>>
Docker架构
查看>>
C#设计模式(3)——工厂方法模式
查看>>
过目不忘JS正则表达式
查看>>
Colidity-- StoneWall
查看>>
Leetcode 904. Fruit Into Baskets
查看>>
怎样连接REDIS服务端
查看>>
No.026:Remove Duplicates from Sorted Array
查看>>
SpringBoot项目的几种创建方式,启动、和访问
查看>>
解决"disabled". Expected Boolean, got Number with value 0
查看>>
OC--init,initialize,initWithCoder:,initWithFrame:各方法的区别和加载顺序
查看>>
Exponentiation
查看>>
本地jar上传到本地仓库
查看>>