[Database] MySQL 제어 함수 - IF, IFNULL, NULLIF


IF() 함수

  • 표현식1 이 참이면, 표현식2를 반환
  • 표현식1 이 거짓이면, 표현식3을 반환
  • 기본 형식
IF ( 표현식1, 표현식2, 표현식 3 )
  • Orders 테이블 데이터

  • Items 테이블 데이터

고객이 주문한 판매금액이 10000원을 초과하면 배송료를 면제하기 위한 질의문을 작성하시오. 단, 결과 테이블은 주문번호(orders.num), 계정(orders.customer), 주문물품(orders.item), 판매금액, 배송비(무료배송일 경우, ‘무료배송’, 유료 배송비는 2500)를 반환한다.

  • 질의에 필요한 테이블 : orders, items
  • 판매금액 계산 : orders.qty * items.price
  • 배송비를 계산 : IF ( ( orders.qty * items.price ) > 10000, ‘무료배송’, ‘2500’ ) AS ‘배송비’
SELECT 
    orders.num, 
    orders.customer, 
    orders.item, 
    ( orders.qty * items.price ) AS '판매금액',
    IF ( ( orders.qty * items.price ) > 10000,'무료배송', '2500' ) AS '배송비'
FROM orders, items
WHERE orders.item = items.code;

~ 위 쿼리문 결과


고객이 주문한 판매금액이 10000원을 초과하면 배송료를 면제하기 위한 질의문을 작성하시오. 단, 같은 날 동일한 고객이 여러 건 주문한 경우, 묶음 배송으로 처리하고, 결과 테이블은 계정(orders.customer), 판매금액, 배송비(무료배송일 경우, ‘무료배송’, 유료 배송비는 2500)를 반환한다.

  • 질의에 필요한 테이블 : orders, items
  • 같은 판매일에 같은 고객이 주문한 경우 : GROUP BY orders.date, orders.customer
  • 같은 판매일에 같은 고객이 주문한 판매금액 계산 : SUM( orders.qty * items.price )
  • 배송비를 계산 : IF ( SUM( orders.qty * items.price ) > 10000, ‘무료배송’, ‘2500’ ) AS ‘배송비’
SELECT 
    orders.customer,
    SUM( orders.qty * items.price ) AS '판매금액',
    IF ( SUM( orders.qty * items.price ) > 10000,'무료배송', '2500' ) AS '배송비'
FROM orders, items
WHERE orders.item = items.code
GROUP BY orders.date, orders.customer;
  • 위 쿼리문 결과


IFNULL( ) 함수

  • 표현식1이 NULL이 아니면, 표현식1을 반환
  • 표현식1이 NULL이면, 표현식2를 반환
  • 기본 형식
IFNULL ( 표현식1, 표현식2 )


고객(customer) 테이블의 계정(account), 고객명(name), 주소(address)를 검색하되, 주소가 NULL로 입력된경우, ‘주소없음’으로 표기하고, 각 속성명을 계정, 고객명, 주소로 출력하시오.

  • 각 속성명 ‘계정’, ‘고객명’으로 표기 : account AS ‘계정’, name AS ‘고객명’
  • 주소가 NULL인 경우 ‘주소없음’으로 표기 : IFNULL( address, ‘주소없음’ ) AS ‘주소’
  • Customer 테이블 데이터

SELECT 
  account AS '계정', 
  name AS '고객명',
  IFNULL( address, '주소없음' ) AS '주소'
FROM customer;
  • 위 쿼리문 결과


NULLIF( ) 함수

  • 표현식1과 표현식2가 같으면 NULL을 반환
  • 표현식1과 표현식2가 다르면 표현식1을 반환
  • 기본 형식
NULLIF( 표현식1, 표현식2 )
  • 동일한 함수
CASE 
  WHEN 표현식1 = 표현식2 THEN NULL 
  ELSE 표현식1 
END