๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
SQL/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค][SQL-SELECT] (USING, ON ์ฐจ์ด) ๊ณผ์ผ๋กœ ๋งŒ๋“  ์•„์ด์Šคํฌ๋ฆผ ๊ณ ๋ฅด๊ธฐ

by ์ด๋ฎด 2023. 7. 4.
728x90

๐Ÿ’ป ๋ฌธ์ œ ์ฃผ์†Œ : 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์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค ์ข‹์€๋ฐ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ๋‹ค ์“ฐ๊ธฐ๊ฐ€ ์ฐธ ๊ท€์ฐฎ์€ ๊ฒƒ ๊ฐ™๋‹ค๐Ÿค

728x90
๋ฐ˜์‘ํ˜•