OPEN SQL JOIN ❓
OPEN SQL은 데이터베이스 데이터를 조작할 수 있는 ABAP 명령어로 구성되어 있고, 서로 다른 DBMS 환경에서도 같은 명령어를 사용한다. OPEN SQL은 DML만 사용할 수 있으며 Local Buffer를 사용할 수 있다.
기존의 우리가 알던 MYSQL, Oracle 같은 DBMS는 ABAP에서는 NATIVE SQL이라고 한다.
SELECT < result > :
SELECT 구문은 조회하고자 하는 테이블 필드명을 나열할 수 있으며, 한 건 또는 여러 라인을 조회할 수 있다.
INTO < target > :
SELECT에서 읽어온 데이터를 변수에 저장하며, 이 변수를 ABAP Program에서 사용한다.
FROM < source > :
FROM 구문은 SELECT 할 테이블을 지정해준다. 위치는 INRO 이전/이후 모두 둘 수 있다.
각 구문의 기능에 대한 예제는 따로 정리해서 올리고 오늘은 JOIN에 대해 더 자세하게 정리해보겠습니다.
관계형 데이터베이스에서 여러 개의 테이블 값을 동시에 읽어 올 경우 JOIN을 사용하게 된다. 일반적으로 PK와 FK를 사용하여 JOIN 하는 경우가 대부분이다.
두 테이블 간의 연결 조건은 ON 구문을 사용한다.
TYPES: BEGIN OF t_str,
carrid TYPE sflight-carrid,
carrname TYPE scarr-carrname,
END OF t_str.
DATA: gs_str TYPE t_str.
SELECT SINGLE a~carrid b~carrname
INTO CORRESPONDING FIELDS OF gs_str
FROM sflight AS a
INNER JOIN scarr AS b
ON a~carrid EQ b~carrid
WHERE a~carrid = 'AA'.
WRITE : gs_str-carrid, gs_str-carrname.
항공기 정보를 저장하고 있는 SFLIGHT 테이블에는 항공사 이름이 존재하지 않지만 SCARR 테이블에는 항공사 ID에 해당하는 이름이 저장되어 있다. 이 2개의 테이블을 JOIN하면 항공사 이름을 가져올 수 있다.
INNER JOIN은 교집합이라고 생각하면 편하다.
두 테이블에 모두 데이터가 있어야만 결과가 나온다.
ABAP OPEN SQL에는 LEFT OUTER JOIN만 사용할 수 있다. LEFT OUTER JOIN은 JOIN 연결의 왼쪽에 있는 데이터를 기준으로 SELECT 결과가 도출된다.
TYPES: BEGIN OF t_str,
carrid TYPE sflight-carrid,
carrname TYPE scarr-carrname,
END OF t_str.
DATA: gs_str TYPE t_str.
SELECT SINGLE a~carrid b~carrname
INTO CORRESPONDING FIELDS OF gs_str
FROM sflight AS a
LEFT OUTER JOIN scarr AS b
ON a~carrid EQ b~carrid
WHERE a~carrid = 'AA'.
WRITE : gs_str-carrid, gs_str-carrname.
INNER JOIN 대신 LEFT OUTER JOIN 구문을 쓰면 된다.
SFLIGHT 테이블에는 항공사 이름 필드가 없고
SCARR 테이블에는 항공사 이름 필드가 있는 걸 확인할 수 있다.
위 코드를 실행시키면 항공사 ID와 항공사 이름이 나오는 걸 확인할 수 있다.
추가로 칼럼을 정렬할 수 있는 구문이 있다.
SELECT 결과로 조회된 데이터가 ORDER BY에 기술된 칼럼 기준으로 정렬된다.
ORDER BY PRIMARY KEY
ORDER BY <f1> [ASCENDING|DESCENDING]
ASC : 오름차순
DESC : 내림차순