ISNULL(), NVL(), IFNULL() 또는 COALESCE()와 동등한 SQLite
-
SQLite 데이터베이스에서
NULL
값이 있는 레코드 가져오기 -
THEN
및ELSE
를 사용하여 SQLite 데이터베이스에서NULL
값 확인 -
SQLite 데이터베이스에서
COALESCE()
함수 사용 -
SQLite 데이터베이스에서
NVL()
함수 사용 -
COALESCE()
와ifnull()
함수의 차이점 -
COALESCE()
와isnull()
함수의 차이점
SQLite는 데이터베이스에서 레코드를 생성, 읽기, 업데이트 및 삭제하는 데 사용됩니다. 데이터베이스에는 데이터 유지를 위한 다양한 테이블이 포함되어 있습니다.
각 테이블은 레코드를 전달하는 행과 열로 구성됩니다. 이러한 레코드에는 종종 비어 있거나 null 값이 있어 데이터를 검색하는 동안 문제나 오류가 발생합니다.
SQLite 데이터베이스에서 NULL
값이 있는 레코드 가져오기
SQLite 데이터베이스에서 레코드를 가져오려면 SQLite 문에서 SELECT
절을 사용합니다. SELECT
문은 또한 NULL
값을 가져오고 무시하며 값이 있는 레코드만 가져옵니다.
SELECT field
FROM table
WHERE field = aCondition
테이블 내부에 빈 값이 있으면 문제가 발생합니다. SELECT
문은 빈 값이 있는 레코드를 수용하기 위해 지정된 텍스트로 빈 값을 기록하거나 채우기 위해 NULL
확인이 필요합니다.
SELECT field, [isnull](field, '')
FROM table
WHERE field = aCondition
위 문장에서 NULL
값은 isnull()
함수를 인식하지 못할 수 있습니다. 이 문제를 해결하기 위해 isnull()
함수와 유사한 함수인 ifnull()
함수가 있습니다.
ifnull()
함수의 전체 구문은 다음과 같습니다.
ifnull()
함수의 구문:
ifnull(column, alternateValue)
매개변수:
column |
SQLite 데이터베이스의 대상 열입니다. |
alternateValue |
반환 값이 null이거나 비어 있는 경우 선택한 값입니다. |
아래 문장에서 우리는 SELECT
문과 함께 ifnull()
함수를 사용합니다. 첫 번째 문은 레코드에서 모든 NULL
값을 제거하고 빈 문자열로 바꿉니다.
데이터베이스 레코드의 NULL
값에 대한 대체 값으로 값을 추가할 수 있습니다. 이것은 SQLite 데이터베이스에서 NULL
값이 This is a NULL
문자열 값으로 대체되는 두 번째 명령문에 표시될 수 있습니다.
ifnull()
함수는 정확히 두 개의 인수를 취하고 비어 있지 않은 첫 번째 문자열 또는 텍스트를 반환하거나 제공된 두 인수가 모두 NULL
인 경우 NULL
을 반환합니다.
SELECT ifnull(NameofColumn,'')
SELECT ifnull(NULL,'This is a NULL');
THEN
및 ELSE
를 사용하여 SQLite 데이터베이스에서 NULL
값 확인
또는 첫 번째 시나리오가 조건에 적합하지 않은 경우 IS NULL
조건문을 사용하여 테이블 내부의 빈 값을 확인할 수 있습니다.
아래의 SQLite 문은 ISNULL(fieldName, 0)
명령과 동일합니다. IS NULL
절은 데이터베이스 내의 모든 빈 값을 반환합니다.
값이 발견되면 THEN
은 공백을 0
값으로 대체하고 ELSE
는 무언가가 발견되면(비어 있지 않음) 값이 변경되지 않은 상태로 유지됩니다.
SELECT fieldName FROM NameOfTable WHERE fieldName IS NULL THEN 0 ELSE fieldName END
SQLite 데이터베이스에서 COALESCE()
함수 사용
ifnull()
함수와 마찬가지로 COALESCE()
함수는 주어진 값이 NULL
인 열 값에 대체 값을 제공합니다. COALESCE()
함수로 null 값을 확인하는 SQLite 문을 작성하려면 주어진 테이블에 대한 문을 작성합니다.
COALESCE()
함수는 SQLite 버전 3.8.6 이상에서 작동합니다.
ID | 수량 |
---|---|
1 | 200 |
2 | 13 |
삼 | 없는 |
4 | 30 |
5 | 512 |
SELECT COALESCE(Quantity, 0) AS Inventory
FROM Product;
업데이트된 테이블 출력:
ID | 수량 |
---|---|
1 | 200 |
2 | 13 |
삼 | 0 |
4 | 30 |
5 | 512 |
SQLite 데이터베이스에서 NVL()
함수 사용
COALESCE()
기능과 마찬가지로 NVL()
기능도 동일합니다. 데이터베이스 내부의 빈 값을 확인하고 NVL()
함수에 지정된 대체 값으로 바꿉니다.
차이점은 isnull()
함수가 SQL 서버의 Oracle 함수인 NVL()
함수로 대체되었다는 것입니다.
COALESCE()
와 ifnull()
함수의 차이점
COALESCE()
와 ifnull()
함수의 주요 차이점은 ifnull()
함수가 두 개의 인수만 사용한다는 것입니다. 첫 번째 인수가 NULL
인지 여부를 확인하고 NULL
인 경우 두 번째 인수로 대체합니다.
반대로 COALESCE()
함수는 두 개 이상의 매개변수를 사용하고 첫 번째 인수가 NULL
인지 여부를 확인합니다. 첫 번째 인수가 NULL
이면 두 번째 인수를 확인합니다.
두 번째 인수가 NULL
이면 비어 있지 않은 값을 찾아 첫 번째 NULL
인수로 바꿀 때까지 다음 인수를 계속 확인합니다.
SELECT IFNULL('any value', 'extra value');
SELECT IFNULL(NULL,'extra value');
SELECT COALESCE(NULL, 'extra value');
SELECT COALESCE(NULL, 'any value', 'extra value');
SELECT COALESCE(NULL, NULL, NULL, NULL, 'the non-null value');
출력:
any value
extra value
extra value
some value
the non-null value
COALESCE()
와 isnull()
함수의 차이점
주로 두 함수는 동일한 기능을 수행하여 NULL
값을 확인하고 지정된 비어 있지 않은 값으로 바꿉니다. 그러나 그들은 행동에 차이가 있습니다.
- 차이점은
isnull()
함수는 한 번만 평가하지만COALESCE()
함수는 여러 번 평가한다는 것입니다. - 또 다른 차이점은 데이터 유형을 결정할 때
isnull()
함수는 첫 번째 인수 데이터 유형을 사용하는 반면COALESCE()
함수는CASE
표현식 규칙을 사용하고 가장 높은 우선 순위의 데이터 유형을 사용한다는 점입니다. . - 마지막 차이점은
isnull()
함수가NULL
값을 반환하지 않으며 항상 이 함수의 결과가 Null을 허용하지 않는다고 가정한다는 것입니다. 반면COALESCE()
함수는NULL
표현식을 반환할 수 있습니다.
예 1:
CREATE TABLE example
(
column1 INTEGER NULL,
column2 AS COALESCE(column1, 0) PRIMARY KEY,
column3 AS ISNULL(column1, 0)
);
출력:
# the statement fails as the nullability of the COALESCE function evaluates to NULL
Error: PRIMARY KEY cannot accept NULL values
예 2:
CREATE TABLE example
(
column1 INTEGER NULL,
column2 AS COALESCE(column1, 0),
column3 AS ISNULL(col1umn, 0) PRIMARY KEY
);
출력:
# the above statement works as the nullability of the ISNULL function evaluates as NOT NULL.
No error
Hi, I'm Junaid. I am a freelance software developer and a content writer. For the last 3 years, I have been working and coding with Python. Additionally, I have a huge interest in developing native and hybrid mobile applications.
LinkedIn