실습 1
Inner join, 데이터 10건만
Inner join은 여러 테이블이 동일한 키를 가지고 있을때 키값을 연결시켜 여러 테이블의 필드를 하나의 쿼리에서 사용할 수 있도록 한다.
- inner join ~ on 구문을 사용한다.
- AS : Aliasing의 약자로 테이블 별칭. 어떤 테이블 필드를 return할지 SELECT 절 이후 명시해야한다.
- ON : JOIN하게될 테이블 KEY 필드의 조건을 명시한다.
[프로그램 로직]
DATA: BEGIN OF wa.
INCLUDE STRUCTURE vbak.
DATA : posnr TYPE vbap-posnr,
arktx TYPE vbap-arktx,
END OF wa,
gt_itab LIKE TABLE OF wa.
SELECT * FROM vbak AS a INNER JOIN vbap AS b
ON a~vbeln = b~vbeln
INTO CORRESPONDING FIELDS OF TABLE gt_itab UP TO 10 ROWS
WHERE auart = 'ZOR'
AND lifsk = '99'.
[실행화면]
실습 2
'AIR'가 포함된 데이터
[프로그램 로직]
data : gt_itab type TABLE OF scarr.
select * from scarr
into CORRESPONDING FIELDS OF TABLE gt_itab
where carrname LIKE '%Air%'.
[실행화면]
실습 3
for all entries
인터널테이블에 채워진값을 참조하는 명령문이다. 이 구문은 인터널테이블의 데이터가 모두 일치하는 경우 중복된 데이터는 제거하는 기능이 있어 사용시 주의해야 한다!
[프로그램 로직]
DATA : gt_mkpf TYPE TABLE OF mkpf,
gt_itab TYPE TABLE OF mseg.
SELECT * FROM mkpf
INTO CORRESPONDING FIELDS OF TABLE gt_mkpf
WHERE usnam = '2005A11'. "내가 만든 자재
SELECT * FROM mseg
into CORRESPONDING FIELDS OF TABLE gt_itab
FOR ALL ENTRIES IN gt_mkpf
WHERE mblnr = gt_mkpf-mblnr.
[실행화면]
실습 4
3개의 테이블 join
[프로그램 로직]
DATA: BEGIN OF wa.
INCLUDE STRUCTURE likp.
DATA : posnr TYPE lips-posnr,
matnr TYPE lips-matnr,
maktx TYPE makt-maktx,
END OF wa,
gt_itab LIKE TABLE OF wa.
select * from likp as a INNER JOIN lips as b
on a~vbeln = b~vbeln
INNER JOIN makt as c
on b~matnr = c~matnr
into CORRESPONDING FIELDS OF TABLE gt_itab
WHERE a~erdat BETWEEN '20200601' and '20200630'
and a~ernam = '2005A11'
and c~spras = sy-langu.
[실행화면]
실습 5
sum, avg, max, min / group by
합계, 평균, 최댓값, 최솟값을 구해보자. 이 명령문을 사용할 땐 group by로 합산해줄 필드명을 명시해야 한다.
[프로그램 로직]
DATA: BEGIN OF wa,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
paysum TYPE sflight-paymentsum,
payavg TYPE sflight-paymentsum,
paymax TYPE sflight-paymentsum,
paymin TYPE sflight-paymentsum,
END OF wa,
gt_itab LIKE TABLE OF wa.
SELECT carrid connid
SUM( paymentsum )
AVG( paymentsum )
MAX( paymentsum )
MIN( paymentsum )
INTO TABLE gt_itab
FROM sflight
WHERE carrid = 'AA'
GROUP BY carrid connid.
동적선언은 괄호를 띄어쓰기 해주어야 한다.
=
SELECT carrid connid
SUM( paymentsum ) as paysum
AVG( paymentsum ) as payavg
MAX( paymentsum ) as paymax
MIN( paymentsum ) as paymin
INTO CORRESPONDING FIELDS OF TABLE gt_itab
FROM sflight
WHERE carrid = 'AA'
GROUP BY carrid connid.
CORRESPONDING 하려면 필드 이름을 맞춰줘야하기 때문에 별칭을 지정 해주어야 한다.
[실행화면]
실습 6
Left outer join
Left outer join은 조인문 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하며, 매칭되는 데이터가 없는 경우 NULL 매칭하는 명령문이다.
[프로그램 로직]
DATA: BEGIN OF wa,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
connid type spfli-connid,
END OF wa,
gt_itab like TABLE OF wa.
SELECT a~carrid a~carrname b~connid from scarr as a LEFT OUTER JOIN spfli as b
ON a~carrid = b~carrid
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB
WHERE a~carrid BETWEEN 'AA' and 'AZ'.
[실행화면]
실습 7
Max
[프로그램 로직]
DATA : wa LIKE zs1d11t_01,
gt_itab LIKE TABLE OF wa,
seqnrmax TYPE zs1d11t_01-seqnr.
SELECT * FROM zs1d11t_01
INTO TABLE gt_itab.
SELECT MAX( seqnr ) INTO seqnrmax
FROM zs1d11t_01.
READ TABLE gt_itab INTO wa WITH KEY seqnr = seqnrmax.
IF seqnrmax = '99'. "
MESSAGE i016(pn) WITH '더 이상 추가할 수 없습니다'.
ELSE.
wa-seqnr = wa-seqnr + 1.
APPEND wa TO gt_itab.
MODIFY zs1d11t_01 FROM TABLE gt_itab.
ENDIF.
최댓값을 가지는 변수명을 선언해 최댓값을 seqnrmax에 넣어준 뒤 그 값을 읽어 wa에 넣어준다.
*다른 방법
인터널테이블에 넣은 후 순번을 기준으로 내림차순 정렬하면 첫번째줄이 가장 큰값이 된다. 가장 큰값이 된 첫번째 줄을 읽어 wa에 담으면 된다.
DATA : wa LIKE zs1d11t_01,
gt_itab LIKE TABLE OF wa,
SELECT * FROM zs1d11t_01
INTO TABLE gt_itab.
SORT gt_itab by seqnr DESCENDING.
READ TABLE gt_itab into wa INDEX 1.
IF
wa-seqnr = '99'.
이하 로직은 동일하다.
[실행화면]
실습 8
subquerry, for all entries
[프로그램 로직]
1) SUBQUERRY
select문 안에 select 문이 있는 형태이다.
퍼포먼스 측면으로 보면 바람직하진 않은 구문이다.
DATA : BEGIN OF wa.
INCLUDE STRUCTURE tvtw.
DATA : vtext TYPE tvtwt-vtext,
END OF wa,
gt_itab LIKE TABLE OF wa,
gt_itab2 LIKE TABLE OF wa.
SELECT * FROM tvtwt
INTO CORRESPONDING FIELDS OF TABLE gt_itab
WHERE vtweg
IN ( SELECT vtweg FROM tvtw )
AND spras = sy-langu.
2) FOR ALL ENTRIES
SELECT vtweg FROM tvtw
INTO CORRESPONDING FIELDS OF TABLE gt_itab2.
SELECT mandt vtext vtweg FROM tvtwt
INTO CORRESPONDING FIELDS OF TABLE gt_itab
FOR ALL ENTRIES IN gt_itab2
WHERE vtweg = gt_itab2-vtweg
and spras = sy-langu.
[실행화면]
'ABAP' 카테고리의 다른 글
Subscreen (2) | 2023.01.24 |
---|---|
Parameter, Select-options, Initialization (0) | 2023.01.24 |
간단한 SQL 실습 (0) | 2023.01.24 |
Lock object (0) | 2023.01.24 |
Search help 생성 (SE11) (0) | 2023.01.24 |
댓글