ISNULL(), NVL(), IFNULL() 또는 COALESCE()와 동등한 SQLite

Junaid Khan 2023년6월21일
  1. SQLite 데이터베이스에서 NULL 값이 있는 레코드 가져오기
  2. THENELSE를 사용하여 SQLite 데이터베이스에서 NULL 값 확인
  3. SQLite 데이터베이스에서 COALESCE() 함수 사용
  4. SQLite 데이터베이스에서 NVL() 함수 사용
  5. COALESCE()ifnull() 함수의 차이점
  6. COALESCE()isnull() 함수의 차이점
ISNULL(), NVL(), IFNULL() 또는 COALESCE()와 동등한 SQLite

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');

THENELSE를 사용하여 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 값을 확인하고 지정된 비어 있지 않은 값으로 바꿉니다. 그러나 그들은 행동에 차이가 있습니다.

  1. 차이점은 isnull() 함수는 한 번만 평가하지만 COALESCE() 함수는 여러 번 평가한다는 것입니다.
  2. 또 다른 차이점은 데이터 유형을 결정할 때 isnull() 함수는 첫 번째 인수 데이터 유형을 사용하는 반면 COALESCE() 함수는 CASE 표현식 규칙을 사용하고 가장 높은 우선 순위의 데이터 유형을 사용한다는 점입니다. .
  3. 마지막 차이점은 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
작가: Junaid Khan
Junaid Khan avatar Junaid Khan avatar

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