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