關於Access的左連線

2021-05-23 12:18:44 字數 2447 閱讀 9297

這篇隨筆沒有什麼深奧的技術要討論,只是自己乙個知識上的盲點:不知道在access中如何進行左連線的操作。通過在網上搜尋,最後在csdn上找到了自己要的答案,因此覺得有必要記錄下來:)

最近做專案,要將乙個access中的資料匯入到oracle中。剛開始我以為用sql-server的匯入匯出工具就可以輕鬆搞定的,隨後才發現有的字段資訊不是直接匯入過來就ok的,於是又只好自己敲個程式來搞定了。

先把問題列出來:如下圖所示,一目了然,無需其他廢話了。

所以一併在這裡將oracle的左連線的操作也寫一下,算是小小的總結吧,oracle的左連線sql語句如下:

select

corpname , labor , acreage , detail 

from

a , b 

where

b.id 

=a.id ( +) 

order

byb.id

asc

access的左連線sql語句如下:

select

corpname , labor , acreage , detail 

from

b left

join

a on

b.id 

=a.id 

order

byb.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

其中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

關於oracle左連線和右連線

由於之前oracle用的比較少 只清楚 常規的左右連線寫法 今天碰到這個 的用法 一時間不知道什麼意思 後來查了一下資料發現其實 也屬於關聯表查詢的用法 感覺挺好用的 以後寫的時候回經常用一下。下面是使用demo select a.b.from a,b where a.id b.aid 號在右 表示...

內連線 左連線 左外連線 右連線的區別

一 測試例子 存在如下兩張表 年級與班級,表內容如下 班級表 二 內連線與自然連線 1 自然連線 對於select from gradeclass gc where gc.grade id in select id from grade 其結果如下圖 其查詢是把符合條件中的班級表內容全部查詢出來 而...

左連線 左外連線 右外連線

在之前,我對mssql中的內連線和外連線所得出的資料集不是很清楚。這幾天重新溫習了一下sql的書本,現在的思路應該是很清楚了,現在把自己的理解發出來給大家溫習下。希望和我一樣對sql的連線語句不太理解的朋友能夠有所幫助。發這麼菜的教程,各位大大們別笑話偶了,呵 d 有兩個表a和表b。表a結構如下 a...