Learning SQL 4장 요약 - 필터링

SQL

2022. 11. 24. 17:00


4장 필터링

 

4장에서는 select, updae, delete 문의

where 절에서 사용할 수 있는 다양한 필터조건을 설명한다.

 

조건 유형

동등조건(=)

WHERE date(r.rental_date) = '2005-06-14';

 

부등조건(!= 또는 <>)

WHERE date(r.rental_date) <> '2005-06-14';

not 연산자를 사용할 수도 있으나 이해하기엔 어렵다.

 

범위조건 (>, <, >=, <=, between)

where rental_date < '2005-05-25';

 

between 연산자

날짜 예)

WHERE rental_date BETWEEN '2005-06-14' AND '2005-06-16';

※ 유의할 점은, 시간의 구성요소를 따로 지정하지 않으면,

시간은 기본적으로 자정으로 구성되므로

2005-06-14 00:00:00부터 2005-06-16 00:00:00까지이다.

여기엔 사실상 14일, 15일자만 포함되는 것이다.

 

숫자 예)

 

WHERE amount BETWEEN 10.0 AND 11.99;

위와 같은 예제에선 10.0과 11.99가 포함된 결과셋을 반환한다.

 

문자열 예)

WHERE last_name BETWEEN 'FA' AND 'FR';

FRANKLIN같은 경우는 FR을 벗어난다.

이런 경우 FRB와 같이 지정해주면 된다.

 

집합조건 (책에서는 멤버십조건으로 표기)

or을 여러 번 병기하는 것보다 in 연산자를 이용하는 것이 낫다.

WHERE rating IN ('G', 'PG');

 

서브쿼리를 사용하여 집합을 생성할 수도 있다.

SELECT title, rating
FROM film
WHERE rating IN (SELECT rating FROM film WHERE title LIKE '%PET%');

 

존재하지 않는지를 확인하려면 not in 연산자를 사용하면 된다.

WHERE rating NOT IN ('PG-13', 'R', 'NC-17');

 

일치조건

와일드카드 사용

와일드카드 문자 일치
_ 정확히 문자 하나
% 개수 상관없이 모든 문자 (문자가 없어도 됨)
WHERE last_name LIKE '_A_T%S';

 

Null

is null

WHERE return_date IS NULL;

return_date  = NULL로 적으면 Empty Set만 반환한다.

 

is not null - 값이 할당되어 있는지 확인

WHERE return_date IS NOT NULL;

 

null의 함정

값이 할당되어 있지 않은 데이터를 놓칠 수가 있다.

예를 들어, 5월에서 8월 사이에 반납되지 않은  데이터를 찾는다고 할 경우,

다음과 같이 null 데이터도 찾을 수 있어야 한다.

SELECT rental_id, customer_id, return_date
FROM rental
WHERE return_date IS NULL
OR return_date NOT BETWEEN '2005-05-01' AND '2005-09-01';