复杂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 ...
随机推荐
- 【c# 学习笔记】密封类
密封类不可以被另外一个类继承,如果强行在代码中继承一个密封类,编译时就会产生错误. c#使用sealed关键字来定义密封类,如下: //定义密封类 public sealed class Sealed ...
- laravel进程管理supervisor的简单说明
原文地址:https://www.cnblogs.com/zhoujinyi/p/6073705.html 背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.& ...
- 第一章:mysql的介绍与安装
什么是数据库管理系统 1)管理数据(增删改查) 2)存储数据 数据库管理系统的分类 1)关系型数据库(rdbms) 典型产品:mysql,oracle,mariadb,mssql(sqlserver) ...
- mysql无法压缩存储表情
原文链接:https://www.cnblogs.com/SimonHu1993/p/7573868.html mysql无法压缩存储表情compress(str),就选择过滤把emoji表情符号替换 ...
- 点击 显示红色 小案例 vue
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- K8S从入门到放弃系列-(10)kubernetes集群之kube-proxy部署
摘要: kube-proxy的作用主要是负责service的实现,具体来说,就是实现了内部从pod到service和外部的从node port向service的访问 新版本目前 kube-proxy ...
- 《Mysql 事务 - 隔离》
一:事务概念 - ACID(Atomicity.Consistency.Isolation.Durability,即原子性.一致性.隔离性.持久性) 二:事务产生的问题 - 多个事务同时执行的时候 ...
- Java基础---Java变量
变量:程序运行期间,内容可以发生改变的量. 创建一个变量并且使用的格式: 数据类型 变量名称; // 创建了一个变量 变量名称 = 数据值; // 赋值,将右边的数 ...
- 【C++札记】动态分配内存(malloc,free)
介绍 操作系统中存在一个内存管理器(Memory Manager),简称MM,它负责管理内存. MM提供的服务:应用程序可以向MM申请一块指定大小的内存(借出),用完之后应用程序应该释放(还回). 所 ...
- Visual studio 2010(VS2010) 安装MSDN方法
首先保证VS2010已经安装完毕 1.解压VS2010的安装文件(ISO),会看到ProductDocumentation文件夹,该文件夹下即为MSDN. 2.启动vs2010,点击"帮助& ...