수업 55일차


정의

SQL)

IFNULL

  • 해당 Column의 값이 NULL을 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수

'NOT NULL + DEFAULT'가 아니라 'IFNULL'를 사용하는 이유가 뭘까?

  • 설계 시점(NOT NULL DEFAULT): 테이블 구조를 정의하면서 특정 컬럼이 NULL 값을 가질 수 없도록 하고, 기본값을 설정, 데이터 무결성을 보장하고, 기본값이 필요한 경우 유용하다

  • 조회 시점(IFNULL): 데이터를 조회할 때 특정 컬럼이 NULL인 경우, 지정한 값으로 대체하여 조회, 이 방식은 데이터베이스에 있는 기존 데이터를 변경하지 않고도, 조회 결과에서만 NULL 값을 다르게 처리하고 싶을 때 유용하다

위와 같이 시점의 차이가 있다


개념

SQL)

IFNULL

  • SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명;

원문

LEFT JOIN 버전

SELECT A.*, M.nickname AS extrawriter,
IFNULL(SUM(RP.point), 0) AS extra
sumReactionPoint,
IFNULL(SUM(IF(RP.point > 0, RP.point, 0)), 0) AS extragoodReactionPoint,
IFNULL(SUM(IF(RP.point < 0, RP.point, 0)), 0) AS extra
badReactionPoint
FROM article AS A
INNER JOIN member AS M
ON A.memberId = M.id
LEFT JOIN reactionPoint AS RP
ON A.id = RP.relId AND RP.relTypeCode = "article"
GROUP BY A.id, M.nickname
ORDER BY A.id DESC;

서브쿼리 버전

SELECT A. ,
IFNULL(SUM(RP.point),0) AS extrasumReactionPoint,
IFNULL(SUM(IF(RP.point > 0, RP.point, 0)),0) AS extra
goodReactionPoint,
IFNULL(SUM(IF(RP.point < 0, RP.point, 0)),0) AS extra__badReactionPoint
FROM (
SELECT A.
, M.nickname AS extra__writer
FROM article AS A
INNER JOIN member AS M
ON A.memberId = M.id) AS A
LEFT JOIN reactionPoint AS RP
ON A.id = RP.relId AND RP.relTypecode = "article"
GROUP BY A.id
ORDER BY A.id DESC;

profile
2514 : 이세상에 오직 하나뿐인 사람

0개의 댓글