ABAP WHERE 조건 총정리: ABAP SQL과 내부 테이블의 차이
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
아직 댓글이 없어요.
로그인하고 댓글 쓰기