쿼리에서 조건을 걸어 데이터가 return 0 row일때
쿼리에서 "값이 없다" 라는 결과를 리턴값으로 처리하는 방법을 사용해보려한다.
1. 테이블 생성하기
1 2 3 4 5 6 | CREATE TABLE `CODE_TABLE` ( `CODE_CD` VARCHAR(10) NOT NULL COLLATE 'utf8_bin', `CODE_NM` VARCHAR(10) NOT 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로 출력하고 싶다면 유용하게 쓰일수 있을 것 같다.
'전체 > MySQL' 카테고리의 다른 글
MySQL 프로시저 loop, fetch, cursor 사용하기 (1) | 2019.07.30 |
---|---|
MySQL 프로시저 생성 (테이블 백업) 및 이벤트 스케쥴러 등록,삭제 (1) | 2019.07.30 |
MySQL function 만들기 (3) | 2019.07.17 |
MySQL 계층형 쿼리 구현하기 (13) | 2019.07.16 |
SQL EXPLAIN 정리 (0) | 2018.11.19 |