Skip to main content

Command Palette

Search for a command to run...

[sql] IN, Equal(=), EXISTS

Published
•2 min read•View as Markdown
K

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).

1️⃣ IN 연산자의 역할

IN 연산자는 여러 개의 값을 포함하는 조건을 만들 때 사용된다.
즉, WHERE 컬럼 IN (값1, 값2, 값3, ...) 형태로 특정 컬럼이 서브쿼리의 결과 중 하나와 일치하는지 확인한다.

✅ 예제: IN을 사용한 서브쿼리

SELECT film_id, title
FROM film
WHERE film_id IN (
    SELECT inventory.film_id
    FROM rental
    INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
    WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30'
)
ORDER BY title;

📌 설명:

  • 서브쿼리는 여러 개의 film_id를 반환할 수 있음 (예: 101, 305, 502 등)

  • IN 연산자를 사용하여 film 테이블에서 film_id가 서브쿼리 결과에 포함된 영화만 선택

  • 결과적으로, 반납된 영화 목록만 조회 가능

2️⃣ =(Equal) 연산자와 IN의 차이

IN을 사용해야 하는 이유는, 서브쿼리가 단일 값이 아니라 여러 개의 값(행)을 반환하기 때문이다.
만약 서브쿼리가 하나의 값만 반환한다면, =(Equal) 연산자를 사용할 수도 있다.

❌ 잘못된 예제: 단일 값이 아닐 경우 = 사용하면 오류 발생

SELECT film_id, title
FROM film
WHERE film_id = (
    SELECT inventory.film_id
    FROM rental
    INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
    WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30'
);

🔴 오류 발생 가능:

  • 위 쿼리는 서브쿼리가 여러 개의 film_id를 반환할 경우 실행되지 않음

  • = 연산자는 단일 값과만 비교할 수 있기 때문

✅ 서브쿼리가 단일 값만 반환하는 경우 = 사용 가능

SELECT film_id, title
FROM film
WHERE film_id = (
    SELECT MAX(inventory.film_id)
    FROM rental
    INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
    WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30'
);

📌 설명:

  • MAX(inventory.film_id)는 하나의 값만 반환하므로 = 사용 가능

3️⃣ EXISTS와 IN의 차이

또한, EXISTS는 서브쿼리가 행이 존재하는지 여부만 확인하는 연산자로, IN과는 다르게 동작한다.

✅ EXISTS 사용 예제

SELECT film_id, title
FROM film f
WHERE EXISTS (
    SELECT 1
    FROM rental r
    INNER JOIN inventory i ON i.inventory_id = r.inventory_id
    WHERE i.film_id = f.film_id
    AND return_date BETWEEN '2005-05-29' AND '2005-05-30'
);

📌 설명:

  • EXISTS는 서브쿼리에서 film_id가 하나라도 존재하면 TRUE 반환

  • IN과 달리 특정 값을 비교하지 않고 존재 여부만 확인


정리

✔ 서브쿼리가 여러 개의 값을 반환하면 IN을 사용해야 한다.
✔ 서브쿼리가 하나의 값만 반환하는 경우 =을 사용할 수 있다.
✔ 필터링이 아니라 단순히 존재 여부만 확인하고 싶다면 EXISTS를 사용하면 된다.

More from this blog

[Python 자료구조] Binary Tree(이진 트리) 개념과 배열

자료구조 중에서도 가장 자주 등장하고, 가장 중요한 트리 중 하나가 바로 이진트리(Binary Tree)이다.만약 자료구조 공부를 처음 시작했다면, 이진트리는 꼭 제대로 이해하고 넘어가야 할 핵심 개념이다. 그렇다면 이진트리는 도대체 어떤 구조이며, 왜 이렇게 중요할까? 🌳 이진트리란? 이진트리(Binary Tree)는 이름 그대로 자식 노드를 최대 두 개까지만 가질 수 있는 트리를 의미한다.자식 노드가 1개거나 0개일 수도 있지만, 최대...

Apr 8, 20253 min read

[Python 자료구조] Tree(트리) 구조

회사 조직도, 가계도, 또는 어떤 계층적인 구조를 표현할 때 자주 등장하는 그림이 있다. 바로 '트리 구조'이다. 그런데 이 구조를 처음 보면, "도대체 어디가 나무야?" 라고 생각할 수 있다. 하지만 나무를 거꾸로(180도 돌려서) 생각해보면 이해가 쉽다. 위쪽에 커다란 줄기(기둥)가 있고, 아래로 가지가 퍼져 나가는 모습과 아주 흡사하기 때문이다. 그래서 우리는 이런 구조를 트리(Tree) 구조라고 부른다. 🧩 트리(Tree)란 무엇인가...

Apr 8, 20253 min read

[Python 자료구조] Stack(스택)

스택 정의, 값 넣기/빼기 프로그래밍을 처음 접할 때 나오는 대표적인 자료구조 중 하나가 바로 스택(Stack) 이다. 이름만 들으면 어렵게 느껴질 수 있지만, 실제로는 우리 일상에서도 쉽게 찾아볼 수 있는 개념이다. 예를 들어 젠가(Jenga) 게임을 떠올려보자. 스택이란? 젠가로 이해하는 Stack의 원리 젠가 블럭을 하나씩 통에 넣고 꺼내는 상황을 상상해보자. 가장 최근에 넣은 블럭은 통의 가장 위에 쌓이게 된다. 그리고 꺼내고자 할 때...

Apr 7, 20253 min read

[Sql] 제약 조건과 무결성

SQL을 공부하다 보면 반드시 만나게 되는 용어들이 있다. 바로 기본키, 외래키, 무결성 제약 조건 같은 개념이다. 이 글에서는 이 용어들을 단순히 암기하는 게 아니라, 예시를 통해 자연스럽게 이해할 수 있도록 정리해보았다. 🎯 제약 조건이란? 제약 조건(Constraint)은 데이터베이스에 저장되는 데이터의 정확성과 신뢰성을 보장하기 위해 설정하는 규칙이다. ✅ 한 줄에 하나씩만 작성해야 하며, 테이블 생성 시 컬럼 옆에 정의하거나 AL...

Apr 7, 20253 min read

[Python TIL] Python에서 False와 True로 평가되는 값들

파이썬에서는 if 조건문이나 while 같은 컨트롤 흐름에서 자동으로 False로 간주되는 값들이 있다. 이걸 "Falsy 값" 또는 "Falsy Object" 라고 부른다. 이걸 알아두면 코드를 훨씬 깔끔하게 쓸 수 있다. 예를 들어, if not my_list: 같은 표현이 빈 리스트를 체크하는 데 쓰이기도 하기 때문이다. ⚠️ 파이썬에서 False로 평가되는 값들 (Falsy 값) 유형예시설명 숫자형0, 0.0, 0j정수, ...

Apr 6, 20252 min read

Code Compass

75 posts