SQL Null Functions
SQL NULL 처리 함수: NULL 값을 다루는 다양한 함수
SQL에서 NULL 값은 알 수 없거나 없는 값을 의미하며, 일반적인 비교나 연산에서는 처리되지 않기 때문에, 이를 적절히 다루는 것이 중요합니다. SQL에서는 NULL 값을 처리하는 여러 함수가 제공되며, 주로 NULL 값을 대체하거나 NULL 값 여부를 확인하는 데 사용됩니다.
1. 주요 NULL 처리 함수
- COALESCE(): 첫 번째로 NULL이 아닌 값을 반환.
- ISNULL(): NULL 값을 지정된 값으로 대체.
- NULLIF(): 두 값이 같으면 NULL을 반환, 다르면 첫 번째 값을 반환.
- IFNULL(): 첫 번째 인수가 NULL이면 두 번째 인수를 반환.
- NVL(): NULL 값을 대체 값으로 반환 (Oracle 전용).
1. COALESCE()
COALESCE() 함수는 주어진 여러 인수 중에서 첫 번째로 NULL이 아닌 값을 반환합니다. 여러 열을 비교할 때 유용하며, NULL 값을 대체하는 데 많이 사용됩니다.
1.1 COALESCE() 문법
COALESCE(값1, 값2, 값3, ...)
- 값1, 값2, 값3: NULL이 아닌 값을 반환할 여러 인수.
- 첫 번째로 NULL이 아닌 값을 반환하며, 모든 값이 NULL이면 NULL을 반환합니다.
1.2 COALESCE() 예제
예제: 직원의 보너스 값이 NULL이면 기본값 0 반환
SELECT name, COALESCE(bonus, 0) AS bonus_value
FROM employees;
이 쿼리는 bonus 값이 NULL인 경우 0을 반환합니다.
결과 예시:
name | bonus_value |
---|---|
John | 1000 |
Jane | 500 |
Bob | 0 |
예제: 여러 열에서 첫 번째로 NULL이 아닌 값 반환
SELECT name, COALESCE(phone_number, email, 'No Contact Info') AS contact_info
FROM employees;
이 쿼리는 phone_number가 NULL이면 email을 반환하고, 둘 다 NULL이면
'No Contact Info'
를 반환합니다.
결과 예시:
name | contact_info |
---|---|
John | 123-456-7890 |
Jane | jane@example.com |
Bob | No Contact Info |
2. ISNULL()
ISNULL() 함수는 첫 번째 인수가 NULL이면 두 번째 인수를 반환하고, 그렇지 않으면 첫 번째 인수를 반환합니다. NULL 값을 특정 값으로 대체하는 용도로 많이 사용됩니다.
2.1 ISNULL() 문법
ISNULL(값1, 대체값)
- 값1: NULL인지 확인할 값.
- 대체값: 값1이 NULL일 경우 반환할 값.
2.2 ISNULL() 예제
예제: 직원의 보너스가 NULL이면 0 반환
SELECT name, ISNULL(bonus, 0) AS bonus_value
FROM employees;
이 쿼리는 bonus 값이 NULL이면 0을 반환합니다.
결과 예시:
name | bonus_value |
---|---|
John | 1000 |
Jane | 500 |
Bob | 0 |
예제: 부서명이 NULL이면 'Unknown' 반환
SELECT name, ISNULL(department, 'Unknown') AS department_name
FROM employees;
이 쿼리는 department가 NULL이면 **'Unknown'**을 반환합니다.
결과 예시:
name | department_name |
---|---|
John | Sales |
Jane | HR |
Bob | Unknown |
3. NULLIF()
NULLIF() 함수는 두 인수가 같으면 NULL을 반환하고, 다르면 첫 번째 인수를 반환합니다. 두 값이 동일한지 비교하고, 동일하면 값을 NULL로 설정할 때 유용합니다.
3.1 NULLIF() 문법
NULLIF(값1, 값2)
- 값1, 값2: 비교할 두 값. 같으면 NULL을 반환하고, 다르면 값1을 반환합니다.
3.2 NULLIF() 예제
예제: 기본 급여와 실제 급여가 같으면 NULL 반환
SELECT name, NULLIF(salary, default_salary) AS adjusted_salary
FROM employees;
이 쿼리는 salary가 default_salary와 같으면 NULL을 반환하고, 그렇지 않으면 salary를 반환합니다.
결과 예시:
name | adjusted_salary |
---|---|
John | NULL |
Jane | 6000 |
예제: 두 값이 같으면 NULL 반환
SELECT NULLIF(5, 5) AS result; -- NULL 반환
SELECT NULLIF(5, 10) AS result; -- 5 반환
4. IFNULL() (MySQL 전용)
IFNULL() 함수는 첫 번째 인수가 NULL이면 두 번째 인수를 반환하고, 그렇지 않으면 첫 번째 인수를 반환합니다. **ISNULL()**과 유사하게 작동하며, NULL 값 대체 용도로 사용됩니다.
4.1 IFNULL() 문법
IFNULL(값1, 대체값)
- 값1: NULL인지 확인할 값.
- 대체값: 값1이 NULL일 경우 반환할 값.
4.2 IFNULL() 예제
예제: NULL 값을 기본값으로 대체
SELECT name, IFNULL(bonus, 0) AS bonus_value
FROM employees;
이 쿼리는 bonus 값이 NULL이면 0을 반환합니다.
결과 예시:
name | bonus_value |
---|---|
John | 1000 |
Jane | 500 |
Bob | 0 |
5. NVL() (Oracle 전용)
NVL() 함수는 Oracle 데이터베이스에서 사용되며, NULL 값을 대체 값으로 변환하는 데 사용됩니다. NULL 값을 대체할 값을 지정할 수 있습니다.
5.1 NVL() 문법
NVL(값1, 대체값)
- 값1: NULL인지 확인할 값.
- 대체값: 값1이 NULL일 경우 반환할 값.
5.2 NVL() 예제
예제: 보너스가 NULL이면 0으로 대체
SELECT name, NVL(bonus, 0) AS bonus_value
FROM employees;
이 쿼리는 bonus 값이 NULL이면 0을 반환합니다.
결과 예시:
name | bonus_value |
---|---|
John | 1000 |
Jane | 500 |
Bob | 0 |
6. 실전 예제
예제 1: COALESCE로 연락처 정보 반환
SELECT name, COALESCE(phone, email, 'No Contact Info') AS contact_info
FROM employees;
예제 2: ISNULL로 부서명 처리
SELECT name, ISNULL(department, 'Unknown') AS department_name
FROM employees;
예제 3: NULLIF로 기본 급여와 실제 급여 비교
SELECT name, NULLIF(salary, default_salary) AS adjusted_salary
FROM employees;
예제 4: IFNULL로 NULL 값 대체
SELECT name, IFNULL(bonus, 0) AS bonus_value
FROM employees;
예제 5: NVL로 NULL 값 처리 (Oracle)
SELECT name, NVL(bonus, 0) AS bonus_value
FROM employees;
7. 요약
- COALESCE(): 여러 값 중 첫 번째로 NULL이 아닌 값을 반환합니다.
- ISNULL(): 첫 번째 값이 NULL일 때, 지정한 대체 값을 반환합니다.
- NULLIF(): 두 값이 같으면 NULL을 반환하고, 다르면 첫 번째 값을 반환합니다.
- IFNULL(): 첫 번째 값이 NULL일 때 두 번째 값을 반환합니다 (MySQL 전용).
- NVL(): Oracle에서 사용되는 함수로, NULL 값을 대체할 값을 반환합니다.
이 함수들은 NULL 값을 적절하게 처리하는 데 필수적이며, 데이터를 분석하거나 처리할 때 유용하게 사용됩니다.