[SAP] JOIN ์กฐ์ธ
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.