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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타조회 2

3줄 요약

  • ABAP SQL 의 WHERE 는 비교, BETWEEN, LIKE, IN(값 목록, 서브쿼리, 범위 테이블), EXISTS, IS NULL 등을 쓸 수 있어요.

  • 내부 테이블을 다루는 LOOP AT, READ TABLE, DELETE, FILTER, FOR 의 WHERE 는 지원하는 조건 종류가 달라요.

  • FILTER 는 정렬 키나 해시 키가 있는 테이블에서 키 칼럼만 비교할 수 있어요.

어떤 상황에서 쓰나요

WHERE 는 ABAP SQL 에도 있고 내부 테이블 문장에도 있는데, 같은 문법이 아니에요. 한쪽에서 되는 조건이 다른 쪽에서는 문법 오류가 나서 헷갈려요. 치트시트의 *WHERE Conditions* 편은 이 두 영역을 나눠서 정리해요. 이번 회가 ABAP SQL 연재의 마지막이에요.

핵심 내용

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

아직 댓글이 없어요.

정보·팁 목록전체 목록