๐ป ๋ฌธ์ ์ฃผ์ : https://school.programmers.co.kr/learn/courses/30/lessons/133025
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ป ๋ฌธ์ ์ค๋ช
๋ค์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ์ ์๋ฐ๊ธฐ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ๋ด์ FIRST_HALF ํ ์ด๋ธ๊ณผ ์์ด์คํฌ๋ฆผ ์ฑ๋ถ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ICECREAM_INFO ํ ์ด๋ธ์ ๋๋ค. FIRST_HALF ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, SHIPMENT_ID, FLAVOR, TOTAL_ORDER๋ ๊ฐ๊ฐ ์์ด์คํฌ๋ฆผ ๊ณต์ฅ์์ ์์ด์คํฌ๋ฆผ ๊ฐ๊ฒ๊น์ง์ ์ถํ ๋ฒํธ, ์์ด์คํฌ๋ฆผ ๋ง, ์๋ฐ๊ธฐ ์์ด์คํฌ๋ฆผ ์ด์ฃผ๋ฌธ๋์ ๋ํ๋ ๋๋ค. FIRST_HALF ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ FLAVOR์ ๋๋ค.
Column name | Type | Nullable |
SHIPMENT_ID | INT(N) | FALSE |
FLAVOR | VARCHAR(N) | FALSE |
TOTAL_ORDER | INT(N) | FALSE |
ICECREAM_INFO ํ ์ด๋ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, FLAVOR, INGREDIENT_TYPE์ ๊ฐ๊ฐ ์์ด์คํฌ๋ฆผ ๋ง, ์์ด์คํฌ๋ฆผ์ ์ฑ๋ถ ํ์ ์ ๋ํ๋ ๋๋ค. INGREDIENT_TYPE์๋ ์์ด์คํฌ๋ฆผ์ ์ฃผ ์ฑ๋ถ์ด ์คํ์ด๋ฉด sugar_based๋ผ๊ณ ์ ๋ ฅ๋๊ณ , ์์ด์คํฌ๋ฆผ์ ์ฃผ ์ฑ๋ถ์ด ๊ณผ์ผ์ด๋ฉด fruit_based๋ผ๊ณ ์ ๋ ฅ๋ฉ๋๋ค. ICECREAM_INFO์ ๊ธฐ๋ณธ ํค๋ FLAVOR์ ๋๋ค. ICECREAM_INFO ํ ์ด๋ธ์ FLAVOR๋ FIRST_HALF ํ ์ด๋ธ์ FLAVOR์ ์ธ๋ ํค์ ๋๋ค.
Column name | Type | Nullable |
FLAVOR | VARCHAR(N) | FALSE |
INGREDIENT_TYPE | VARCHAR(N) | FALSE |
๐ป ๋ฌธ์
์๋ฐ๊ธฐ ์์ด์คํฌ๋ฆผ ์ด์ฃผ๋ฌธ๋์ด 3,000๋ณด๋ค ๋์ผ๋ฉด์ ์์ด์คํฌ๋ฆผ์ ์ฃผ ์ฑ๋ถ์ด ๊ณผ์ผ์ธ ์์ด์คํฌ๋ฆผ์ ๋ง์ ์ด์ฃผ๋ฌธ๋์ด ํฐ ์์๋๋ก ์กฐํํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
๐ป ์ฝ๋ ๋ฐ ํ์ด
select first_half.FLAVOR
from first_half
join icecream_info using (flavor)
where first_half.total_order > 3000 and icecream_info.ingredient_type = 'fruit_based'
order by first_half.total_order desc
์ด๋ ์ ์ฝ๋์์ ์ฌ์ฉํ Using์ On์ผ๋ก๋ ๋์ฒดํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ํธ์์ first_half ํ ์ด๋ธ์ fh๋ก, icecream_info ํ ์ด๋ธ์ ii๋ก ๋ณ์นญ์ ์ ํ๊ธด ํ์ง๋ง ๊ฐ ํ ์ด๋ธ์ flavor ์ปฌ๋ผ์ ์ฌ์ฉํ๋ค๊ณ ๋ช ์ํ ๋ถ๋ถ ์ธ์๋ ์ฝ๋๋ฅผ ๋ดค์ ๋ ํฐ ์ฐจ์ด๋ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ๋์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
select first_half.FLAVOR
from first_half fh
join icecream_info ii
on fh.flavoe = ii.flavor
where first_half.total_order > 3000 and icecream_info.ingredient_type = 'fruit_based'
order by first_half.total_order desc
Using VS On?
๊ฒฐ๋ก ์ ์ผ๋ก ๋งํ์๋ฉด Using๊ณผ On์๋ ์ฌ์ฉ์ ์์ด์ ํฐ ์ฐจ์ด๊ฐ ์๋ค. ๊ทธ์ ์ปฌ๋ผ๋ช ์ด ๊ฐ์ ๋๋ Using์, ๋ค๋ฅผ ๋๋ On์ ์ด๋ค๋ ์ฐจ์ด์ ๋ง ์๋ค. ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
1๏ธโฃ Using
- JOIN ํ๊ณ ์ ํ๋ ๋ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช ์ด ๊ฐ์ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ํ ์ด๋ธ ์ด๋ฆ / ALIAS / ์ ๋์ฌ ์ฌ์ฉ ๋ถ๊ฐ
- SQL Server ๋ฏธ์ง์
2๏ธโฃ On
- JOIN ํ๊ณ ์ ํ๋ ๋ ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช ์ด ๊ฐ์ง ์๋๋ผ๋ ์ฌ์ฉ ๊ฐ๋ฅ
--------- ์ค๋์ TMI๐
์ฒ์ ์ฝ๋๋ฅผ ์งค ๋ ๊ฐ๋จํ๊ณ ๋ช ๋ฃํ ์ฝ๋๊ฐ ์ข์์ Using๋ง ์ฃผ๊ตฌ์ฅ์ฐฝ ์ผ๋ค. ๊ทผ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์ง๋ค๋ณด๋ฉด ๊ฐํน ํน์ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋ช ์ํด์ค์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋๋ฐ ์ด๋ Using์ ์ฐ๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ง ๋์กฐ์ฐจ๋ ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๊ทผ ์๊ธฐ๊ธฐ ์์ํด์ ๊ทธ ํ๋ถํฐ๋ On์ ๋์ ์ฌ์ฉํ๊ธฐ ์์ํ๋ค.
On์ ์ฌ์ฉํ๋ฉด ๋ค ์ข์๋ฐ ํ ์ด๋ธ ์ด๋ฆ์ ๊ทธ๋๋ก ๋ค ์ฐ๊ธฐ๊ฐ ์ฐธ ๊ท์ฐฎ์ ๊ฒ ๊ฐ๋ค๐ค