SQLite | 데이터 조회 | 조회할 데이터의 조건 설정 (WHERE 절)


SELECT 문에서 데이터를 조회할 때 조건을 지정하지 않으면 테이블에 포함된 모든 데이터를 받아 오지만 WHERE 절을 사용하면 조건에 일치하는 데이터만 조회 할 수 있다. 여기에서는 WHERE 절을 사용하여 조회할 데이터의 조건을 설정하는 방법에 대해 설명한다.

WHERE 절을 이용한 조건 설정

WHERE 절을 이용하여 조회할 데이터의 조건을 설정할 수 있다. 형식은 다음과 같다.

SELECT 컬럼명, ... FROM 테이블명 WHERE 조건식;

WHERE 절 다음에 어떤 데이터를 받아 수 있는지 조건식을 작성한다. 어떤 작성 방식이 가능한지는 나중에 살펴 보겠다. 우선 간단한 예를 보도록 하자.

그러면 실제로 조건식을 지정해 보자. 다음과 같이 테이블을 만든다.

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, 'Seoul');
insert into user values ('happykuma', 19, 'Seoul');
insert into user values ('mykuma', 27, 'Daejeon');
insert into user values ('yourkuma', 28, 'Gwangju');
insert into user values ('raccoon', 31, 'Busan');
sqlite> insert into user values ('devkuma', 39, 'Seoul');
sqlite> insert into user values ('kimkc', 34, 'Busan');
sqlite> insert into user values ('araikuma', 26, 'Seoul');
sqlite> insert into user values ('happykuma', 19, 'Seoul');
sqlite> insert into user values ('mykuma', 27, 'Daejeon');
sqlite> insert into user values ('yourkuma', 28, 'Gwangju');
sqlite> insert into user values ('raccoon', 31, 'Busan');
sqlite> 

조회할 데이터의 조건을 지정하지 않고 데이터를 조회하면 다음과 같이 테이블에 저장된 모든 데이터를 받아온다.

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

그러면 조건식의 간단한 예로 특정 컬럼에 저장되는 값이 지정한 값과 일치하는 데이터를 조회해 보려고 한다. 다음 예제에서는 address 컬럼의 값이 ‘Seoul’인 데이터를 조회하고 있다.

select * from user where address = 'Seoul';
sqlite> select * from user where address = 'Seoul';
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
araikuma    26          Seoul     
happykuma   19          Seoul     
sqlite> 

동일하게 이번에는 address 컬럼의 값이 ‘Busan’인 데이터를 조회해 본다.

select * from user where address = 'Busan';
sqlite> select * from user where address = 'Busan';
name        old         address   
----------  ----------  ----------
kimkc       34          Busan     
raccoon     31          Busan     
sqlite> 

여기까지 조건식으로 특정 컬럼의 값을 지정하고 일치하는 데이터를 조회해 봤다. 그 밖에도 비교 연산자를 사용한 조건식과 논리 연산자를 사용한 조건식 등을 작성할 수도 있다. 이어서 살펴보도록 하겠다.

비교 연산자를 사용한 조건식

WHERE 절에서 다음과 같은 비교 연산자를 사용할 수 있다.

비교 연산자 설명
a = b a와 b는 같다
a <> b a와 b는 같지 않다
a > b a는 b보다 크다
a >= b a가 b 이상이다
a < b a는 b보다 작다
a <= b a가 b 이하이다

같은지 같지 않은지에 대해서는 다음과 같은 연산사도 사용할 수 있다.

비교 연산자 설명
a == b a와 b는 같다.
a != b a와 b는 같지 않다.

그러면 비교 연산자를 사용한 예제로 old 컬럼의 값이 30 이상 데이터를 받아온다.

select * from user where old >= 30;
sqlite> select * from user where old >= 30;
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
kimkc       34          Busan     
raccoon     31          Busan     
sqlite> 

이번에는 address 컬럼의 값이 ‘Busan’이 아닌 데이터를 받아온다.

select * from user where address <> 'Busan';
sqlite> select * from user where address <> 'Busan';
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
araikuma    26          Seoul     
happykuma   19          Seoul     
mykuma      27          Daejeon   
yourkuma    28          Gwangju   
sqlite> 

모두 조건식으로 작성된 조건에 일치하는 데이터만 받아 올 수 있었다.

논리 연산자를 사용한 조건식

보다 복잡한 조건식으로 논리 연산자 AND, OR, NOT을 사용할 수 있다.

WHERE 조건식1 AND 조건식 2
WHERE 조건식1 OR 조건식 2
WHERE NOT 조건식

AND를 사용하면 조건식1과 조건식2를 모두 만족하는 경우에 데이터를 받아온다. OR을 사용하면 조건식1과 조건식2의 적어도 하나의 조건식을 만족하는 데이터를 받아온다. NOT 연산자는 부정으로 조건식과 일치하지 않는 데이터를 받아온다.

그러면 논리 연산자를 사용한 예제로 old 컬럼의 값이 20보다 크고, 또한 address 컬럼의 값이 ‘Seoul’인 데이터를 받아오도록 해보자.

select * from user where old > 20 and address = 'Seoul';
sqlite> select * from user where old > 20 and address = 'Seoul';
name        old         address   
----------  ----------  ----------
devkuma     39          Seoul     
araikuma    26          Seoul     
sqlite> 

조건에 일치하는 데이터만 조회되었다.