공든탑앱 열기

WHERE 절과 연산자

SQLD (SQL 개발자) · SQL 기본 · 약 13분

쉽게 말하면

WHERE는 조건에 맞는 줄만 골라내는 체예요. '급여가 300 이상', '이름이 김으로 시작' 같은 조건을 적으면 그 조건을 통과한 줄만 남아요. 조건을 여러 개 쓰면 NOT, AND, OR 순서로 먼저 계산하고, NULL은 =로 비교하면 통과하지 못해요.

시험용 정의

WHERE 절은 FROM으로 읽은 행 중에서 조건이 참인 행만 남긴다. 비교 연산자(=, <>, >, <=), SQL 연산자(BETWEEN, IN, LIKE, IS NULL), 논리 연산자(NOT · AND · OR, 이 순서로 먼저 계산)로 조건을 만든다. 조건 결과가 거짓이거나 알 수 없음(NULL 비교)인 행은 빠진다.

비유로 이해하기

체 거르기다. FROM으로 쏟아 부은 행 중에서 구멍(조건)을 통과한 행만 아래로 떨어진다. NULL은 통과 여부를 모르는 덩어리라 체 위에 남는다.

자세히

먼저 알아 둘 말

말뜻
조건식참·거짓·알 수 없음 중 하나로 판정되는 식. sal > 3000
와일드카드LIKE에서 여러 글자를 대신하는 기호. % 는 0글자 이상, _ 는 정확히 한 글자
연산자 우선순위여러 연산자가 섞일 때 먼저 계산하는 순서. 괄호가 가장 먼저

연산자

연산자뜻예
=, <> (!=, ^=)같다, 같지 않다deptno = 20, job <> 'DEV'
>, >=, <, <=크기 비교 (문자·날짜도 됨)sal >= 3000
BETWEEN a AND ba 이상 b 이하 (양 끝 포함)sal BETWEEN 2500 AND 3000
IN (목록)목록 중 하나와 같다deptno IN (10, 30)
LIKE '패턴'% 0글자 이상, _ 한 글자ename LIKE 'K%', ename LIKE '_I%'
IS NULL / IS NOT NULLNULL인지 확인 (= NULL은 안 됨)comm IS NULL
NOT BETWEEN, NOT IN, NOT LIKE부정deptno NOT IN (10, 20)

논리 연산자 우선순위

괄호 → NOT → AND → OR 순서로 계산한다. 비교 연산자와 SQL 연산자는 논리 연산자보다 먼저다.

NULL이 섞이면 세 가지 값(참·거짓·알 수 없음) 논리가 된다. 거짓 AND 알 수 없음 = 거짓, 참 OR 알 수 없음 = 참, 나머지 조합은 알 수 없음이다.

NOT IN과 NULL 함정

deptno NOT IN (10, NULL)은 deptno <> 10 AND deptno <> NULL과 같다. 뒤쪽이 항상 알 수 없음이라 어떤 행도 나오지 않는다. 반면 IN (10, NULL)은 = 10 OR = NULL이라 10인 행은 나온다.

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. WHERE job = 'DEV' OR job = 'SALES' AND sal >= 3000은 어떻게 해석될까요?

  1. (DEV 또는 SALES) 이면서 급여 3000 이상
  2. 오류가 난다
  3. DEV이면서 SALES
  4. DEV 전체 + (SALES 이면서 급여 3000 이상)
정답 보기

4번 DEV 전체 + (SALES 이면서 급여 3000 이상)

AND가 OR보다 먼저 계산된다. 그래서 job = 'DEV' OR (job = 'SALES' AND sal >= 3000)이 된다. 의도가 다르면 괄호를 쳐야 한다.

Q2. WHERE ename LIKE '_A%'에 맞는 이름은?

  1. CHOI
  2. KANG
  3. OH
  4. LEE
정답 보기

2번 KANG

_ 가 첫 글자 하나, 그다음이 A여야 한다. K-A-NG은 두 번째 글자가 A라 맞다. % 는 뒤에 몇 글자가 와도 된다.

Q3. WHERE deptno NOT IN (10, NULL)의 결과는?

  1. 오류
  2. 10번 부서를 뺀 모든 행
  3. 결과 없음
  4. 10번 부서 행만
정답 보기

3번 결과 없음

<> NULL 비교가 항상 알 수 없음이라 AND로 묶인 전체가 참이 될 수 없다.

Q4. sal BETWEEN 3000 AND 2500의 결과는?

  1. 결과 없음
  2. 2500~3000 사이 행
  3. 3000과 2500인 행
  4. 오류
정답 보기

1번 결과 없음

sal >= 3000 AND sal <= 2500 이라 참이 될 수 없다. 작은 값을 앞에 쓴다.

Q5. WHERE deptno = 10 OR deptno = 20 AND sal > 3000 의 뜻은?

  1. 오류
  2. 10번 또는 20번 부서이면서 급여 3000 초과
  3. 10번 부서 전체, 또는 20번 부서이면서 급여 3000 초과
  4. 10번 부서이면서 급여 3000 초과
정답 보기

3번 10번 부서 전체, 또는 20번 부서이면서 급여 3000 초과

AND가 OR보다 먼저 계산된다. 두 번째 뜻을 원하면 괄호로 묶는다.

Q6. LIKE 'A\_%' ESCAPE '\' 가 찾는 것은?

  1. 두 번째 글자가 A인 문자열
  2. A_로 시작하는 문자열
  3. A로 시작하는 모든 문자열
  4. A로 끝나는 문자열
정답 보기

2번 A_로 시작하는 문자열

ESCAPE 문자 뒤의 _는 아무 한 글자가 아니라 밑줄 글자 자체다.

헷갈리기 쉬운 O·X

OR가 AND보다 먼저 계산된다.

정답 보기

X NOT → AND → OR 순서다.

WHERE comm <> 0은 COMM이 NULL인 행을 포함하지 않는다.

정답 보기

O NULL과의 비교는 알 수 없음이라 걸러진다.

LIKE의 _ 는 0글자 이상을 뜻한다.

정답 보기

X _ 는 정확히 한 글자, % 가 0글자 이상이다.

함께 보면 좋은 개념