들어가기 전에
이 포스팅은 오라클로 배우는 데이터베이스 입문(이지훈 저)을 읽으면서 기억하고자 하는 내용 및 추가적으로 알아본 내용을 담았습니다. 책 전체 내용을 보시고 싶으신 분은 책을 구매하시어 읽어보시길 바랍니다.
산술 연산자
산술 연산자란, 더하기(+
)/빼기(-
)/나누기(/
)/곱하기(*
)와 같은 연산자입니다.
WHERE절과 같은 조건식을 나타낼 때나 SELECT절에서 특정 연산이 들어간 값을 구하고자 할 때 사용합니다.
비교 연산자
연산자 | 사용법 | 설명 |
---|---|---|
> |
A > B |
A 값이 B를 초과할 경우 참 |
< |
A < B |
A 값이 B 미만일 때 참 |
>= |
A >= B |
A 값이 B 이상일 때 참 |
<= |
A <= B |
A 갑이 B 이하일 때 참 |
= |
A = B |
A 값이 B 값과 같을 경우 참 |
!= |
A != B |
A 값과 B 값이 다를 경우 참 |
<> |
A <> B |
|
^= |
A ^= B |
비교 연산자는 숫자 뿐 아니라 문자열 비교에도 사용되며, 예시는 아래와 같습니다.
- 비교 문자열의 문자가 여러 개인 경우(오른쪽 사진), 첫 문자부터 비교를 진행합니다.
- FORG와 FORD를 비교했을 때, 세번째 문자까지는 동일하나 G가 D보다 큰 문자이기 때문에 결과에 FORD가 포함되어 출력됩니다.
논리 부정 연산자(NOT)
NOT
은 비교 연산자는 아니지만, !=
, <>
, ^=
와 동일한 결과를 출력할 때 사용하는 연산자입니다.
- 위 예시를 통해
!=
사용한 결과와NOT
과=
을 사용한 결과가 동일한 것을 확인할 수 있습니다. NOT
연산자의 경우 주로IN
,BETWEEN
,IS NULL
연산자와 함께 복합적으로 사용되는 경우가 많으며 대소/등가 비교 연산자에 직접 사용하는 경우는 드뭅니다.
IN 연산자
=
연산자는 특정 열 데이터 값을 갖는 레코드만 출력하고자 할 때 사용합니다. 만약, 특정 열 데이터 값이 A이거나 B이거나 C인 경우의 레코드를 출력하고자 한다면 =
연산자와 OR
연산자를 이용해야 합니다. 이렇게 특정 열에 대해 주어진 값들 중 하나를 갖는 경우들에 대해 모두 출력하고자 하면 IN
연산자를 사용할 수 있습니다.
SELECT DISTINCT [조회하고자 하는 column 이름1], [조회하고자 하는 column 이름2] ...
FROM [조회하고자 하는 table 이름]
WHERE 열 이름 IN (데이터1, 데이터2, ...);
구문 | 설명 | 넣을 내용 |
---|---|---|
IN | 특정 열에 대해 주어진 값들 중 하나를 갖는 경우들에 대해 모두 출력하고자 할 때 사용 | 조회할 열의 데이터 목록 |
- 위 예시는, JOB이 CLERT, SALESMAN, ANALYST 중 하나에 해당하는 레코드들을 조회하는 것입니다.
앞서 살펴본 NOT
연산자는 IN
연산자와 함께 사용될 수 있으며, 아래 예시는 JOB이 CLERT, SALESMAN, ANALYST가 아닌 경우의 레코드들을 조회하는 것입니다.
BETWEEN A AND B 연산자
예를 들어, 급여가 1500 이상 2450 이하인 사원 데이터를 조회할 때 BETWEEN A AND B
연산자를 사용합니다. <=
, >=
연산자와 AND
연산자를 이용해서 동일한 결과를 낼 수 있지만, BETWEEN A AND B
를 사용하면 더 간단하게 표현이 가능합니다.
SELECT DISTINCT [조회하고자 하는 column 이름1], [조회하고자 하는 column 이름2] ...
FROM [조회하고자 하는 table 이름]
WHERE 열 이름 BETWEEN 최솟값 AND 최댓값;
구문 | 설명 | 넣을 내용 |
---|---|---|
BETWEEM A AND B | A(최솟값)와 B(최댓값) 범위 내의 데이터를 조회할 때 사용 (A와 B는 결과값에 포함됩니다 - 이상/이하 비교) | 열 이름과 A(최솟값), B(최댓값) |
LIKE 연산자와 와일드 카드(wild card)
LIKE
연산자는 일부 문자열이 포함된 데이터를 조회할 때 사용합니다. LIKE
연산자는 주로 와일드 카드를 포함하여 조회 조건을 설정합니다.
- 실무에서는 많은 레코드가 존재하는 테이블을 여러 개 조합하여 데이터를 조회하는 경우가 많습니다. 이럴 때 LIKE 연산자와 와일드 카드는 어떻게 사용하냐에 따라 속도 차이가 날 수 있습니다.
- 따라서, LIKE 연산자와 와일드 카드를 사용할 때에는 조회 성능 이슈에 영향이 없는지 고려하면서 작성해야 합니다.
와일드 카드는 특정 문자 또는 문자열을 대체하거나 문자열 데이터의 패턴을 표기하는 특수 문자입니다. LIKE
연산자와 함께 사용할 수 있는 와일드 카드는 다음과 같습니다.
종류 | 의미 | 사용 예시 |
---|---|---|
_ |
어떤 값이든 상관없이 한 개의 문자 데이터 의미 | LIKE '_A%' : A 앞에 문자가 하나 붙은 모든 문자열 |
% |
길이와 상관없이(문자 0개인 경우 포함) 모든 문자 데이터 의미 | LIKE 'A%' : A로 시작하는 모든 문자열 |
앞서 살펴본 NOT
연산자는 LIKE
연산자와도 함께 사용할 수 있으며, NOT LIKE
구문을 통해 특정 값이 아닌 경우에 대해 조회할 수 있습니다. 아래 예시는 NOT LIKE
구문 예시로, A로 시작하지 않는 ENAM
을 오름차순으로 정렬한 것입니다.
와일드 카드 문자가 데이터 일부가 되는 경우
만약 찾고자 하는 문자열가 A_A
로 시작되는 문자열이라면 아래와 같이 ESCAPE
절을 이용해 _
또는 %
를 와일드 카드가 아닌 데이터로써 볼 수 있습니다.
SELECT *
FROM TEST_TABLE
WHERE TEST_COLUMN LIKE 'A\_A%' ESCAPE '\';
ESCAPE
절을 통해\
가 붙은_
를 일반 데이터로 인식되도록 하였으며,ESCAPE
문자로 다른 문자를 지정할 수 있습니다.- 실무에서 자주 사용되는 방식은 아닙니다.
IS NULL 연산자
NULL
NULL
이란, 데이터 값이 완전히 비어 있는 상태를 의미하며, 값 자체가 존재하지 않은 상태로 0
과는 다른 의미를 가집니다. NULL
의 의미는 아래 표에서 확인 가능합니다.
의미 | 예 |
---|---|
값이 존재하지 않음 | 면허가 없는 사람의 면허 번호 |
해당 사항 없음 | 미혼인 고객의 결혼기념일 |
노출할 수 없는 값 | 고객 비밀번호 찾기 같은 열람이 제한되어야 하는 특정 개인 정보 |
확정되지 않은 값 | 올 해 태어난 아이의 출신 초등학교 |
NULL
은 위 표에 적혀 있는 것처럼 값 자체가 존재하지 않아 어떤 값인지 모르기 때문에 비교가 되지 않습니다.
NULL
은 산술 연산자와 비교 연산자로 비교해도 결과가NULL
이기 때문에WHERE
절의 조건식의 결과가 참인지 거짓인지 알 수 없어 출력 대상에서 제외됩니다.- 예를 들어, 특정 컬럼의 값이
NULL
인 상태일 때에는 해당 컬럼의 값에 2를 곱한다면 그대로 NULL이 됩니다.
만약, 특정 컬럼의 값이 NULL
인지를 확인하고 싶다면 IS NULL
연산자를 사용해야 합니다. 아래 쿼리 결과를 보면, 본래 의도한 대로 COMM
이 NULL
(값이 존재하지 않는 상태)인 경우 데이터를 출력하기 위해 IS NULL
을 사용한 것을 볼 수 있습니다.
집합 연산자
SQL문에서는 SELECT
문을 통해 조회한 결과를 집합과 같이 다룰 수 있는 집합 연산자를 사용할 수 있습니다. 집합 연산자는 크게 4가지로 나뉘며, 종류는 아래와 같습니다.
종류 | 설명 |
---|---|
UNION | 연결된 SELECT문의 결과 값을 합집합으로 묶어줍니다. 결과 값의 중복은 제거됩니다. |
UNION ALL | 연결된 SELECT문의 결과 값을 합집합으로 묶어줍니다. 중복된 결과 값은 제거 없이 모두 출력됩니다. |
MINUS | 먼저 작성한 SELECT문의 결과 값에서 다음 SELECT문의 결과 값을 차집합 처리합니다. 즉, 먼저 작성한 SELECT문의 결과 값 중 다음 SELECT문에 존재하지 않는 데이터만 출력됩니다. |
INTERSECT | 먼저 작성한 SELECT문과 다음 SELECT문의 결과 값이 같은 데이터만 출력됩니다. 교집합과 같은 의미입니다. |
집합 연산자로 두 개의 SELECT
문의 결과 값을 연결할 때는 각 SELECT
문이 출력하려는 열 개수와 각 열의 자료형이 각각 일치해야 합니다. 아래의 예시는 집합 연산자를 사용하지 못하는 예시입니다.
연산자 우선순위
우선순위 | 연산자 | 설명 |
↑ 높음 낮음 ↓ |
*, / | 산술 연산자 곱하기, 나누기 |
+, - | 산술 연산자 더하기, 빼기 | |
=, !=, ^=, <>, >, <, >=, <= | 대소 비교 연산자 | |
IS (NOT) NULL, (NOT) LIKE, (NOT) IN | (그 외) 비교 연산자 | |
BETWEEN A AND B | BETWEEN 연산자 | |
NOT | 논리 부정 연산자 NOT | |
AND | 논리 연산자 AND | |
OR | 논리 연산자 OR |
- 수학에서와 마찬가지로, 먼저 수행해야 하는 연산식을 소괄호(())로 묶어 주면, 연산자의 기본 우선순위와는 별개로 괄호 안의 연산식을 먼저 수행합니다.
참고 자료
- 오라클로 배우는 데이터베이스 입문(이지훈 저)
'DB > Oracle' 카테고리의 다른 글
[Oracle] Oracle Function(오라클 함수) - 숫자 함수 (0) | 2022.05.07 |
---|---|
[Oracle] Oracle Function(오라클 함수) - 문자 함수 (0) | 2022.05.07 |
[Oracle] SELECT에 대해 알아보기 (0) | 2022.05.06 |
[Oracle, macOS] Docker를 이용한 Oracle Database 11gR2 XE 설치 및 실행하기(SQLPlus, DataGrip 접속 및 SCOTT 계정 생성) (1) | 2022.05.05 |
[Oracle] 데이터베이스 기본 개념 및 관계형 데이터베이스 알아보기 (0) | 2022.05.05 |