< Tip >
ํ ์ด๋ธ์ด 1๊ฐ ๋์ฌ๋ -> Join
ํ ์ด๋ธ์ด 2๊ฐ ์ด์ ๋์จ๋ค๋ฉด -> Join / Union
๋ชจ๋ ์ ๋ณด๋ฅผ ์๊ณ ์ถ์ง ์์๋ -> ์๋ธ์ฟผ๋ฆฌ / Join / ์๋์ฐํจ์
where ์ ํ์ธ
๊ฐ์๋ =
์ฌ๋ฌ๊ฐ์ค ํ๋์ ๊ฐ์๋ in ( ) / or
ํฌํจํ ๋ like
< 49๋ฒ - ์ํ๋ถ๋ฅ๋ณ ๊ฐ์ฅ ๋น์ผ ์ํ์ ์ ๋ณด ์กฐํํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/131116
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
with cte as (
SELECT *,
row_number() over (partition by category order by price desc) as row_num
from FOOD_PRODUCT
)
select category,
price as max_price,
product_name
from cte
where row_num = 1
and category in ('๊ณผ์', '๊ตญ', '๊น์น', '์์ฉ์ ')
order by price desc
โ < 50๋ฒ - 5์ ์ํ๋ค์ ์ด๋งค์ถ ์กฐํํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/131117
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
with cte as (
select PRODUCT_ID, PRODUCT_NAME, PRICE
from FOOD_PRODUCT
)
select o.PRODUCT_ID,
cte.PRODUCT_NAME,
sum(amount) * price as TOTAL_SALES
from FOOD_ORDER o
inner join cte
on o.PRODUCT_ID = cte.PRODUCT_ID
where date_format(PRODUCE_DATE, '%Y-%m') = '2022-05'
group by o.product_id
order by sum(amount) * price desc, o.PRODUCT_ID
< ํต์ฌ ๊ฐ๋ >
Question )
FOOD_ORDER ํ ์ด๋ธ๊ณผ FOOD_PRODUCT ํ ์ด๋ธ์ด ์์๋
์
from FOOD_ORDER ์ ํ๊ณ
inner join cte๋ฅผ ํ๋๊ฐ?
Answer1 )
์กฐ์ธ(join)์ด๋ ๋ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ํ๋๋ก ๋ชจ์ผ๊ธฐ ์ํด ๊ณตํต ์ปฌ๋ผ์ ๋ฐํ์ผ๋ก ๋ ํ ์ด๋ธ์ ๊ฐ๋ก๋ก ์ด์ด๋ถ์ด๋ ๊ฒ์ด๋ค
union์ด๋ ๋ ํ ์ด๋ธ์ด ๋ชจ๋ ๊ฐ์ ์ปฌ๋ผ์ด๋ผ๋ ์กฐ๊ฑดํ์ ๋ ํ ์ด๋ธ์ ์ธ๋ก๋ก ์ด์ด๋ถ์ด๋ ๊ฒ์ด๋ค
์๋ก ๋ค๋ฅธ ๋ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ํ๋๋ก ๋ชจ์ผ๋ ๊ฒ์ด ํ์ํ์ผ๋ฏ๋ก ์กฐ์ธ์ ์ฌ์ฉํ๋ค
Answer2 )
product ํ ์ด๋ธ์ ๋ชจ๋ ์ํ์ ๋ํ ์ ๋ณด์ด๋ค
order ํ ์ด๋ธ์ ์ฃผ๋ฌธ๋ ์ ๋ณด์ด๊ณ ์ค๋ณต๋ ์ ํ id๊ฐ๋ ๋ณด์ธ๋ค
๋ด๊ฐ ํ์ํ ๊ฒ์ ์ฃผ๋ฌธ๋ ์ ๋ณด์์ product ํ ์ด๋ธ์ ์ํ์ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ฏ๋ก
์ด ํ์ํ ๋ถ๋ถ๋ง์ cte๋ก ๊ฐ์ ธ์จ ํ
์กฐ์ธ์ ํตํด ์ ๋ณด๋ฅผ ๋ถ์ฌ์ฃผ์๋ค
๋ฐ๋ผ์ (+) ๋ถ๋ถ์ product ํ ์ด๋ธ์ ์ ๋ณด๋ง์ ๊ฐ์ ธ์ฌ ์ ์์๋ค
inner join์ ์ด ์ด์ ๋ (O/O) ์กด์ฌํ๋ ์ ๋ณด์ ๋ํ ์กด์ฌํ๋ ๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค
left join์ ์ฐ๋ ๊ฒฝ์ฐ๋
์ผ์ชฝ์ ํ ์ด๋ธ์ ๋ชจ๋ ์ถ๋ ฅ๋์ด์ผ ํ๊ณ
์ค๋ฅธ์ชฝ์ ํ ์ด๋ธ์ ์ผ์ชฝ๊ณผ ๋งค์นญ๋ ์๋ / ๋งค์นญ๋์ง ์์์๋ ์๋ ๊ฒฝ์ฐ์ด๋ค
๋ฐ๋ผ์ (O/O) + (O/X)
< 51๋ฒ - ์์ด์ง ๊ธฐ๋ก ์ฐพ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/59042
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select animal_id,
name
from ANIMAL_OUTS o
where not exists (
select *
from animal_ins i
where o.animal_id = i.animal_id
)
order by animal_id
# in X out O
< 52๋ฒ - ๊ณผ์ผ๋ก ๋ง๋ ์์ด์คํฌ๋ฆผ ๊ณ ๋ฅด๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/133025
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select h.flavor
from first_half h
inner join icecream_info i
on h.flavor = i.flavor
where h.TOTAL_ORDER >= 3000 and i.INGREDIENT_TYPE = 'fruit_based'
order by h.TOTAL_ORDER desc
< 53๋ฒ - ์ฌ๊ตฌ๋งค๊ฐ ์ผ์ด๋ ์ํ๊ณผ ํ์ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/131536
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
SELECT user_id,
product_id
from ONLINE_SALE
group by user_id, product_id
having count(*) >= 2
order by user_id, product_id desc
< 54๋ฒ - ์ต๋๊ฐ ๊ตฌํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/59415
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select max(datetime)
from ANIMAL_INS
โ < 55๋ฒ - ์กฐ๊ฑด์ ๋ง๋ ์ฌ์ฉ์ ์ ๋ณด ์กฐํํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/164670
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
with cte as (
select user_id,
nickname,
concat(city, ' ', street_address1, ' ', street_address2) as '์ ์ฒด์ฃผ์',
concat(substring(tlno, 1, 3), '-', substring(tlno, 4, 4), '-', substring(tlno, 8,4)) as '์ ํ๋ฒํธ'
from USED_GOODS_USER
)
select c.user_id,
c.nickname,
c.์ ์ฒด์ฃผ์,
c.์ ํ๋ฒํธ
from USED_GOODS_BOARD b
inner join cte c
on b.writer_id = c.user_id
group by c.user_id
having count(*) >= 3
order by c.user_id desc
< 56๋ฒ - ํน์ ์ต์ ์ด ํฌํจ๋ ์๋์ฐจ ๋ฆฌ์คํธ ๊ตฌํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/157343
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select *
from CAR_RENTAL_COMPANY_CAR
where options like '%๋ค๋น๊ฒ์ด์
%'
order by car_id desc
< 57๋ฒ - ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ค๊ณ ๊ฑฐ๋ ์ํ ์กฐํํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/164672
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select board_id,
writer_id,
title,
price,
case when status = 'SALE' then 'ํ๋งค์ค'
when status = 'RESERVED' then '์์ฝ์ค'
when status = 'DONE' then '๊ฑฐ๋์๋ฃ'
end as status
from USED_GOODS_BOARD
where date_format(CREATED_DATE, '%Y-%m-%d') = '2022-10-05'
order by board_id desc
< 58๋ฒ - ์ทจ์๋์ง ์์ ์ง๋ฃ ์์ฝ ์กฐํํ๊ธฐ >
https://school.programmers.co.kr/learn/courses/30/lessons/132204
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
select a.APNT_NO,
p.PT_NAME,
a.PT_NO,
a.MCDP_CD,
d.DR_NAME,
a.APNT_YMD
from APPOINTMENT a
inner join PATIENT p
on a.pt_no = p.pt_no
inner join DOCTOR d
on a.MDDR_ID = d.dr_id
where a.APNT_CNCL_YN = 'N' and a.MCDP_CD = 'CS'
and date_format(a.APNT_YMD, '%Y-%m-%d') = '2022-04-13'
order by a.APNT_YMD