본문 바로가기

프로그래밍 언어/MySQL

[MySQL] if() 함수, ifnull() 함수 , 실습 풀이

반응형
use yh_db;

select *
from yh_db.books;

use yh_db;
select *
from books;

 

 if() 함수

-- pages가 300보다 크면 long, 그렇지 않으면 short

--  if( 조건, 조건이 맞으면~하겠다,조건이 맞지 않으면 ~하겠다. ) 

ㄴ 첫번째 파라미터: 컬럼이름 및 조건 , 

ㄴ 두번째 파라미터 : ~하겠다

ㄴ 세번째 파라미터: 그렇지 않으면~하겠다.

select *, if( pages >=300, 'long','short') as 'long/short' 
from books;

 

select * from people;

insert into people
(first_name)
values
('Mike');

 

ifnull() 함수 

-- null이라는 값이 있으면, 내가 원하는 형태로 바꿔주는 함수

- ifnull(컬럼이름,null 처리 명령)

-- 컬럼의 null값을 다른값으로 변경할 때

-- (컬럼이름 무엇에 null이 있으면, 해당 입력값으로 바꿔라)라는 뜻

-- 데이터가 없으면 웬만하면 null이라고 입력해놓자. 

select *, ifnull(age,100)
from people;



-- 실습: DB2

-- 1번 문제: 1980년 이전에 발행된 책을 가져오시오. 

select *
from books
where released_year <1980;

 

-- 2번 문제: Eggers나 Chabon이 쓴 책을 가져오시오. 

select * 
from books
where author_lname = 'Eggers' or 'Chabon';

select * 
from books
where author_lname in('Eggers','Chabon');

ㄴ 같은 뜻, 다른 풀이

 

-- 3번 문제: Lahiri가 썻고, 2000년 이후에 발행된 책을 가져오시오. 

select * 
from books
where author_lname = 'Lahiri' and released_year >2000;

 

-- 4번 문제: 페이지수가 100부터 200까지인 책들을 가져오시오. 

select * 
from books
where pages between 100 and 200;

 

-- 5번 문제: lname이 c나 s로 시작하는 작가가 쓴 책을 가져오시오. 

select * 
from books
where author_lname like 'c%' or author_lname like 's%';

select * 
from books
where author_lname REGEXP '^c|^s';

select *
from books
where substring(author_lname,1,1) = 'c' or substring(author_lname,1,1) = 's';

ㄴ 같은 뜻, 다른 풀이

 

-- 6번 문제: 

-- if title contains 'stories' -> short stories

-- just kids and a heartbreaking work -> memoir

-- everything else -> novel

select * , case when title like '%stories%' then 'short stories' 
    when title = 'just kids' or title = 'a heartbreaking works' then 'Memoir'
                else 'Novel' 
                end as TYPE
from books;

 

-- 7번 문제: 

-- bonus: make this happen(refer to a image below)

-- column: title, author_lname, count(number + book(s))

 

select title, author_lname, case when count(*) = 1 then concat(count(*),' book')
      else concat(count(*),' books')
                                          end as COUNT
from books
group by author_lname,author_fname
order by author_lname;


select title, author_lname, 
if(count(*) = 1 , concat(count(*),' book'), concat(count(*),' books')) as COUNT
from books
group by author_lname,author_fname
order by author_lname;

 

반응형