예를 들어 아래와 같이 특정 테이블의 특정 row의 특정 컬럼 값 (단일행) 을 조회하고 싶은데

 

그 값이 null 인 경우 지정한 값을 돌려받아 쿼리 실행 시 null 대신 지정한 값을 받을 수 있도록 할 때

 

SELECT문의 WHERE 조건절에 일치하는 row 자체가 없는 경우에는 컬럼에 IFNULL 함수를 적용시킨다고 해서

 

null 대체 값이 반환되지 않는다.

 

IFNULL 함수는 두개의 인자를 받는데 첫번째 인자로 오는 값이 null이면 두번째 인자의 값을 대체 반환하는데

 

조회되는 row 자체가 없는 경우 첫번째 인자로 값을 넘겨주지 못하기 때문에 동작하지 않는다.

 

SELECT IFNULL(column_name, 'No Data') AS result_column
FROM '테이블명'
WHERE '조회 조건'

--위 쿼리의 경우 조회 조건에 일치하는 row가 없는 경우에는 No Data가 출력되지 않음

 

 

 

이런 경우 위 예시는 아래 예시 처럼 서브쿼리를 활용하여

 

SELECT 문 자체를 IFNULL 함수의 첫번째 인자로 설정하여

 

조회되는 row 자체가 없거나 or 컬럼의 값이 null 일 경우

 

두가지 모두 null 대신 대체 값을 반환하게 만들 수 있다.

 

SELECT IFNULL(
    (SELECT column_name FROM '테이블명' WHERE '조회 조건'),
    'No Data'
) AS result_column;

/* SELECT문 자체를 IFNULL 함수의 첫번째 인자로 설정하면,
조회되는 row가 없는 경우 or 컬럼값이 null 인 경우 둘다 null 대체 지정값을 반환받을 수 있음
*/

 

 

* 주의할 점은 (스칼라) 서브쿼리의 결과 값은 다중행(조회되는 row가 2개 이상)일 경우 쿼리 실행 시 에러가 발생함.

 

Error Code: 1242. Subquery returns more than 1 row

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기