SQLite | 데이터 조회 | 지정된 값 목록과 비교 (IN 절)

조건식을 작성할 때 IN 절을 사용하면 컬럼의 값이 여러 값 중 하나와 일치하는지 여부를 조건식으로 작성할 수 있다. 여기에서는 IN 절을 사용한 조건부 표현식에 대한 작성 방법을 설명한다.

조건식을 작성할 때 사용하는 WHERE 절에 대해서는 조회할 데이터의 조건 설정 (WHERE 절)를 참조한다.

IN 절을 사용한 조건식

IN 절을 사용하면 값 목록과 같이 작성하면,이 목록의 값 중에 하나와 일치하는지 여부를 확인할 수 있다. 형식은 다음과 같다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 IN (값1, 값2, ...);

컬럼의 값이 IN 절에 지정된 값1, 값2, …중에 어느 하나와 일치하면 데이터를 받아온다. 이것은 비교 연산자와 논리 연산자를 사용하여 다음과 같이 작성한 경우와 같다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 = 값1 OR 컬럼 = 값2 OR ...;

그리고 NOT 연산자를 사용하여 지정된 값 목록에 포함되어 있던 않는 데이터를 조회할 수 있다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 NOT IN (값1, 값2, ...);

그러면 실제로 해보도록 한다. 다음과 같이 테이블을 만든다.

create table user (name text, old integer, address text);
sqlite> create table user (name text, old integer, address text);
sqlite> 

INSERT 문을 사용하여 테이블에 데이터를 추가한다.

insert into user values ('devkuma', 39, 'Seoul');
insert into user values ('kimkc', 34, 'Busan');
insert into user values ('araikuma', 26, 'Paju');
insert into user values ('happykuma', 19, 'Paju');
insert into user values ('mykuma', 27, 'Daejeon');
insert into user values ('yourkuma', 28, 'Seongnam');
insert into user values ('raccoon', 31, 'Suwon');
sqlite> insert into user values ('devkuma', 39, 'Seoul');
sqlite> insert into user values ('kimkc', 34, 'Busan');
sqlite> insert into user values ('araikuma', 26, 'Paju');
sqlite> insert into user values ('happykuma', 19, 'Paju');
sqlite> insert into user values ('mykuma', 27, 'Daejeon');
sqlite> insert into user values ('yourkuma', 28, 'Seongnam');
sqlite> insert into user values ('raccoon', 31, 'Suwon');
sqlite> 

조회할 데이터의 조건을 지정하지 않고 데이터를 조회하면 다음과 같다.

select * from user;
sqlite> select * from user;
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
kimkc       34          Busan     
araikuma    26          Paju      
happykuma   19          Paju      
mykuma      27          Daejeon   
yourkuma    28          Seongnam  
raccoon     31          Suwon     
sqlite> 

그러면 IN 절을 사용하여 조건에 일치하는 값의 목록을 지정해 본다. 다음 예제에서는 address 컬럼의 값이 ‘Paju’, ‘Seongnam’, ‘Suwon’에 일치하는 데이터를 조회하고 있다.

select * from user where address in ('Paju', 'Seongnam', 'Suwon');
sqlite> select * from user where address in ('Paju', 'Seongnam', 'Suwon');
name        old         address   
----------  ----------  ----------
araikuma    26          Paju      
happykuma   19          Paju      
yourkuma    28          Seongnam  
raccoon     31          Suwon     
sqlite> 

조건에 일치하는 데이터만 받아올 수 있었다.

다른 테이블에서 얻은 값의 목록과 비교

비교 값의 목록으로 값을 하나 하나 나열하여 작성하는 방법 외에 다른 테이블에서 SELECT 문을 사용하여 값 목록을 얻어와 일치 여부 비교 할 수도 있다. 형식은 다음과 같다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 컬럼 IN (SELECT 컬럼명 FROM 테이블명);

IN 절에서 작성하는 SELECT 문은 하나의 컬럼에서만 값을 받아 오도록 해야 한다. 컬럼의 값이 IN 절 안에 SELECT 문에 의해 받아온 값 목록 중 하나와 일치하는 경우에 데이터를 가져온다.

그러면 실제로 해보도록 하자. 다음과 같이 테이블을 만든다.

create table gyeonggi (id integer, region text);
sqlite> create table gyeonggi (id integer, region text);
sqlite> 

INSERT 문을 사용하여 테이블에 데이터를 추가한다.

insert into gyeonggi values (1, 'Paju');
insert into gyeonggi values (2, 'Seongnam');
insert into gyeonggi values (3, 'Suwon');
insert into gyeonggi values (4, 'Gimpo');
sqlite> insert into gyeonggi values (1, 'Paju');
sqlite> insert into gyeonggi values (2, 'Seongnam');
sqlite> insert into gyeonggi values (3, 'Suwon');
sqlite> insert into gyeonggi values (4, 'Gimpo');
sqlite> 

그러면 user 테이블에서 값을 가져온다. 조건식으로 address 컬럼의 값이 gyeonggi 테이블 region 컬럼의 값에 일치하는 데이터를 조회하고 있다.

select * from user where address in (select region from gyeonggi);
sqlite> select * from user where address in (select region from gyeonggi);
name        old         address   
----------  ----------  ----------
araikuma    26          Paju      
happykuma   19          Paju      
yourkuma    28          Seongnam  
raccoon     31          Suwon     
sqlite> 

조건에 일치하는 데이터만 받아왔다.