软件开发顶尖高手的杀手锏SQL语句
                                
                                     马根峰

                   (广东联合电子服务股份有限公司, 广州 510300)

摘要      在SQL(Structured Query Language)语言DML中,有四大语句堪称其精髓部分。本人分别在“软件开发高手须掌握的4大SQL精髓语句(一)”至“软件开发高手须掌握的4大SQL精髓语句(四)”  4篇文章中进行了详细的阐述。而在“软件开发高手须掌握的4大SQL精髓语句(综合篇)”文章中,则用以上4大SQL精髓语句结合起来解决一个非常复杂的实际问题,最终在CSDN博客上获得了不同寻常的11000 多次访问量

其实,还有一条SQL语句堪称软件开发顶尖高手的杀手锏。不客气地说,大部分软件开发人员估计一辈子也不会有机会在工作中遇到这样的机会来使用它。这就是“全外连接”(Full Outer Join)。本文通过工作中的一个实例,以“万能数据库查询分析器”的中文版本《DB 查询分析器》为工具,来访问自己创建的数据库中的相关表,来展示整个问题的解决过程。

关键词     万能数据库查询分析器; DB 查询分析器;全外连接; Full Outer Join

0   引言

随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。

在SQL(StructuredQuery Language)语言DML中,有四大语句堪称其精髓部分,分别是CASE WHEN语句,Left Outer Join |  Left Join | Right Outer Join |  Right Join |  Inner Join语句,WITH AS语句,UNION、UNION ALL语句。

本人分别在“软件开发高手须掌握的4大SQL精髓语句(一)”至“软件开发高手须掌握的4大SQL精髓语句(四)”  4篇文章中进行了详细的阐述。而在“软件开发高手须掌握的4大SQL精髓语句(综合篇)”文章中,则用以上4大SQL精髓语句结合起来解决一个非常复杂的实际问题,最终在CSDN博客上获得了不同寻常的11000多次访问量。

其实,还有一条SQL语句堪称软件开发顶尖高手的杀手锏。不客气地说,大部分软件开发人员估计一辈子也不会有机会在工作中遇到这样的机会来使用它。这就是“全外连接”(Full Outer Join)。

全外连接(Full Outer Join),即包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。它在揭示事物内在存在的联系方面,有着无法替代的作用。

语法如下:

SELECT <</FONT>要选择的字段>

FROM table1

FULL OUTER JOIN table2

[On  规则>]

1   本例所用工具简单说明

下面就以MS SQL Server数据库为例,以“万能数据库查询分析器” 中文版本《DB 查询分析器》作为客户端工具来举例说明“全外连接”(Full Outer Join)的使用。

中国本土程序员马根峰推出的个人作品----万能数据库查询分析器,中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》。它具有强大的功能、友好的操作界面、良好的操作性、跨越各种数据库平台乃至于EXCEL和文本文件。

你可以通过它查询ODBC数据源(包括世面上所有的数据库、TXT/CSV文件、EXCEL文件)的数据。你可以同时执行多条DML语句乃至存贮过程,结果会以你设定的表格、文本框、文件来返回。从数据库导出千万条数据时,效率与DBMS没有什么区别。

《DB 查询分析器》在中关村在线(http://xiazai.zol.com.cn/detail/27/264455.shtml) 下载量超过 9.5万 次,位居整个数据库类排行榜中20位

在《程序员》2007第2期的“新产品&工具点评”部分,编辑“特别推荐”了“万能数据库查询分析器”发布。

本人还撰写了关于“万能数据库查询分析器”有关技术的63篇文章,发布在《电脑编程技巧与维护》、《软件》、《计算机时代》、《电脑编程技巧与维护》、百度文库、CSDN资源、和本人的四大博客上(CSDN博客、新浪博客、QQ空间和搜狐博客上)。

2   要解决的问题

本人所在公司(以下简称专营公司)是经政府授权专门从事于高速公路的联网收费结算业务。对高速公路联网收费的通行记录进行拆账,将整条收费记录的金额拆分给所经过的高速公路公司。而另外一家公司替某些高速公路公司建立了一个数据平台,功能之一也是拆账。最后,这家公司的项目验收时,高速公路公司发现数据平台与专营公司之间许多通行记录拆的账不同。

于是高速公路公司就让我司来查证此事。

本人经过多方面考虑,最终决定通过不同的粒度来分析两者之间的差异,粒度最高数据级别来统计分析路段间拆分的总体账目,关系模式:  路段间拆分(折分路段,收入路段,金额);而粒度最低的数据级别则来统计分析每一条通行记录间的拆分差别,关系模式:流水拆分(流水号,收入路段,收入金额,平台流水号,平台收入路段,平台收入金额)。

对于细节级数据的生成,本人采用了“全外连接”(Full Outer Join)。

3   具体实例图示详解

《DB 查询分析器》是通过ODBC数据源来访问各种数据库及EXCEL的,所以首先要建立要访问的数据库或EXCEL的ODBC数据源。本文就不再讲述创建ODBC数据源的过程。

数据库中有关表说明:

dbo.SplitResultList 平台流水拆分表

dbo.SplitResultList_stat 平流水拆分综合表

dbo. TB_CASHACCURATESPLITRESULT1 专营公司流水拆分表

dbo. tb_cashaccuratesplitresult1_stat专营公司流水拆分综合表

dbo.split_comp 细节级两者拆分对比表

图1     运行《DB 查询分析器》,选择ODBC数据源登录

图2       数据库中相关表

图3    使用“对象浏览器”快速生成SQL来查看表 SplitResultList

图4    使用“对象浏览器”快速生成SQL来查看表 TB_CASHACCURATESPLITRESULT1

图5    使用“对象浏览器”快速生成SQL来查看表 SplitResultList_stat

图6    使用“对象浏览器”快速生成SQL来查看表 tb_cashaccuratesplitresult1_stat

图7    使用“全外连接”(Full Outer Join) 生成细节级两者拆分对比表split_comp

selecta.*,b.*  into split_comp

--select count(*)

from

(

select *

from tb_cashaccuratesplitresult1_stat

) as a  full outer join

(

select *

from SplitResultListmid_stat

)  as b

on a.outlistno=b.outlistno_xy anda.incroadno=b.incroadno_xy

;

图8    使用“对象浏览器”快速生成SQL来查看表 split_comp

4  本人撰写的关于“万能数据库查询分析器”的63 篇技术文章  

目前以下6篇文章发布几个国内计算机刊物上:

[1] 马根峰· DB Query Analyzer中断SQL语句的执行 · 杭州:《计算机时代》,2011年第12期

[2] 马根峰· DB查询分析器 批量执行DML语句并返回更详细的信息 · 北京:《电脑编程技巧与维护》,2011年第24期

[3] 马根峰· DBQuery Analyzer中的事务管理在DB2中的应用 · 北京:《电脑编程技巧与维护》,2011年第22期

[4] 马根峰· DB查询分析器中断SQL语句的执行· 天津:《软件》,2011年第6期

[5] 马根峰· 万能数据库查询分析器中的事务管理在Oracle中的应用 · 上海:《微型电脑应用》,2011年第11期

[6] 马根峰 · 新产品&工具点评 特别推荐:“万能数据库查询分析器”发布 · 程序员,2007年2期

以下57篇文章发布在百度文库、CSDN资源、和本人的四大博客上:

《万能数据库查询分析器使用技巧之(一)》直到《万能数据库查询分析器使用技巧之(十三)》共13篇

《The 1st tip ofDB Query Analyze》直到《The 13th skills of DB Query Analyzer》共13篇

《如何在客户端配置ODBC来访问远程DB2 for Windows服务器》

《How to configure ODBC DSN in Client toaccess remote DB2 for Windows》

《如何在服务器上配置ODBC来访问本机DB2 forWindows服务器》

《How to configure ODBC DSN to access localDB2 for Windows》

《软件开发顶尖高手的杀手锏SQL语句》

《Which SQL statement is the trump card tothe senior software developer》

《DB 查询分析器批量执行DML语句并返回更详细的信息》

《用“万能数据库查询分析器”测试SQLite对4大SQL精髓语句的支持》

《用“DB查询分析器”的对象浏览器来展现数据库的数据字典》

《万能数据库查询分析器用户已基本涵盖当前所有数据库系统》

《The DBMS that DB Query Analyzer Users oftenuse cover all kinds of DBMS》

《查询分析器应必须具备的功能-中断查询的执行》

《万能数据库查询分析器的EXE文件加壳技术》

《Exe packer prevent DB Query Analyzer frombeging debugged》

《自己开发的“万能数据库查询分析器”终于有了较大的成果》

《DB Query Analyzer中断SQL语句的执行》

《DB 查询分析器 批量执行DML语句并返回更详细的信息》

《DB Query Analyzer中的事务管理在DB2中的应用》

《DB 查询分析器中断SQL语句的执行》

《万能数据库查询分析器中的事务管理在Oracle中的应用》

《特别推荐:“万能数据库查询分析器”发布》

《软件开发高手须掌握的4大SQL精髓语句(一)》

《软件开发高手须掌握的4大SQL精髓语句(二)》

《软件开发高手须掌握的4大SQL精髓语句(三)》

《软件开发高手须掌握的4大SQL精髓语句(四)》

《软件开发高手须掌握的4大SQL精髓语句(综合篇)》

《巅峰之作----“万能数据库查询分析器”5.01发布》

《万能数据库查询分析器与EXCEL强强联合进行数据分析》

《DB 查询分析器批量执行多条SQL语句并查看各自的执行时间》

《DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号》

《The table name must be enclosed in double quotation marks or sqarebracket while accessing EXCEL by DB Query Analyzer》

DB查询分析器 5.03  中关村在线下载地址:

http://xiazai.zol.com.cn/detail/27/264455.shtml

DBQuery Analyzer 5.03中关村在线下载地址:

http://xiazai.zol.com.cn/detail/43/420901.shtml

备注:

如果您的计算机上安装有“万能数据库查询分析器”以前的版本,请先将旧版本 Uninstall,然后再安装新版本,谢谢!

作者简介:

马根峰,硕士,研究方向:数据库应用。

个人开发了万能数据库查询分析器,中文版本《DB 查询分析器》、英文版本《DB Query Analyzer》。它具有强大的功能、友好的操作界面、良好的操作性、跨越各种数据库平台乃至于EXCEL和文本文件。

个人还开发了彻底删除文件(File Delete Absolutely),用以将Windows系统上的文件彻底删除,不会被其它软件恢复。

这两个软件均免费使用,在各内几大软件下载网站中关村在线、天空软件站、华军软件园、太平洋电脑、非凡软件站、绿色联盟等均有下载。

作者博客:

CSDN博客:http://blog.csdn.net/magenfeng

新浪博客:  http://blog.sina.com.cn/magenfeng

QQ空间:  http://user.qzone.qq.com/630414817

4  本人撰写的关于“万能数据库查询分析器”的63 篇技术文章  

目前以下6篇文章发布几个国内计算机刊物上:

[1] 马根峰· DB Query Analyzer中断SQL语句的执行 · 杭州:《计算机时代》,2011年第12期

[2] 马根峰· DB查询分析器 批量执行DML语句并返回更详细的信息 · 北京:《电脑编程技巧与维护》,2011年第24期

[3] 马根峰· DBQuery Analyzer中的事务管理在DB2中的应用 · 北京:《电脑编程技巧与维护》,2011年第22期

[4] 马根峰· DB查询分析器中断SQL语句的执行· 天津:《软件》,2011年第6期

[5] 马根峰· 万能数据库查询分析器中的事务管理在Oracle中的应用 · 上海:《微型电脑应用》,2011年第11期

[6] 马根峰 · 新产品&工具点评 特别推荐:“万能数据库查询分析器”发布 · 程序员,2007年2期

以下57篇文章发布在百度文库、CSDN资源、和本人的四大博客上:

《万能数据库查询分析器使用技巧之(一)》直到《万能数据库查询分析器使用技巧之(十三)》共13篇

《The 1st tip ofDB Query Analyze》直到《The 13th skills of DB Query Analyzer》共13篇

《如何在客户端配置ODBC来访问远程DB2 for Windows服务器》

《How to configure ODBC DSN in Client toaccess remote DB2 for Windows》

《如何在服务器上配置ODBC来访问本机DB2 forWindows服务器》

《How to configure ODBC DSN to access localDB2 for Windows》

《软件开发顶尖高手的杀手锏SQL语句》

《Which SQL statement is the trump card tothe senior software developer》

《DB 查询分析器批量执行DML语句并返回更详细的信息》

《用“万能数据库查询分析器”测试SQLite对4大SQL精髓语句的支持》

《用“DB查询分析器”的对象浏览器来展现数据库的数据字典》

《万能数据库查询分析器用户已基本涵盖当前所有数据库系统》

《The DBMS that DB Query Analyzer Users oftenuse cover all kinds of DBMS》

《查询分析器应必须具备的功能-中断查询的执行》

《万能数据库查询分析器的EXE文件加壳技术》

《Exe packer prevent DB Query Analyzer frombeging debugged》

《自己开发的“万能数据库查询分析器”终于有了较大的成果》

《DB Query Analyzer中断SQL语句的执行》

《DB 查询分析器 批量执行DML语句并返回更详细的信息》

《DB Query Analyzer中的事务管理在DB2中的应用》

《DB 查询分析器中断SQL语句的执行》

《万能数据库查询分析器中的事务管理在Oracle中的应用》

《特别推荐:“万能数据库查询分析器”发布》

《软件开发高手须掌握的4大SQL精髓语句(一)》

《软件开发高手须掌握的4大SQL精髓语句(二)》

《软件开发高手须掌握的4大SQL精髓语句(三)》

《软件开发高手须掌握的4大SQL精髓语句(四)》

《软件开发高手须掌握的4大SQL精髓语句(综合篇)》

《巅峰之作----“万能数据库查询分析器”5.01发布》

《万能数据库查询分析器与EXCEL强强联合进行数据分析》

《DB 查询分析器批量执行多条SQL语句并查看各自的执行时间》

《DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号》

《The table name must be enclosed in double quotation marks or sqarebracket while accessing EXCEL by DB Query Analyzer》

软件开发顶尖高手的杀手锏SQL语句的更多相关文章

  1. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  2. 项目开发中常用到的SQL语句

    阅读目录 循环示例 循环示例 循环示例 循环示例 1.循环示例 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知 ...

  3. 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?

    第2部分 数据库SQL语言 怎样改动SQL脚本以完毕需求? SQL脚本的改动和C语言代码的改动流程是一样的,都要遵循下面步骤:         第一步,阅读需求.弄清楚自己要完毕什么功能.       ...

  4. 《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件

    <万能数据库查询分析器>实现使用SQL语句直接高效地访问文本文件 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要    用SQL语句来直接访问文本文件?是在做梦吗? ...

  5. 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

    在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...

  6. 处理动态SQL语句的参数

    原文:处理动态SQL语句的参数 经常对SQL进行开发,写动态的SQL语句,是少之不了的,但是在使用动态语句中,常是因为有动态的参数的出现.参考下面代码示例: 正因为有了标记1的动态条件代码,而让SQL ...

  7. sql语句in

    在今天之前sql一直用in语句,知道今天遇到一张数据量很大的表查了三分钟才查出来,这才意识到数据库优化有多重要.作为一名开发人员,首先从优化sql语句开始. 之前用in写sql是这样的 select ...

  8. 《MySQL慢查询优化》之SQL语句及索引优化

    1.慢查询优化方式 服务器硬件升级优化 Mysql服务器软件优化 数据库表结构优化 SQL语句及索引优化 本文重点关注于SQL语句及索引优化,关于其他优化方式以及索引原理等,请关注本人<MySQ ...

  9. Oracle之SQL语句的分类

    SQL简介 SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库 ...

随机推荐

  1. 剑指Offer——携程笔试题+知识点总结

    剑指Offer--携程笔试题+知识点总结 情景回顾 时间:2016.9.17 19:10-21:10 地点:山东省网络环境智能计算技术重点实验室 事件:携程笔试 总体来说,携程笔试内容与其它企业笔试题 ...

  2. 基于CAS实现单点登录(SSO):工作原理

    工作中使用到了SSO,网上看到了这个博客的一系列文章感觉不错,转载收藏 源地址http://blog.csdn.net/tch918/article/details/19930037 系列文章的第一篇 ...

  3. XML命名规则

    XML = Extensible Markup Language,可扩展标记语言 XML 标签对大小写敏感,XML 标签对大小写敏感.在XML 中,标签 <Letter> 与标签 < ...

  4. 解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题

    我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题 最 ...

  5. 开源项目——小Q聊天机器人V1.1

    小Q聊天机器人V1.0 http://blog.csdn.net/baiyuliang2013/article/details/51386281 小Q聊天机器人V1.1 http://blog.csd ...

  6. Java-IO之InputStreamReader和OutputStreamWriter

    InputStreamReader和OutputStreamWriter是字节流通向字符流的桥梁.它使用指定的差染色体读写字节并将其解码为字符.InputStreamReader的作用是将字节输入流转 ...

  7. 新手学python(2):C语言调用完成数据库操作

    继续介绍本人的python学习过程.本节介绍如何利用python调用c代码.内容还是基于音乐信息提取的过程,架构如图一.Python调用c实现的功能是利用python访问c语言完成mysql数据库操作 ...

  8. HDFS HA: 高可靠性分布式存储系统解决方案的历史演进

    1. HDFS 简介 HDFS,为Hadoop这个分布式计算框架提供高性能.高可靠.高可扩展的存储服务.HDFS的系统架构是典型的主/从架构,早期的架构包括一个主节点NameNode和多个从节点Da ...

  9. android下在屏幕适配小总结

    为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在xml中写dip(这个还是可以的),前面两种感觉过程工作量太大了,由加载大图片的优化思想 同 ...

  10. 使用DBMS_LOCK控制程序并发

    在调用并发的程序时,假设两个人同时提交了某一个并发请求,并且传入了同样的参数,假设在程序中使用了对状态的控制,例如在刚进入main函数的时候马上就将状态update了,那么其中某一个人就会查不到该条数 ...