241028 TIL - SQL 쿼리 복습 (IN, EXISTS 비교)

J_log·2024년 10월 28일
0

https://school.programmers.co.kr/learn/courses/30/lessons/77487
공간을 2개이상 등록한 '헤비 유저'를 조회하는 sql을 짜는 문제이다.

SELECT * FROM PLACES
WHERE HOST_ID IN(
    SELECT HOST_ID FROM PLACES
    GROUP BY HOST_ID
    HAVING COUNT(ID) >= 2
)
ORDER BY ID;

WHERE절 안에서 서브쿼리를 작성해 해결하였다.
IN은 무엇인지 ?

  • 조회하고자 하는 데이터 값이 하나 이상일 때 사용
  • = 연산자와 유사하지만 IN 연산자는 데이터 값을 여러개, 즉 목록으로 지정한다.

문제를 푼 다른 사람들의 풀이를 보면서 새로운 연산자를 알게되었다.

EXITSTS

  • EXITSTS는 서브쿼리의 결과가 한 건이라도 존재한다면 true를 없으면 false를 반환한다.
  • 서브 쿼리에 일치하는 결과가 한 건이라도 있으면 쿼리를 더 이상 수행하지 않는다.
SELECT * FROM PLACES P1
WHERE EXISTS (
    SELECT 1 FROM PLACES P2
    WHERE P1.HOST_ID = P2.HOST_ID
    GROUP BY HOST_ID
    HAVING COUNT(ID) >= 2
)
ORDER BY ID ASC;
  • EXISTS를 사용해 변경한 sql

IN 과 EXISTS 비교

  • IN의 괄호 안에는 특정 조건이나 서브쿼리가 올 수 있지만 EXISTS의 괄호 안에는 서브쿼리만 올 수 있다.
  • IN 에서는 괄호 안에 있는 조건이나 서브쿼리의 결과 값이 있는지 확인한다.
    • 실제 존재하는 데이터들의 모든 값을 확인
  • EXISTS는 괄호 안의 서브쿼리로부터 해당 값의 존재 유무만 확인한다.
    • 한 건이라도 일치하는 결과가 있으면 더 이상 수행하지 않는다.
post-custom-banner

0개의 댓글