sql쿼리 각 절의 우선 순위
from >>> where >>> select >>> order by >>> group by >>> having >>> limit(이절은 order by 이후 실행)
1. 고양이와 개는 몇 마리 있을까
ANIMAL_INS 테이블 : 동물 보호소에 들어온 동물의 정보

문제 : 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회
나의 쿼리
SELECT ANIMAL_TYPE, count(*) as count # 컬럼 선택
from ANIMAL_INS # 데이터 불러오기
where ANIMAL_TYPE='Cat' or ANIMAL_TYPE='Dog' # 동물 타입 고양이와 개 로 필터
group by ANIMAL_TYPE # 동물 타입으로 묶어주기
order by ANIMAL_TYPE # 동물 타입 컬럼 오름차순
2. 입양 시작 구하기(1)
ANIMAL_INS 테이블 : 동물 보호소에 들어온 동물의 정보

문제 : 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬
나의 쿼리
SELECT date_format(DATETIME, '%H') as HOUR, count(*) as COUNT # 컬럼 선택
from ANIMAL_OUTS # 데이터 불러오기
where date_format(DATETIME, '%H')>='09' and date_format(DATETIME, '%H')<'20' # 입양시간 9~19시로 필터
group by HOUR # 시간으로 묶어주기
order by HOUR # 시간 컬럼 오름차순
3. 진료과별 총 예약 횟수 출력
APPOINTMENT 테이블 : 종합병원 진료 예약정보

문제 : 2022년 5월에 예약한 환자 수를 진료과코드 별로 조회하는 SQL문을 작성해주세요. 이때, 컬럼명은 '진료과 코드', '5월예약건수'로 지정해주시고 결과는 진료과별 예약한 환자 수를 기준으로 오름차순 정렬하고, 예약한 환자 수가 같다면 진료과 코드를 기준으로 오름차순 정렬
나의 쿼리
SELECT MCDP_CD as 진료과코드, count(*) as 5월예약건수 # 컬럼 선택
from APPOINTMENT # 데이터 불러오기
where date_format(APNT_YMD,'%Y-%m')='2022-05' # 2022년5월 예약한 것으로 필터
group by 진료과코드# 진료과코드로 묶어주기
order by 5월예약건수, 진료과코드 # 5월예약건수, 진료과코드 오름차순
4. 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기
CAR_RENTAL_COMPANY_CAR 테이블 : 자동차 대여 회사에서 대여중인 자동차들의 정보

문제 : '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 자동차가 자동차 종류 별로 몇 대인지 출력하는 SQL문을 작성해주세요. 이때 자동차 수에 대한 컬럼명은 CARS로 지정하고, 결과는 자동차 종류를 기준으로 오름차순 정렬
나의 쿼리
SELECT car_type, count(*) as CARS # 컬럼 선택
from CAR_RENTAL_COMPANY_CAR # 데이터 불러오기
where OPTIONS like '%통풍시트%' or OPTIONS like '%열선시트%' or OPTIONS like '%가죽시트%' # 옵션이 통풍, 열선, 가죽 하나 이상 이라고 포함된 것 필터
group by car_type # 자동차 종류로 묶어주기
order by car_type # 자동차 종류로 오름차순
5. 상품 별 오프라인 매출 구하기
PRODUCT 테이블 : 의류 쇼핑몰에서 판매중인 상품들의 상품 정보

OFFLINE_SALE 테이블 : 오프라인 상품 판매 정보를 담은

문제 : 상품코드 별 매출액(판매가 * 판매량) 합계를 출력하는 SQL문을 작성해주세요. 결과는 매출액을 기준으로 내림차순 정렬해주시고 매출액이 같다면 상품코드를 기준으로 오름차순 정렬
나의 쿼리
SELECT a.product_code, sum((a.price*b.SALES_AMOUNT)) as SALES # 컬럼 선택, 매출액 컬럼 구해주기
from (select * from PRODUCT) a right join (select PRODUCT_ID, SALES_AMOUNT from OFFLINE_SALE) b
on a.PRODUCT_ID = b.PRODUCT_ID # 오른쪽 테이블 기준으로 조인
group by product_code # 제품코드로 묶어주기
order by SALES desc, product_code # 매출액 내림차순, 제품코드 오름차순
6. 조건에 맞는 도서와 저자 리스트 출력
BOOK 테이블 : 판매중인 도서 정보

AUTHOR 테이블 : 저자 정보

문제 : '경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요. 결과는 출판일을 기준으로 오름차순 정렬
나의 쿼리
SELECT BOOK_ID, author_name, date_format(PUBLISHED_DATE,'%Y-%m-%d') as PUBLISHED_DATE # 컬럼 선택
from (select BOOK_ID, AUTHOR_ID, PUBLISHED_DATE from BOOK where CATEGORY='경제') a
join (select * from AUTHOR ) b
on a.AUTHOR_ID=b.AUTHOR_ID 경제 카테고리에 속하는 도서 테이블과 저자명 테이블 조인
order by PUBLISHED_DATE # 출판일 기준 오름차순
7. 성분으로 구분한 아이스크림 총 주문량
FIRST_HALF 테이블 : 아이스크림 가게 상반기 주문 정보

ICECREAM_INFO 테이블 : 아이스크림 성분에 대한 정보

문제 : 각 아이스크림 성분 타입과 성분 타입에 대한 아이스크림의 총주문량을 총주문량이 작은 순서대로 조회하는 SQL 문을 작성해주세요. 이때 총주문량을 나타내는 컬럼명은 TOTAL_ORDER로 지정
나의 쿼리
select INGREDIENT_TYPE, sum(TOTAL_ORDER) as TOTAL_ORDER # 컬럼 선택
from (select FLAVOR, TOTAL_ORDER from FIRST_HALF) a
join (select * from ICECREAM_INFO ) b
on a.FLAVOR=b.FLAVOR # 아이스크림 총주문량과 성분정보 테이블 조신
group by INGREDIENT_TYPE # 성분타입으로 묶어주기
order by TOTAL_ORDER # 총주문량 오름차순
8. 루시와 엘라 찾기
ANIMAL_INS 테이블 : 동물 보호소에 들어온 동물의 정보

문제 : 동물 보호소에 들어온 동물 중 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하는 SQL 문을 작성
나의 쿼리
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE # 컬럼 선택
from ANIMAL_INS # 데이터 불러오기
where NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') # 이름이 'Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty' 인것으로 필터
*** sql은 소괄호를 써야됨!! ***
9. 가격대 별 상품 개수 구하기
PRODUCT 테이블 : 의류 쇼핑몰에서 판매중인 상품들의 상품 정보

문제 : 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬
나의 쿼리
SELECT
case # 가격대 만원대 별로 구간 구해서 컬럼 재설정
when price<10000 then 0
when price>=10000 and price<20000 then 10000
when price>=20000 and price<30000 then 20000
when price>=30000 and price<40000 then 30000
when price>=40000 and price<50000 then 40000
when price>=50000 and price<60000 then 50000
when price>=60000 and price<70000 then 60000
when price>=70000 and price<80000 then 70000
when price>=80000 and price<90000 then 80000
when price>=90000 and price<100000 then 90000
end as PRICE_GROUP, count(*) as PRODUCTS # 컬럼 선택
from PRODUCT # 데이터 불러오기
group by PRICE_GROUP # 가격 그룹으로 묶어주기
order by PRICE_GROUP # 가격 대 별 오름차순
10. 3월에 태어난 여성 회원 목록 출력
MEMBER_PROFILE 테이블 : 식당 리뷰 사이트 회원 정보

문제 : 생일이 3월인 여성 회원의 ID, 이름, 성별, 생년월일을 조회하는 SQL문을 작성해주세요. 이때 전화번호가 NULL인 경우는 출력대상에서 제외시켜 주시고, 결과는 회원ID를 기준으로 오름차순 정렬
나의 쿼리
SELECT MEMBER_ID, MEMBER_NAME, GENDER, date_format(DATE_OF_BIRTH,'%Y-%m-%d') as DATE_OF_BIRTH # 컬러 선택
from MEMBER_PROFILE # 데이터 불러오기
where date_format(DATE_OF_BIRTH, '%m') ='03' and GENDER='W' and TLNO is not null # 생일이 3월, 여자, 전화번호가 null이 아닌것 필터
order by MEMBER_ID # 회원id 오름차순