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
|
댓글