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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기