Postgres SELECT WHERE 에서 EXIST / NOT EXIST 에 대해
- EXIST 의 parameter 로 임의의 select 구문이나 subquery 를 받는다
- 판단은, param 의 결과가 최소 1개 이상의 row 를 return 하면 TRUE, 아니면 FALSE 이다
- 최소 하나라도 return 하는지가 중요하므로, 실제 return 결과는 관심이 없다
- 그래서 판별식 내부는 주로 select 1 이 쓰인다
- far enough to determine 이라서, statement 를 끝까지 완료하지 않을 수 있다(1개 발견되면 끝)
- NOT EXIST 는 반대로 판별식을 만족하는 row 가 하나도 없을때 TRUE 를 return 한다
*EXIST
한번이라도 100 보다 큰 amount 를 지불한 적 있는 고객
SELECT name
FROM customer c
WHERE EXISTS
(SELECT 1
FROM payment p
WHERE p.customer_id = c.customer_id
AND amount > 100 )
ORDER BY name;
*NOT EXIST
한번도 100 보다 큰 amount 를 지불한 적 어는 고객
SELECT name
FROM customer c
WHERE NOT EXISTS
(SELECT 1
FROM payment p
WHERE p.customer_id = c.customer_id
AND amount > 100 )
ORDER BY name;
Comments
Post a Comment