现在的位置: 首页 > 综合 > 正文

关于Access的左连接

2012年12月01日 ⁄ 综合 ⁄ 共 2287字 ⁄ 字号 评论关闭

    这篇随笔没有什么深奥的技术要讨论,只是自己一个知识上的盲点:不知道在Access中如何进行左连接的操作。通过在网上搜索,最后在CSDN上找到了自己要的答案,因此觉得有必要记录下来:)
    最近做项目,要将一个Access中的数据导入到Oracle中。刚开始我以为用SQL-Server的导入导出工具就可以轻松搞定的,随后才发现有的字段信息不是直接导入过来就ok的,于是又只好自己敲个程序来搞定了。
    先把问题列出来:如下图所示,一目了然,无需其他废话了。

    所以一并在这里将Oracle的左连接的操作也写一下,算是小小的总结吧,Oracle的左连接SQL语句如下:

SELECT CorpName , Labor , Acreage , Detail FROM A , B WHERE B.ID = A.ID ( + ) ORDER BY B.ID ASC
 
   Access的左连接SQL语句如下:
SELECT CorpName , Labor , Acreage , Detail FROM LEFT JOIN ON B.ID = A.ID ORDER BY B.ID ASC

    由此也就不难推出相应的右连接操作的方法了。
    问题是很容易就解决了,可是新的疑问又来了,这两种不同的用法分别都支持什么数据库呢?他们之间性能有什么优劣之分么?于是又开始上网狂找了一通,大致理出来了自己的一点想法,也可能不对,还请各位指点则个!
    有部分内容是从网上抓下来的,可是没有找到出处,致敬先!

 一、关于外连接(Outer Join) 

    SQL-92标准(SQL 标准的正式名称是ISO/IEC 9705 "Database Language SQL"。最近的一个版本被称作ISO/IEC 9075:2003或简称为SQL:2003。这个版本之前的是SQL:1999 和SQL-92。有兴趣的可以去这里SQL Standards看看不同的标准以及它们之间的差异)所定义的FROM子句的连接语法格式为:
    FROM join_table join_type join_table [ON (join_condition)]点击下载SQL92StandardJoinSyntax.pdf 

  其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多个表操作,对同一个表操作的连接又称做自连接。join_type 指出连接类型,可分为三种:内连接(Inner Join)、外连接(Outer Join)和交叉连接(Cross Join)。
    对于外连接,MS SQL-Server支持两种形式:
            1、从Sybase继承来的形式
                  字段1 *= 字段2 (左连接)
                  字段1 =* 字段2 (右连接)
                   这种形式没有全外连接方式
            2、标准的外连接语法
                   left [outer] join on EXPRESSION
                   right [outer] join on EXPRESSION
                   full [outer] join on EXPRESSION
    而对Oracle来说,在8i的时候,Oracle的外连接方式只有两种:即左/右连接,到了9i以后,Oracle也支持了标准的外连接语法,因而它也是两种方式
            1、字段1=字段2(+) (左连接)
                  字段1(+) = 字段2 (右连接)
                  这种形式也没有全外连接方式
            2、标准的外连接语法
                   left [outer] join on EXPRESSION
                   right [outer] join on EXPRESSION
                   full [outer] join on EXPRESSION
    这里只对MS SQL Server和Oracle进行了比较,对于其他的一些数据库如MySQL , PostgreSQL等就没有一一列出了。
二、关于Join操作的可能优化方法
     我觉得所谓的优化,还是一个见仁见智的问题,需要根据实际的情况来进行定夺。由于自己的经验很少,只能浅浅的说一些很常见的可以优化的地方,如果理解有误,就请大家多多指点^_^
    1、对于要经常进行Join操作的多个表(尤其是数据量比较大的表),在其join操作的字段上每个表都应当建立索引;
    2、在SELECT后面不要直接就一个SELECT *,而只要SELECT你需要用到的Columns就够了;
    3、对于要进行join操作的表的字段应该是那种unique值居多的字段为好;
    写到这儿的时候,自己真的是想不到其他的了,于是又去网上搜索了一下关于join  performance的文章,结果真找到了一篇比较好的文章(不过是English Version),我的很多想法文章里面都包括了,文章主要是讲的MS SQL Server中join  performance的问题,但我觉得还是有普遍意义的。
    大家可以到这儿看看http://www.sql-server-performance.com/tuning_joins.asp
    如果打开网页慢的话,也可以点击下载JoinPerformance.pdf

抱歉!评论已关闭.