쿼리에서 조건을 걸어 데이터가 return 0 row일때

쿼리에서 "값이 없다" 라는 결과를 리턴값으로 처리하는 방법을 사용해보려한다.


1. 테이블 생성하기


1
2
3
4
5
6
CREATE TABLE `CODE_TABLE` (
    `CODE_CD` VARCHAR(10NOT NULL COLLATE 'utf8_bin',
    `CODE_NM` VARCHAR(10NOT NULL COLLATE 'utf8_bin'
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
cs


코드테이블이라는 테스트 테이블을 생성한다.

코드테이블은 코드, 코드명 컬럼으로 구성된다.


2. 데이터 넣기


1
2
3
4
5
INSERT INTO CODE_TABLE VALUES('10','개발팀');
 
INSERT INTO CODE_TABLE VALUES('20','영업팀');
 
INSERT INTO CODE_TABLE VALUES('30','기획팀');
cs


기초데이터를 넣어준다.



3. 없는 데이터 조회하기


1
2
3
4
-- SELECT한 Row가 0이므로 IFNULL 처리 불가        
SELECT IFNULL(A.CODE_NM, '없는 코드') AS CODE_NM
  FROM CODE_TABLE A
 WHERE A.CODE_CD = '100';
cs


현재 CODE_CD컬럼의 데이터는 10,20,30 이 들어가 있고

where절에서 '100' 을 조회하면 데이터가 조회되지 않는다.


위와 같이 쿼리를 작성하면 데이터가 있다면 코드명이 나오고

데이터가 없다면 아무것도 나오지 않는다.


SELECT 한 결과가 0건이라도

IFNULL에 걸린 것 처럼 "없는 코드" 라고 결과가 나오게 하고 싶다.



4. DUAL 테이블과 외부조인 걸기


1
2
3
4
     SELECT IFNULL(A.CODE_NM, '없는 코드') AS CODE_NM
       FROM CODE_TABLE A 
RIGHT OUTER JOIN (SELECT '') AS m_dual
         ON A.CODE_CD = '100';
cs



DUAL을 외부조인으로 사용하여 CODE가 없다면 "없는코드", 있다면 코드명이 나온다.


5. 집계함수 사용하기


1
2
3
     SELECT IFNULL(MAX(A.CODE_NM), '없는 코드') AS CODE_NM
       FROM CODE_TABLE A 
      WHERE A.CODE_CD = '100';
cs



집계함수를 사용하여 CODE가 없다면 "없는코드", 있다면 코드명이 나온다.


프로시저나 함수를 작성할때 

결과값이 없더라도 MESSAGE로 출력하고 싶다면 유용하게 쓰일수 있을 것 같다.

+ Recent posts