728x90
PostgreSQL에서 IN 절을 사용할 때 보통 단일 컬럼을 대상으로 사용합니다. 하지만 다중 컬럼을 대상으로 IN을 사용하려면 **튜플(ROW VALUE CONSTRUCTOR)**을 활용해야 합니다.
1. 다중 컬럼 IN 쿼리 사용 방법
📌 예제 테이블 생성
먼저 예제 테이블을 생성하겠습니다.
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
first_name TEXT,
last_name TEXT,
department TEXT
);
📌 샘플 데이터 삽입
INSERT INTO employees (first_name, last_name, department) VALUES
('John', 'Doe', 'HR'),
('Jane', 'Smith', 'IT'),
('Michael', 'Brown', 'Finance'),
('Emily', 'Davis', 'IT'),
('Chris', 'Wilson', 'HR');
📌 다중 컬럼 IN 사용 예제
예를 들어, (first_name, last_name)이 특정 값들과 일치하는 직원들을 찾고 싶다면 다음과 같이 작성할 수 있습니다.
SELECT * FROM employees
WHERE (first_name, last_name) IN (('John', 'Doe'), ('Jane', 'Smith'));
✅ 실행 결과:
id | first_name | last_name | department |
1 | John | Doe | HR |
2 | Jane | Smith | IT |
2. 다중 컬럼 IN을 대체할 수 있는 다른 방식
🔹 EXISTS 서브쿼리 사용
다중 컬럼 비교를 수행하는 또 다른 방법은 EXISTS를 활용하는 것입니다.
SELECT * FROM employees e
WHERE EXISTS (
SELECT 1 FROM (VALUES ('John', 'Doe'), ('Jane', 'Smith')) AS t(first_name, last_name)
WHERE e.first_name = t.first_name AND e.last_name = t.last_name
);
이 방식은 비교해야 할 값이 많을 때 성능이 더 나을 수도 있습니다.
🔹 JOIN을 이용한 방법
또 다른 방법으로, 비교할 데이터가 많은 경우 임시 테이블이나 VALUES를 사용한 JOIN을 활용할 수도 있습니다.
SELECT e.*
FROM employees e
JOIN (VALUES ('John', 'Doe'), ('Jane', 'Smith')) AS v(first_name, last_name)
ON e.first_name = v.first_name AND e.last_name = v.last_name;
이 방식은 데이터셋이 클 때 IN 절보다 최적화된 성능을 제공할 수 있습니다.
3. 정리
방법 | 설명 | 장점 | 단점 |
다중 컬럼 IN | (col1, col2) IN ((val1, val2), (val3, val4)) | 간단한 문법 | 값이 많을 경우 성능 저하 가능 |
EXISTS 서브쿼리 | 서브쿼리를 활용하여 다중 컬럼 비교 | 유연한 조건 추가 가능 | 다소 복잡한 문법 |
JOIN 활용 | JOIN을 이용해 비교 값 매칭 | 최적화 가능, 대량 데이터에 적합 | JOIN이 필요 |
LIST
'Develop' 카테고리의 다른 글
Open Graph(OG) 프로토콜이란? 사용방법까지 총정리 (0) | 2025.02.13 |
---|---|
TinyMCE (타이니MCE) 에디터 fullscreen 사이즈 변경 (0) | 2025.02.13 |
[JavaScript] 변수 선언문 완벽 정리: var, let, const 차이점과 주의점 (0) | 2025.02.12 |
[HTML] iframe 사용법 및 내부/외부 접근 예제 (1) | 2025.02.10 |
[jQuery] click과 touchend 차이점 및 주의사항 (2) | 2025.02.07 |