ABAP 언어에 대한 개념을 정리하는 포스팅입니다.
작성자는 ABAP에 대한 전문가가 아니며, 작성된 정보가 부정확할 수 있으니 게시글은 참고 목적으로만 봐주시면 감사하겠습니다.
1. SQL
* ABAP에서 SQL은 SAP R/3의 3개의 레이어 중 데이터베이스 레이어에서 테이블을 조회, 수정, 삭제, 변경할 때 주로 사용합니다.
SQL이란 Structured Query Language의 약자이며, 관계형 데이터베이스에 사용되는 표준화된 언어입니다.
DML, DDL, DCL 3종류로 분류되며, ABAP에선 DML 언어만 사용할 수 있습니다.
DML: 데이터 처리 언어 {Select(조회), Insert(삽입), Delete(삭제), Update(갱신)}
DDL: 데이터 정의 언어 {Create(생성), Drop(삭제), Alter(변경)}
DCL: 데이터 제어 언어 {Grant(권한 부여), Revoke(권한 제거)}
ABAP에서 SQL은 OPEN SQL과 Native SQL로 나눠집니다.
1. OPEN SQL은 ABAP 언어에서만 사용되며 데이터베이스 인터페이스를 통해 NATIVE SQL로 번역됩니다.
OPEN SQL은 DDL, DCL을 사용할 수 없으며, DML만 사용 가능합니다.
2. NATIVE SQL은 데이터베이스에 사용되는 SQL 언어입니다. 데이터베이스에 직접 접속하여 DML, DDL을 사용할 수 있습니다.
2. Select
Select 구문은 데이터베이스 테이블에서 필요한 데이터를 읽어오는 역할을 합니다.
Select 구문은 하나의 라인 값을 읽어올 경우와, 여러 라인 값을 읽어올 경우에 따라 구문을 선택하여 사용하실 수 있습니다.
1. Select Single: 데이터베이스에서 하나의 라인 값을 읽어오고자 할 경우 사용합니다.
코드는 다음과 같습니다.
SELECT SINGLE <컬럼 이름> FROM <테이블 이름> WHERE <조건>.
2. 여러 라인을 조회할 때는 Select 구문을 사용합니다. 대신 Single이 붙지 않고 조회하고자 하는 컬럼을 작성하시면 됩니다. 사용 시 Select의 결과가 내부 테이블에 저장됩니다. 이것을 ABAP에선 인터널 테이블이라고 합니다.
코드는 다음과 같습니다.
SELECT [DISTINCT] <컬럼 이름> FROM <테이블 이름> WHERE <조건>.
코드를 보니 처음보는 구문인 DISTINCT가 있습니다. DISTINCT는 중복된 값을 제외하는 구문입니다.
전체 컬럼을 조회하고 싶을 때는 '*'를 사용하시면 됩니다. 사용 시 전체 컬럼이 조회됩니다.
* AS 구문을 사용하여 칼럼 명에 별명을 지정할 수 있습니다.
SELECT <컬럼 이름> [AS <별명>].
3. INTO 구문: Select 구문에서 조회한 결과값을 변수에 저장하는 기능을 수행합니다.
INTO 구문엔 다양한 종류가 있습니다. 종류는 다음과 같습니다.
3-1. INTO <변수>: SELECT 문에 기술한 컬럼의 값을 변수에 저장합니다, 여러 개의 데이터가 찾아질 경우 최종 데이터가 변수에 저장됩니다.
SELECT * INTO <변수> FROM <테이블>.
3-2. INTO CORRESPONDING FIELDS OF <변수>: TABLE에 있는 컬럼과 변수명이 동일한 변수에 값을 이동
SELECT * INTO CORRESPONDING FIELDS OF <변수> FROM <테이블>.
3-3. INTO CORRESPONDING FIELDS OF TABLE <인터널 테이블>: TABLE에 있는 필드와 Internal TABLE에 있는 필드가 다를 때 사용
SELECT * INTO CORRESPONDING FIELDS OF TABLE <인터널 테이블> FROM <테이블>.
4. FROM 구문: 데이터를 Select할 대상 테이블(또는 뷰)을 지정합니다. FROM 구문 다음에는 하나의 테이블을 지정하거나 여러 개의 테이블을 JOIN할 수 있습니다.
5. JOIN 구문: 관계형 데이터베이스에서 여러 개의 테이블 값을 동시에 읽어올 땐 JOIN 구문을 사용합니다.
ABAP Open SQL에서 사용할 수 있는 JOIN 구문은 INNER JOIN, LEFT OUTER JOIN, CROSS JOIN이 있습니다.
5-1. INNER JOIN: 조건에 맞는 데이터만 결과로 출력합니다.
5-2. LEFT OUTER JOIN: 왼쪽에 있는 테이블을 특별 테이블로 관리하며, 왼쪽 테이블에 조건에 맞는 결과가 없어도 JOIN 데이터를 결과로 출력합니다.
5-3. CROSS JOIN: 두 테이블을 별도의 조건 없이 JOIN합니다.
6. SELECT 구문을 이용하여 인터널 테이블에 데이터를 채우거나 추가할 땐 APPEND 구문을 사용합니다.
APPEND : 인터널 테이블에 데이터 추가
7. WHERE: WHERE 조건은 Select 조회 수를 줄여주고 사용자가 원하는 데이터를 정확하게 선택할 수 있도록 하는 조건입니다.
WHERE 구문에 사용되는 연산자의 종류는 다음과 같습니다.
=(EQ), <>(NE), <(LT), >(GT), ≤(LE), ≥(GE)
- IN(데이터 오브젝트 1 or 데이터 리터럴 1, 데이터 오브젝트 2 or 데이터 리터럴 2, …)
- BETWEEN A<데이터 오브젝트> AND B<데이터 오브젝트>
- LIKE <데이터 오브젝트>: ‘_’, ‘%’ 기호를 가지고 사용
- IN seltab<select-options>
- IS [NOT]NULL
- AND, OR: 논리 표현
- NOT
8. GROUPING: Aggregate 함수를 사용하기 위해 사용되는 구문입니다. GROUP BY 절 추가하면 필드를 GROUPING할 수 있습니다.
Aggregate 함수의 종류는 다음과 같습니다.
AVG: 평균, COUNT: 개수, MAX: 최대값, MIN: 최솟값, STDDEV: 표준편차, SUM: 합계, VARIANCE: 분산
9. HAVING: 단독으로 사용 불가능하며, GROUP BY 절과 같이 사용해야 합니다. HAVING 절을 사용하여 추가적인 조건을 부여할 수 있습니다.
10. SORT: 데이터를 정렬할 때 사용하는 구문입니다. 정렬 구문에 ORDER BY 구문도 사용하며, ORDER BY 구문 뒤에는 PRIMARY KEY가 올 수 있습니다.
정렬의 종류는 다음과 같습니다.
ASC(오름차순, 기본) / DESC(내림차순)
* PRIMARY KEY: 특정 필드의 데이터 중복을 없애는 역할을 합니다.