様々な連結テーブルが作成できるが、良く使うものはビュー(create view) に
しておくと効率が良い。各种各样的连接表中,有的对视图也起作用。
結合は、テーブルとテーブル、ビューとビュー、テーブ
ルとビューなど複雑にできる。(テーブル連結)连接可以在数据表和数据表之间,视图和视图之间,数据表和视图之间复杂的进行。
■単純結合 简单连接
・現実的に単純結合を使う機会はないだろう。实际上简单结合没有什么使用的机会。
次の例では、受注m の各レコードに 品番m の全レコードが結合される。
在下面的例子中,在受注m的各种记录里,品番m的所有记录都被结合了。
受注m のレコード数 x 品番m のレコード数の結果が問い合わされる。
受注m的记录数*品番m的记录数的结果被查询出来。
select * from sak.受注m, sak.品番m;
■等価結合 等价连接
・等価結合は、特定のキーで表を結合します。等价连接是用特定的键来进行表的结合的。
条件のどちらかのデータが存在しない場合、結果セットには含まれません。
如果有条件在数据表里不存在,在结果集里就没有这一条记录。
現実的には外部結合が一番使いやすいと思います。在实际上,外部结合是最容易使用的。
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数
from sak.受注m, sak.品番m
where 受注m.品番 = 品番m.品番 ;
・列の別名定義は、as を指定してもよい。列的别名指定,也可以用as来实现。
結合テーブルに同じ項目名が存在する場合は、どちらのテーブル項目か指定するため、テーブル名で修飾する。(受注m.品番)
在连接表中如果有相同的项目名存在,为了让每一个项目都被指定,就用项目名来修饰。
select
受注番号,
受注m.品番 as 品番,
品番m.入庫数 as 入庫数
from sak.受注m, sak.品番m
where 受注m.品番 = 品番m.品番;
・inner join を使用して、等価結合することもできます。(インナージョイン)
使用inner join,也可以进行等价连接。
select
受注番号,
受注m.品番 as 品番,
品番m.入庫数 as 入庫数
from sak.受注m inner join sak.品番m on 受注m.品番 = 品番m.品番;
・3 つ以上の結合を inner join で指定するには、次のようにする。
如果有三个以上要指定inner join 来进行连接的时候,可以像下面这样做。
select
*
from (sak.受注m inner join sak.品番m on 受注m.品番 = 品番m.品番)
inner join sak.得意先m on 受注m.得意先CD = 得意先m.得意先CD;
■非等価結合 非等价连接
・非常に時間のかかる結合ですが、必要な場面があるかもしれない。虽然很花时间,但有时候也要进行下面的检索。
なにがしかの範囲条件で結合する場合に使います。和检索条件的一部分进行连接。
select 受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数
from sak.受注m, sak.品番m
where 受注m.機種 like substr(品番m.機種, 1, 2);
■外部結合 外結合、行結合、行連結、テーブル結合、外部接合
外部连接 外连接,行连接,表连接,外部连接
・外部結合は、一番よく使用します。外部连接是最经常使用的。
一方の条件に対するデータが存在しなかった場合でも片方のデータを結果セ
ットに含める指定ができます。
对于一方的条件即使不存在,也可以使结果集包含一边的数据。
次の例では、品番m にない品番の受注m レコードも結果に含まれます。
在下面的例子中,在品番m中没有的品番受注m记录的结果也包含了进来。
この場合、入庫数などの 品番m 項目には NULL がセットされて問い合わさ
れます。Oracle では、left join、right join を (+) で指定できます。
这时候,入库数等的品番m项目里被设定了NULL值。在oracle里,left join,right join 可以用(+)来指定。
(左結合、右結合、複数テーブル問い合わせ、複数テーブル参照)
(複数問い合わせ、複合テーブル参照、レフトジョイン、ライトジョイン)
(左连接,右连接,多个表查询,多个表参照,左连接,右连接)
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数
from sak.受注m, sak.品番m
where 受注m.品番 = 品番m.品番 (+);
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数
from sak.受注m left join sak.品番m on 受注m.品番 = 品番m.品番;
・逆に受注m にない品番の品番m レコードを結果に含ませることもできます。
現実的には、こういう結合に意味はありませんが、逆の和もできると言うこ
とです。
・相反不在受注m里的品番m记录也可以在结果里包含。在实际中,虽然没有这么用的,但是(+)也可以放在=之前。
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数
from sak.受注m, sak.品番m
where 受注m.品番 (+) = 品番m.品番;
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数
from sak.受注m right join sak.品番m on 受注m.品番 = 品番m.品番;
・三つ以上の表を結合することもできます。(3 テーブル結合)
・也可以进行三个表以上的表连接。(三表连接)
次の例では、品番に対する品番m.入庫数、得意先CD に対する得意先m.得意
先名を結合しています。(left join を使用しても良い。)
在下面的例子中,对于品番的品番m.入库数,对于得意先CD的得意先m.得意先名来进行连接。(也可以使用左连接)
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数,
受注m.得意先CD 得意先CD,
得意先m.得意先名 得意先
from sak.受注m, sak.品番m, sak.得意先m
where 受注m.品番 = 品番m.品番 (+)
and 受注m.得意先CD = 得意先m.得意先CD (+);
select
受注番号,
受注m.品番 品番,
品番m.入庫数 入庫数,
受注m.得意先CD 得意先CD,
得意先m.得意先名 得意先
from (sak.受注m left join sak.品番m on 受注m.品番 = 品番m.品番)
left join sak.得意先m on 受注m.得意先CD = 得意先m.得意先CD;
・複数の表を結合すると修飾が難解になりがちなので、テーブル別名を使うと
良いです。
如果多个表进行连接,修饰会变得很复杂,也可以使用表别名。
select
受注番号,
a.品番 品番,
b.入庫数 入庫数,
a.得意先CD 得意先CD,
c.得意先名 得意先
from sak.受注m a, sak.品番m b, sak.得意先m c
where a.品番 = b.品番 (+)
and a.得意先CD = c.得意先CD (+);
** 外部結合を明示するために 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)
■再帰結合(内部結合) 回归连接(内部结合)
・再帰結合は、同じテーブルをテーブル別名を使用して結合します。
・回归连接是相同的表来用别名来进行连接的。
次の例では、得意先m に親得意先CD があるとして、その得意先名を自分自
身と結合しています。(自己結合)
在下面的例子中,以得意先作为父得意先,然后用这个名字来进行自身连接。
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 阅读(144)
评论(0) 编辑 收藏