复杂sql书写方法
给你一个复杂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的说法,带有一组选定职责的小型查询通常很适合他们的工作,易于调试,而且语法错误也更少。
第二种方案涉及使用查询生成器。将大型查询分解为描述查询不同方面的小的可管理部分,这是最好的方法。它将提供一组具有共享概念的多个查询。您可以单独处理特定的集合,并尝试对其进行全面的逻辑或语法错误测试,以便稍后成功执行。
复杂sql书写方法的更多相关文章
- PL/SQL异常处理方法
PL/SQL异常处理方法 1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: ...
- SQL 跟踪方法相关介绍
oracle sql跟踪方法:1.sql_trace打开跟踪:alter session set sql_trace=true;为跟踪文件做标记:alter session set tracefile ...
- 查找bad sql的方法:
--查找bad sql的方法: select * from (select buffer_gets, sql_text from v$sqlarea ; -- 执行次数多的SQL select sql ...
- SQL书写技巧
SQL书写技巧: 1.针对分区表,如果可以使用分区条件的,一定要加分区条件.分区条件的使用,可以减少不必要的数据访问,加快查询数据,如TB_CSV_ACCEPT_FLOW_OPERATOR表,以acc ...
- C#链接远程SQL 服务器方法
C#链接远程SQL 服务器方法第一步:申请花生壳内网版,要求交1块钱给花生壳服务器做验证.第二步:把你自己主机本地连接那里的内网地址不要自动获取,写成192.168.0.105,子网掩码255.25 ...
- SQL拼接方法
smark Beetle可靠.高性能的.Net Socket Tcp通讯组件 另类SQL拼接方法 在编写SQL的时候经常需要对SQL进行拼接,拼接的方式就是直接String+处理,但这种情况有个不好的 ...
- jdbc调试sql语句方法
在main命令行输入三个参数到oracle 的 dept2表(自己建的 和dept一样(deptno,dname,loc)),插入到数据库中去.通过本例子,学习在java里调试sql的方法. 写完sq ...
- sql注入方法以及防范
sql注入方法: 1.数字注入 ; get请求 www.bobo.com?id=1 可以查出 ID等于1的一条数据. 如果有人在链接后面增加 www.bobo.com?id=1 or 1=1 / w ...
- DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化、SQL优化方法
ylbtech-DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化.SQL优化方法 1.返回顶部 1. 1,单库表别太多,一般保持在200以下为宜 2,尽量避免SQL中出现运算,例如se ...
随机推荐
- iOS-UIStoryboard和UIResponder
6.17 UIStoryboard //获取someboard中InitialViewController UIStoryboard *story = [UIStoryboard storyboard ...
- Redis源码解析
一.src/server.c 中的redisCommandTable列出的所有redis支持的命令,其中字符串命令包括从get到mget:列表命令从rpush到rpoplpush:集合命令包括从sad ...
- Work? working!
0.总要想想为什要做这个(目的是什么,优缺点,必要性,不用行不行,产品定位,如何保证最后的稳定性) 1.如何逐步排查问题所在(做实验+分析排查:不同的实验手段) 2.如何利用网络(搜索问题的所在,确定 ...
- 基于MSP430F2618的程控电压源
基于MSP430F2618的程控电压源 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路设计 ...
- GitLab基本使用
一.引言 在微服务架构中,由于我们对系统的划分粒度足够小,服务会很多,而且也存在经常迭代的情况.如果还按照以前的部署方式显得非常吃力和复杂,并且很容易出现错误.而随着容器技术的发展,这个时候持续集成( ...
- ${__setProperty 等常见jmeter参数相关博客汇总
jmeter 控制线程组执行顺序 这个要配合全局变量.if和while来实现BeanShell取样器,全局变量:${__setProperty(newswitch,${switch1},)}if条 ...
- sql中能使用charindex 不要用 in 。charindex比in快很多
写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEINDX的函数,顾名思义就 ...
- (八)JSP 技术知识点总结(来自那些年的笔记)
目录 什么是 jsp Jsp 调用和运行原理(简略版) Jsp语法 Jsp指令简介 Page指令 Include指令 taglib指令 Jsp乱码问题 jsp运行原理(详细版) JSP中的九大隐式对象 ...
- API参考
http://www.yfvb.com/help/win32sdk/index.htm?page=html/13dsy.g.htm
- VirtualBox中CentOS7.2 网络配置(固定IP+联网)(亲测有效)
https://www.linuxidc.com/Linux/2018-04/151924.htm 一.前言 用虚拟机装Linux系统时,经常会出现一些问题.比如:从主机到虚拟机之间网络 ...