EXISTS & IN
PostgreSQL에서 기존 데이터와의 중복을 방지하는 법을 알아봅니다.
EXISTS
xxxxxxxxxx
EXISTS (subquery)
EXISTS
연산자는 subquery
가 1튜플(row)이라도 반환되는 경우, 결과가 true
로 반환됩니다.
예시
고객(customer
)중 11보다 더 많은 비용(amount
)을 지불한 사람들을 출력
xxxxxxxxxx
SELECT first_name,
last_name
FROM customer c
WHERE EXISTS
(SELECT 1
FROM payment p
WHERE p.customer_id = c.customer_id
AND amount > 11 )
ORDER BY first_name,
last_name;
NOT EXISTS
NOT EXISTS
연산자는 EXISTS
연산자의 반대의 결과를 출력합니다.
NOT EXISTS
연산자는 subquery
가 1튜플(row)이라도 반환되는 경우, 결과가 false
로 반환됩니다.
예시
고객(customer
)중 11미만의 비용(amount
)을 지불한 사람들을 출력
xxxxxxxxxx
SELECT first_name,
last_name
FROM customer c
WHERE NOT EXISTS
(SELECT 1
FROM payment p
WHERE p.customer_id = c.customer_id
AND amount > 11 )
ORDER BY first_name,
last_name;
IN
xxxxxxxxxx
VALUE IN (value1, value2, ...)
IN
연산자는 WHERE
절 내에서 값들을 확인하는데, 사용됩니다.
xxxxxxxxxx
VALUE IN ( SELECT value FROM table_nm )
IN
다음에 SELECT
문을 넣어도 사용이 가능합니다. value들의 목록이 IN
뒤에 들어가도록만 만들어주면 됩니다.
NOT IN
NOT
과 IN
을 합쳐 목록에 있는 value가 매칭되는지 확인할 수 있습니다.
예시
고객의 ID(customer_id
)가 1
혹은 2
가 아닌 정보
xxxxxxxxxx
SELECT
customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id NOT IN (1, 2);
<> (not equal operator)
<>
Not equal 연산자와 AND
연산자를 사용하면 위의 예시와 같은 결과를 출력할 수 있습니다.
xxxxxxxxxx
SELECT
customer_id,
rental_id,
return_date
FROM
rental
WHERE
customer_id <> 1
AND customer_id <> 2;
'DB > postgresql' 카테고리의 다른 글
PostgreSQL INSERT 중복방지 (0) | 2020.04.10 |
---|---|
pg_hba.conf 설정하기 (0) | 2019.01.15 |