강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
기본 SQL문 - WHERE절 조건식
조회 : 5,920  


예제 2
기본 SQL문 - WHERE절 조건식
1. BETWEEN 조건식
BETWEEN 조건식은 테이블의 인스턴스가 어떤 값의 범위 내에 있거나, 범위 밖에 있을 때 조회하도록 지정할 수 있다. BETWEEN으로 평가되는 컬럼은 단일 값을 갖는 기본 제공 데이터 타입이어야 한다.
1) 구문
expression [ NOT ] BETWEEN expression AND expression
expression : expression 은 컬럼 이름, 경로 표현식, 상수 값, 산술 표현식, 집계 함수가 될 수 있다. 문자열 표현식인 경우에는 문자의 사전순으로 조건이 평가된다.
예를 들면 조건식 i BETWEEN g AND m 은 복합 조건식 i >= g AND i <= m 과 동일하다.
2) 예제
다음은 올림픽 종목 중에서 경기 인원이 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.
2. 비교 조건식
비교 조건식 comparison_predicate는 두 표현식을 비교하거나, 하나의 표현식과 부질의를 비교한다. 두 표현식 중 첫 번째 표현식은 주로 두 번째 표현식의 값에 대해 비교할 컬럼 이름 또는 경로 표현식이 사용된다. comparison_predicate에서 사용할 수 있는 비교 연산자는 다음 표와 같다.
부동 소수점(float) 또는 배정도(double) 데이터 타입에 대한 비교는 근사값으로 이루어지므로, 입력된 값은 시스템 내부에서 발생하는 변환에 따라 질의 조작 및 인수 전달 과정에서 변경될 수 있다. 이러한 자릿수의 손실은 출력된 값에서는 원하는 값으로 보인다 하더라도, 부동 소수점 또는 배정도 숫자가 저장되는 실제 값에 영향을 준다.
1) 예제
다음은 역대 올림픽이 개최된 국가 중, United States of America에서 개최된 올림픽 연도와 도시를 조회하는 예제이다. 아래의 질의문은 테이블 olympic에서 컬럼 host_year, host_nation, host_city를 조회한다. WHERE 절에 사용된 조건식은 모든 데이터에 대해 컬럼 host_nation이 'United States of America'를 갖는 데이터를 검색한다. 문자열에 대한 비교는 대문자와 소문자를 구별하고, 문자열은 반드시 작은 따옴표(' ')안에 표현되어야 한다. 문자열에 대한 자세한 사항은 "데이터 타입"을 참조한다.
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.
다음은 올림픽 종목 중에서 경기 인원이 5명 이상 10명 미만인 종목의 이름과 성별구분, 경기 인원을 조회하는 예제이다. 다음 질의문은 event 테이블에서 name, gender, players 컬럼을 조회한다. WHERE 절에는 비교조건식과 논리연산자를 이용하여, 조회하려는 players 값의 범위를 지정한다.
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.
3. EXISTS 조건식
EXISTS 조건식은 부질의의 결과가 공집합인지 아닌지를 판단하는데 사용된다.
1) 구문
EXISTS expression
expression : expression 에 부질의가 지정되었다면, 부질의 SELECT 문에 의해 만들어진 결과가 평가된다. 만약 부질의가 어떤 결과도 만들지 않는다면, EXISTS는 거짓이 된다.
2) 예제
다음은 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.
4. IN 조건식
IN 조건식은 집합, 다중 집합, 순차 집합에 대해 단일 값이 리스트에 포함되는지를 비교한다.
1) 구문
expression [ NOT ] IN expression
expression(left) : 단일 값을 가지는 컬럼, 경로 표현식, 상수 값 또는 단일 값을 생성하는 산술 함수가 될 수 있다.
expression(right) : 이 expression은 비교를 위한 값의 리스트이어야 한다. expression은 부질의도 될 수 있다. 리스트는 또한 중괄호({}) 또는 괄호(())안에 표현된 명시적인 상수 값의 리스트가 될 수 있다. IN 조건식에서 상수 값이 괄호(())안에 표현된 경우만 ANSI 표준을 따르는 것이다.
2) 예제
다음은 경기 인원이 5명 또는 6명인 종목의 이름과 성별 구분, 경기 인원을 조회하는 예제이다. 다음 질의문은 event 테이블에서 players 컬럼 값이 5 또는 6인 데이터를 찾는다. 질의 조건에서 지정된 players의 값 중 하나를 갖는 event 테이블의 데이터가 결과로 조회된다.
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.
다음은 금메달을 한 개 이상 획득한 나라에 대해 이름과 그 나라가 속한 대륙을 조회하는 예제이다. 아래의 질의문에는 IN 조건식에 부질의가 지정되었다. 부질의는 participant 테이블이 가지는 nation_code를 조회하고, 부질의 결과에 포함된 code 값을 갖는 nation 테이블의 데이터를 조회한다.
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.
5. LIKE 조건식
LIKE 조건식은 지정한 텍스트 패턴과 일치하는 테이블의 데이터를 검색한다. STRING 또는 CHAR 도메인을 갖는 컬럼에 대해서만 LIKE 조건식을 이용한 비교가 가능하다. LIKE 조건식은 NCHAR 또는 BIT 도메인에 대해서는 지원하지 않는다.
1) 구문
expression [ NOT ] LIKE expression [ ESCAPE char ]
expression(left) : 첫 번째 expressionSTRING 또는 CHAR(n) 타입을 도메인으로 갖는 컬럼을 나타낸다. 패턴 비교는 컬럼 값의 첫 번째 문자부터 시작된다.
expression(right) : 검색하고자 하는 두 번째 expression은 다음 문자로 구성된 문자열이 될 수 있다.
- 문자열 패턴에 포함된 심벌 "_"는 임의의 하나의 문자를 나타낸다.
- 문자열 패턴에 포함된 심벌 "%"는 빈 문자열을 포함하는 임의의 문자열을 나타낸다.
- 다른 모든 문자는 문자 그 자체를 나타낸다.
- LIKE 조건식에서 확장 문자의 디폴트 값은 존재하지 않는다.
ESCAPE char : 만약 검색하고자 하는 문자열 패턴이 실제 문자로서의 "_" 또는 "%" 를 포함하는 경우 ESCAPE 항목이 반드시 지정되어야 한다. ESCAPE 뒤에 지정한 하나의 char 문자가 문자열에 포함된 "_" 또는 "%" 문자 앞에 반드시 선행되어야 한다. 예를 들어 '10%'인 값을 검색할 때 ESCAPE 뒤의 char 문자로 ""가 사용된 경우 문자열은 '10\%'과 같이 표현해야 한다.
2) 예제
다음은 국가 코드에 '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.
6. NULL 조건식
NULL 조건식은 테이블의 컬럼이 NULL로 지정된 값인지를 검사한다. 또한, 조건식에서 NOT NULL 키워드를 사용함으로써 값을 가지는 컬럼을 조회할 수 있다.
1) 구문
expression IS [ NOT ] NULL
expression : NULL 또는 NOT NULL 값인지를 검사하고자 하는 테이블의 컬럼을 나타낸다.
2) 예제
다음은 마스코트가 있는 올림픽에 대해 개최 연도, 개최국가, 개최도시, 마스코트, 슬로건을 조회하는 예제이다. 다음 질의문은 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.
7. 수량어
ALL 수량어는 단일 값을 다른 표현식에서 반환된 모든 값에 대해 비교하며, SOME 수량어는 단일 값을 다른 표현식에서 반환된 각각의 값에 대해 비교한다. 단일 값은 표현식에서 반환된 값 중 최소 하나와 맞게 비교되어야 한다. 키워드 ANY는 키워드 SOME 대신 사용되어 같은 질의 결과를 얻을 수 있다.
1) 구문
expression comp_op ALL expression
expression comp_op SOME expression
comp_op : 비교 연산자 >, <, =, >=, <= 가 들어갈 수 있다.
expression(right) : 두 번째 expression은 컬럼 이름, 경로 표현식, 상수 값의 리스트(집합), 부질의, 산술 연산자가 될 수 있다. 조건식에서 두 번째 expression으로 부질의가 사용될 때, 부질의에 의해 생성되는 모든 결과가 첫 번째 expression에 연관된 단일 값에 대해 비교된다.
2) 예제
다음은 ALL 수량어에 대한 예제이다. 이 예에서 participant 테이블의 gold 컬럼은 participant 테이블의 silver 컬럼의 모든 값과 비교된다. 질의 결과는 participant 테이블의 한 개 인스턴스 gold 값이 participant 테이블의 모든 인스턴스의 silver 값보다 큰 것을 나타낸다.
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.
다음은 SOME 수량어에 대한 예제이다. participant 테이블의 gold 컬럼은 participant 테이블의 silver 컬럼의 각각의 값과 비교된다. 질의 결과는 participant 테이블의 37개 데이터 gold 값이 participant 테이블의 데이터 중 최소한 한 개의 silver 값보다는 큰 것을 나타낸다.
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.

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1613


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
큐브리드