SQL 산술 연산자와 NULL 컬럼에 따른 연산 결과
SQL에서 산술 연산자는 숫자 데이터를 처리할 때 사용하는 중요한 도구입니다. 하지만, 데이터베이스에서 NULL 값을 포함한 연산이 어떻게 처리되는지에 대해 이해하는 것이 중요합니다. 이 포스트에서는 SQL 산술 연산자와 함께 NULL 값이 포함될 경우의 처리 결과에 대해 자세히 설명하겠습니다.
1. SQL 산술 연산자 (Arithmetic Operators)
SQL에서 산술 연산자는 주로 숫자 데이터를 처리하는 데 사용됩니다. 기본적인 산술 연산자는 다음과 같습니다.
주요 산술 연산자
- +: 덧셈 (Addition)
- -: 뺄셈 (Subtraction)
- *: 곱셈 (Multiplication)
- /: 나눗셈 (Division)
- %: 나머지 (Modulo)
예시 1: 덧셈
SELECT 10 + 5 AS result;
결과: 15
예시 2: 뺄셈
SELECT 10 - 5 AS result;
결과: 5
예시 3: 곱셈
SELECT 10 * 5 AS result;
결과: 50
예시 4: 나눗셈
SELECT 10 / 2 AS result;
결과: 5
예시 5: 나머지
SELECT 10 % 3 AS result;
결과: 1
2. NULL 값과 산술 연산자
NULL은 SQL에서 알 수 없는 값을 나타냅니다. NULL 값은 특별한 값으로 취급되며, 일반적인 산술 연산자와 결합될 때 특별한 규칙을 따릅니다. SQL에서 NULL은 무효값 (Unknown)을 의미하기 때문에, NULL과의 연산 결과는 항상 NULL입니다.
NULL을 포함한 산술 연산 예시
1) 덧셈 연산
NULL과 숫자를 더하면 결과는 NULL입니다. 이는 NULL이 "알 수 없는 값"이기 때문에, 그 값과의 연산 결과도 "알 수 없음"이 된다는 논리입니다.
SELECT NULL + 5 AS result;
결과: NULL
2) 뺄셈 연산
NULL에서 숫자를 빼면 결과는 역시 NULL입니다.
SELECT NULL - 5 AS result;
결과: NULL
3) 곱셈 연산
NULL과 숫자를 곱해도 결과는 NULL입니다.
SELECT NULL * 5 AS result;
결과: NULL
4) 나눗셈 연산
NULL을 숫자로 나누어도 결과는 NULL입니다.
SELECT NULL / 5 AS result;
결과: NULL
5) 나머지 연산
NULL을 다른 숫자로 나눈 나머지도 결과는 NULL입니다.
SELECT NULL % 5 AS result;
결과: NULL
3. NULL 연산 결과의 특성
NULL과의 연산은 예측할 수 없는 결과를 초래하므로 NULL 값은 항상 NULL로 처리됩니다. 이는 NULL이 "알 수 없는 값"을 나타내기 때문에, 그 값과의 모든 연산 결과도 "알 수 없음"으로 처리되기 때문입니다.
NULL과 비교 연산자
NULL은 비교 연산자 (=, !=, <, >, 등)와 함께 사용할 때도 특별한 처리가 필요합니다. 예를 들어, NULL과 = 연산자를 비교하면 결과는 **FALSE**가 아니라 **UNKNOWN**이 됩니다.
예시: NULL과 = 연산자
SELECT * FROM employees
WHERE salary = NULL;
결과: 아무것도 반환되지 않음
- NULL 값은 비교 불가이므로 = 연산자와 비교하는 것은 의미가 없습니다. 대신 IS NULL을 사용해야 합니다.
예시: NULL과 IS NULL
SELECT * FROM employees
WHERE salary IS NULL;
설명: NULL 값은 IS NULL로 비교해야만 결과를 얻을 수 있습니다.
4. NULL 값 처리 방법
SQL에서 NULL 값은 연산에서 예외적인 처리가 필요하지만, 이를 적절히 처리하는 방법도 있습니다. COALESCE나 NVL 함수와 같은 함수를 사용하여 NULL을 다른 값으로 대체할 수 있습니다.
1) COALESCE 함수
COALESCE 함수는 NULL을 다른 값으로 대체할 때 사용됩니다. 여러 인자 중 첫 번째로 NULL이 아닌 값을 반환합니다.
예시: NULL을 0으로 대체
SELECT COALESCE(salary, 0) FROM employees;
- 설명: salary 값이 NULL인 경우, 0으로 대체합니다.
2) NVL 함수 (Oracle 전용)
Oracle에서는 NVL 함수를 사용하여 NULL을 다른 값으로 변환할 수 있습니다.
예시: NULL을 0으로 대체
SELECT NVL(salary, 0) FROM employees;
- 설명: salary 값이 NULL인 경우, 0으로 대체합니다.
5. 실용적인 예시
NULL 값을 다룰 때는 그 자체로 연산에 영향을 미칠 수 있기 때문에, 이를 고려한 쿼리 작성이 중요합니다.
예시 1: NULL을 포함한 총 급여 계산
만약 급여에 NULL 값이 포함된 테이블에서 총 급여를 구하려면 NULL을 무시하는 방식으로 연산할 수 있습니다.
예시: NULL 값을 제외한 급여 합계
SELECT SUM(COALESCE(salary, 0)) AS total_salary
FROM employees;
- 설명: salary 값이 NULL일 경우 0으로 대체하고, 그 값을 합산합니다.
예시 2: NULL을 고려한 평균 급여 계산
평균 급여를 계산할 때도 NULL 값을 처리해야 합니다.
예시: NULL 값을 제외하고 평균 급여 계산
SELECT AVG(COALESCE(salary, 0)) AS avg_salary
FROM employees;
- 설명: NULL을 0으로 대체하고 평균을 계산합니다.
6. 정리
산술 연산자
- +, -, *, /, %와 같은 산술 연산자는 숫자 데이터를 처리할 때 사용됩니다.
NULL 값의 특성
- NULL은 알 수 없는 값을 의미하므로, NULL과의 연산 결과는 항상 NULL입니다.
- NULL을 다룰 때는 IS NULL 또는 COALESCE/NVL 함수로 처리해야 합니다.
SQL에서 NULL을 처리하는 방식은 데이터의 정확성과 신뢰성을 유지하기 위해 매우 중요합니다. 연산자와 함수들을 적절히 활용하여 NULL 값을 처리하는 방법을 숙지하면, 더 효율적이고 정확한 쿼리 작성이 가능합니다.