데이터베이스/Oracle

WHERE 절과 연산자

eunsour 2020. 7. 24.
반응형

DBMS - Oracle Database

VERSION - Oracle Database 11g Release 2

IDE - SQL Developer

 

실습용 데이터를 입력하지 않고, 오라클 데이터베이스를 설치하면 기본으로 제공되는 테이블과 계정들로 학습한 내용입니다. 


※ 필요한 데이터만 쏙 출력하는 WHERE 절

  1. 부서 번호가 30인 데이터만 출력하기

SELECT * FROM EMP  
    WHERE DEPTNO = 30; 

 

※ 여러 개 조건식을 사용하는 AND, OR 연산자

1. AND 연산자로 여러 개의 조건식 사용하기

SELECT * FROM EMP  
    WHERE DEPTNO = 30 
    AND JOB = 'SALESMAN'; 
작업 열을 비교하는 문자열 데이터는 반드시 대문자(SALESMAN)로 작성해야 한다.
SQL문에 사용하는 기본 형식은 대 · 소문자를 구별하지 않고 사용할 수 있지만 테이블 안에 들어 있는 문자 또는 문자열 데이터는 대 · 소문자를 구별한다.

2. OR 연산자로 여러 개의 출력 조건 사용하기

SELECT * FROM EMP 
    WHERE DEPTNO = 30 
    OR JOB = 'CLERK'; 
WHERE 절 조건식의 갯수는 사실상 제한이 없다. 
각 조건식 사이에 AND 또는 OR 연산자를 추가하여 사용할 수 있다.
SELECT * FROM EMP

WHERE [조건식 1]
  AND [조건식 2]
   OR [조건식 3]
  ...
  AND [조건식 N]
실무에서는 다양한 조건을 한 번에 만족시키는 데이터만을 추출해야 할 때가 많기 때문에 OR 연산자보다 AND 연산자를 많이 사용하는 경향이 있다.
ex) 1개월 이내의 출금 데이터, 쇼핑몰에서 신발 크기, 가격대, 배송 등의 여러가지 검색 조건 

 

※ 연산자 종류와 활용 방법 알아보기

1. 산술 연산자

SELECT * FROM EMP  
    WHERE SAL * 12 = 36000; 

2-1. 비교 연산자 (대소 비교 연산자를 사용하여 출력하기)

SELECT * FROM EMP 
    WHERE SAL >= 3000; 

  결과 >> 

2-2. 비교 연산자 (문자를 대소 비교 연산자로 비교하기(비교 문자열이 하나일 때))

SELECT * FROM EMP 
    WHERE ENAME >= 'F'; 

  결과 >> 조건식 ENAME >= 'F' 는 ENAME 열 값의 첫 문자와 대문자 F를 비교했을 때 알파벳 순서상 F와 같거나 F보다 뒤에 있는 문자열을 출력하라는 의미이다.

2-3. 비교 연산자 (문자열을 대소 비교 연산자로 비교하기(비교 문자열이 여러 개일 때))

SELECT * FROM EMP 
    WHERE ENAME <= 'FORZ'; 

  결과 >> ENAME <= 'FORZ' 는 ENAME 열 값이 FORZ를 포함한 문자열보다 알파벳 순서로 앞에 있는 행을 출력하라는 의미이다.

    문자열의 대소 비교는 숫자 데이터 비교보다는 자주 사용되는 내용은 아님.

3. 등가 비교 연산자의 종류 (!= , <>, ^=)

ex) 급여가 3000이 아닌 사원의 데이터를 조회할 때

SELECT * FROM EMP 
	WHERE SAL != 3000;
SELECT * FROM EMP 
	WHERE SAL <> 3000;
  평균적으로 위의 두 가지 방식을 많이 사용한다.
SELECT * FROM EMP 
	WHERE SAL ^= 3000;

  결과 >>

세 가지 방식 모두 같은 결과 값을 출력한다.

4. 논리 부정 연산자

비교 연산자는 아니지만 위의 등가 비교 연산자와 똑같은 결과를 출력하기 위해 사용할 수 있다.

A 값이 True일 경우 결과 값은 False. 반대로 A 값이 False인 경우에 결과 값은 True

SELECT * FROM EMP
    WHERE NOT SAL = 3000;

복잡한 여러 개 조건식이 AND, OR로 묶여 있는 상태에서 정반대 결과를 얻고자 할 때 유용하게 사용할 수 있다.

 

5. IN 연산자

IN 연산자를 사용하면 특정 열에 해당하는 조건을 여러 개 지정할 수 있고 조회 가능하다.

-> MANAGER, SALESMAN, CLERK 중 하나라면 모두 조회.

SELECT * FROM EMP 
    WHERE JOB IN ('MANAGER', 'SALESMAN', 'CLERK'); 

 

IN 연산자 앞에 논리 부정 연산자 NOT을 사용하면 좀 더 간단하게 반대 경우를 조회할 수 있다.

SELECT * FROM EMP
    WHERE JOB NOT IN ('MANAGER', 'SALESMAN', 'CLERK');

결과 >> 위의 데이터를 제외한 ANALYST, PRESIDENT 데이터만 출력

6. BETWEEN A AND B 연산자 

특정 열 값의 최소 · 최고 범위를 지정하여 해당 범위 내의 데이터만 조회 할 경우

SELECT * FROM EMP  
    WHERE SAL BETWEEN 2000 AND 3000; 

7. LIKE 연산자와 와일드 카드

이메일이나 게시판 제목 또는 내용 검색 기능처럼 일부 문자열이 포함된 데이터를 조회할 때 사용한다.

SELECT * FROM EMP  
    WHERE ENAME LIKE 'S%'; 

결과 >> 조건식 ENAME 열 값이 대문자 S로 시작하는 데이터를 조회

 

종류 의미
_ 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
% 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미

 

▼ 사원 이름의 두 번째 글자가 L인 사원만 출력하기 (L앞에는 반드시 한 문자가 와야 한다.)

SELECT * FROM EMP 
    WHERE ENAME LIKE '_L%'; 

결과 >> 

 

 사원 이름에 AM이 포함되어 있는 사원 데이터만 출력하기

SELECT * FROM EMP  
    WHERE ENAME LIKE '%AM%'; 

결과 >> 

 

 사원 이름에 AM이 포함되어 있지 않은 사원 데이터 출력하기

SELECT * FROM EMP 
    WHERE ENAME NOT LIKE '%AM%'; 

결과 >> 

 

▶ 와일드 카드 문자가 데이터 일부일 경우

데이터에 와일드 카드 기호로 사용되는 _나 % 문자가 데이터로 포함된 경우 ESCAPE 절을 사용하면 데이터로서의 문자로 다루는 것이 가능하다.

↓ 예를 들어 LIKE 문을 사용하여 데이터 앞에 A_A 문자를 가지고 있는 데이터를 찾을 때

SELECT * FROM SOME_TABLE 
    WHERE SOME_COLUMN LIKE 'A\_A%' ESCAPE '\'; 


8. IS NULL 연산자

특정 열 또는 연산의 결과 값이 NULL인지 여부를 확인하려면 IS NULL 연산자를 사용한다.

  + 반대의 경우, NULL이 아닌 데이터만 조회하려면 IS NOT NULL을 사용.

SELECT * FROM EMP 
    WHERE COMM IS NULL; 

    
OR 연산자와 IS NULL 연산자 사용하기

SELECT * FROM EMP
    WHERE SAL > NULL
    OR COMM IS NULL;

결과 >> 

▶ OR 연산은 양쪽 항목 중 어느 항목만 true여도 결과 값을 true로 반환한다.

피연산자 true false NULL
true true true true
false true false NULL
NULL true NULL NULL

 

9. 집합 연산자

집합 연산자로 두 개의 SELECT문의 결과 값을 연결할 때 각 SELECT문이 출력하려는 열 개수와 각 열의 자료형이 순서별로 일치해야 한다.

SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP
    WHERE DEPTNO = 10
    UNION
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP
    WHERE DEPTNO = 20

 

종류 설명
UNION 연결된 SELECT문의 결과 값을 합집합으로 묶어준다. 결과 값의 중복은 제거
UNION ALL 연결된 SELECT문의 결과 값을 합집합으로 묶어준다. 중복된 결과 값도 제거 없이 모두 출력
MINUS 먼저 작성한 SELECT문의 결과 값에서 다음 SELECT문의 결과 값을 차집합 처리한다. 먼저 작성한 SELECT문의 결과 값 중 다음 SELECT문에 존재하지 않는 데이터만 출력
INTERSECT 먼저 작성한 SELECT문과 다음 SELECT문의 결과 값이 같은 데이터만 출력된다. 교집합과 같은 의미

 

 

 

Reference

 
Do it! 오라클로 배우는 데이터베이스 입문
저자 : 이지훈
출판 : 이지스퍼블리싱
발매 : 2018.10.30

 

반응형

댓글