WHERE 절

일반
설명

질의에서 컬럼은 조건에 따라 처리될 수 있다. WHERE 절은 조회하려는 데이터의 조건을 명시한다.

구문

WHERE search_condition

search_condition :
comparison_predicate
between_predicate
in_predicate
like_predicate
null_predicate
quantified predicate
exists_predicate
set_predicate

WHERE 절은 search_condition 또는 질의에서 조회되는 데이터를 결정하는 조건식을 지정한다. 조건식이 참인 데이터만 질의 결과로 조회된다(NULL 값은 알 수 없는 값으로서 질의 결과로 조회되지 않는다).

복수의 조건은 논리연산자 AND, OR를 사용할 수 있다. AND가 지정된 경우 모든 조건이 참이어야 하고, OR로 지정된 경우에는 하나의 조건만 참이어도 된다. 만약 키워드 NOT이 조건 앞에 붙는다면 조건은 반대의 의미를 갖는다. 논리 연산이 평가 되는 순서는 다음 표와 같다.

우선순위

연산자

기능

1

()

괄호 내에 포함된 논리 표현식은 첫 번째로 평가된다.

2

NOT

논리 표현식의 결과를 부정한다.

3

AND

논리 표현식에 포함된 모든 조건이 참이어야 한다.

4

OR

논리 표현식에 포함된 조건 중 하나의 조건은 참이어야 한다.

BETWEEN 조건식
설명

BETWEEN 조건식은 테이블의 인스턴스가 어떤 값의 범위 내에 있거나, 범위 밖에 있을 때 조회하도록 지정할 수 있다. BETWEEN으로 평가되는 컬럼은 단일 값을 갖는 기본 제공 데이터 타입이어야 한다.

구문

expression [ NOT ] BETWEEN expression AND expression

예제

다음은 올림픽 종목 중에서 경기 인원이 5명 이상 10명 미만인 종목의 이름과 성별 구분, 경기 인원을 조회하는 예제이다. 이 질의에서 players 값이 지정된 값 사이에 존재하는 20개의 데이터가 event 테이블에서 조회되었다.

SELECT name, gender, players FROM event WHERE players BETWEEN 5 AND 10;
=== <Result of SELECT Command in Line 2> ===
  name                  gender                    players
=========================================================
  'Synchronized Team'   'W'                             8
  'Indoor'              'M'                             6
  'Indoor'              'W'                             6
  'Water Polo'          'M'                             7
  'Water Polo'          'W'                             7
...
20 rows selected.

BETWEEN 절에서 NOT을 사용할 수도 있다. NOT BETWEEN을 사용하면, 지정된 범위 밖에 해당하는 데이터를 조회한다. 만약 eventplayers 값이 정확히 5이거나 10인 데이터는 NOT BETWEEN의 질의 결과에 포함되지 않는다.

SELECT name, gender, players FROM event WHERE players NOT BETWEEN 5 AND 10;
=== <Result of SELECT Command in Line 2> ===
  name                  gender                    players
=========================================================
  'Freestyle 48kg'      'W'                             1
  'Freestyle -48kg'     'M'                             1
  'Freestyle 52kg'      'M'                             1
  'Freestyle -52kg'     'M'                             1
  'Freestyle 54kg'      'M'                             1
 ...
402 rows selected.

비교 조건식
설명

비교 조건식 comparison_predicate는 두 표현식을 비교하거나, 하나의 표현식과 부질의를 비교한다. 두 표현식 중 첫 번째 표현식은 주로 두 번째 표현식의 값에 대해 비교할 컬럼 이름 또는 경로 표현식이 사용된다. comparison_predicate에서 사용할 수 있는 비교 연산자는 다음 표와 같다.

비교 연산자

의미

=

같다

<>

다르다

>

크다

<

작다

>=

크거나 같다

<=

작거나 같다

부동 소수점(float) 또는 배정도(double) 데이터 타입에 대한 비교는 근사값으로 이루어지므로, 입력된 값은 시스템 내부에서 발생하는 변환에 따라 질의 조작 및 인수 전달 과정에서 변경될 수 있다. 이러한 자릿수의 손실은 출력된 값에서는 원하는 값으로 보인다 하더라도, 부동 소수점 또는 배정도 숫자가 저장되는 실제 값에 영향을 준다.

예제

SELECT host_year, host_nation, host_city FROM olympic WHERE host_nation='United States of America';
=== <Result of SELECT Command in Line 2> ===
    host_year  host_nation           host_city
=========================================================
         1996  'United States of America'  'Atlanta '
         1904  'United States of America'  'St. Louis'
         1984  'United States of America'  'Los Angeles'
         1932  'United States of America'  'Los Angeles'   
4 rows selected.

SELECT sports, name, gender, players FROM event WHERE players > 4 AND players < 10;
=== <Result of SELECT Command in Line 1> ===
  sports                name                  gender                    players
===============================================================================
'Swimming'            'Synchronized Team'          'W'                         8
  'Volleyball'            'Indoor'                       'M'                        6
  'Volleyball'            'Indoor'                       'W'                        6
  'Water Polo'           'Water Polo'                   'M'                        7
  'Water Polo'          'Water Polo'                   'W'                        7
...    
20 rows selected.

EXISTS 조건식
설명

EXISTS 조건식은 부질의의 결과가 공집합인지 아닌지를 판단하는데 사용된다.

구문

EXISTS expression

예제

다음은 1988년 올림픽에 참가한 국가에 대해 국가 이름과 그 국가가 속한 대륙이름을 조회하는 예제이다. EXISTS 조건식은 부질의에 대해 값이 존재하는지를 검사하는데 사용된다. 해당 연도에 참가하는 국가가 존재하면 이는 부질의의 결과가 존재하는 것이며, 이에 따라 156개의 국가가 대륙정보와 함께 출력된다.

SELECT n.name, n.continent FROM nation n
WHERE EXISTS (SELECT * FROM participant p WHERE p.host_year=1988 AND p.nation_code=n.code);
=== <Result of SELECT Command in Line 2> ===
  name                  continent
============================================
  'Somalia'             'Africa'
  'Sri Lanka'           'Asia'
  'Sudan'               'Africa'
  'Switzerland'         'Europe'
  'Surinam'             'Americas'
...
156 rows selected.

IN 조건식
설명

IN 조건식은 집합, 다중 집합, 순차 집합에 대해 단일 값이 리스트에 포함되는지를 비교한다.

구문

expression [ NOT ] IN expression

예제

SELECT name, gender, players FROM event WHERE players IN (5, 6);
=== <Result of SELECT Command in Line 2> ===
  name                  gender                    players
=========================================================
  'Indoor'              'M'                             6
  'Indoor'              'W'                             6
  'Hockey'              'M'                             6
  'Hockey'              'W'                             6
  'Rhythmic Group Competition'  'W'                     6
  'Rhythmic Team'       'M'                             6
  'Rhythmic Team'       'W'                             6
  'Basketball'          'M'                             5
  'Basketball'          'W'                             5    
9 rows selected.

SELECT continent, name FROM nation WHERE code IN (SELECT nation_code FROM participant WHERE gold>0);
=== <Result of SELECT Command in Line 2> ===
  continent             name
============================================
  'Africa'              'Algeria'
  'Americas'            'Argentina'
  'Europe'              'Armenia'
  'Oceania'             'Australia'
  'Europe'              'Austria'...
81 rows selected.

LIKE 조건식
설명

LIKE 조건식은 지정한 텍스트 패턴과 일치하는 테이블의 데이터를 검색한다. STRING 또는 CHAR 도메인을 갖는 컬럼에 대해서만 LIKE 조건식을 이용한 비교가 가능하다. LIKE 조건식은 NCHAR 또는 BIT 도메인에 대해서는 지원하지 않는다.

구문

expression [ NOT ] LIKE expression [ ESCAPE char]

예제

다음은 국가 코드에 'K'를 포함하는 국가의 코드와 이름을 조회하는 예제이다. nation 테이블로부터 문자열 패턴이 '%K_'인 code를 검색한다. 이 경우 문자열의 첫 번째 위치에는 임의의 문자열이 될 수 있고, 다음 문자는 반드시 'K'여야 하며, 나머지 부분은 임의의 하나의 문자를 포함할 수 있다. 여기서 code는 3음절로 구성되어 있기 때문에, 결과값을 보면 K가 두번째 위치한 code만이 조회된다.

SELECT code, name FROM nation WHERE code LIKE '%K_';    
=== <Result of SELECT Command in Line 1> ===
  code                  name
============================================
  'TKM'                 'Turmenistan'
  'UKR'                 'Ukraine'
  'SKN'                 'Saint Kitts & Nevis'
  'MKD'                 'Former Yugoslav Republic of Macedonia'
  'HKG'                 'Hong Kong'    
5 rows selected.

NULL 조건식
설명

NULL 조건식은 테이블의 컬럼이 NULL로 지정된 값인지를 검사한다. 또한, 조건식에서 NOT NULL 키워드를 사용함으로써 값을 가지는 컬럼을 조회할 수 있다.

구문

expression IS [ NOT ] NULL

예제

다음은 마스코트가 있는 올림픽에 대해 개최 연도, 개최국가, 개최도시, 마스코트, 슬로건을 조회하는 예제이다. 다음 질의문은 olympic 테이블로부터 mascot 컬럼이 NULL이 아닌 값을 갖는 인스턴스에 대해 지정한 컬럼을 조회한다.

SELECT host_year, host_nation, host_city, mascot, slogan FROM olympic WHERE mascot is NOT NULL;    
=== <Result of SELECT Command in Line 1> ===
    host_year  host_nation           host_city             mascot                slogan
=====================================================================================================
         1988  'Korea'               'Seoul'               'HODORI'              'Harmony and progress'
         1992  'Spain'               'Barcelona '          'Cobi'                'Friends Forever '
         1996  'United States of America'  'Atlanta '            'Izzy'                'The Celebration of the Century '
         2000  'Australia'           'Sydney '             'Olly Syd Millie '    'Share the Spirit'
         1976  'Canada'              'Montreal'            'Amik'                NULL
         1972  'Germany'             'Munich'              'Waldi'               NULL
         1980  'U.S.S.R.'            'Moscow'              'Misha'               NULL
         1984  'United States of America'  'Los Angeles'         'Sam'                 'Play part in History'
         2004  'Greece'              'Athens '             'Athena  Phevos'      'Welcome Home'
...    
25 rows selected.

수량어
설명

ALL 수량어는 단일 값을 다른 표현식에서 반환된 모든 값에 대해 비교하며, SOME 수량어는 단일 값을 다른 표현식에서 반환된 각각의 값에 대해 비교한다. 단일 값은 표현식에서 반환된 값 중 최소 하나와 맞게 비교되어야 한다. 키워드 ANY는 키워드 SOME 대신 사용되어 같은 질의 결과를 얻을 수 있다.

구문

expression comp_op ALL expression
expression comp_op SOME expression

예제

SELECT nation_code, gold, silver FROM participant
WHERE gold > ALL (SELECT silver FROM participant) AND host_year=1992;
=== <Result of SELECT Command in Line 1> ===
  nation_code                  gold       silver
================================================
  'EUN'                          45           38    
1 rows selected.

SELECT nation_code, gold, silver FROM participant
WHERE gold > SOME(SELECT silver FROM participant) AND host_year=1992;    
=== <Result of SELECT Command in Line 1> ===
  nation_code                  gold       silver
================================================
  'ITA'                           6            5
  'GBR'                           5            3
  'ROU'                           4            6
  'TCH'                           4            2
  'PRK'                           4            0
...
37 rows selected.