ABAP SQL ② 정렬, 그룹, 조인, WITH(CTE), CASE, COALESCE
3줄 요약
GROUP BY를 쓰면SELECT목록의 일반 칼럼은 전부GROUP BY에 들어가야 하고,ORDER BY를 안 쓰면 결과 순서는 보장되지 않아요.조인은
INNER,LEFT/RIGHT OUTER가 기본이고, 임시 결과를 여러 번 쓸 때는WITH +이름 AS ( SELECT ... )로 CTE 를 만들 수 있어요.널 값은
CASE나coalesce( )로 대체해요.
어떤 상황에서 쓰나요
지난 회에서 SELECT 의 뼈대를 봤다면, 이번에는 실무 쿼리에서 자주 나오는 정렬, 집계, 조인, 임시 결과, 조건식을 모아요. 서브쿼리를 FROM 에 직접 못 쓰는 ABAP SQL 의 제약을 CTE 가 어떻게 풀어 주는지도 나와요.
핵심 내용
`GROUP BY`, `HAVING`, `ORDER BY`
GROUP BY는 같은 값을 가진 행을 하나로 묶어요.SELECT목록에 직접 적었거나 SQL 식의 인수로 쓴 칼럼은 모두GROUP BY에 적어야 하고, 집계 함수(MIN,MAX,SUM등)만 예외예요.HAVING은 묶인 결과에 조건을 걸고,GROUP BY와 함께만 써요.ORDER BY를 안 쓰면 결과 순서가 정해져 있지 않아요.ORDER BY PRIMARY KEY처럼 기본 키 순서나 칼럼과ASCENDING/DESCENDING을 지정할 수 있어요.GROUP BY와 같이 쓰면ORDER BY의 칼럼은GROUP BY에도 있어야 해요.
조인과 합집합
INNER JOIN ... ON ...: 두 소스의 조건이 참인 행끼리 합쳐요. 같은 이름의 칼럼이 있으면a~comp1처럼 칼럼 선택자를 써요.LEFT OUTER JOIN/RIGHT OUTER JOIN: 반대편에 조건에 맞는 행이 없어도 한쪽의 행은 결과에 남고 반대편 칼럼은 널 값이 돼요.UNION: 두 쿼리의 결과 행을 하나의 결과로 합쳐요. 중복 제거에는DISTINCT같은 방법이 있어요.
CTE (`WITH`)
중간 결과가 필요할 때, 특히 여러 번 쓸 때 써요. ABAP SQL 에서는
SELECT FROM subquery를 할 수 없는데 CTE 가 이를 가능하게 해요.구조:
WITH+ 쉼표로 구분한 CTE 정의(이름은+로 시작, 선택적 칼럼 이름 목록,AS ( SELECT ... )) + 마지막 메인SELECT. 각 CTE 는 다른 CTE 나 메인 쿼리에서 최소 한 번은 써야 해요.SELECT루프를 열면ENDWITH.로 닫아요. CTE 결과에는 클라이언트 칼럼이 없어요.
WITH
+sum_seats AS (
SELECT carrid, connid, SUM( seatsocc ) AS sum_seats
FROM zdemo_abap_fli
GROUP BY carrid, connid )
SELECT * FROM +sum_seats
ORDER BY carrid, connid
INTO TABLE @DATA(result).SQL 식
CASE: 단순(한 피연산자의 값을 비교,WHEN 'EUR' THEN 'A')과 검색형(WHEN length( carrname ) <= 5 THEN 'small')이 있어요.ELSE를 안 쓰면 해당하지 않는 경우의 결과는 널 값이에요.coalesce( a, b ): 외부 조인이 만든 널 값을 다른 값으로 바꿔요. 치트시트는 이것이CASE WHEN a IS NOT NULL THEN a ELSE b END의 줄임이라고 설명해요. ABAP 에는 널 값이 따로 없고, DB 가 돌려준 널 값이 ABAP 변수로 넘어올 때 그 타입의 초기값이 된다는 점을 짚어요.
주의할 점
CTE(
WITH)와 일부 SQL 식은 비교적 최근 문법이에요. 어느 릴리스부터인지는 치트시트 요약에 적혀 있지 않으니, 내 시스템에서 문법 검사를 하세요.치트시트의 SQL 예제는 문법을 보여 주는 용도예요. 인덱스 사용, 실행 계획 같은 성능 평가는 다루지 않아요(성능은 별도 *Performance Notes* 편이 있어요).
치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
출처와 이용 안내
원문: ABAP Cheat Sheets - ABAP SQL Clauses, Joins, CTE, SQL Expressions · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기