강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

산술 연산자

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

sub_title_icon.gif 산술 연산자
1. BETWEEN 조건식
BETWEEN 조건식은 테이블의 인스턴스가 어떤 값의 범위 내에 있거나, 범위 밖에 있을 때 조회하도록 지정할 수 있다. BETWEEN으로 평가되는 컬럼은 단일 값을 갖는 기본 제공 데이터 타입이어야 한다.
1) 구문
expression [ NOT ] BETWEEN expression AND expression
icon_sub02.gif expression : expression 은 컬럼 이름, 경로 표현식, 상수 값, 산술 표현식, 집계 함수가 될 수 있다. 문자열 표현식인 경우에는 문자의 사전순으로 조건이 평가된다. 예를 들면 조건식 i BETWEEN g AND m 은 복합 조건식 i >= g AND i <= m 과 동일하다.
2) 예제
icon_sub02.gif 다음은 올림픽 종목 중에서 경기 인원이 5명 이상 10명 미만인 종목의 이름과 성별 구분, 경기 인원을 조회하는 예제이다. 이 질의에서 players 값이 지정된 값 사이에 존재하는 20개의 데이터가 event 테이블에서 조회되었다.
SELECT name, gender, players FROM event WHERE players BETWEEN 5 AND 10;
=== <Result of SELECT Command in Line 1> ===
name                 gender                   players
=====================================================
'Synchronized Team'  'W'                         8
'Indoor'             'M'                         6
'Indoor'             'W'                         6
'Water Polo'         'M'                         7
'Water Polo'         'W'                         7
······
20 rows selected.
icon_sub02.gifBETWEEN 절에서 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 1> ===
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) 데이터 타입에 대한 비교는 근사값으로 이루어지므로, 입력된 값은 시스템 내부에서 발생하는 변환에 따라 질의 조작 및 인수 전달 과정에서 변경될 수 있다. 이러한 자릿수의 손실은 출력된 값에서는 원하는 값으로 보인다 하더라도, 부동 소수점 또는 배정도 숫자가 저장되는 실제 값에 영향을 준다.
2) 예제
icon_sub02.gif 다음은 역대 올림픽이 개최된 국가 중, 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 1> ===
host_yearhost_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.
icon_sub02.gif 다음은 올림픽 종목 중에서 경기 인원이 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
icon_sub02.gif expression : expression 에 부질의가 지정되었다면, 부질의 SELECT 문에 의해 만들어진 결과가 평가된다. 만약 부질의가 어떤 결과도 만들지 않는다면, EXISTS는 거짓이 된다.
2) 예제
icon_sub02.gif 다음은 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 1> ===
name              continent
=============================
'Somalia'           'Africa'
'Sri Lanka'         'Asia'
'Sudan'             'Africa'
'Switzerland'       'Europe'
'Surinam'           'Americas'
······
156 rows selected.
4. IN 조건식
IN 조건식은 집합, 다중 집합, 순차 집합에 대해 단일 값이 리스트에 포함되는지를 비교한다.
1) 구문
expression [ NOT ] IN expression
icon_sub02.gif expression(left) : 단일 값을 가지는 컬럼, 경로 표현식, 상수 값 또는 단일 값을 생성하는 산술 함수가 될 수 있다.
icon_sub02.gif expression(right) : 이 expression은 비교를 위한 값의 리스트이어야 한다. expression은 부질의도 될 수 있다. 리스트는 또한 중괄호({}) 또는 괄호(())안에 표현된 명시적인 상수 값의 리스트가 될 수 있다. IN 조건식에서 상수 값이 괄호(())안에 표현된 경우만 ANSI 표준을 따르는 것이다.
2) 예제
icon_sub02.gif 다음은 경기 인원이 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 1> ===
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.
icon_sub02.gif 다음은 금메달을 한 개 이상 획득한 나라에 대해 이름과 그 나라가 속한 대륙을 조회하는 예제이다. 아래의 질의문에는 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 1> ===
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 ]
icon_sub02.gif expression(left) : 첫 번째 expressionSTRING 또는 CHAR(n) 타입을 도메인으로 갖는 컬럼을 나타낸다. 패턴 비교는 컬럼 값의 첫 번째 문자부터 시작된다.
icon_sub02.gif expression(right) : 검색하고자 하는 두 번째 expression은 다음 문자로 구성된 문자열이 될 수 있다.
- 문자열 패턴에 포함된 심벌 "_"는 임의의 하나의 문자를 나타낸다.
- 문자열 패턴에 포함된 심벌 "%"는 빈 문자열을 포함하는 임의의 문자열을 나타낸다.
- 다른 모든 문자는 문자 그 자체를 나타낸다.
- LIKE 조건식에서 확장 문자의 디폴트 값은 존재하지 않는다.
icon_sub02.gifESCAPE char : 만약 검색하고자 하는 문자열 패턴이 실제 문자로서의 "_" 또는 "%" 를 포함하는 경우 ESCAPE 항목이 반드시 지정되어야 한다. ESCAPE 뒤에 지정한 하나의 char 문자가 문자열에 포함된 "_" 또는 "%" 문자 앞에 반드시 선행되어야 한다. 예를 들어 '10%'인 값을 검색할 때 ESCAPE 뒤의 char 문자로 ""가 사용된 경우 문자열은 '10\%'과 같이 표현해야 한다.
2) 예제
icon_sub02.gif 다음은 국가 코드에 '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
icon_sub02.gif expression : NULL 또는 NOT NULL 값인지를 검사하고자 하는 테이블의 컬럼을 나타낸다.
2) 예제
icon_sub02.gif 다음은 마스코트가 있는 올림픽에 대해 개최 연도, 개최국가, 개최도시, 마스코트, 슬로건을 조회하는 예제이다. 다음 질의문은 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_yearhost_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'             'AthenaPhevos'      'Welcome Home'
······
25 rows selected.
7. 수량어
ALL 수량어는 단일 값을 다른 표현식에서 반환된 모든 값에 대해 비교하며, SOME 수량어는 단일 값을 다른 표현식에서 반환된 각각의 값에 대해 비교한다. 단일 값은 표현식에서 반환된 값 중 최소 하나와 맞게 비교되어야 한다. 키워드 ANY는 키워드 SOME 대신 사용되어 같은 질의 결과를 얻을 수 있다.
1) 구문
expression comp_op ALL expression
expression comp_op SOME expression
icon_sub02.gifcomp_op : 비교 연산자 >, <, =, >=, <= 가 들어갈 수 있다.
icon_sub02.gif expression(right) : 두 번째 expression은 컬럼 이름, 경로 표현식, 상수 값의 리스트(집합), 부질의, 산술 연산자가 될 수 있다. 조건식에서 두 번째 expression으로 부질의가 사용될 때, 부질의에 의해 생성되는 모든 결과가 첫 번째 expression에 연관된 단일 값에 대해 비교된다.
2) 예제
icon_sub02.gif 다음은 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.
icon_sub02.gif 다음은 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.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  96 명