바로투입이력카드
SAP 게시판

정보·팁

ABAP WHERE 조건 총정리: ABAP SQL과 내부 테이블의 차이

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 10

3줄 요약

  • ABAP SQL의 WHERE에서는 비교·범위·패턴·서브쿼리 등으로 행을 골라요.

  • 내부 테이블 처리 문장의 조건은 SQL 조건과 다르므로 같은 문법을 그대로 옮기면 안 돼요.

  • FILTER는 정렬 키나 해시 키가 필요하고 비교 가능한 필드와 조건에도 제한이 있어요.

어떤 상황에서 쓰나요

ABAP SQL에도 내부 테이블 처리 문장에도 WHERE가 나오지만, 지원하는 조건은 같지 않아요. 이번 글에서는 두 영역에서 쓸 수 있는 조건을 나누어 알아봐요. 특히 FILTER는 키를 기준으로 동작하므로 별도의 제약을 확인해야 해요.

WHERE라는 이름이 같아도 SQL과 내부 테이블 문장이 받아들이는 조건은 다릅니다. 아래 그림의 서로 다른 필터처럼 생각하고, 특히 FILTER에서는 사용할 키와 조건을 함께 확인하세요.

AI 설명 그림: 같은 WHERE, 다른 조건. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 같은 WHERE, 다른 조건. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

ABAP SQL의 WHERE

  • 논리식이 참인 행만 결과나 수정 대상에 들어가요. 조건에 쓰인 칼럼이 결과에 포함될 필요는 없어요. 단 string, rawstring 같은 타입의 칼럼은 쓸 수 없어요.

  • SELECT의 WHERE, HAVING, 그리고 UPDATE/DELETE의 WHERE에서 써요.

  • 조건 종류

  • 비교: = / EQ, <> / NE, < / LT, > / GT, <= / LE, >= / GE

  • 조합: AND, OR, NOT, 괄호

  • 서브쿼리 비교: a = ALL|ANY|SOME ( SELECT ... ) (행이 하나일 때만 생략 가능)

  • 범위: a [NOT] BETWEEN b AND c (a >= b AND a <= c와 같아요)

  • 패턴: a [NOT] LIKE b [ESCAPE c] (%는 임의의 문자열, _는 문자 한 개)

  • 초기값: a IS [NOT] INITIAL

  • 값 목록: a [NOT] IN ( b, c, ... ), 서브쿼리: a [NOT] IN ( SELECT ... )

  • 여러 칼럼 묶음: ( a, b ) IN ( ( d, e ) ( f, g ) ), ( a, b ) IN ( SELECT ... ) (이 두 형태는 NOT이 안 돼요)

  • 범위 테이블: a [NOT] IN @ranges_table (선택 화면의 SELECT-OPTIONS 같은 곳에서 오는 표예요. CP/NP 연산자는 LIKE 조건으로 바뀌어서 대소문자를 구분해요.)

  • 존재: EXISTS ( SELECT ... ) (서브쿼리가 적어도 한 행이면 참)

  • 널: a IS [NOT] NULL

  • 동적 조건: ( dynamic_where_clause ) — 논리식 문법을 담은 문자형 데이터 객체나 문자형 줄의 표준 테이블. 대소문자는 구분하지 않아요. 외부 입력을 넣는 경우의 위험은 *Dynamic Programming* 편을 보라고 안내해요.

내부 테이블 문장의 WHERE (LOOP AT, READ TABLE(조건에 맞는 첫 줄), DELETE, FILTER, FOR)

  • 비교 연산자는 같고, 문자형 비교 연산자 CO, CN, CA, NA, CS, NS, CP, NP도 쓸 수 있어요. BETWEEN, 범위 테이블 IN도 돼요.

  • 술어식: IS [NOT] INITIAL, IS [NOT] BOUND, IS [NOT] INSTANCE OF

  • 동적 조건도 가능하고, 논리식은 AND, OR, EQUIV와 괄호로 묶어요.

  • LIKE, EXISTS, 서브쿼리 같은 SQL 전용 조건은 없어요.

FILTER 연산자의 전제

  • 원본 테이블에 정렬 키나 해시 키가 있어야 해요. 기본 키가 그렇지 않으면 보조 키가 있어야 해요.

  • 키 칼럼만 단일 값과 비교할 수 있어요(필터 테이블 기반 필터링도 가능). 해시 키는 =만, 정렬 키는 =, <>, <, >, <=, >=를 쓸 수 있고(키의 앞부분은 지정해야 해요), IS [NOT] INITIAL도 돼요. 여러 비교는 AND 로만 묶을 수 있어요.

내부 테이블을 소스로 하는 SELECT 는 조인처럼 SQL 기능이 ABAP 문장보다 나을 때만 쓰라고 치트시트가 권해요. 이 편의 예제 대부분은 외부 데이터 없이도 실행할 수 있도록 일부러 내부 테이블을 소스로 써요.

SELECT id FROM @itab AS tab
  WHERE ( animal = 'bear' AND count = 5 )
     OR ( animal = 'lion' AND count = 20 )
  INTO TABLE @DATA(it).

주의할 점

  • ABAP SQL의 WHERE에 쓰는 문법이 내부 테이블 LOOP AT ... WHERE 에서도 그대로 된다고 가정하면 안 돼요. 위 목록의 차이를 기억하세요.

  • 동적 WHERE에 사용자 입력을 그대로 넣으면 보안 위험(SQL 주입과 비슷한 문제)이 있어요. 치트시트는 *Dynamic Programming* 편에서 cl_abap_dyn_prg 같은 검사 수단을 소개한다고 안내해요. 저는 그 편을 읽지 않았어요.

  • 치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2025년 3월이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/31_WHERE_Conditions.md

출처와 이용 안내
  • 원문: ABAP Cheat Sheets - WHERE Conditions in ABAP Statements · 작성자 SAP SE and contributors SAP-samples · 작성일 2025-03-20 · 기준 릴리스에 따라 다름 원문은 최신 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

아직 댓글이 없어요.

정보·팁 목록전체 목록