본문 바로가기
SQL

[SQL] WHERE절과 연산자

by lmyourpearl 2025. 11. 30.

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 논리 연산자