软件开发顶尖高手的杀手锏SQL语句(一)

2014-11-24 14:09:56 · 作者: · 浏览: 2

摘要 在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 <要选择的字段>

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 细节级两者拆分对比表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

;

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