본 게시글은 패스트캠퍼스의 SQL/DB 올인원 패키지 강좌를 수강하며 제가 기억할 수 있도록 작성한 것으로, 아주 기초적인 내용으로 구성되어 있습니다.
IN
특정 집합(컬럼 혹은 리스트)에서 특정 집합 혹은 리스트가 존재하는지 판단하는 역할을 수행한다. IN 연산자 뒤에는 괄호를 통해 묶인 일련의 값들로 구성된 집합, 서브쿼리가 올 수 있다. 이 데이터 내에 일치하는 값을 조건으로 줄 때 'WHERE [조건컬럼명] IN [집합]' 혹은 'WHERE [조건컬럼명] IN [서브쿼리]'의 형태로 나타낼 수 있다.
SELECT [컬럼 리스트]
FROM [테이블명]
WHERE [컬럼명] IN (값1, 값2, ..);
SELECT [컬럼 리스트]
FROM [테이블명]
WHERE [컬럼명] IN (SELECT ...);
아래의 두 쿼리를 보자. 둘은 같은 데이터를 조회한다.
SELECT customer_id, rental_id, renturn_date
FROM rental
WHERE customer_id = 1 OR customer_id = 2 -- OR 연산자 사용
ORDER BY return_date DESC;
SELECT customer_id, rental_id, renturn_date
FROM rental
WHERE customer_id IN (1, 2) -- IN 연산자 사용
ORDER BY return_date DESC;
집합의 경우에 원소 개수만큼 OR를 사용하게 되면 원소 개수가 커질수록 가독성이 매우 안좋아진다. 이럴 때 IN 연산자를 통해 간단하게 표현할 수 있다.
이후에 서브 쿼리에 대해 자세히 다시 다뤄볼 생각이나, IN 연산자 실습을 위해 간단하게만 짚고 넘어가겠다. 아래의 쿼리에서 괄호로 묶인 서브 쿼리는 반환일자가 '2005년 5월 27일'인 렌탈 내역에서 고객 아이디를 반환한다. 메인 쿼리는 이 서브 쿼리에서 조회된 customer_id와 일치하는 레코드의 first_name, last_name을 조회한다.
SELECT first_name, last_name
FROM customer
WHERE customer_id IN (
SELECT customer_id
FROM rental
WHERE CAST(return_date AS DATE)='2005-05-27'
);
* CAST()는 데이터 타입을 변환하는 함수로 다음과 같은 형태로 사용된다. 데이터 타입 변환에 대해서는 추후에 따로 하나의 글로 다루겠다.
CAST([컬럼명] AS [데이터 타입])
NOT IN
IN 연산자를 NOT 연산자와 함께 사용함으로써, 해당 집합 또는 서브쿼리의 데이터와 일치하지 않는 모든 데이터를 조회할 수 있다.
SELECT [컬럼 리스트]
FROM [테이블명]
WHERE [컬럼명] NOT IN (값1, 값2, ..);
SELECT [컬럼 리스트]
FROM [테이블명]
WHERE [컬럼명] NOT IN (SELECT ...);
아래의 두 쿼리를 보자. 둘은 같은 데이터를 조회한다.
SELECT customer_id, rental_id, renturn_date
FROM rental
WHERE customer_id <> 1 AND customer_id <> 2 -- AND 연산자 사용
ORDER BY return_date DESC;
SELECT customer_id, rental_id, renturn_date
FROM rental
WHERE customer_id NOT IN (1, 2) -- NOT IN 연산자 사용
ORDER BY return_date DESC;
'Database > PostgreSQL' 카테고리의 다른 글
SQL) 실습 내용 정리(데이터 조회와 필터링) (0) | 2021.05.18 |
---|---|
SQL) IS NULL (0) | 2021.05.18 |
SQL) LIMIT, FETCH를 통해 행의 수 한정하기, OFFSET 키워드로 인덱스 지정하기 (0) | 2021.05.15 |
SQL) OUTER JOIN (0) | 2021.05.11 |
SQL) INNER JOIN, CASE문, INTO (0) | 2021.05.01 |