關於Access的左連接

    這篇隨筆沒有什麼深奧的技術要討論,只是自己一個知識上的盲點:不知道在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章