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;
'MySQL Workbench' 카테고리의 다른 글
[MySQL] 테이블 설정 _ Datatype TIMESAMP (0) | 2024.05.16 |
---|---|
[MySQL] SQL 날짜와 시간 처리하는 함수들 _ dayofweek(), now(), curdate(), date_add(), date_sub() (0) | 2024.05.16 |
[MySQL] SQL null인 데이터를 가져오기, 바꾸기 _ is null, ifnull (0) | 2024.05.14 |
[MySQL] SQL 데이터 그룹하여 데이터 사용하기 _group by, having (0) | 2024.05.14 |
[MySQL] Sub Query 사용하기 (0) | 2024.05.14 |