[mySQL] 조건 IF / CASE

merci·2022년 11월 29일
0

mySQl 기초

목록 보기
4/11

데이터를 특정조건으로 출력하려면 Where 을 이용하는 방법이 있지만
IF IFNULL ISNULL CASE WHEN THEN 을 이용해서 조금더 다양한 조건을 줄 수 있다


IFNULL

IFNULL(comm,0)은 컬럼 comm의 데이터가 NULL 이라면 0 으로, NULL이 아니라면 comm 그대로 출력한다


ISNULL

ISNULL() 은 안에 들어간 데이터에 따라 TRUEFALSE를 출력한다.
( 일반적으로 프로그래밍에서 IS로 시작하는함수는 bool값을 리턴한다. )


IF

위의 두 함수를 이용하면

SELECT 
  	ENAME, SAL, COMM, 
  	IFNULL (comm,'feef') AS IFNULL, 
  	IF (isnull(COMM), SAL*0, SAL+COMM) AS ISNULL 
from emp;

isnull(COMM)truefalse 를 출력하는데 참이라면 콤마로 나누어진 두번째 조건을, 거짓이라면 마지막 조건을 출력한다. 아래와 같은 결과가 나오게 된다.
즉, 삼항연산자와 같은 모양이다.

다른 예제로 다음과 같은 결과를 얻을수 있다.

SELECT 
  	EMPNO, ENAME, COMM, 
  	IF (isnull(COMM), 'NULL', 'EXIST') AS NVL2 
FROM EMP 
WHERE DEPTNO = 30;


case when then

  • 먼저 코드를 보자
SELECT name, tel, 
	  case substr(tel, 1, instr(tel, ')'))   
  		   when 02 then "SEOUL" 
		   when 031 then "GYEONNGGI"
           when 051 then "BUSAN"
           when 052 then "ULSAN"
		   when 055 then "GYEONGNAM"
           else "ETC" # else 는 생략가능
           end "LOC"
FROM student WHERE deptno1 = 201 ;

case 뒤에는 데이터나 컬럼이 들어가면서 <조건>을 만든다. (생략가능)
whenthen은 if 와 유사한데 첫번째 줄은 데이터가 02라면 "SEOUL"로 출력을 한다.
여러개의 쌍을 이어 갈 수 있고 데이터에 언급한 내용이 없다면 else의 값을 출력한다 else는 생략할수도 있다.
마지막 end는 새롭게 만들어질 컬럼의 이름을 정한다



  • 예제1
SELECT name,pay, 
  		case when pay between 1 and 300 then "grade 1"
			 when pay between 301 and 400 then "grade 2"
             when pay between 401 and 500 then "grade 3"
             when pay > 500 then "grade 4"
             end "grade"
FROM professor order by pay desc;

when 다음 구체적인 조건을 준다면 case 뒤를 비워둘 수도 있다.

  • 예제2
SELECT empno, ename, comm, 
      case  when comm is null then '해당사항없음'
            when comm = '0' then '수당없음'
            when comm > 0 then concat('수당 : ', comm)  --  '수당'과 comm 컬럼의 데이터 연결
            end 'comm.text'
FROM emp;

  • 결석 4회 이상 'F'
SELECT name, 
  case when absent >= 4 then 'F'
	   when score >= 90 then 'A'
	   when score >= 80 then 'B'
 	   when score >= 70 then 'C'
	   when score >= 60 then 'D'
	   else 'F'
	   end grade
FROM student;

가장 위의 조건이 우선된다. 결석이 4회 이상이면 점수가 100이라도 무조건 'F'가 된다.

profile
작은것부터

0개의 댓글