软件开发顶尖高手的杀手锏SQL语句
软件开发顶尖高手的杀手锏SQL语句
摘要 在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
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语句的更多相关文章
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- 项目开发中常用到的SQL语句
阅读目录 循环示例 循环示例 循环示例 循环示例 1.循环示例 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知 ...
- 让你提前认识软件开发(35):怎样改动SQL脚本以完毕需求?
第2部分 数据库SQL语言 怎样改动SQL脚本以完毕需求? SQL脚本的改动和C语言代码的改动流程是一样的,都要遵循下面步骤: 第一步,阅读需求.弄清楚自己要完毕什么功能. ...
- 《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件
<万能数据库查询分析器>实现使用SQL语句直接高效地访问文本文件 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要 用SQL语句来直接访问文本文件?是在做梦吗? ...
- 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇
在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...
- 处理动态SQL语句的参数
原文:处理动态SQL语句的参数 经常对SQL进行开发,写动态的SQL语句,是少之不了的,但是在使用动态语句中,常是因为有动态的参数的出现.参考下面代码示例: 正因为有了标记1的动态条件代码,而让SQL ...
- sql语句in
在今天之前sql一直用in语句,知道今天遇到一张数据量很大的表查了三分钟才查出来,这才意识到数据库优化有多重要.作为一名开发人员,首先从优化sql语句开始. 之前用in写sql是这样的 select ...
- 《MySQL慢查询优化》之SQL语句及索引优化
1.慢查询优化方式 服务器硬件升级优化 Mysql服务器软件优化 数据库表结构优化 SQL语句及索引优化 本文重点关注于SQL语句及索引优化,关于其他优化方式以及索引原理等,请关注本人<MySQ ...
- Oracle之SQL语句的分类
SQL简介 SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库 ...
随机推荐
- 一个都不能少: DevOps的3大核心基础架构
DevOps的涵盖面非常广,因为这个概念的火热,又有很多文章和技术都在把DevOps的帽子扣在自己头上,让很多人迷惑不解.其实,DevOps的知识体系如果从顶层上来分解,只有2块:方法论和工具链.方法 ...
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...
- XML Schema
XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...
- UNIX网络编程——非阻塞connect: Web客户程序
非阻塞的connect的实现例子出自Netscape的Web客户程序.客户先建立一个与某个Web服务器的HTTP连接,再获取一个主页.该主页往往含有多个对于其他网页的引用.客户可以使用非阻塞conne ...
- Dynamics CRM 2015Online Update1 new feature之 插件跟踪日志
在最新的CRM2015Online Update1版本中加入了一个新功能-插件跟踪日志,与其说是新功能更应该说是对原有功能的加强,因为ITracingService这个接口在2013中已经引入了, ...
- VS2010创建和调用动态链接库
当我们开发一个产品的时候,我们并不想把源码公布给对方,除了给对方提供exe可执行文件外,我们还可以生成动态链接库,供程序调用,方便二次开发. 下面我将简单梳理一下如何创建和调用动态链接库,方便大家程序 ...
- UNIX环境高级编程——信号(API)
一.信号在内核中的表示 实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号 ...
- 我眼中的Linux设备树(四 中断)
四 中断中断一般包括中断产生设备和中断处理设备.中断控制器负责处理中断,每一个中断都有对应的中断号及触发条件.中断产生设备可能有多个中断源,有时多个中断源对应中断控制器中的一个中断,这种情况中断产生设 ...
- 《java入门第一季》之正则表达式常见规则
正则表达式规则不用记住,只是知道是做什么用的即可.常见规则如下: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') (\\n来表示换行) ...
- shell sed过滤器详解
1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中 ...