출처
문제
동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성해주세요.
문제에 대한 해석
1. 이름 포함: Lucy, Ella, Pickle, Rogan, Sabrina, Mitty
2. 조회: 아이디와 이름, 성별 및 중성화 여부
풀이(MYSQL)
select animal_id, name, sex_upon_intake
from animal_ins
where name in ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
select animal_id, name, sex_upon_intake
from animal_ins
where name in ('Lucy','Ella','Pickle','Rogan','Sabrina','Mitty')
- FROM 절: animal_ins테이블 에서
- WHERE 절: name컬럼에서 Lucy','Ella','Pickle','Rogan','Sabrina','Mitty'중에 하나라도 포함된데이터 필터링
- SELECT 절: animal_id, name, sex_upon_intake 조회
출처
문제
상반기 동안 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정해주세요.
문제에 대한 해석
1. 테이블 조인
2. 아이스크림 성분 타입 그룹함수
3. 주문량 집계함수
4. 주문량 오름차순
풀이(MYSQL)
select info.ingredient_type, sum(half.total_order) as total_order
from first_half half join icecream_info info on half.flavor = info.flavor
group by info.ingredient_type
order by total_order
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- FROM, JOIN절: 상방기 아이스크림 판매를 나타내는 first_half테이블과 아이스크림 정보를 나타내는 icecream_info를 flavor을 기준으로 join
- GROUP BY 절: 성분에 따른 데이터를 조회하기 위해 ingredient_type 그룹화
- SELECT 절: ngredient_type과 ngredient_type에 따른 half.total_order의 합계를 total_order로 지정하여 조회
- ORDER BY 절:total_order의 오름차순
다른사람 풀이
SELECT B.INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS A, ICECREAM_INFO AS B
WHERE A.FLAVOR = B.FLAVOR
GROUP BY B.INGREDIENT_TYPE
ORDER BY TOTAL_ORDER ASC
배운점
- 만약, 문제에 INGREDIENT_TYPE=sugar인 것을 조회하는 쿼리가 추가되었을때 on절을 사용한 쿼리는 조인실행 후 조인 결과로 생성된 테이블에서 where절을 추가해 sugar인 행들을 찾는다
- 다른사람풀이의 where절로 조인을 할 경우 WHERE A.FLAVOR = B.FLAVOR and INGREDIENT_TYPE=sugar로 수정하여 조인실행시 INGREDIENT_TYPE=sugar인 테이블과 조인한다
- 결과적으로 같은 결과지만 쿼리1(내가쓴)에서 조건을 나중에 걸어주는 것이고 쿼리2(다른사람)에서는 미리 조건을 걸어주어 원하는 테이블만 조건을 걸기 때문에 성능적인 면에서 주번째 쿼리가 용량을 덜 차지한다
- 그렇다면 join절보다 유리한 where로 조인하는 습관을 들여야 하는 것인가..?
- 예: https://seulhee030.tistory.com/57
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] SQL 개인과제 (고급 1) (0) | 2024.01.09 |
---|---|
[문제풀이] 조건에 맞는 도서 리스트 출력하기/ 평균 일일 대여 요금 구하기 (0) | 2024.01.09 |
[문제풀이] SQL개인과제(초급/중급) (0) | 2024.01.08 |
[문제풀이] 조건별로 분류하여 주문상태 출력하기 (2) | 2024.01.08 |
[문제풀이] 조건에 맞는 도서와 저자 리스트 출력 (1) | 2024.01.08 |