SELECT *(FIELD) "조회하고자하는 테이블 필드명 나열 / *기호 사용은 전체칼럼 조회(비효율적)
FORM SOURCE "조회할 테이블을 지정 / 위치는 INTO 앞뒤로 다 가능
INTO TARGET "조회에서 읽어온 데이터를 변수에 저장
WHERE CONDITION. "조회하고자 하는 데이터의 조건
SELECT SINGLE CARRNAME FROM SCARR INTO L_CARRNAME WHERE CARRID = 'AA'.
SELECT CARRNAME FROM SCARR INTO TABLE GT_SCARR WHERE CARRID = 'AA'.
DATA : BEGIN OF GS_SCARR,
CARRID LIKE SCARR-CARRID,
CARRNAME LIKE SCARR-CARRNAME,
END OF GS_CARR.
DATA : GT_SCARR LIKE TABLE OF GS_SCARR.
* SELECT ~ ENDSELECT 구문이 반복 수행될 때마다
* Application Server와 Database간의 인터페이스 수행
SELECT CARRID CARRNAME INTO GS_SCARR FORM SCARR WHERE CARRID = 'AA'.
WRITE :/ GS_SCARR-CARRID, GS_SCARR-CARRNAME.
ENDSELECT.
* WHERE 조건을 통한 SELECT Single Line
SELECT SINGLE CARRID CARRNAME INTO ( GS_SCARR-CARRID, GS_SCARR-CARRNAME )
"INTO구문 뒤 두 개 이상의 TARGET 작성시 괄호 필수
FORM SCARR
WHERE CARRID = 'AA'.
WRITE :/ GS_SCARR-CARRID, GS_SCARR-CARRNAME.
여러 라인을 조회할 경우 인터널테이블 사용
SELECT CARRID CARRNAME FROM SCARR
INTO TABLE GT_SCARR "순서대로 인터널테이블에 넣기
WHERE CARRID = 'AA'.
LOOP AT GT_SCARR INTO GS_SCARR.
WRITE :/ GS_SCARR-CARRID, GS_SCARR-CARRNAME.
ENDLOOP.
SELECT CARRID CARRNAME FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR "순서상관없이 필드명에 맞게 넣기
WHERE CARRID = 'AA'.
LOOP AT GT_SCARR INTO GS_SCARR.
WRITE :/ GS_SCARR-CARRID, GS_SCARR-CARRNAME.
ENDLOOP.
* 1차 SELECT (INTO)
SELECT CARRID CARRNAME FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR
WHERE CARRID = 'AA'.
* 2차 SELECT (APPENDING)
SELECT CARRID CARRNAME FROM SCARR
APPENDING CORRESPONDING FIELDS OF TABLE GT_SCARR
WHERE CARRID = 'AB'.
SELECT * FROM TABLE WHERE FIELD BETWEEN A AND B.
SELECT CARRID CARRNAME FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR
WHERE CARRID BETWEEN 'AA' AND 'AB'.
SELECT * FROM TABLE WHERE FIELD LIKE 'A%'.
SELECT CARRID CARRNAME FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR
WHERE CARRID LIKE 'A%'.
SELECT * FROM TABLE WHERE FIELD IN 조건.
SELECT CARRID CARRNAME FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR
WHERE CARRID IN ( 'AA' , 'AC' ).
RANGES GR_NAME FOR TYPE FEFERENCE. "선언
DATA : BEGIN OF GR_NAME OCCURS 0, "자동으로 생성 -> 직접 적지않음
SIGN TYPE DDSIGN,
OPTION TYPE DDOPTION,
LOW LIKE TYPE Reference,
HIGH LIKE TYPE Reference,
END OF GR_NAME.
RANGES GT_SCARR FOR SCARR-CARRID.
DATA : BEGIN OF GS_SCARR,
ZCHECK TYPE C,
CARRID LIKE SCARR-CARRID,
CARRNAME LIKE SCARR-CARRNAME,
END OF GS_CARR.
DATA : GT_SCARR LIKE TABLE OF GS_SCARR.
GR_SCARR-SIGN = 'I'.
GR_SCARR-OPTION = 'EQ'.
GR_SCARR-LOW = 'AA'.
APPEND GR_SCARR.
GR_SCARR-LOW = 'AC'.
APPEND GR_SCARR.
SELECT CARRID CARRNAME FROM SCARR
INTO CORRESPONDING FIELDS OF TABLE GT_SCARR
WHERE CARRID IN GR_SCARR. "IN ( 'AA', 'AC') 와 같은 결과 값 출력
Aggregate함수를 사용하려면 SELECT구문에 GROUP BY를 기술
DATA : BEGIN OF GS_SFLIGHT,
CARRID TYPE SPLIGHT-CARRID,
CONNID TYPE SPLIGHT-CONNID,
GV_SUM TYPE I,
END OF GS_SPLIGHT.
DATA : GT_SFLIGHT LIKE TABLE OF GS_SFLIGHT.
SELECT CARRID CONNID AVG( PRICE ) AS GV_SUM
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FROM SFLIGHT GROUP BY CARRID CONNID.
GROUP BY로 조회한 SELECT 구문에 그룹의 조건 추가
SELECT CARRID CONNID AVG( PRICE ) AS GV_SUM
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FROM SFLIGHT GROUP BY CARRID CONNID
HAVING AVG( PRICE ) > 1000.
SELECT 결과로 조회된 데이터가 ORDER BY에 기술된 칼럼 기준으로 정렬
SELECT CARRID CONNID AVG( PRICE ) AS GV_SUM
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FROM SFLIGHT GROUP BY CARRID CONNID
HAVING AVG( PRICE ) > 1000
ORDER BY CARRID. "CARRID를 기준으로 오름차순
SUBQUERY는 SELECT구문의 WHERE조건에 또 다른 SELECT구문을 추가하여 값을 제한
SELECT CARRID CARRNAME FROM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
WHERE CARRID IN ( SELECT CARRID
FROM SPFLI
WHERE CARRID = SFLIGHT~CARRID
AND CONNIF = SFLIGHT~CONNID )
AND CARRID = 'AA' AND CONNID LIKE '00%'.
관계형 데이터베이스에서 여러 개의 테이블 값을 동시에 읽어올 경우 JOIN을 사용
두 테이블 간의 연결 조건은 ON을 사용
SELECT FIELD1 FROM TABLE1
INNER JOIN TABLE2 AS ALIAS1
ON [COND] [OPTIONS].
SELECT A~CARRID "가져오는 필드가 어느 테이블것인지 지정
A~CONNID
B~CARRNAME
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FROM SFLIGHT AS A "별칭 지정
INNER JOIN SCARR AS B
ON A~CARRID = B~CARRID WHERE A~CARRID = 'AA. "WHERE와 ON이 함께있으면 WHERE 먼저
SELECT FIELD1 FROM TABLE1
OUTER JOIN TABLE2 AS ALIAS1
ON [COND] [OPTIONS].
SELECT A~CARRID "가져오는 필드가 어느 테이블것인지 지정
A~CONNID
B~CARRNAME
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FROM SFLIGHT AS A "별칭 지정
LEFT OUTER JOIN SCARR AS B
ON A~CARRID = B~CARRID WHERE A~CARRID = 'AA. "WHERE와 ON이 함께있으면 WHERE 먼저
인터널테이블과 데이터베이스의 테이블을 JOIN하는 개념과 유사.
즉, DB테이블에서 먼저 데이터를 SELECT한 후 그 결과의 데이터 내에서 다시 한번 조회가 필요할 시 사용
SELECT FIELD1 FROM TABLE1 INTO TABLE ITAB1
FOR ALL ENTRIES IN ITAB2 WHERE [COND].
SELECT CARRID CONNID FORM SPFLI
INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI
WHERE CARRID LIKE 'A%'.
SELECT CARRID CONNID FLDATE PRICE FORM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FOR ALL ENTRIES IN GT_SPFLI
WHERE CARRID = GT_SPFLI-CARRID
AND CONNID = GT_SPFLI-CONNID.
SELECT CARRID CONNID FORM SPFLI
INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI
WHERE CARRID LIKE 'A%'.
IF GT_SPFLI IS NOT INITIAL. "GT_SPFLI가 NULL이면 FULL SCAN으로 MEMORY DUMP
SELECT CARRID CONNID FLDATE PRICE FORM SFLIGHT
INTO CORRESPONDING FIELDS OF TABLE GT_SFLIGHT
FOR ALL ENTRIES IN GT_SPFLI
WHERE CARRID = GT_SPFLI-CARRID "LIKE, BETWEEN, IN 불가능
AND CONNID = GT_SPFLI-CONNID.
ENDIF.