sqlite_version 함수를 사용하면 현재 실행중인 SQLite 버전 정보를 확인할 수 있다. 여기에서는 sqlite_version 함수의 사용법에 대해 설명한다.

sqlite_version 함수 사용법

sqlite_version 함수는 실행중인 SQLite 버전 정보를 반환한다. 형식은 다음과 같다.

sqlite_version()

SQLite 버전을 나타내는 문자열을 반환한다.

--

그러면 실습을 해보도록 하겠다.

select sqlite_version();
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select sqlite_version();
sqlite_version()
----------------
3.19.3          
sqlite> 

SQLite 버전이 조회 되었다.

sqlite_version 함수 말고도 명령어로도 버전을 확인 할 수도 있다.

sqlite> .version
SQLite 3.19.3 2017-06-27 16:48:08 2b0954060fe10d6de6d479287dd88890f1bef6cc1beca11bc6cdb79f72e2377b

함수보다 좀 더 자세하게 빌드 정보도 같이 조회된다.

typeof 함수를 사용하면 테이블에 저장된 값의 데이터 타입을 확인할 수 있다. 여기에서는 typeof 함수의 사용법에 대해 설명한다.

typeof 함수 사용법

typeof 함수는 값의 데이터 타입을 확인하기 위해서 사용한다. 형식은 다음과 같다.

typeof(값)

SQLite에서는 테이블의 컬럼에 설정하는 데이터 타입과 실제로 저장된 값의 데이터 타입은 별개로 생각해야 한다. SQLite 데이터 형식에 대한 자세한 내용은 "데이터 타입"을 참조한다.

typeof 함수는 값의 데이터 타입을 나타내는 문자열을 반환한다. 데이터 형식으로 반환되는 값은 integer, real, text, blob, null 중 하나이다. 값에 컬럼명을 지정하면 컬럼에 저장되는 값의 데이터 타입을 반환한다.

--

그러면 실습을 해보도록 하겠다. 먼저 다음과 같이 테이블을 만든다.

create table test (id integer, data none);
sqlite> create table test (id integer, data none);
sqlite> 

INSERT 문을 사용하여 다음과 같이 데이터를 추가한다.

insert into test values (1, 3);
insert into test values (2, 15.24);
insert into test values (3, 'Peach');
insert into test values (4, NULL);
insert into test values (5, zeroblob(2));
sqlite> insert into test values (1, 3);
sqlite> insert into test values (2, 15.24);
sqlite> insert into test values (3, 'Peach');
sqlite> insert into test values (4, NULL);
sqlite> insert into test values (5, zeroblob(2));
sqlite> 

그러면 typeof 함수를 사용하여 data 컬럼에 저장되는 값의 데이터 타입을 확인해 보자.

select data, typeof(data) from test;
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select data, typeof(data) from test;
data        typeof(data)
----------  ------------
3           integer     
15.24       real        
Peach       text        
            null        
            blob        
sqlite> 

컬럼에 저장되는 값의 데이터 타입을 표시 되었다.

last_insert_rowid 함수를 사용하면 테이블에 마지막으로 추가된 데이터의 ROWID를 받아 올 수 있다. 여기에서는 last_insert_rowid 함수의 사용법에 대해 설명한다.

last_insert_rowid 함수 사용법

last_insert_rowid 함수는 마지막으로 추가된 행의 ROWID를 조회하는 데 사용한다. 형식은 다음과 같다.

last_insert_rowid()

ROWID에 대해서는 "ROWID 참조 및 INTEGER PRIMARY KEY와의 관계"를 참조한다. 테이블에 추가된 데이터에 자동으로 설정되는 특별한 값이다. 마지막에 추가된 데이터의 ROWID를 검색할 WHERE 절을 사용 마지막에 추가된 데이터에서 정보를 조회 시에 사용할 수 있다.

--

그러면 실습을 해보도록 하겠다. 먼저 다음과 같이 테이블을 만든다.

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

INSERT 문을 사용하여 다음과 같이 데이터를 추가한다.

insert into user values (1, 'devkuma');
insert into user values (2, 'kimkc');
insert into user values (3, 'araikuma');
sqlite> insert into user values (1, 'devkuma');
sqlite> insert into user values (2, 'kimkc');
sqlite> insert into user values (3, 'araikuma');
sqlite>

그러면 last_insert_rowid 함수를 사용하여 user 테이블에 마지막으로 추가된 데이터의 ROWID를 조회하고 SELECT 문에서 WHERE 절에서 사용하고 마지막에 추가된 데이터를 조회하려고 한다.

select * from user where rowid = last_insert_rowid();
sqlite> .mode column
sqlite> .header on
sqlite>
sqlite> select * from user where rowid = last_insert_rowid();
id          name
----------  ----------
3           araikuma
sqlite>

이렇게 마지막에 추가된 데이터를 조회하는데 사용할 수 있다.

nullif 함수는 두 인수의 값을 비교하여 같으면 NULL을 반환하고 같지 않으면 첫 번째 인수의 값을 반환한다. 여기에서는 nullif 함수의 사용법에 대해 설명한다.

nullif 함수 사용법

nullif 함수는 두 값을 비교하여 같으면 NULL을 반환하고 같지 않으면 첫 번째 값을 반환한다. 형식은 다음과 같다.

nullif(값1, 값2)

첫 번째 인수의 값을 두 번째 인수와 비교하여 같다면 NULL로 대체하려는 경우에 사용한다. 예를 들어, 두 번째 인수에 0을 지정하여 0과 같으면 NULL로 하고 싶은 경우에 사용할 수 있다.

--

그러면 실습을 해보도록 하겠다. 먼저 다음과 같이 테이블을 만든다.

create table score (name text, point integer);
sqlite> create table score (name text, point integer);
sqlite>

INSERT 문을 사용하여 다음과 같이 데이터를 추가한다.

insert into score values ('devkuma', 84);
insert into score values ('kimkc', 73);
insert into score values ('araikuma', -1);
insert into score values ('happykuma', 91);
sqlite> insert into score values ('devkuma', 84);
sqlite> insert into score values ('kimkc', 73);
sqlite> insert into score values ('araikuma', -1);
sqlite> insert into score values ('happykuma', 91);
sqlite>

여기서 avg 함수를 사용하여 point 컬럼 값의 평균을 구한다. 아래와 같이 평균을 구하면 (84 + 73 - 1 + 91) ÷ 4 = 61.75 이다.

select avg(point) from score;
sqlite> .mode column
sqlite> .header on
sqlite>
sqlite> select avg(point) from score;
avg(point)
----------
61.75
sqlite>

수치가 -1의 컬럼은 어떤 이유로 제외하려고 한다면, nullif 함수를 사용 컬럼의 값이 -1 인 경우에는 NULL로 변환하여 평균을 구한다. avg 함수는 NULL 값은 제외하고 계산하기 때문에 아래와 같이 평균을 구하면 (84 + 73 + 91) ÷ 3 = 82.66이다.

select avg(nullif(point, -1)) from score;
sqlite> select avg(nullif(point, -1)) from score;
avg(nullif(point, -1))
----------------------
82.6666666666667
sqlite>

이와 같이 특정 값과 같은 경우에 NULL로 대체하려는 경우에 사용한다.

ifnull 함수를 사용하면 첫 번째 인수의 값이 NULL 인 경우 두 번째 인수의 값을 반환해 준다. coalesce 함수도 동일하게 동작한다. 여기에서는 ifnull 함수 및 coalesce 함수의 사용법에 대해 설명한다.

ifnull 함수와 coalesce 함수 사용법

ifnull 함수는 첫 번째로 지정된 인수의 값이 NULL 인 경우에 두 번째 인수의 값을 반환한다. 형식은 다음과 같다.

ifnull(값1, 값2)

coalesce 함수는 첫번째부터 n-1번째 인수의 값 중 처음 NULL이 아닌 값을 반환한다. 모든 NULL인 경우에는 마지막 n번째 인수의 값을 반환한다. 형식은 다음과 같다.

coalesce (값1, 값2, ..., n값)

ifnull 함수는 coalesce 함수에 인수를 2개로 한 경우와 동일하다.

--

그러면 실습을 해보도록 하겠다. 먼저 다음과 같이 테이블을 만든다.

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

INSERT 문을 사용하여 다음과 같이 데이터를 추가한다.

insert into user values (1, 'devkuma', 'Seoul');
insert into user values (2, 'kimkc', NULL);
insert into user values (3, 'araikuma', 'Busan');
insert into user values (4, NULL, 'Paju');
insert into user values (5, NULL, NULL);
sqlite> insert into user values (1, 'devkuma', 'Seoul');
sqlite> insert into user values (2, 'kimkc', NULL);
sqlite> insert into user values (3, 'araikuma', 'Busan');
sqlite> insert into user values (4, NULL, 'Paju');
sqlite> insert into user values (5, NULL, NULL);
sqlite> 

그러면 ifnull 함수를 사용하여 name 컬럼에 저장되는 값이 NULL아 아닌 경우는 name 컬럼의 값을 반환하고 NULL 인 경우에 'NoName'를 반환하려고 한다.

select id, ifnull(name, 'NoName') from user;
sqlite> .mode column
sqlite> .header on
sqlite> 
sqlite> select id, ifnull(name, 'NoName') from user;
id          ifnull(name, 'NoName')
----------  ----------------------
1           devkuma               
2           kimkc                 
3           araikuma              
4           NoName                
5           NoName                
sqlite> 

name 컬럼에 NULL이 아닌 값이 저장되어 있으면 그 값을 반환하고 NULL 인 경우에는 지정한 값을 반환하였다.

다음은 coalesce 함수를 사용하여 name 컬럼에 저장되는 값이 NULL이 아닌 경우에 name 컬럼의 값을 반환하고, name 컬럼의 값이 NULL 인 경우에는 address 컬럼 값를 반환하며, address 컬럼의 값이 NULL이 아닌 경우에는 address 컬럼의 값을 NULL 인 경우에는 'NoName'를 반환하려고 한다.

select id, coalesce(name, address, 'NoName') from user;
sqlite> select id, coalesce(name, address, 'NoName') from user;
id          coalesce(name, address, 'NoName')
----------  ---------------------------------
1           devkuma                          
2           kimkc                            
3           araikuma                         
4           Paju                             
5           NoName                           
sqlite> 

name 컬럼과 address 컬럼의 값을 조회하여 먼저 NULL이 아닌 값을 받아오고, 모두 NULL 인 경우에는 지정한 값을 받아올 수 있었다.

+ Recent posts