SQL Where
SQL WHERE: 조건에 맞는 데이터 필터링
SQL WHERE 절은 데이터를 조회하거나 조작할 때 특정 조건을 만족하는 행(row)만 선택하여 처리할 수 있도록 하는 SQL 문법입니다. WHERE
절은
SELECT, UPDATE, DELETE와 함께 사용되며, 원하는 데이터를 필터링할 때 매우 유용합니다.
이 글에서는 SQL의 WHERE
절 사용 방법, 다양한 조건 연산자, 논리 연산자, 그리고 실전 예제를 설명하겠습니다.
1. 기본 WHERE 절 문법
WHERE
절은 SQL 문 내에서 다음과 같이 사용됩니다:
SELECT 열이름1, 열이름2, ...
FROM 테이블이름
WHERE 조건;
- 열이름: 조회할 열을 지정합니다.
- 테이블이름: 데이터를 조회할 테이블의 이름입니다.
- 조건: 데이터가 필터링되는 조건을 설정합니다.
예제:
SELECT name, salary
FROM employees
WHERE department = 'Sales';
이 쿼리는 employees
테이블에서 Sales
부서에 속한 직원들의 이름과 급여를 반환합니다.
2. WHERE 절에서 사용할 수 있는 연산자
2.1 비교 연산자
=
: 값이 같음!=
또는<>
: 값이 같지 않음>
: 값이 큼<
: 값이 작음>=
: 값이 크거나 같음<=
: 값이 작거나 같음
예제:
SELECT *
FROM employees
WHERE salary > 5000;
이 쿼리는 급여가 5,000 이상인 직원들을 조회합니다.
2.2 BETWEEN
BETWEEN
은 값이 두 값 사이에 있는지 확인할 때 사용됩니다.
SELECT *
FROM employees
WHERE salary BETWEEN 3000 AND 6000;
이 쿼리는 급여가 3,000에서 6,000 사이인 직원들을 반환합니다.
2.3 IN
IN
은 여러 값 중 하나가 일치하는지 확인할 때 사용됩니다.
SELECT *
FROM employees
WHERE department IN ('Sales', 'HR');
이 쿼리는 부서가 Sales
또는 HR
인 직원들을 반환합니다.
2.4 LIKE
LIKE
는 패턴 일치를 통해 문자열을 검색하는 데 사용됩니다. LIKE
는 주로 두 개의 와일드카드 문자와 함께 사용됩니다:
%
: 0개 이상의 임의의 문자_
: 정확히 1개의 임의 문자
SELECT *
FROM employees
WHERE name LIKE 'J%';
이 쿼리는 이름이 'J'로 시작하는 모든 직원들을 조회합니다.
SELECT *
FROM employees
WHERE name LIKE '_ohn';
이 쿼리는 이름이 네 글자이고 마지막 세 글자가 'ohn'인 모든 직원들을 조회합니다 (예: John).
2.5 IS NULL
IS NULL
은 값이 NULL
인 데이터를 조회할 때 사용됩니다. NULL
은 값이 없음을 나타냅니다.
SELECT *
FROM employees
WHERE hire_date IS NULL;
이 쿼리는 고용 날짜가 없는 직원들을 조회합니다.
3. 논리 연산자
SQL의 논리 연산자는 여러 조건을 결합할 때 사용됩니다.
3.1 AND
AND
는 두 조건이 모두 참일 때 데이터를 반환합니다.
SELECT *
FROM employees
WHERE salary > 5000 AND department = 'Sales';
이 쿼리는 급여가 5,000 이상이고 부서가 Sales
인 직원들을 조회합니다.
3.2 OR
OR
는 두 조건 중 하나라도 참이면 데이터를 반환합니다.
SELECT *
FROM employees
WHERE salary > 5000 OR department = 'HR';
이 쿼리는 급여가 5,000 이상이거나 부서가 HR
인 직원들을 조회합니다.
3.3 NOT
NOT
은 조건을 반전시킵니다. 즉, 조건이 참이 아닌 데이터를 반환합니다.
SELECT *
FROM employees
WHERE NOT department = 'HR';
이 쿼리는 HR
부서에 속하지 않은 직원들을 반환합니다.
4. WHERE와 함께 사용하는 연산자
4.1 ORDER BY
ORDER BY 절은 결과를 정렬할 때 사용됩니다. WHERE
절로 필터링된 데이터를 특정 열을 기준으로 오름차순 또는 내림차순으로 정렬할 수 있습니다.
SELECT *
FROM employees
WHERE salary > 5000
ORDER BY salary DESC;
이 쿼리는 급여가 5,000 이상인 직원들을 급여 기준으로 내림차순으로 정렬합니다.
4.2 LIMIT
LIMIT 절은 결과에서 반환할 행의 개수를 제한합니다. 이를 통해 대량의 데이터를 필터링한 후 원하는 개수만큼 데이터를 반환할 수 있습니다.
SELECT *
FROM employees
WHERE department = 'Sales'
LIMIT 3;
이 쿼리는 Sales
부서에 속한 첫 세 명의 직원을 반환합니다.
5. WHERE 절과 함께 자주 사용하는 함수
5.1 COUNT()
COUNT() 함수는 특정 조건을 만족하는 행의 개수를 반환합니다.
SELECT COUNT(*)
FROM employees
WHERE salary > 5000;
이 쿼리는 급여가 5,000 이상인 직원의 수를 반환합니다.
5.2 SUM(), AVG(), MAX(), MIN()
이 함수들은 WHERE
절과 함께 사용하여 조건을 만족하는 데이터의 합계, 평균, 최대값, 최소값을 구할 수 있습니다.
SELECT SUM(salary)
FROM employees
WHERE department = 'Sales';
이 쿼리는 Sales
부서의 직원들의 급여 합계를 반환합니다.
6. 서브쿼리와 WHERE 절
서브쿼리는 WHERE
절 내에서 다른 쿼리의 결과를 조건으로 사용할 수 있는 쿼리입니다. 주로 복잡한 데이터 필터링 작업에서 사용됩니다.
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
이 쿼리는 전체 평균 급여보다 높은 급여를 받는 직원들의 이름을 조회합니다.
7. 실전 예제
예제 1: 특정 부서에서 높은 급여를 받는 직원 조회
SELECT name, salary
FROM employees
WHERE department = 'HR' AND salary > 5000;
이 쿼리는 HR
부서에서 급여가 5,000 이상인 직원들의 이름과 급여를 조회합니다.
예제 2: 특정 패턴의 이메일 주소를 가진 직원 조회
SELECT name, email
FROM employees
WHERE email LIKE '%@example.com';
이 쿼리는 이메일 주소가 example.com
으로 끝나는 모든 직원들의 이름과 이메일 주소를 조회합니다.
예제 3: 특정 기간에 고용된 직원 조회
SELECT name, hire_date
FROM employees
WHERE hire_date BETWEEN '2020-01-01' AND '2021-12-31';
이 쿼리는 2020년과 2021년 사이에 고용된 직원들의 이름과 고용 날짜를 조회합니다.
요약
SQL WHERE 절은 데이터를 필터링하여 특정 조건에 맞는 행만 조회하거나 조작할 수 있게 해주는 중요한 도구입니다. 비교 연산자, 논리 연산자, 패턴 일치(예:
LIKE
) 등을 사용하여 다양한 필터링 조건을 설정할 수 있습니다. WHERE
절은 데이터베이스 작업에서 가장 자주 사용되며, 데이터를 효과적으로 관리하고 분석할
수 있는 기본적인 SQL 문법 중 하나입니다.