티스토리 뷰

 

 

 

 

📌 SQL IFNULL

 

SQL에서는 'NULL' 값을 처리하는 것이 까다로울 수 있습니다.

'NULL'은 데이터베이스에 값이 없거나 누락된 값입니다.

IFNULL 함수를 사용하면 NULL 값을 지정된 기본값으로 바꿀 수 있습니다.

 

IFNULL의 주요 목표는 쿼리할 때 열에 NULL이 포함된 경우 대체 값을 제공하는 것입니다. 이는 결과 집합에서 'NULL'을 방지하거나 누락된 값에 대한 걱정 없이 계산을 수행하려는 상황에서 특히 유용합니다.

 

 

 

 

📌 기본 사용법

IFNULL(expression, replacement_value)

 

 

  • expression : NULL을 확인하려는 값 또는 열입니다.
  • replacement_value : expression이 NULL인 경우 반환할 값입니다. 표현식이 NULL이 아닌 경우 단순히 표현식 자체를 반환합니다.
  •  

 

 

 

 

 

 

📌 사용 예제

 

1. 열의 NULL 값 처리

 

다음 열이 포함된 orders 테이블이 있다고 가정해 보세요.

 

  • order_id(주문 ID)
  • customer_name(고객 이름)
  • order_amount(주문 금액, 때로는 NULL일 수 있음)

'order_amount'를 표시하고 'NULL' 값을 기본값인 '0'으로 바꾸고 싶다고 가정해 보겠습니다.

 

SELECT 
    order_id,
    customer_name,
    IFNULL(order_amount, 0) AS order_amount
FROM orders;
 
  • IFNULL(order_amount, 0)은 order_amount가 NULL인지 확인합니다.
  • 그렇다면 쿼리는 NULL 대신 0을 반환합니다.
  • 주문_금액이 NULL이 아닌 경우 주문_금액에 실제 값을 반환합니다.

 

 

2. 총 주문 금액 계산, NULL 대체

각 고객의 총 주문 금액을 계산하여 이전 예를 확장해 보겠습니다.

일부 고객은 order_amount에 NULL 값이 있을 수 있으며, 우리는 이러한 NULL 값이 0으로 처리되도록 하려고 합니다.

 

SELECT 
    customer_name,
    SUM(IFNULL(order_amount, 0)) AS total_order_amount
FROM orders
GROUP BY customer_name;
 
  • SUM(IFNULL(order_amount, 0))은 order_amount가 NULL인 경우 각 고객의 총액을 합산할 때 0으로 처리되도록 합니다.
  • 이렇게 하면 'order_amount' 열에 'NULL' 값이 있는 고객을 실수로 건너뛰는 일이 발생하지 않습니다.

 

3. 여러 열에서 NULL 바꾸기

경우에 따라 여러 열의 NULL 값을 바꾸고 싶을 수도 있습니다.

예를 들어 sale_date, sale_amount 및 discount_amount 열이 있는 sales 테이블이 있을 수 있으며 NULL 값이 0으로 바뀌는지

확인하려고 합니다.

 

SELECT 
    sale_date,
    IFNULL(sale_amount, 0) AS sale_amount,
    IFNULL(discount_amount, 0) AS discount_amount
FROM sales;
 
  • 이 쿼리는 sale_amount와 discount_amount 모두 NULL인지 확인합니다.
  • 둘 중 하나가 NULL이면 0으로 대체됩니다.

 

 

 

📌 GOOD 사용법

 

1. 누락된 데이터 처리

'NULL' 값이 계산이나 결과 표시를 방해하지 않도록 하려면 'IFNULL'을 사용하세요.

수학 연산(예: 합산, 평균화)을 수행할 때는 IFNULL을 사용하여 NULL 값을 처리하는 것이 좋습니다.

 

예: 적절한 계산 보장

SELECT 
    product_name,
    IFNULL(unit_price, 0) * quantity AS total_price
FROM sales;
 
  • 이 예에서는 곱셈에서 오류가 발생하는 대신 '단가'의 'NULL' 값이 '0'으로 처리되도록 각 제품의 총 가격을 계산합니다.

 

2. 데이터를 표시할 때

IFNULL은 최종 사용자에게 결과를 표시할 때 유용할 수 있습니다. 보고서나 대시보드에 'NULL' 값이 표시되는 것을 방지하는 데

도움이 됩니다.

 

예: 사용자에게 친숙한 결과 표시

SELECT 
    customer_id,
    IFNULL(order_notes, 'No special instructions') AS order_notes
FROM orders;
 
  • order_notes에 NULL 값이 있는 경우 기본 메시지("특별 지침 없음")가 대신 표시됩니다.

 

 

 

📌 BAD 사용법

 

1. 복잡한 쿼리에서 IFNULL을 남용

IFNULL은 유용하지만 복잡한 쿼리에서 이를 과도하게 사용하면 코드 읽기가 어려워지고 유지 관리가 더 어려워질 수 있습니다.

여러 개의 IFNULL 함수가 쌓이거나 중첩되어 있으면 혼란스럽고 오류가 발생하기 쉽습니다.

 

SELECT 
    IFNULL(IFNULL(order_amount, 0), 0) AS total_amount,
    IFNULL(IFNULL(discount_amount, 0), 0) AS total_discount
FROM orders;
 
  • 쿼리가 간단할수록 더 효율적이고 유지 관리가 더 쉽습니다.

 

 

2. 복잡한 데이터에서 NULL 처리 무시

'IFNULL'에 너무 많이 의존하고 데이터 구조나 쿼리에서 'NULL' 처리를 무시하면 의미 있는 통찰력을 놓치거나 부정확성이

발생할 수 있습니다.

 

SELECT 
    product_name, 
    IFNULL(unit_price, 0) * quantity AS total_price
FROM sales
WHERE product_name IS NOT NULL;
 
  • 'NULL' 상품명을 필터링하고 'NULL' 가격을 '0'으로 처리하면 잘못된 결과가 나올 수 있습니다.
  • 'IFNULL'을 사용하면 누락되거나 불완전한 항목과 같은 데이터의 잠재적인 문제를 숨길 수 있습니다.
  • unit_price가 0으로 무작정 바꾸는 것보다 NULL인 이유를 조사하는 것이 좋습니다. 

 

 

3. 다른 SQL 함수와 함께 IFNULL 사용

더 복잡한 쿼리를 위해 IFNULL을 다른 SQL 함수와 결합할 수 있습니다.

예를 들어, 집계를 수행하고 'IFNULL'을 사용하여 집계를 수행하기 전에 'NULL' 값이 '0'으로 대체되었는지 확인할 수 있습니다.

 

예: JOIN과 함께 IFNULL 사용

SELECT 
    o.customer_id,
    IFNULL(SUM(oi.quantity), 0) AS total_quantity
FROM orders o
LEFT JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY o.customer_id;
 
  • order_items 테이블에 NULL 수량이 있는 경우(일부 주문에 품목이 없기 때문에) IFNULL을 사용하여 이를 0으로 바꿉니다.
  • LEFT JOIN을 사용하면 주문 항목이 없더라도 모든 고객이 표시됩니다.

 

 

 

 

'IFNULL'을 신중하게 사용하는 것이 중요합니다.

 

'NULL'을 과도하게 사용하거나 부적절하게 처리하면 잘못된 데이터나 유지 관리하기 어려운 쿼리가 발생할 수 있습니다.

'NULL' 처리가 필요한지 항상 고려하고 명확하고 간결하며 읽기 쉬운 쿼리를 목표로 하세요.

 

반응형