sungyup's.

PostgreSQL / SQL Basics / 1.2 Filtering Records

1.2Filtering Records

WHERE로 데이터를 필터링하기

TL;DR

데이터베이스에 저장된 데이터 중 특정 조건을 만족하는 것만 조회하려면 필터(filter)를 걸어야 한다.

이를 위해 가장 기본적으로 사용하는 것이 WHERE 절이다.

"WHERE"로 데이터 필터링하기

sql
SELECT name, area FROM ~~cities~~ WHERE area > 4000;

이 쿼리를 실행하면, cities 테이블에서 area(면적)가 4000보다 큰 도시들의 namearea를 조회할 수 있다.

쿼리 처리 순서

SQL은 코드가 왼쪽에서 오른쪽으로 실행되는 것처럼 보이지만, PostgreSQL 내부에선 실제로 다음과 같은 순서로 처리된다:

  1. FROM cities - 데이터 소스 선정
  2. WHERE area > 4000 - 조건에 맞는 데이터만 필터링
  3. SELECT name, area - 최종적으로 보여줄 컬럼 선택

즉, FROM -> WHERE -> SELECT 순이다.

비교(Comparison) 연산자

데이터를 필터링할 때 주로 사용하는 비교 연산자들은 다음과 같다:

  • =: 같은 값인지 비교
  • <, >, >=, <=: 값의 대소 비교
  • IN (...): 값이 특정 리스트 안에 포함되어 있는지 확인
  • <>: 값이 다른지 비교
  • =!: 값이 다른지 비교
  • BETWEEN A AND B: 특정 값이 A와 B 사이에 있는지 확인
  • NOT IN (...): 값이 특정 리스트 안에 없는지 확인

복합 필터 (Compound filter)

1. BETWEEN

특정 범위 안에 값이 있는지 확인할 때 사용한다.

sql
SELECT name, area FROM cities WHERE area BETWEEN 2000 AND 4000;
  • area가 2000 이상 4000 이하인 도시들을 조회한다.

2. IN

특정 값 목록에 포함된 것들만 조회할 때 사용한다.

sql
SELECT name, area FROM cities WHERE name IN ('Delhi', 'Shanghai');
  • 도시 이름이 'Delhi' 또는 'Shanghai'인 경우만 가져온다.

3. NOT IN

특정 값 목록에 포함되지 않은 것들을 조회할 때 사용한다.

sql
SELECT name, area FROM cities WHERE name NOT IN ('Delhi', 'Shanghai');
  • 도시 이름이 'Delhi'나 'Shanghai'가 아닌 도시들을 가져온다.

4. 복합 조건(AND, OR)

AND(모든 조건을 만족해야 할 때)

sql
SELECT name, area FROM cities WHERE area NOT IN (3043, 8223) AND name = 'Delhi';
  • area가 3043이나 8223이 아니고, 이름이 'Delhi'인 도시를 조회한다.

OR(하나라도 만족하면 될 때)

sql
SELECT name, area FROM cities WHERE area NOT IN (3043, 8223) OR name = 'Delhi';
  • area가 3043이나 8223이 아니거나, 이름이 'Delhi'인 도시를 조회한다.

※ AND, OR을 조합할 때는 괄호를 활용해 명확한 연산 순서를 지정할 수도 있다.

5. 계산 결과를 기준으로 필터링

데이터를 단순 조회하는 것이 아니라, 계산한 결과를 기준으로 조건을 걸 수도 있다.

sql
SELECT name, population / area AS population_density FROM cities WHERE population / area > 6000;
  • population_density(인구 밀도)가 6000보다 큰 도시만 조회한다.
  • SELECTWHERE에서 동일한 계산식을 쓸 수 있다.

데이터 수정하기(Updating Rows)

테이블 안에 저장된 값을 수정하고 싶을 때는 UPDATE 문을 사용한다.

UPDATE 테이블명 SET 속성명 = 값 WHERE 조건 식으로 가능하다.

sql
UPDATE cities SET population = 39505000 WHERE name = 'TOKYO';
  • name이 'Tokyo'인 도시의 population 값을 39,505,000으로 수정한다. ※ WHERE 절을 빼먹으면 모든 행이 수정될 수 있으므로 사용에 주의해야 한다.

데이터 삭제하기 (Deleting Rows)

테이블에서 특정 데이터를 삭제하고 싶을 때는 DELETE 문을 사용한다.

sql
DELETE FROM cities WHERE name = 'Tokyo';

name이 'Tokyo'인 도시를 삭제한다.

※ WHERE 절을 생략하면 테이블 전체 데이터가 삭제되므로 특히 주의해야 한다.