Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

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

ANY/SOME/ALL 수량어와 그룹 조건식

설명

ANY/SOME/ALL과 같은 수량어를 포함하는 그룹 조건식은 하나의 데이터 값과 리스트에 포함된 값들의 일부 또는 모든 값에 대해서 비교 연산을 수행한다.  즉, ANY 또는 SOME이 포함된 그룹 조건식은, 왼쪽의 데이터 값이 오른쪽 피연산자로 지정된 리스트 내의 값 중 최소한 하나에 대해 단순 비교 연산자를 만족할 때 TRUE를 반환한다. 한편, ALL이 포함된 그룹 조건식의 경우, 왼쪽 데이터 값이 오른쪽 리스트 내의 모든 값들에 대해 단순 비교 연산자를 만족할 때 TRUE를 반환한다.

만약, ANY 또는 SOME을 포함하는 그룹 조건식에서 NULL을 대상으로 비교 연산을 수행하면 그룹 조건식의 결과로 UNKNOWN 또는 TRUE를 반환하고, ALL을 포함하는 그룹 조건식에서 NULL을 대상으로 비교 연산을 수행하면 UNKNOWN 또는 FALSE를 반환한다.

구문

expression comp_op SOME expression

expression comp_op ANY expression

expression comp_op ALL expression

  • comp_op : 비교 연산자 >, <, =, >=, <=가 들어갈 수 있다.
  • expression (왼쪽) : 단일 값을 가지는 칼럼, 경로 표현식(예: tbl_name.col_name), 상수 값 또는 단일 값을 생성하는 산술 함수가 될 수 있다.
  • expression (오른쪽) : 칼럼 이름, 경로 표현식, 상수 값의 리스트(집합), 부질의가 될 수 있다. 리스트는 중괄호({}) 안에 표현된 집합을 의미하며, 부질의가 사용되면 부질의의 수행 결과 전부에 대해서 expression (왼쪽)와 비교 연산을 수행한다.
예제

--creating a table

 

CREATE TABLE condition_tbl (id int primary key, name char(10), dept_name VARCHAR, salary INT);

INSERT INTO condition_tbl VALUES(1, 'Kim', 'devel', 4000000);

INSERT INTO condition_tbl VALUES(2, 'Moy', 'sales', 3000000);

INSERT INTO condition_tbl VALUES(3, 'Jones', 'sales', 5400000);

INSERT INTO condition_tbl VALUES(4, 'Smith', 'devel', 5500000);

INSERT INTO condition_tbl VALUES(5, 'Kim', 'account', 3800000);

INSERT INTO condition_tbl VALUES(6, 'Smith', 'devel', 2400000);

INSERT INTO condition_tbl VALUES(7, 'Brown', 'account', NULL);

 

--selecting rows where department is sales or devel

SELECT * FROM condition_tbl WHERE dept_name = ANY{'devel','sales'};

           id  name                  dept_name                  salary

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

            1  'Kim       '          'devel'                   4000000

            2  'Moy       '          'sales'                   3000000

            3  'Jones     '          'sales'                   5400000

            4  'Smith     '          'devel'                   5500000

            6  'Smith     '          'devel'                   2400000

 

--selecting rows comparing NULL value in the ALL group conditions

SELECT * FROM condition_tbl WHERE salary > ALL{3000000, 4000000, NULL};

There are no results.

 

--selecting rows comparing NULL value in the ANY group conditions

SELECT * FROM condition_tbl WHERE salary > ANY{3000000, 4000000, NULL};

           id  name                  dept_name                  salary

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

            1  'Kim       '          'devel'                   4000000

            3  'Jones     '          'sales'                   5400000

            4  'Smith     '          'devel'                   5500000

            5  'Kim       '          'account'                 3800000

 

--selecting rows where salary*0.9 is less than those salary in devel department

SELECT * FROM condition_tbl WHERE (

(0.9 * salary) < ALL (SELECT salary FROM condition_tbl

WHERE dept_name = 'devel')

);

           id  name                  dept_name                  salary

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

            6  'Smith     '          'devel'                   2400000