오늘은 SQLite의 Coalesce 함수에 대해 정리해 보겠습니다.
1. Coalesce
coalesce의 원래 뜻은 "합쳐지다" 또는 "병합하다"인데요.
데이터베이스 나 SQL에서는,
NULL 값을 다른 의미 있는 값으로 대체하는 데 주로 사용됩니다.
SQL문에서는 여러개의 표현식 중,
NULL이 아닌 첫 번째 값을 찾아서 반환합니다.
COALESCE(expression1, expression2, ..., expressionN)
예를 들어,
아래에서 쿼리는 첫번째 NULL이 아닌,
'Hello'를 반환합니다.
SELECT COALESCE(NULL, NULL, 'Hello', 'World');
2. 예제
예제를 보면서 COALESCE를 좀 더 이해해 볼까요.
먼저 직원 테이블을 아래와 같이 만듭니다.
CREATE TABLE 직원 (
이름 TEXT,
급여 INTEGER
);
여기에 데이터를 삽입하는데요.
아래와 같이 2번째 넣는 데이터에는,
NULL이 있는 데이터를 삽입하였습니다.
INSERT INTO 직원 VALUES ('김철수', 3000000);
INSERT INTO 직원 VALUES ('이영희', NULL);
당연히 SELECT문으로 급여를 조회하면, NULL값을 보게되는데요.
NULL인 경우, 0으로 대체하려면,
아래와 같이, COALESCE문을 사용하면 됩니다.
SELECT 이름, COALESCE(급여, 0) as 급여
FROM 직원;
3. Join을 사용하는 경우의 예
Join을 사용하여서 테이블을 합쳐셔 조회하는 경우,
특정한 경우에 NULL값이 들어갈 것을 고려해서,
COALESCE를 사용해야하는 경우들이 있습니다.
아래와 같이 학생과 성적 테이블이 있습니다.
CREATE TABLE 학생 (
학번 INTEGER,
이름 TEXT
);
CREATE TABLE 성적 (
학번 INTEGER,
과목 TEXT,
점수 INTEGER
);
이 테이블에 각각 아래와 같은 데이터를 넣습니다.
INSERT INTO 학생 VALUES (11, '김철수');
INSERT INTO 학생 VALUES (12, '이영희');
INSERT INTO 학생 VALUES (13, '박민수');
INSERT INTO 성적 VALUES (11, '수학', 90);
INSERT INTO 성적 VALUES (12, '수학', 85);
다음과 같은 JOIN으로 쿼리를 조회하는데요.
학번이 같은 경우를 기준으로 해서,
성적테이블에 LEFT JOIN하였습니다.
이렇게 되면 13번 학번의 '박민수'는,
성적이 NULL값을 받게 됩니다.
이 때 NULL이 나오면, 0값을 받도록,
COALESCE를 사용하면 됩니다.
SELECT 학생.이름, COALESCE(성적.점수, 0) as 수학점수
FROM 학생
LEFT JOIN 성적 ON 학생.학번 = 성적.학번;
아무래도 JOIN을 해서 조회하는 경우는,
이러한 경우가 발생할 수 있겠지요.
참고로 JOIN에 관해서는 오래된 글이지만,
아래 글을 참조해 주세요.
'Database > SQLite' 카테고리의 다른 글
SQLite NodeJS 모듈 이용해서 CRUD 구현하기 # DBBrowser SQLite3 (3) | 2025.01.16 |
---|
댓글