様々な連結(jié)テーブルが作成できるが、良く使うものはビュー(create view) に
しておくと効率が良い。各種各樣的連接表中,有的對視圖也起作用。
結(jié)合は、テーブルとテーブル、ビューとビュー、テーブ
ルとビューなど複雑にできる。(テーブル連結(jié))連接可以在數(shù)據(jù)表和數(shù)據(jù)表之間,視圖和視圖之間,數(shù)據(jù)表和視圖之間復雜的進行。
■単純結(jié)合 簡單連接
?現(xiàn)実的に単純結(jié)合を使う機會はないだろう。實際上簡單結(jié)合沒有什么使用的機會。
次の例では、受注m の各レコードに 品番m の全レコードが結(jié)合される。
在下面的例子中,在受注m的各種記錄里,品番m的所有記錄都被結(jié)合了。
受注m のレコード數(shù) x 品番m のレコード數(shù)の結(jié)果が問い合わされる。
受注m的記錄數(shù)*品番m的記錄數(shù)的結(jié)果被查詢出來。
select * from sak.受注m, sak.品番m;
■等価結(jié)合 等價連接
?等価結(jié)合は、特定のキーで表を結(jié)合します。等價連接是用特定的鍵來進行表的結(jié)合的。
條件のどちらかのデータが存在しない場合、結(jié)果セットには含まれません。
如果有條件在數(shù)據(jù)表里不存在,在結(jié)果集里就沒有這一條記錄。
現(xiàn)実的には外部結(jié)合が一番使いやすいと思います。在實際上,外部結(jié)合是最容易使用的。
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù)
from sak.受注m, sak.品番m
where 受注m.品番 = 品番m.品番 ;
?列の別名定義は、as を指定してもよい。列的別名指定,也可以用as來實現(xiàn)。
結(jié)合テーブルに同じ項目名が存在する場合は、どちらのテーブル項目か指定するため、テーブル名で修飾する。(受注m.品番)
在連接表中如果有相同的項目名存在,為了讓每一個項目都被指定,就用項目名來修飾。
select
受注番號,
受注m.品番 as 品番,
品番m.入庫數(shù) as 入庫數(shù)
from sak.受注m, sak.品番m
where 受注m.品番 = 品番m.品番;
?inner join を使用して、等価結(jié)合することもできます。(インナージョイン)
使用inner join,也可以進行等價連接。
select
受注番號,
受注m.品番 as 品番,
品番m.入庫數(shù) as 入庫數(shù)
from sak.受注m inner join sak.品番m on 受注m.品番 = 品番m.品番;
?3 つ以上の結(jié)合を inner join で指定するには、次のようにする。
如果有三個以上要指定inner join 來進行連接的時候,可以像下面這樣做。
select
*
from (sak.受注m inner join sak.品番m on 受注m.品番 = 品番m.品番)
inner join sak.得意先m on 受注m.得意先CD = 得意先m.得意先CD;
■非等価結(jié)合 非等價連接
?非常に時間のかかる結(jié)合ですが、必要な場面があるかもしれない。雖然很花時間,但有時候也要進行下面的檢索。
なにがしかの範囲條件で結(jié)合する場合に使います。和檢索條件的一部分進行連接。
select 受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù)
from sak.受注m, sak.品番m
where 受注m.機種 like substr(品番m.機種, 1, 2);
■外部結(jié)合 外結(jié)合、行結(jié)合、行連結(jié)、テーブル結(jié)合、外部接合
外部連接 外連接,行連接,表連接,外部連接
?外部結(jié)合は、一番よく使用します。外部連接是最經(jīng)常使用的。
一方の條件に対するデータが存在しなかった場合でも片方のデータを結(jié)果セ
ットに含める指定ができます。
對于一方的條件即使不存在,也可以使結(jié)果集包含一邊的數(shù)據(jù)。
次の例では、品番m にない品番の受注m レコードも結(jié)果に含まれます。
在下面的例子中,在品番m中沒有的品番受注m記錄的結(jié)果也包含了進來。
この場合、入庫數(shù)などの 品番m 項目には NULL がセットされて問い合わさ
れます。Oracle では、left join、right join を (+) で指定できます。
這時候,入庫數(shù)等的品番m項目里被設(shè)定了NULL值。在oracle里,left join,right join 可以用(+)來指定。
(左結(jié)合、右結(jié)合、複數(shù)テーブル問い合わせ、複數(shù)テーブル?yún)⒄?
(複數(shù)問い合わせ、複合テーブル?yún)⒄铡ⅴ欹榨去弗绁ぅ蟆ⅴ楗ぅ去弗绁ぅ?
(左連接,右連接,多個表查詢,多個表參照,左連接,右連接)
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù)
from sak.受注m, sak.品番m
where 受注m.品番 = 品番m.品番 (+);
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù)
from sak.受注m left join sak.品番m on 受注m.品番 = 品番m.品番;
?逆に受注m にない品番の品番m レコードを結(jié)果に含ませることもできます。
現(xiàn)実的には、こういう結(jié)合に意味はありませんが、逆の和もできると言うこ
とです。
?相反不在受注m里的品番m記錄也可以在結(jié)果里包含。在實際中,雖然沒有這么用的,但是(+)也可以放在=之前。
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù)
from sak.受注m, sak.品番m
where 受注m.品番 (+) = 品番m.品番;
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù)
from sak.受注m right join sak.品番m on 受注m.品番 = 品番m.品番;
?三つ以上の表を結(jié)合することもできます。(3 テーブル結(jié)合)
?也可以進行三個表以上的表連接。(三表連接)
次の例では、品番に対する品番m.入庫數(shù)、得意先CD に対する得意先m.得意
先名を結(jié)合しています。(left join を使用しても良い。)
在下面的例子中,對于品番的品番m.入庫數(shù),對于得意先CD的得意先m.得意先名來進行連接。(也可以使用左連接)
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù),
受注m.得意先CD 得意先CD,
得意先m.得意先名 得意先
from sak.受注m, sak.品番m, sak.得意先m
where 受注m.品番 = 品番m.品番 (+)
and 受注m.得意先CD = 得意先m.得意先CD (+);
select
受注番號,
受注m.品番 品番,
品番m.入庫數(shù) 入庫數(shù),
受注m.得意先CD 得意先CD,
得意先m.得意先名 得意先
from (sak.受注m left join sak.品番m on 受注m.品番 = 品番m.品番)
left join sak.得意先m on 受注m.得意先CD = 得意先m.得意先CD;
?複數(shù)の表を結(jié)合すると修飾が難解になりがちなので、テーブル別名を使うと
良いです。
如果多個表進行連接,修飾會變得很復雜,也可以使用表別名。
select
受注番號,
a.品番 品番,
b.入庫數(shù) 入庫數(shù),
a.得意先CD 得意先CD,
c.得意先名 得意先
from sak.受注m a, sak.品番m b, sak.得意先m c
where a.品番 = b.品番 (+)
and a.得意先CD = c.得意先CD (+);
** 外部結(jié)合を明示するために left join を left outer join、right join
を right outer join と書くこともできる。
** 為了明確外部連接,也可以把left join 寫成 left outer join, right join寫成right outer join。
(アウタージョイン、レフトアウタージョイン、ライトアウタージョイン)
(outer join, left outer join, right outer join)
■再帰結(jié)合(內(nèi)部結(jié)合) 回歸連接(內(nèi)部結(jié)合)
?再帰結(jié)合は、同じテーブルをテーブル別名を使用して結(jié)合します。
?回歸連接是相同的表來用別名來進行連接的。
次の例では、得意先m に親得意先CD があるとして、その得意先名を自分自
身と結(jié)合しています。(自己結(jié)合)
在下面的例子中,以得意先作為父得意先,然后用這個名字來進行自身連接。
select
a.得意先CD 得意先CD,
a.得意先名 得意先,
a.親得意先CD 親得意先CD,
b.得意先名 得意先
from sak.得意先m a, sak.得意先m b
where a.得意先CD = b.親得意先CD (+);
posted on 2009-09-24 14:42
達飛Plus 閱讀(150)
評論(0) 編輯 收藏