Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 

부질의

부질의는 질의 내에서 SELECT 절이나 WHERE 절 등 표현식이 가능한 모든 곳에서 사용할 수 있다. 부질의가 표현식으로 사용될 경우에는 반드시 단일 컬럼을 반환해야 하지만, 표현식이 아닌 경우에는 하나 이상의 행이 반환될 수 있다. 부질의가 사용되는 경우에 따라 단일 행 부질의와 다중 행 부질의로 나뉠 수 있다.

단일 행 부질의
설명

단일 행 부질의는 하나의 컬럼을 갖는 하나의 행을 만든다. 부질의에 의해 행이 반환되지 않을 경우에 부질의 표현식은 NULL을 가진다. 만약 부질의가 두 개 이상의 행을 반환하도록 만들어진 경우에는 에러가 발생된다.

예제

다음은 역대 기록 테이블을 조회하는데, 신기록을 수립한 올림픽이 개최된 국가도 함께 조회하는 예제이다. 이 예제는 표현식으로 사용된 단일 행 부질의를 보여준다. 이 예에서 부질의는 olympic 테이블에서 host_year 컬럼 값이 history 테이블의 host_year 컬럼 값과 같은 행에 대해 host_nation 값을 반환한다. 조건에 일치되는 값이 없을 경우 부질의 결과는 NULL이 표시된다.

SELECT h.host_year, (SELECT host_nation FROM olympic o WHERE o.host_year=h.host_year),

h.event_code, h.score, h.unit from history h;    

    host_year (SELECT host_nation FROM olympic o WHERE o.host_year=h.host_year)   event_code  score                 unit

============================================================================================

         2004  'Greece'                    20283  '07:53.0'             'time'

         2004  'Greece'                    20283  '07:53.0'             'time'

         2004  'Greece'                    20281  '03:57.0'             'time'

         2004  'Greece'                    20281  '03:57.0'             'time'

         2004  'Greece'                    20281  '03:57.0'             'time'

         2004  'Greece'                    20281  '03:57.0'             'time'

         2004  'Greece'                    20326  '210'                 'kg'

         2000  'Australia'                 20328  '225'                 'kg'

         2004  'Greece'                    20331  '237.5'               'kg'

...

다중 행 부질의
설명

다중 행 부질의는 지정된 컬럼을 갖는 하나 이상의 행을 반환한다. 다중 행 부질의 결과는 적절한 키워드(SET, MULTISET, LIST, SEQUENCE)를 사용하여 집합, 다중집합, 순차집합을 만드는데 사용될 수 있다.

예제

다음은 국가 테이블에서 국가 이름과 수도 이름을 조회하되, 올림픽을 개최한 국가는 개최도시를 리스트로 묶어 함께 조회하는 예제이다. 이 예제 같은 경우는 부질의 결과를 이용하여 olympic 테이블의 host_city 컬럼 값으로 리스트를 만든다. 이 질의는 nation 테이블에 대해 namecapital 값과 host_nation 값을 포함하는 olympic 테이블의 host_city 값에 대한 집합을 반환한다. 질의 결과에서 name 값이 공집합인 경우는 제외되고, name과 같은 값을 갖는 olympic 테이블이 존재하지 않는 경우에는 공집합이 반환된다.

SELECT name, capital, list(SELECT host_city FROM olympic WHERE host_nation = name) FROM nation;

  name                  capital               sequence((SELECT host_city FROM olympic WHERE host_nation=name))

==================================================================

  'Somalia'             'Mogadishu'           {}

  'Sri Lanka'           'Sri Jayewardenepura Kotte'  {}

  'Sao Tome & Principe'  'Sao Tome'            {}

...

  'U.S.S.R.'            'Moscow'              {'Moscow'}

  'Uruguay'             'Montevideo'          {}

  'United States of America'  'Washington.D.C'      {'Atlanta ', 'St. Louis', 'Los Angeles', 'Los Angeles'}

  'Uzbekistan'          'Tashkent'            {}

  'Vanuatu'             'Port Vila'           {}

이런 형태의 다중 행 부질의 표현식은 집합 값을 갖는 표현식이 허용되는 모든 곳에서 사용할 수 있다. 단, 클래스 속성 정의에서 DEFAULT 명세 부분과 같이 집합 상수 값이 요구되는 곳에는 사용될 수 없다.

부질의 내에서 ORDER BY 절을 명시적으로 사용하지 않는 경우 다중 행 부질의 결과의 순서는 지정되지 않으므로, 순차 집합을 생성하는 다중 행 부질의는 ORDER BY 절을 사용하여 결과의 순서를 지정해야 한다.