05-1 WHERE절

WHERE

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

SELECT *
FROM EMP
WHERE DEPTNO = 30;

05-2 AND, OR 연산자

AND, OR

WHERE절에서 조건식을 여러 개 지정할 때 사용하는 논리 연산자

SELECT *
FROM EMP
WHERE DEPTNO = 30
AND JOB = 'SALESMAN';
SELECT *
FROM EMP
WHERE DEPTNO = 30
OR JOB = 'CLERK';

05-3 연산자 종류와 활용 방법

산술연산자

SELECT *
FROM EMP
WHERE SAL * 12 = 36000;

비교 연산자

대소 비교 연산자 (문자 비교도 가능)

  1. 비교 문자열이 문자 하나일 때
SELECT *
FROM EMP
WHERE ENAME > ='F';
-- 사원 이름의 첫 문자가 F와 같거나 뒤쪽인 것만 검색
  1. 비교 문자열이 문자 여러 개일 때
SELECT *
FROM EMP
WHERE ENAME <= 'FORZ';
-- FORZ를 포함한 문자열보다 알파벳 순서로 앞에 있는 행을 출력

등가 비교 연산자

  • = : A 값이 B 값과 같을 경우 true, 다를 경우 false 반환
  • != ,<>, ^= : A 값과 B 값이 다를 경우 true, 같을 경우 false 반환

논리 부정 연산자

SELECT *
FROM EMP
WHERE NOT SAL = 3000;

IN 연산자

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

BETWEEN A(최솟값) AND B(최댓값) 연산자

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

LIKE 연산자와 와일드 카드

  • _ : 어떤 값이든 상관없이 한 개의 문자 데이터를 의미
  • % : 길이와 상관없이(문자 없는 경우도 포함) 모든 문자 데이터를 의미
  1. ENAME 열 값이 대문자 S로 시작하는 데이터를 조회
SELECT *
FROM EMP
WHERE ENAME LIKE 'S%';
  1. 사원 이름의 두 번째 글자가 L인 사원만 출력
SELECT *
FROM EMP
WHERE ENAME LIKE '_L%';
  1. 사원 이름에 AM이 포함되어 있는 사원 데이터만 출력
SELECT *
FROM EMP
WHERE ENAME LIKE '%AM%';
  1. 사원 이름에 AM이 포함되어 있지 않은 사원 데이터 출력
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '%AM%';

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

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

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

IS NULL 연산자

NULL의 의미

  1. 값이 존재하지 않음 : 통장을 개설한 적 없는 은행 고객의 계좌 번호
  2. 해당 사항 없음 : 미혼인 고객의 결혼기념일
  3. 노출할 수 없는 값 : 고객 비밀번호 찾기 같은 열람을 제한해야 하는 특정 개인 정보
  4. 확정되지 않은 값 : 미성년자의 출신 대학
SELECT *
FROM EMP
WHERE COMM IS NULL;
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;

집합 연산자

조건

※ 집합 연산자로 출력하려는 열 개수와 각 열의 자료형이 순서별로 일치해야 함

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
EMPNOENAMESALDEPTNO
7369SMITH80020
7566JONES297510
7782CLARK245010
7788SCOTT300020
7839KING500010
7876ADAMS110020
7902FORD300020
7934MILLER130010

※ 만약 연결하려는 두 SELECT문의 열 개수와 자료형이 같다면

  • 서로 다른 테이블에서 조회하거나 조회하는 열 이름이 다른 것은 문제가 되지 않음
  • 열 이름은 맨 앞에 작성한 SELECT절의 열 이름을 사용
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT SAL, JOB, DEPTNO, SAL
FROM EMP
WHERE DEPTNO = 20;
EMPNOENAMESALDEPTNO
800CLERK20800
1100CLERK201100
2975MANAGER202975
3000ANAYLST203000
7782CLARK245010
7839KING500010
7934MILLER130010

집합 연산자 종류

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

예시1) 집합 연산자(UNION)를 사용하여 출력하기(출력 결과 데이터가 같을 때)

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
EMPNOENAMESALDEPTNO
7782CLARK245010
7839KING500010
7934MILLER130010

예시2) 집합 연산자(UNION ALL)를 사용하여 출력하기(출력 결과 데이터가 같을 때)

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION ALL
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
EMPNOENAMESALDEPTNO
7782CLARK245010
7839KING500010
7934MILLER130010
7782CLARK245010
7839KING500010
7934MILLER130010

예시3) 집합 연산자(MINUS)를 사용하여 출력하기

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
MINUS
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
EMPNOENAMESALDEPTNO
7369SMITH80020
7499ALLEN160030
7521WARD125030
7566JONES297520
7654MARTIN125030
7698BLAKE285030
7788SCOTT300020
7844TURNER150030
7876ADAMS110020
7900JAMES95030
7902FORD300020

예시4) 집합 연산자(INTERSECT)를 사용하여 출력하기

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
INTERSECT
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
EMPNOENAMESALDEPTNO
7782CLARK245010
7839KING500010
7934MILLER130010

연산자 우선순위 (높은 순서대로)

  1. *, / : 산술 연산자 곱하기, 나누기
  2. +, - : 산술 연산자 더하기, 빼기
  3. =, !=, ^=, <>, >, >=, <, <= : 대소 비교 연산자
  4. IS (NOT) NULL, (NOT) LIKE, (NOT) IN : (그 외) 비교 연산자
  5. BETWEEN A AND B : BETWEEN 연산자
  6. NOT : 논리 부정 연산자 NOT
  7. AND : 논리 연산자 AND
  8. OR : 논리 연산자 OR
profile
열심히 살겠습니다

0개의 댓글