다음 내용들은
책 제목 : 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 |
'책 리뷰 > Doit! 오라클로 배우는 데이터베이스 입문' 카테고리의 다른 글
[Chapter4] Do it! 오라클로 배우는 데이터베이스 입문 - SELECT문의 기본 형식 (0) | 2021.09.24 |
---|---|
[Chapter2] Do it! 오라클로 배우는 데이터베이스 입문 - 관계형 데이터베이스와 오라클 데이터베이스 (0) | 2021.09.18 |
[Chapter1] Do it! 오라클로 배우는 데이터베이스 입문 - 데이터베이스 (0) | 2021.09.18 |
댓글