[SQL] 조건이 여러 개인 문제 연산
<문제>
FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
<풀이1 : if(조건, 참, 거짓), like '포함시킬 단어'>
냉동시설의 경우 여부가 널이면 'N', 아니면 기존값을 출력시켜야하므로 조건절인 if를 사용해 주었다. 또한 경기도에 위치한 창고만 가져와야하므로 where 절에 like '경기도%' 작성하여 경기도로 시작하는 데이터만 특정지었다.
SELECT warehouse_id,
warehouse_name,
address,
if( freezer_yn is null, 'N', freezer_yn) as '냉동시설 여부'
from food_warehouse
where address like '경기도%'
order by warehouse_id
위 구문은 작성할 시 where절에 조건으로 address like '경기%' 나 where substr(address,1,2) = '경기'도 사용 가능하다.
<풀이1 : 인라인 서브쿼리 >
조건이 여러개라면 순차적을 기록할 수 있는 서브쿼리(subquery)를 사용해도 좋다. 서브쿼리는 쿼리문에서 나온 결과를 넣어 추가적으로 연산을 가능하게 하여 1개의 쿼리문에서 복잡한 연산을 가능하게 한다.
인라인 서브쿼리는 FROM절에 사용하는 서브쿼리로, 하나의 테이블처럼 사용하며 작성이 끝난 후 as '별명'이 필수이다. 사용법은 from ( SELECT 필요한 column From table명 where 조건절) as '별명' 으로 최종적인 수식의 FROM 절에 넣어 사용할 수 있다.
SELECT warehouse_id,
warehouse_name,
address,
if( freezer_yn is null, 'N', freezer_yn) as '냉동시설 여부'
from (select * from food_warehouse where address like '경기도%') a
order by warehouse_id
<풀이1-1 : 인라인 서브쿼리에 인라인 서브쿼리 넣기>
from 절 안으로 2개의 조건 모두 넣어보았다. 경기도 소재지의 행만 가져와서, 냉동시설 여부의 null값을 'N'으로 바꾸고, 마지막에 2번 필터링된 전체 행을 출력하였다..
select *
from (
select warehouse_id, warehouse_name, address,
if(freezer_yn is null, 'N', freezer_yn) feezer
from (
select warehouse_id, warehouse_name,address,freezer_yn
from food_warehouse
where address like '경기도%'
) a
) b
order by warehouse_id