코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Null Values

SQL NULL 값: NULL 처리와 조회

SQL NULL은 데이터베이스에서 "값이 없다"는 것을 의미합니다. 이는 빈 문자열이나 숫자 0과는 다른 개념으로, 값이 아예 존재하지 않는 상태를 나타냅니다. NULL 값은 모든 데이터 유형에서 사용할 수 있으며, SQL에서는 NULL 값을 다루기 위한 여러 방법을 제공합니다. 이 글에서는 NULL 값의 개념, NULL과 관련된 연산자, NULL 값을 처리하는 방법, 그리고 실전 예제를 다룹니다.

1. NULL 값의 개념

NULL은 데이터베이스에서 값이 없는 상태를 나타냅니다. 다음과 같은 상황에서 NULL 값이 발생할 수 있습니다:

  • 테이블에 데이터가 삽입될 때 특정 열에 값을 지정하지 않으면 해당 열은 NULL로 설정됩니다.
  • 어떤 필드의 값이 아직 정의되지 않았거나 불명확한 경우 NULL로 저장됩니다.

중요: NULL은 데이터가 없다는 의미이며, 0, 빈 문자열('')과는 다릅니다. NULL은 비교나 연산을 할 수 없기 때문에 직접적인 비교를 하려면 특별한 연산자를 사용해야 합니다.

2. NULL 값 조회: IS NULL 및 IS NOT NULL

NULL 값은 일반적인 = 연산자를 사용하여 비교할 수 없습니다. 대신 IS NULL 또는 IS NOT NULL 연산자를 사용해야 합니다.

2.1 NULL 값 조회: IS NULL

IS NULL 연산자는 열의 값이 NULL인 행을 조회합니다.

SELECT name, salary
FROM employees
WHERE salary IS NULL;

이 쿼리는 급여 값이 NULL인 직원을 조회합니다.

결과 예시:

name salary
Alice NULL
Bob NULL

2.2 NULL 값이 아닌 데이터 조회: IS NOT NULL

IS NOT NULL 연산자는 열의 값이 NULL이 아닌 행을 조회합니다.

SELECT name, salary
FROM employees
WHERE salary IS NOT NULL;

이 쿼리는 급여 값이 NULL이 아닌 직원을 조회합니다.

결과 예시:

name salary
John 5000
Jane 6000

3. NULL 값 처리: COALESCE 함수

SQL에서는 COALESCE 함수를 사용하여 NULL 값을 다른 값으로 대체할 수 있습니다. COALESCE는 인수 중 첫 번째로 NULL이 아닌 값을 반환합니다.

SELECT name, COALESCE(salary, 0) AS salary
FROM employees;

이 쿼리는 급여가 NULL인 경우 0을 반환합니다.

결과 예시:

name salary
John 5000
Alice 0
Bob 0

4. NULL과 비교 연산자

NULL 값은 =, !=와 같은 일반적인 비교 연산자와 다르게 동작합니다. NULL과의 직접적인 비교는 항상 FALSE로 간주되므로, NULL 값을 처리할 때는 IS NULL 또는 IS NOT NULL을 사용해야 합니다.

예제:

SELECT *
FROM employees
WHERE salary = NULL;

이 쿼리는 올바르게 작동하지 않습니다. NULL은 NULL과도 같지 않으므로 항상 FALSE를 반환합니다. 대신 다음과 같이 사용해야 합니다:

SELECT *
FROM employees
WHERE salary IS NULL;

5. NULL과 집계 함수

SQL에서 집계 함수(예: COUNT, SUM, AVG, MAX, MIN)는 NULL 값을 무시합니다. 즉, NULL 값은 계산에 포함되지 않습니다.

5.1 COUNT 함수와 NULL

COUNT() 함수는 NULL이 아닌 값을 계산합니다.

SELECT COUNT(salary)
FROM employees;

이 쿼리는 salary 값이 NULL이 아닌 직원의 수를 반환합니다.

결과 예시:

COUNT(salary)


2


5.2 SUM 함수와 NULL

SUM() 함수는 NULL 값을 제외하고 합계를 계산합니다.

SELECT SUM(salary)
FROM employees;

이 쿼리는 salary 값이 NULL이 아닌 직원들의 급여 합계를 반환합니다.

결과 예시:

SUM(salary)


11000


6. NULL과 정렬: ORDER BY

SQL에서 ORDER BY 절을 사용하여 NULL 값을 포함한 데이터를 정렬할 수 있습니다. 기본적으로 NULL 값은 오름차순에서 마지막에 배치되고, 내림차순에서는 처음에 배치됩니다.

예제:

SELECT name, salary
FROM employees
ORDER BY salary ASC;

이 쿼리는 salary 값이 NULL인 행을 마지막에 표시하며, 급여가 낮은 순서대로 정렬합니다.

결과 예시:

name salary
Bob NULL
John 5000
Jane 6000

7. INSERT INTO 시 NULL 값 처리

INSERT INTO 문에서 특정 열에 값을 삽입하지 않으면 해당 열은 NULL 값을 가질 수 있습니다.

INSERT INTO employees (name, department)
VALUES ('David', 'HR');

이 쿼리는 salary 값이 지정되지 않았으므로 NULL이 삽입됩니다.

결과 예시:

id name department salary
1 David HR NULL

8. 실전 예제

예제 1: 급여가 없는 직원 조회

SELECT name
FROM employees
WHERE salary IS NULL;

이 쿼리는 급여 값이 NULL인 직원들의 이름을 조회합니다.

예제 2: 급여가 NULL일 경우 기본값으로 대체

SELECT name, COALESCE(salary, 3000) AS salary
FROM employees;

이 쿼리는 급여가 NULL인 경우 3,000으로 대체하여 반환합니다.

예제 3: NULL 값을 제외하고 급여 평균 계산

SELECT AVG(salary)
FROM employees
WHERE salary IS NOT NULL;

이 쿼리는 급여가 NULL이 아닌 직원들의 평균 급여를 계산합니다.

요약

SQL NULL 값은 데이터가 없음을 나타내며, 일반적인 값과는 다르게 처리됩니다. NULL 값을 처리할 때는 IS NULL, IS NOT NULL과 같은 연산자를 사용해야 하며, NULL 값을 비교하거나 집계 함수에서 다룰 때는 주의가 필요합니다. 또한, COALESCE와 같은 함수를 사용하여 NULL 값을 원하는 값으로 대체할 수 있습니다. 이러한 NULL 처리 기법은 데이터가 없는 상황에서 발생하는 오류를 방지하고, 더 정확한 결과를 얻는 데 유용합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com