PostgreSQL / SQL Basics / 1.2 Filtering Records
1.2Filtering Records
WHERE로 데이터를 필터링하기
TL;DR
데이터베이스에 저장된 데이터 중 특정 조건을 만족하는 것만 조회하려면 필터(filter)를 걸어야 한다.
이를 위해 가장 기본적으로 사용하는 것이 WHERE
절이다.
"WHERE"로 데이터 필터링하기
sqlSELECT name, area FROM ~~cities~~ WHERE area > 4000;
이 쿼리를 실행하면, cities
테이블에서 area
(면적)가 4000보다 큰 도시들의 name
과 area
를 조회할 수 있다.
쿼리 처리 순서
SQL은 코드가 왼쪽에서 오른쪽으로 실행되는 것처럼 보이지만, PostgreSQL 내부에선 실제로 다음과 같은 순서로 처리된다:
- FROM cities - 데이터 소스 선정
- WHERE area > 4000 - 조건에 맞는 데이터만 필터링
- SELECT name, area - 최종적으로 보여줄 컬럼 선택
즉, FROM -> WHERE -> SELECT 순이다.
비교(Comparison) 연산자
데이터를 필터링할 때 주로 사용하는 비교 연산자들은 다음과 같다:
=
: 같은 값인지 비교<
,>
,>=
,<=
: 값의 대소 비교IN (...)
: 값이 특정 리스트 안에 포함되어 있는지 확인<>
: 값이 다른지 비교=!
: 값이 다른지 비교BETWEEN A AND B
: 특정 값이 A와 B 사이에 있는지 확인NOT IN (...)
: 값이 특정 리스트 안에 없는지 확인
복합 필터 (Compound filter)
1. BETWEEN
특정 범위 안에 값이 있는지 확인할 때 사용한다.
sqlSELECT name, area FROM cities WHERE area BETWEEN 2000 AND 4000;
area
가 2000 이상 4000 이하인 도시들을 조회한다.
2. IN
특정 값 목록에 포함된 것들만 조회할 때 사용한다.
sqlSELECT name, area FROM cities WHERE name IN ('Delhi', 'Shanghai');
- 도시 이름이 'Delhi' 또는 'Shanghai'인 경우만 가져온다.
3. NOT IN
특정 값 목록에 포함되지 않은 것들을 조회할 때 사용한다.
sqlSELECT name, area FROM cities WHERE name NOT IN ('Delhi', 'Shanghai');
- 도시 이름이 'Delhi'나 'Shanghai'가 아닌 도시들을 가져온다.
4. 복합 조건(AND, OR)
AND(모든 조건을 만족해야 할 때)
sqlSELECT name, area FROM cities WHERE area NOT IN (3043, 8223) AND name = 'Delhi';
- area가 3043이나 8223이 아니고, 이름이 'Delhi'인 도시를 조회한다.
OR(하나라도 만족하면 될 때)
sqlSELECT name, area FROM cities WHERE area NOT IN (3043, 8223) OR name = 'Delhi';
area
가 3043이나 8223이 아니거나, 이름이 'Delhi'인 도시를 조회한다.
※ AND, OR을 조합할 때는 괄호를 활용해 명확한 연산 순서를 지정할 수도 있다.
5. 계산 결과를 기준으로 필터링
데이터를 단순 조회하는 것이 아니라, 계산한 결과를 기준으로 조건을 걸 수도 있다.
sqlSELECT name, population / area AS population_density FROM cities WHERE population / area > 6000;
population_density
(인구 밀도)가 6000보다 큰 도시만 조회한다.SELECT
와WHERE
에서 동일한 계산식을 쓸 수 있다.
데이터 수정하기(Updating Rows)
테이블 안에 저장된 값을 수정하고 싶을 때는 UPDATE
문을 사용한다.
UPDATE
테이블명 SET
속성명 = 값
WHERE
조건 식으로 가능하다.
sqlUPDATE cities SET population = 39505000 WHERE name = 'TOKYO';
name
이 'Tokyo'인 도시의population
값을 39,505,000으로 수정한다. ※ WHERE 절을 빼먹으면 모든 행이 수정될 수 있으므로 사용에 주의해야 한다.
데이터 삭제하기 (Deleting Rows)
테이블에서 특정 데이터를 삭제하고 싶을 때는 DELETE
문을 사용한다.
sqlDELETE FROM cities WHERE name = 'Tokyo';
name
이 'Tokyo'인 도시를 삭제한다.
※ WHERE 절을 생략하면 테이블 전체 데이터가 삭제되므로 특히 주의해야 한다.