PR

【ABAP】外部結合(SELECT ~ OUTER JOIN)を3分で解説

ABAP

ABAPのオープンSQL―SELECT文で外部結合を行うテクニックについて解説します

そもそもテーブル結合って何?

外部結合って?内部結合とは何が違うの?

以上のような疑問にお答えします。

このページで学べる内容
  • 前提:テーブル結合とは?
  • 外部結合(OUTER JOIN)とは?―内部結合との違い
  • OUTER JOIN-構文ルール
    • LEFT OUTER JOIN

ABAPerであれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。

本ページはABAPにおけるSELECT文の知識がある方向けの解説ページです。

SELECT文の意味やコーディング方法がイマイチ分かっていない・・・という方は初めに以下のページをご覧ください。

スポンサーリンク

前提:テーブル結合とは?

テーブル結合とは、その名の通りテーブルとテーブルを合体させることを言います。

1つのテーブルだけでは情報が足りないような場合に、別のテーブルから情報を引っ張ってきて別のテーブルを作ってあげるようなイメージです。例えば、上記の例では「役職ID」を基準に、テーブルAとテーブルBを結合しています。

テーブル結合には、内部結合と外部結合。2種類の結合パターンが存在しますが、本ページでは外部結合(OUTER JOIN)について解説しています。

内部結合/外部結合
  • 内部結合:両方のテーブルに存在するデータ同士をくっつける
  • 外部結合:1つのテーブルを基準としてデータをくっつける

外部結合(OUTER JOIN)とは?

外部結合(OUTER JOIN)とは、1つのテーブルを基準として、他のテーブルから情報を引っ張ってくるようなイメージの結合テクニックです。

図で見てみると決して難しくはありませんね。

ここで「結合条件」について、解説しておきます。

外部結合:結合条件

結合条件とは、テーブルAとテーブルBを結合させる条件のこと(何を基準にして2つのテーブルを合体させるか?)です。

例えば、テーブルAとテーブルB両方に存在する「役職ID」を結合条件として2つのテーブルをくっつけてみると、同じ「役職ID」をもつレコード同士が1つのレコードとして合体します。

テーブルA―役職ID = テーブルB―役職ID

では、内部結合とは一体何が違うのでしょうか?

詳しく見ていきましょう。

内部結合との相違点

2つのテーブルを結合させるという意味で両者は同一です。が、以下のような違いがあります。

内部結合

両方のテーブルにレコードが存在する場合にのみ結合が行われる

テーブルBには、役職ID「C」と「D」が存在しないので、テーブル結合が行われません。

外部結合

両方のテーブルにレコードがなくても結合が行われる

テーブルBには、役職ID「C」と「D」が存在しませんが、結合後のテーブルにもちゃんと基準となる全てのレコードが存在しています。

この微妙な違いを理解していないと、思わぬバグが出てきてしまうため、しっかりと学習しておきましょう!

ここからはABAPのSELECT文で外部結合(OUTER JOIN)を行う方法を解説します。

外部結合(SELECT ~ LEFT OUTER JOIN)

SELECT
  (結合テーブルX)~(取得項目),
  (結合テーブルX)~(取得項目),
            …
FROM
  (結合テーブル1)
LEFT OUTER JOIN
  (結合テーブル2)
ON
    (結合テーブル1)~(結合項目) = (結合テーブル2)~(結合項目)
AND (結合テーブル1)~(結合項目) = (結合テーブル2)~(結合項目)
AND (結合テーブル1)~(結合項目) = (結合テーブル2)~(結合項目)
INTO TABLE (内部テーブル名).

結合テーブル1を基準テーブル(左テーブル)とし、結合テーブル2からレコードを引っ張ってくる場合のコードルールです。

外部結合には、「LEFT OUTER JOIN」を利用する方法と、「RIGHT OUTER JOIN」を利用する2つの書き方がありますが、「RIGHT OUTER JOIN」を利用する機会はほとんど存在しないため説明を省略します。

尚、LEFTとRIGHTの違いはどちらのテーブルを基準とするかが異なるだけで、LEFTとRIGHTを入れ替えれば結果は全く同一になります。

外部結合(OUTER JOIN)サンプルコード

SELECT
  CEPC~PRCTR
  CEPC~LOCK_IND
  CEPCT~KTEXT
FROM
  CEPC
LEFT OUTER JOIN
  CEPCT
ON
    CEPCT~SPRAS = SY-LANGU
AND CEPCT~PRCTR = CEPC~PRCTR
AND CEPCT~DATBI = CEPC~DATBI
AND CEPCT~KOKRS = CEPC~KOKRS
    INTO CORRESPONDING FIELDS OF PRS_PRC
WHERE CEPC~PRCTR =  LDF_PRCTR  "利益センタ
  AND CEPC~DATBI >= SY-DATUM.   "有効終了日
SELECT
 BSEG~BELNR,               "取得項目:会計伝票番号
 BSEG~GJAHR,               "取得項目:会計年度
 BSEG~MWSKZ,               "取得項目:税コード
 T007S~TEXT1               "取得項目:税コードテキスト
FROM
  BSEG                      "取得元テーブル:会計伝票明細
LEFT OUTER JOIN
  T007S                            "取得元テーブル:税コード名
ON
    BSEG~MWSKZ  = T007S~MWSKZ     "結合条件:会社コード
AND T007S~KALSM = 'TAXJP'         "結合条件:決定表
INTO TABLE LIT_BSEG_T007S.         "取得項目を格納する内部テーブル

内部結合も、外部結合もその概念さえ覚えてしまえば、難しいものではありません。あれ、ちょっとこれなんだっけ?と思ったら是非またこのページに戻って学習してみてください。

SAP / ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました