SAP/์กฐ์ธ Join

[SAP] JOIN ์กฐ์ธ

์ธํฌ๋งˆํ‹ฑ 2025. 2. 21. 18:16

SAP ์‹œ์Šคํ…œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ ์ •๋ณด์™€ ์„ฑ์ ๊ฐ€ ๋ณ„๋„์˜ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด, ํ•™์ƒ์˜ ์„ฑ์ ์„ ์กฐํšŒํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ABAP Open SQL์—์„œ๋Š” ์ด๋ฅผ ์œ„ํ•ด JOIN(์กฐ์ธ) ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” INNER JOIN, LEFT OUTER JOIN์˜ ๊ฐœ๋…๊ณผ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ  ABAP์—์„œ JOIN์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.




1. JOIN์ด๋ž€?

โœ”๏ธ JOIN(์กฐ์ธ)์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
โœ”๏ธ  SAP์˜ ABAP Open SQL์—์„œ๋Š” INNER JOIN๊ณผ LEFT OUTER JOIN์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. JOIN์˜ ์ข…๋ฅ˜

 

1๏ธโƒฃ INNER JOIN (๋‚ด๋ถ€ ์กฐ์ธ)

  • INNER JOIN์€ ๋‘ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, ํ•œ์ชฝ ํ…Œ์ด๋ธ”์—๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ INNER JOIN ๋ฌธ๋ฒ•

๊ธฐ์กด OPEN SQL

SELECT A~ํ•„๋“œ1 A~ํ•„๋“œ2 B~ํ•„๋“œ3
  INTO [CORRESPONDING FIELDS OF] TABLE lt_result
  FROM ํ…Œ์ด๋ธ”A INNER JOIN ํ…Œ์ด๋ธ”B
    ON ํ…Œ์ด๋ธ”A~๊ณตํ†ตํ•„๋“œ = ํ…Œ์ด๋ธ”B~๊ณตํ†ตํ•„๋“œ
  WHERE ํ…Œ์ด๋ธ”A~์กฐ๊ฑดํ•„๋“œ = ์กฐ๊ฑด๊ฐ’.

 

์ตœ์‹  OPEN SQL

SELECT <ํ•„๋“œ ๋ชฉ๋ก>
  FROM ํ…Œ์ด๋ธ”A AS A
  INNER JOIN ํ…Œ์ด๋ธ”B AS B
  ON A.๊ณตํ†ตํ•„๋“œ = B.๊ณตํ†ตํ•„๋“œ
  INTO TABLE lt_result
  WHERE ์กฐ๊ฑด.
  • ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ด

 

 

๐Ÿ“Œ INNER JOIN ์˜ˆ์ œ

์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ ํ…Œ์ด๋ธ”(ZSTUDENT_07)๊ณผ ์„ฑ์  ํ…Œ์ด๋ธ”(ZSTDSCORE_07)์—์„œ ์„ฑ์ ์ด ๋“ฑ๋ก๋œ ํ•™์ƒ์˜ ์ •๋ณด๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด INNER JOIN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด OPEN SQL

SELECT SC~STDNR SC~SUBJECT SC~SCORE "์„ฑ์  ํ…Œ์ด๋ธ”์—์„œ 3๊ฐœ"
        ST~STDNM "ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ 1๊ฐœ"
  FROM ZSTDSCORE_07 AS SC INNER JOIN ZSTUDENT_07 AS ST
  ON SC~STDNR = ST~STDNR
  INTO CORRESPONDING FIELDS OF TABLE gt_student "gt_student๋Š” ์ปฌ๋Ÿผ 4๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ WA"
  WHERE SC~STDNR = p_id.
  • INNER JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์ƒ(ZSTUDENT_07)๊ณผ ์„ฑ์ (ZSTDSCORE_07)์„ ํ•™๋ฒˆ(STDNR) ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„ฑ์ ์ด ์—†๋Š” ํ•™์ƒ์€ ์กฐํšŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ์—๋Š” STDNR(ํ•™๋ฒˆ), STDNM(์ด๋ฆ„), SUBJECT(๊ณผ๋ชฉ), SCORE(์ ์ˆ˜)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฆ‰, INNER JOIN์€ ์–‘์ชฝ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์กด์žฌํ•ด์•ผ๋งŒ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

 

2๏ธโƒฃ LEFT OUTER JOIN (์™ผ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ)

  •  LEFT OUTER JOIN์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด์„œ, ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด NULL ๊ฐ’์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ LEFT OUTER JOIN ๋ฌธ๋ฒ•

๊ธฐ์กด OPEN SQL

SELECT ํ…Œ์ด๋ธ”A~ํ•„๋“œ1 ํ…Œ์ด๋ธ”A~ํ•„๋“œ2 ํ…Œ์ด๋ธ”B~ํ•„๋“œ3
  INTO  [CORRESPONDING FIELDS OF] TABLE lt_result
  FROM ํ…Œ์ด๋ธ”A LEFT OUTER JOIN ํ…Œ์ด๋ธ”B
    ON ํ…Œ์ด๋ธ”A~๊ณตํ†ตํ•„๋“œ = ํ…Œ์ด๋ธ”B~๊ณตํ†ตํ•„๋“œ
  WHERE ํ…Œ์ด๋ธ”A~์กฐ๊ฑดํ•„๋“œ = ์กฐ๊ฑด๊ฐ’.

 

์ตœ์‹  OPEN SQL

SELECT <ํ•„๋“œ ๋ชฉ๋ก>
  FROM ํ…Œ์ด๋ธ”A AS A
  LEFT OUTER JOIN ํ…Œ์ด๋ธ”B AS B
  ON A.๊ณตํ†ตํ•„๋“œ = B.๊ณตํ†ตํ•„๋“œ
  INTO TABLE lt_result
  WHERE ์กฐ๊ฑด.
  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”(A)์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”(B)์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด NULL ๋ฐ˜ํ™˜
  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”์ด ๊ธฐ์ค€์ด๋ฏ€๋กœ, ํ•œ์ชฝ(B)๋งŒ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธ๋จ

 

 

๐Ÿ“Œ LEFT OUTER JOIN ์˜ˆ์ œ

ํ•™์ƒ ํ…Œ์ด๋ธ”(ZSTUDENT_07)์—์„œ ๋ชจ๋“  ํ•™์ƒ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด์„œ, ์„ฑ์ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์„ฑ์ ์„ ํ•จ๊ป˜ ์กฐํšŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด LEFT OUTER JOIN์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด OPEN SQL

SELECT SC~STDNR SC~SUBJECT SC~SCORE "์„ฑ์  ํ…Œ์ด๋ธ”์—์„œ 3๊ฐœ"
        ST~STDNM "ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ 1๊ฐœ"
  FROM ZSTDSCORE_07 AS SC LEFT OUTER JOIN ZSTUDENT_07 AS ST
  ON SC~STDNR = ST~STDNR
  INTO CORRESPONDING FIELDS OF TABLE gt_student "gt_student๋Š” ์ปฌ๋Ÿผ 4๊ฐœ๋กœ ๊ตฌ์„ฑ๋œ WA"
  WHERE SC~STDNR = p_id.
  • LEFT OUTER JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์ƒ(ZSTUDENT_07)์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ฉด์„œ, ์„ฑ์ (ZSTDSCORE_07)์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์„ฑ์ ์ด ์—†๋Š” ํ•™์ƒ๋„ ์กฐํšŒ๋˜๋ฉฐ, ํ•ด๋‹น ํ•™์ƒ์˜ ์„ฑ์  ๊ฐ’์€ NULL๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฆ‰, LEFT OUTER JOIN์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ, ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

 

 

3. JOIN ํ™œ์šฉ ์˜ˆ์ œ

๐Ÿ“Œ ์˜ˆ์ œ: ํ•™๋ฒˆ์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ํ•™์ƒ์˜ ๋ชจ๋“  ์„ฑ์ ์„ ์กฐํšŒํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

ํ…Œ์ด๋ธ” ZSTUDENT_07๊ณผ ZSTDSCORE_07 

 

๊ธฐ์กด OPEN SQL ์ฟผ๋ฆฌ

PARAMETERS p_id TYPE zstdscore_07-stdnr.

* WA ํƒ€์ž…: ํ•™๋ฒˆ, ์ด๋ฆ„, ์ˆ˜๊ฐ•ํ•œ ๊ณผ๋ชฉ, ์ ์ˆ˜
TYPES: BEGIN OF ts_student,
         stdnr   TYPE zstdscore_07-stdnr,
         stdnm   TYPE zstudent_07-stdnm,
         subject TYPE zstdscore_07-subject,
         score   TYPE zstdscore_07-score,
       END OF ts_student.

* IT ์„ ์–ธ
DATA gt_student TYPE TABLE OF ts_student.

* WA ์„ ์–ธ
DATA gw_student LIKE LINE OF gt_student.


SELECT SC~STDNR SC~SUBJECT SC~SCORE "์„ฑ์  ํ…Œ์ด๋ธ”์—์„œ 3๊ฐœ"
        ST~STDNM "ํ•™์ƒ ํ…Œ์ด๋ธ”์—์„œ 1๊ฐœ"
  FROM ZSTDSCORE_07 AS SC INNER JOIN ZSTUDENT_07 AS ST
  ON SC~STDNR = ST~STDNR
  INTO CORRESPONDING FIELDS OF TABLE gt_student
  WHERE SC~STDNR = p_id.


LOOP AT gt_student INTO gw_student.
  WRITE: / gw_student-stdnr, gw_student-stdnm,
  gw_student-subject, gw_student-score.
ENDLOOP.