隨筆-4  評論-0  文章-0  trackbacks-0
          様々な連結テーブルが作成できるが、良く使うものはビュー(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 閱讀(150) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 蛟河市| 昆明市| 保靖县| 阆中市| 白银市| 井研县| 安仁县| 巴中市| 曲水县| 凌源市| 永嘉县| 清丰县| 炎陵县| 夏邑县| 平乐县| 龙江县| 永安市| 临城县| 宁晋县| 绥阳县| 庆云县| 南陵县| 台南县| 泗水县| 饶阳县| 诸城市| 新巴尔虎右旗| 芜湖县| 桑植县| 贺兰县| 通辽市| 德兴市| 延安市| 定西市| 晋江市| 封丘县| 美姑县| 金堂县| 伊吾县| 绵阳市| 四川省|