기초 SQL입문

WHERE 조건

테이블에서 조건에 맞는 행만 골라내는 필터링 절

정의

테이블의 행 중에서 원하는 조건에 맞는 것만 골라낸다. 예를 들어 "WHERE 나이 > 30"이라고 쓰면 30살 넘는 사람만 결과로 나온다. WHERE가 없으면 테이블의 모든 행이 결과로 나오기 때문에, 데이터가 많을수록 WHERE는 필수다.

왜 중요한가?

WHERE가 없으면 테이블 전체가 결과로 나와서 매우 느려진다. 또 WHERE를 잘못 쓰면 의도한 결과가 안 나오거나(NULL 비교 실수 등) 데이터베이스가 인덱스를 활용하지 못해 느려진다. SQL 성능의 핵심이 WHERE라고 해도 과언이 아니다.

틀리기 쉬운 포인트

  • !WHERE 절에 함수를 씌우면 인덱스를 무력화합니다. WHERE TO_CHAR(date_col) = '2024' 대신 WHERE date_col >= TO_DATE('2024-01-01')으로 작성해야 인덱스를 탑니다.
  • !NULL은 = 로 비교할 수 없습니다. WHERE status = NULL은 항상 결과가 비어있습니다. IS NULL을 사용해야 합니다.
  • !AND와 OR을 혼합할 때 우선순위를 놓치면 의도와 다른 결과가 나옵니다. AND가 OR보다 먼저 평가되므로, 괄호를 명시하는 것이 안전합니다.

예시

SELECT name, salary
FROM employees
WHERE department_id = 10 AND salary > 5000;

성능 포인트

!인덱스 컬럼을 SARGable하게 유지하라. 좌변에 함수/연산을 두지 말고, 묵시적 형변환을 피하기 위해 데이터 타입을 일치시켜라.

관련 개념

관련 문제 풀어보기

관련 카테고리