메뉴 건너뛰기

SAP 한국 커뮤니티



SELECT구문 : SELECT 1.field name

SAP폐인 2007.11.20 16:00 조회 수 : 6762 추천:2

 

------- SELECT구문 ------



SELECT (1.FIELD NAME)  FROM (2.TABLE NAME)
                                      INTO (3.DATA OBJECT)
                                      WHERE (4.FIELD NAME) 비교연산자 (DATA OBJECT/VALUE)


 


그럼 세분화해서 1번의 FIELD NAME에 대해 논의해보자.


 


 위의 자리에 들어갈 수 있는 것은 *(all), single * (1 record), single field (1 field), field field field ( n field)등 대체적으로 4가지로 말할 수 있다. 우선 *표시는 from에서 넘겨주는 모든 것을 가져온다는 의미이며, TABLE형태일 경우 그 테이블의 모든 값을 가져온다. single *은 테이블의 하나의 record를 가져온다는 것을 말한다. field는 하나의 필드를 말하는 것으로 하나의 필드가 가진 모든 값을 가져온다는 뜻이다. 그리고 select 뒤에는 program에서 보여주는 결과값에서 어떤 record를 가리키는 single, distinct, single for update 등의 옵션등을 사용 할 수 있다. 그럼 자세한 내용을 알아보도록 하자.


 


우선적으로 option에 대해서 알아보도록 하자.


1. 옵션중에서 SINGLE은 테이블의 데이터중에서 하나의 Record만을 가져오겠다고 선언하는 것이다. 따라서 SINGLE을 쓰게 되면 안썼을때보다 PERFORMANCE가 올라갈 수 밖에 없을 것이다. 전체를 가져오는 것보다는 하나만 가져오는게 당연히 빠르지 않겠는가.


 


2. 그리고 DISTINCT는 중복되는 값은 삭제하고 가져온다는 것이다. 이 옵션은 우선 DB에서 직접적으로 SORT한 뒤 삭제한 값을 가져오게 되고 이런 작업이 APPLICATION LAYER에서 이루어지지 않기에 주의해서 사용해야 한다.


 


3. 마지막으로 SINGLE FOR UPDATE의 구문은 다음 DB COMMIT전까지 병렬로 처리되어지는 TRANSACTION에 대해서 구문에 대해 UPDATE를 방어할 수 있다는 것이다. 이게 무슨 말인지... 간단히 말하면 SELECT하는 동안 끌고 오는 데이터가 변경되지 않도록 LOCK을 걸어버린다는 뜻이다. 값을 읽어오는 도중에 데이터를 변경하게 되면 안되는 경우 이런 옵션을 사용하게 된다.


 


SELECT 다음에 필드가 오기전에 옵션이 위치하기 때문에 옵션부분을 먼저 설명해놓았습니다. 그럼 본론으로 들어가봅시다.


 


1) *(all)은 말그래도 모든 것을 끌고 온다는 것이다.


 예문)


    SELECT * FROM spfli INTO wa
                   WHERE cityfrom = 'FRANKFURT'

                        AND cityto    = 'NEW YORK'. 
 

2) SINGLE *(1 record)는 1개의 RECORD만 가져온다는 것이다.


 예문)


     SELECT SINGLE * FROM sflight INTO wa 
                              WHERE carrid     = 'LH ' 


                                   AND connid   = '0400'


                                   AND fldate     = '20010228'.


 


3) single field는 하나의 필드값만을 into field에 담는다는 것이다.


 예문)


      DATA: target TYPE spfli-cityto.

      SELECT DISTINCT cityto FROM spfli INTO target
                                        WHERE carrid   = 'LH '      


                                            AND cityfrom = 'FRANKFURT'.


 


 4) field field 여러 필드를 적게 되면 데이터를 받게 되는 into 구문 뒤에도 field field 형태로 넣어주어야 한다.


  예문)


     DATA:  count  TYPE I,


                sum    TYPE P DECIMALS 2,


                avg     TYPE F,
                connid LIKE sbook-connid.


     SELECT SINGLE connid COUNT( * ) SUM( luggweight ) AVG( luggweight ) 
                  INTO (connid, count, sum, avg) 
                  FROM sbook 
                  WHERE carrid   = 'LH '     


                       AND fldate   = '20010228'
                  GROUP BY connid.
      WRITE: / connid, count, sum, avg.


 


 * COUNT( * ) SUM( luggweight ) AVG( luggweight ) 는 Aggregation 표현으로 field에 대한 갯수를 세거나 필드값을 더하고 평균내고 등의 옵션을 주는 표현입니다. 자세한 것은 다음에 이야기 할 것입니다.


 


 5) 변수값을 선언하여 사용할 수 있다. 아래 예에서는 필드를 변수로 선언하여 담은 다음에 그 변수를 가져왔다.


 


예문)


        DATA: wa   TYPE spfli,
                  ftab  TYPE TABLE OF STRING.


        APPEND 'CITYFROM' TO ftab.
        APPEND 'CITYTO'   TO ftab.


        SELECT single (ftab) FROM spfli
                                       INTO CORRESPONDING FIELDS OF wa
                                       WHERE carrid   = 'LH'.


        WRITE: / wa-cityfrom, wa-cityto.