PostgreSQL EXISTS연산자를 사용하여 하위 쿼리에 행이 있는지 테스트 하는 방법
EXISTS연산자는 행의 존재 여부를 테스트하는 부울 연산자
EXISTS (subquery)
EXISTS은 하위 쿼리 인 인수를 받아들입니다.
하위 쿼리가 하나 이상의 행을 반환하는 경우 결과 EXISTS는 true입니다.
하위 쿼리가 행을 반환하지 않는 경우 결과 EXISTS는 false입니다.
SELECT
column1
FROM
table_1
WHERE
EXISTS( SELECT
1
FROM
table_2
WHERE
column_2 = table_1.column_1);
반응형
1) 금액이 11보다 큰 결제가 하나 이상 있는 고객을 찾습니다.
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;
- customer테이블의 각 고객에 대해 하위 쿼리는 payment테이블을 확인하여 해당 고객이 한 번 이상 결제( p.customer_id = c.customer_id)했고 금액이 11( amount > 11) 보다 큰지 확인합니다.
2) 존재하지 않음 예
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;
- NOT연산자 EXISTS 연산자의 결과를 부정합니다.
- 하위 쿼리가 행을 반환하지 않으면 true를 반환한다는 의미입니다.
- 하위 쿼리가 하나 이상의 행을 NOT EXISTS반환하면 false를 반환합니다.
3) 존재하고 NULL
SELECT
first_name,
last_name
FROM
customer
WHERE
EXISTS( SELECT NULL )
ORDER BY
first_name,
last_name;
반응형
'SW ENGINEERING > Postgres' 카테고리의 다른 글
[PostgreSQL] BASIC - INSERT (0) | 2021.09.06 |
---|---|
[PostgreSQL] BASIC - Recursive Query (0) | 2021.09.03 |
[PostgreSQL] BASIC - CTE (0) | 2021.09.03 |
[PostgreSQL] BASIC - ALL (0) | 2021.09.03 |
[PostgreSQL] BASIC - ANY (0) | 2021.09.03 |
최근댓글