개발학습일지

[MySQL] SQL 조건문 사용하기 _case, if 본문

MySQL

[MySQL] SQL 조건문 사용하기 _case, if

처카푸 2024. 5. 14. 18:05

SQL 조건문 사용하기

주의!!
- 조건문을 통해 새로운 컬럼을 만들어 주는 것이기 때문에 
  select * , 콤마 필수로 신경 써줘야 한다!
- 스키마 설정한 컬럼이 아니면 에러난다! 
  테이블에 원래 있던 컬럼만 사용이 가능하고, 가공된 컬럼은 사용 할 수 없다.

 

case

: case와 end는 한쌍이며 select 아래 위치, when - then은 항상 같이 사용

  else는 모든 조건이 True가 아닌 경우 else의 결괏값을 반환한다.

  (else가 없으면 null 반환된다.)

: 컬럼값이 같은 and는 between a and b 로도 사용이 가능하다  _like 키워드 제외

: 컬럼값이 같은 or는 in (특정값, 특정값,...)로도 사용이 가능하다  _like 키워드 제외

-- 출판년도가 2000년 이상인 책들은 '최신책' 이라고 하고,
-- 그렇지 않은 책들은 '예전책' 이라고 하여,
-- type 컬럼을 만들자.
select *, 
    case
        when released_year >= 2000 then '최신책'
        else '예전책'
    end as type
from books;

-- 재고가 0이상이고 50이하이면, *
-- 재고가 51이상이고 100이하이면, **
-- 이도저도 아니면, *** 로 하여
-- stock 이라는 컬럼을 만들자
select *,
    case
        when stock_quantity between 0 and 50 then '*'
        when stock_quantity between 51 and 100 then '**'
        else '***'
    end as stock
from books;

 

 

if

:  기존 컬럼의 데이터로 2가지 조건으로만 확인하는 경우 사용한다.

  (조건이 2가지일 경우 훨씬 편리하게 사용된다.)

if( 조건입력, 사실일 때의 값, 거짓일 때의 값 )

 

-- 기존 컬럼의 데이터를 가지고, 2가지의 조건으로만 확인하는 경우는
-- if() if함수!! 를 사용해도 된다.
-- 즉 , 2가지로 파악할때는 if 함수가 훨씬 편합니다.

-- pages 컬럼의 값이 300보다 크면, '긴책' 이라고 하고,
-- 그렇지 않으면, '짧은책' 이라고 하여,
-- 새로운 컬럼, book_type을 만들자
select *,
       if( pages > 300 , '긴책' , '짧은책') book_type
from books;

 

주의!

- 스키마 설정한 컬럼이 아니면 에러난다! 
  테이블에 원래 있던 컬럼만 사용이 가능하고, 가공된 컬럼은 사용 할 수 없다.

--오류 코드
select s.first_name, ifnull( avg( p.grade), '0' ) average,
	if( average > 75, 'PASSING', 'FAILING' ) passing_status
from students s
left join papers p
	on s.id = p.student_id
group by s.first_name
order by average desc;

--정상 코드
select s.first_name, ifnull( avg( p.grade), '0' ) average,
	if( ifnull( avg( p.grade), '0' ) > 75, 'PASSING', 'FAILING' ) passing_status
from students s
left join papers p
	on s.id = p.student_id
group by s.first_name
order by average desc;