WHERE절은 테이터 중에서 조건에 일치하는 행만 골라 조회할 때 사용.
WHERE절을 포함한 SELECT문을 실행하면 조회할 테이블의 각 행에 WHERE절의 조건식을 대입하여 결과가 '참' 일 때만 출력
| 키워드 | 필수요소 | 선택요소 | 설명 |
| WHERE | 조건식 | - | 조회 조건 지정 |
기본 형식
SELECT [조회할 열1 이름], [열2 이름], ..., [열n 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식];
테이블의 모든 열 출력하기
-- SELECT * FROM 테이블 명;
SELECT *
FROM EMP;
특정 데이터만 출력하기
-- SELECT * FROM 테이블명, WHERE 조건식;
SELECT *
FROM EMP
WHERE DEPTNO = 30;
AND 연산자
여러 개의 조건식을 동시에 만족하는 행만 출력할 때 사용
-- SELECT * FROM 테이블 명, 조건식1, AND 조건식 2
SELECT *
FROM EMP
WHERE DEPTNO = 30
AND JOB = 'SALESMAN';
OR 연산자
WHERE절 내 여러 조건식이 있을 때 그중 단 하나의 조건만 만족해도 해당 행을 출력
-- SELECT * FROM 테이블 명, WHERE 조건식1, OR 조건식2;
SELECT *
FROM EMP
WHERE DEPTNO = 30
OR JOB = 'CLERK';
WHERE절에 사용할 수 있는 조건식의 개수는 제한이 없고 다양한 조건을 한 번에 만족하는 데이터만 추출해야 할 때가 흔하기 때문에 실무에서 자주 사용함.
산술 연산자
-- 곱셈 산술 연산자를 사용한 예
SELECT *
FROM EMP
WHERE SAL*12 = 36000;
비교 연산자
-- 대소 비교 연산자를 사용하여 출력하기
SELECT *
FROM EMP
WHERE SAL >= 3000;
| 연산자 | 사용법 | 설명 |
| > | A>B | A값이 B값을 초과하면 true를 반환 |
| >= | A>=B | A값이 B값 이상이면 true를 반환 |
| < | A<B | A값이 B값 미만이면 true를 반환 |
| <= | A<=B | A값이 B값 이하라면 true를 반환 |
-- 문자를 대소 비교 연산자로 비교하기(비교 문자열이 문자 하나일 때)
SELECT *
FROM EMP
WHERE ENAME >= 'F'; -- 이름의 첫 문자가 F와 같거나 F보다 뒤에 있는 것만 검색
-- 문자열을 대소 비교 연산자로 비교하기(비교 문자열이 문자 여러 개일 때)
SELECT *
FROM EMP
WHERE ENAME <= 'FORZ'; -- 이름이 FORD일 경우 'FORZ'보다 앞에 있어서 조건 만족
등가 비교 연산자
| 연산자 | 사용법 | 의미 |
| = | A=B | A값이 B값과 같을 때 true, 다를 때 false를 반환 |
| != | A!=B | A값이 B값과 다를 때 true, 같을 때 false를 반환 |
| <> | A<>B | |
| ^= | A^=B |
-- 등가 비교 연산자(!=)를 사용하여 출력하기
SELECT *
FROM EMP
WHERE SAL != 3000;
--등가 비교 연산자(<>)를 사용하여 출력하기
SELECT *
FROM EMP
WHERE SAL <> 3000;
-- 등가 비교 연산자(^=)를 사용하여 출력하기
SELECT *
FROM EMP
WHERE SAL ^= 3000;
논리 부정 연산자(NOT)
A값이 true라면 논리 부정 연산자의 결과값은 false가 됨. false이면 true.
-- NOT 연산자를 사용하여 출력하기
SELECT *
FROM EMP
WHERE NOT SAL = 3000;
IN 연산자
= 기호는 WHERE조건식에서 특정 열 데이터 값만 조회할 때 사용.
SELECT [조회할 열1 이름], [열2 이름],...,[열n 이름]
FROM [조회할 테이블 이름]
WHERE 열 이름 IN (데이터1, 데이터2, ..., 데이터n);
| 키워드 | 필수 요소 | 선택 요소 | 설명 |
| IN | 열 이름 조회할 열의 데이터 목록 |
- | 특정 열에 포함된 데이터를 여러 개 조회할 때 활용 |
SELECT *
FROM EMP
WHERE JOB IN ('MANAGER', 'SALESMAN', 'CLERK');
-- 등가 비교 연산자와 AND 연산자를 사용하여 출력하기
SELECT *
FROM EMP
WHERE JOB != 'MANAGER'
AND JOB <> 'SALESMAN'
AND JOB ^= 'CLERK';
-- IN연산자와 논리 부정 연산자(NOT)를 사용하여 출력하기
SELECT *
FROM EMP
WHERE JOB NOT IN('MANAGER', 'SALESMAN', 'CLERK');
BETWEEN A AND B 연산자
SELECT [조회할 열1 이름], [열2 이름], ..., [열n 이름]
FROM [조회할 테이블 이름]
WHERE 열 이름 BETWEEN 최소값 AND 최댓값;
| 키워드 | 필수 요소 | 선택 요소 | 설명 |
| BETWEEN A AND B | 열 이름, 최솟값, 최댓값 | - | 일정 범위의 데이터를 조회할 때 사용 |
-- BETWEEN A AND B 연산자를 사용하여 출력하기
SELECT *
FORM EMP
WHERE SAL BETWEEN 2000 AND 3000;
-- BETWEEN A AND B 연산자와 NOT 연산자를 사용하여 출력하기
SELECT *
FROM EMP
WHERE SAL NOT BETWEEN 2000 AND 3000;
LIKE 연산자
이메일이나 게시판 제목 또는 애용 검색 기능처럼 일부 문자열을 포함한 데이터를 조회할 때 사용
SELECT *
FROM EMP
WHERE ENAME LIKE 'S%';
와일드 카드(wild card)
특정 문자 또는 문자열을 대체하거나 문자열 데이터의 패턴을 표기하는 특수 문자.
| 종류 | 설명 |
| _ | 어떤 값이든 상관없이 한 개의 문자열 데이터를 의미 |
| % | 길이와 상관없이(문자가 없는 경우도 포함) 모든 문자열 데이터를 의미 |
-- 이름의 두번째 글자가 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절을 사용하면 _,%를 와일드카드 기호가 아닌 데이터 문자로 다룰 수 있음.
SELECT *
FROM SOME_TABLE
WHERE SOME_COLUMN LIKE 'A₩_A%' ESCAPE '₩';
IS NULL 연산자
NULL의 의미
| 의미 | 예 |
| 값이 없음 | 통장을 개설한 적 없는 은행 고객의 계죄 번호 |
| 해당 사항 없음 | 미혼인 고객의 결혼 기념일 |
| 노출할 수 없는 값 | 고객 비밀번호 찾기 같은 열람을 제한해야 하는 특정 개인 정보 |
| 확정되지 않은 값 | 미성년자의 출신 대학 |
-- AND연산자와 IS NULL 연산자 사용하기
SELECT *
FROM EMP
WHERE SAL > NULL
AND COMM IS NULL;
-- OR 연산자와 IS NULL 연산자 사용하기
SELECT *
FROM EMP
WHERE SAL > NULL
OR COMM IS NULL;
AND 연산
| 피연산자1 / 피연산자 2 | true | false | NULL |
| true | true | false | NULL |
| false | false | false | false |
| NULL | NULL | false | NULL |
OR 연산
| 피연산자1 / 피연산자 2 | true | false | NULL |
| true | true | true | true |
| false | true | false | NULL |
| NULL | true | NULL | NULL |
집합 연산자(UNION)
두 개 이상의 SELECT문의 결괏값을 연결할 때 사용
집합 연산자로 두 개의 SELECT문 결괏값을 연결할 때 각 SELECT문이 출력하려는 열 개수와 각 열의 자료형이 순서별로 일치해야 함.
연결하려는 두 SELECT문의 열 개수와 자료형이 같다면 테이블이 다르거나 열 이름이 달라도 문제가 되지 않음.
-- 집합 연산자를 사용하여 출력하기(출력할 열 개수와 자료형이 같을 때)
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION
SELECT SAL, JOB, DEPTNO, SAL
FROM EMP
WHERE DEPTNO = 20;
| 종류 | 설명 |
| UNION | 연결된 SELECT문의 결괏값을 합집합으로 묶고 중복은 제거 함 |
| UNION ALL | 연결된 SELECT문의 결괏겂을 합집합으로 묶고 중복된 결괏값도 모두 출력 |
| MINUS | 먼저 작성한 SELECT문의 결괏값에서 다음 SELECT문의 결괏값을 차집합 처리 즉, 먼저 작성한 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;
-- 집합 연산자(INTERSECT)를 사용하여 출력하기
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
INTERSECT
SELECT ENPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
연산자 우선순위
| 우선순위 | 연산자 | 설명 |
| ↑ (높음) (낮음) ↓ |
*, / | 산술 연산자 곱하기, 나누기 |
| +, - | 산술 연산자 더하기, 빼기 | |
| =, !=, ^=, <>, >, >=, <, <= | 대소 비교 연산자 | |
| IS (NOT) NULL, (NOT) LIKE, (NOT) IN | (그 외) 비교 연산자 | |
| BETWEEN A AND B | 범위, 구간 검색 연산자 | |
| NOT | 논리 부정 연산자 | |
| AND | 논리 연산자 | |
| OR | 논리 연산자 |
'SQL' 카테고리의 다른 글
| [SQL] 데이터 처리와 가공을 위한 오라클 함수_2 (0) | 2025.11.30 |
|---|---|
| [SQL] 데이터 처리와 가공을 위한 오라클 함수_1 (0) | 2025.11.30 |
| [SQL] SELECT문 (1) | 2025.11.19 |
| [SQL] 관계형 데이터베이스의 테이블과 키, 오라클 데이터베이스 (0) | 2025.11.18 |
| [SQL] 데이터베이스와 SQL (0) | 2025.11.18 |