본문 바로가기
책 리뷰/Doit! 오라클로 배우는 데이터베이스 입문

[Chapter5] Do it! 오라클로 배우는 데이터베이스 입문 - WHERE절과 연산자

by 조조링 2021. 9. 25.
728x90
반응형
다음 내용들은
책 제목 : Do it! 오라클로 배우는 데이터베이스 입문
출판사 : 이지스퍼블리싱
를 참고하여 작성하였음을 미리 말씀드립니다! ( 사진에 링크 연결 )


05-1 필요한 데이터만 쏙 출력하는 WHERE절
05-2 여러 개 조건식을 사용하는 AND, OR 연산자
05-3 연산자 종류와 활용 방법 알아보기

 

 

05-1 필요한 데이터만 쏙 출력하는 WHERE절

* WHERE 절은 SELECT문으로 데이터를 조회할 때 특정 조건을 기준으로 원하는 행을 출력하는 데 사용 

SELECT [조회할 열1 이름], [열2 이름], ..., [열N 이름]
 FROM [조회할 테이블 이름]
 WHERE [조회할 행을 선별하기 위한 조건식];
# 부서 번호가 30인 데이터만 출력하기
SELECT *
  FROM EMP
 WHERE DEPTNO = 30;

 


 

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

* WHERE절에서는 조건식을 여러 개 지정할 수 있다. 

  이때 사용하는 것이 연산자 AND, OR이다. 

* AND 연산자는 피연산자들이 모두 TRUE인 행들만 추출

* OR 연산자는 피연산자들 중 하나면 TRUE인 행들을 추출 (즉, 피연산자들이 모두 FALSE인 경우 제외하고 모두 출력)

 

# AND연산자로 여러 개의 조건식 사용하기
## 부서 번호가 30이고 직업이 SALESMAN인 데이터 출력 
SELECT *
  FROM EMP
 WHERE DEPTNO = 30
  AND JOB = 'SALESMAN' ;

 

# OR연산자로 여러 개의 출력 조건 사용하기
## 부서 번호가 30이거나 직업이 CLERK인 행 출력 
SELECT *
  FROM EMP 
 WHERE DEPTNO = 30
  OR JOB = 'CLERK';

 


 

05-3 연산자 종류와 활용 방법 알아보기

* 앞에서 배운 논리 연산자(AND, OR) 외에 다른 연산자들을 알아보겠다. 

 

 

산술 연산자

* 일반 프로그래밍과 동일 +,-,+,/ 사칙연산 

#산술연산자::  곱셈 산술 연산자 사용 예시
SELECT * 
  FROM EMP
 WHERE SAL * 12 = 36000;

 

비교 연산자

 # 비교연산자 :: 대소 비교 연산자 사용 예시
SELECT * 
   FROM EMP
  WHERE SAL >= 3000;

 

# 문자를 대소 비교 연산자로 비교하기(비교 문자열이 문자 하나일 때)
SELECT *
   FROM EMP
  WHERE ENAME >= 'F';

=> 문자열을 비교할 때 영어 사전처럼 알파벳 순서로 문자열의 '대소'를 비교합니다. 

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

 

 

등가 비교 연산자

* 연산자 양쪽 항목이 같은 값인지 검사하는 연산자 

* A=B : A와 B값이 같을 경우 TRUE, 다를 경우 FALSE 반환

* A!=B, A <> B, A^= B : A와 B값이 다를 경우 TRUE, 같을 경우 FALSE

SELECT *
   FROM EMP
  WHERE SAL != 3000

 

 

논리 부정 연산자

* 이름대로 논리 연산자의 결과에 반대로 나오게 하는 연산자라고 생각하면 됩니다. 

* NOT 연산자 

* 앞에서 배운 !=, <>, ^=과 같은 의미인 거 같은데 언제 많이 쓰이나?

  => IN, BETWEEN, IS NULL 연산자와 함께 복합적으로 사용할 때 많이 쓰인다.

  => 복잡한 조건식에서 정반대의 최종 결과를 원할 때, 조건식을 일일이 수정하여 작성하는 것보다 NOT연산자로 한 번에 뒤집어서 사용하는 것이 간편하다. 

 

 

IN연산자

* WHERE 조건식에서 특정 열 데이터 값만을 조회하고 싶을 때 

* R에서 %in% 과 같은 개념 

* NOT IN으로 반대 경우를 조회할 수도 있다. 

# JOB이 MANAGER, SALESMAN, CLERK 인 행 추출 

## IN 사용 안하고 
SELECT *
   FROM EMP
  WHERE JOB = 'MANAGER' 
     OR JOB = 'SALESMAN'
     OR JOB = 'CLERK' ;
     
## IN 사용
SELECT *
   FROM EMP
  WHERE JOB IN ('MANAGER','SALESMAN','CLERK');

# JOB이 MANAGER도 SALESMAN도 CLERK도 아닌 행들 추출

# NOT IN 사용 안하고 
SELECT * 
   FROM EMP
  WHERE JOB != 'MANAGER'
    AND JOB <> 'SALASMAN'
    AND JOB ^= 'CLERK' ;
    
# NOT IN 사용
SELECT *
   FROM EMP
  WHERE JOB NOT IN ('MANAGER','SALESMAN','CLERK');

 

 

BETWEEN A AND B 연산자

* 급여 열 값이 2000 이상 3000 이하 사원 데이터를 조회해야 되는 상황 

# BETWEEN 사용 안하고
SELECT *
   FROM EMP
  WHERE SAL >= 2000
    AND SAL <= 3000;
    
# BETWEEN 사용 
SELECT *
   FROM EMP
  WHERE SAL BETWEEN 2000 AND 3000;

* NOT연산자를 사용해 2000~3000 사이 외의 값을 가진 데이터만 출력

SELECT *
   FROM EMP
  WHERE SAL NOT BETWEEN 2000 AND 3000;

 

 

LIKE 연산자와 와일드카드

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

* 와일드카드는 특정 문자 또는 문자열을 대체하거나 문자열 데이터의 패턴을 표기하는 특수 만자 

* LIKE 연산자와 함께 사용할 수 있는 와일드카드는 아래의 _와 %이다. 

종류 의미
_ 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
% 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미
# ENAME 열 값이 대문자 S로 시작하는 데이터 조회하기
SELECT *
   FROM EMP
  WHERE ENAME LIKE 'S%'
  
  
# ENAME 열 값의 두 번째 글자가 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%';

 

 

Q. 데이터에 와일드카드 기호로 사용되는 _나%문자가 데이터에 포함된 경우는 어떻게 할까?

    즉, _문자나 &문자를 포함한 데이터를 조회하기 위해서는 와일드 카드 문자를 어떻게 써야 될까?

A. ESCAPE 절을 이용하면 _,%를 와일드카드 기호가 아닌 데이터로서의 문자로 다루는 것이 가능해진다. 

 

예를 들어, LIKE문을 사용해 데이터 앞에 A_A문자를 가지고 있는 데이터를 조회하려면?

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

=> A\_A%에서 \ 문자 바로 뒤에 있는 _는 와일드 카드 기호로서가 아닌 데이터에 포함된 문자로 인식하라는 의미 

ESCAPE 문자 \는 ESCAPE절에서 지정할 수 있다. 

 

 

IS NULL 연산자

* NULL은 데이터 값이 완전히 '비어 있는' 상태를 의미한다. 

* 특정 열 또는 연산의 값이 NULL인지 여부를 확인하기 위해 IS NULL 연산자를 사용 

# COMM 열의 값이 NULL인 행만 추출
SELECT *
   FROM EMP
  WHERE COMM IS NULL;

# MGR 열의 값이 NULL이 아닌 행들만 추출
SELECT * 
  FROM EMP
 WHERE MGR IS NOT NULL;

 

집합 연산자

* SELECT문을 통해 데이터를 조회한 결과를 하나의 집합과 같이 다룰 때

* 두 개 이상의 SELECT문의 결과 값을 연결할 때 사용한다. 

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

종류 설명
UNION 연결된 SELECT문의 결과 값을 합집합으로 묶어 준다. 결과 값의 중복은 제거한다.
UNION ALL 연결된 SELECT문의 결과 값을 합집합으로 묶어 준다. 중복된 결과 값도 제거 없이 모두 출력된다.
MINUS 먼저 작성한 SELECT문의 결과 값에서 다음 SELECT문의 결과 값을 차집합 처리한다. 
INTERSECT 먼저 작성한 SELECT문과 다음 SELECT문의 결과 값이 같은 데이터만 출력한다. 교집합 개념 
# UNION 연산자
SELECT EMPNO, ENAME, SAL, DEPTNO
   FROM EMP
  WHERE DEPTNO = 10
 UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
   FROM EMP
  WHERE DEPTNO = 10

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

# MINUS
SELECT EMPNO, ENAME, SAL, DEPTNO
   FROM EMP
  MINUS
SELECT EMPNO, ENAME, SAL, DEPTNO
   FROM EMP
  WHERE DEPTNO = 10;

=> 두 SELECT문의 결과 값이 같은 데이터는 제외하고 첫 번째 SELECT문의 결과 값이 출력된다. 

 

 

# INTERSECT
SELECT EMPNO, ENAME, SAL, DEPTNO
   FROM EMP
  INTERSECT
SELECT EMPNO, ENAME, SAL, DEPTNO
   FROM EMP
  WHERE DEPTNO = 10;

 

 

 

연산자 우선순위

* 지금까지 WHERE절 조건식에 사용한 여러 연산자는 우선순위를 가지고 있다. 

* 아래로 갈수록 우선순위가 낮아진다. 

연산자 설명
*, / 산술 연산자 곱하기, 나누기
+,- 산술 연산자 더하기, 뺴기
=,!+,^=,<>,>,>=,<,<= 대소 비교 연산자
IS (NOT) NULL, (NOT) LIKE, (NOT) IN (그 외) 비교 연산자
BETWEEN A AND B BETWEEN 연산자
NOT 논리 부정 연산자 NOT
AND 논리 연산자 AND
OR 논리 연산자 OR

 

 

728x90
반응형

댓글