header-img
Info :
๋ฐ€๋„
denseยน
์žฅ๋ž˜ํฌ๋ง : ๋‹จ์œ„ ๋ถ€ํ”ผ ๋‹น ์งˆ๋Ÿ‰์ด ๋ณด๋‹ค ๋นฝ๋นฝํ•œ ์‚ฌ๋žŒ ๋˜๊ธฐ
๋ฌธ๋ฒ• 8
list_img
Bigquery: GROUP BY ALL, ์ฟผ๋ฆฌ ์ž๋™ ๊ทธ๋ฃนํ™” ์‹œํ‚ค๊ธฐ
2024.03.24
02์›” 26์ผ์ž๋กœ ๋น…์ฟผ๋ฆฌ์— GROUP BY ALL ๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋๋‹ค. ๊ธฐ์กด์—๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋ฌถ๊ณ  ์‹ถ์œผ๋ฉด GROUP BY์— ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ–ˆ๋Š”๋ฐ, GROUP BY ALL ๋ฌธ๋ฒ•์˜ ์ถ”๊ฐ€๋กœ ์ด์ œ ๋น…์ฟผ๋ฆฌ๊ฐ€ SELECT ์ ˆ์—์„œ ๊ทธ๋ฃนํ™”ํ•  ํ‚ค๋ฅผ ์•Œ์•„์„œ ๋ฌถ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค. ๋ฌถ๋Š” ์กฐ๊ฑด์€ ๋‹จ์ˆœํ•œ๋ฐ, ์ง‘๊ณ„ ํ•จ์ˆ˜๋‚˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜ ์™ธ ๋ช‡ ๊ฐ€์ง€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ง€์ •ํ•œ ๋ถˆ๊ฐ€ ํ˜•ํƒœ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ปฌ๋Ÿผ์€ ๋‹ค ๊ทธGROUP BY์— ํฌํ•จ์‹œํ‚ค๋Š” ์‹์ด๋‹ค. ์ด ๋•Œ ์ƒ๊ธฐ ์กฐ๊ฑด๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๋‚œ ํ›„, ๋‚จ์€ SELECT ํ•ญ๋ชฉ ์ค‘ ๊ทธ๋ฃนํ™” ๋ถˆ๊ฐ€ํ•œ ์œ ํ˜•์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ์—์„œ ์ฟผ๋ฆฌ๋Š” first_name๊ณผ last_name ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ๋‹ค. total_points๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜ ๊ฐ’์ด๋ฏ€๋กœ ์ œ์™ธ๋๋‹ค. WITH PlayerStats AS ( ..
list_img
SQL: SELECT/ FROM/ WHERE ์ ˆ ์„œ๋ธŒ ์ฟผ๋ฆฌ Subquery
2024.03.07
์„œ๋ธŒ ์ฟผ๋ฆฌSubquery๋ž€ ๋ฉ”์ธ ์ฟผ๋ฆฌMain query๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๊ฐ€์ ์ธ SELECT๋ฌธ์„ ๋งํ•œ๋‹ค. ์–ด๋–ค ๋ฉ”์ธ ์ฟผ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ๋‚ด๋ถ€ ์ฟผ๋ฆฌInner query๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋•Œ, ๋ฉ”์ธ ์ฟผ๋ฆฌ๋Š” ์™ธ๋ถ€ ์ฟผ๋ฆฌOuter query๋กœ ์ง€์นญ๋  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ํ˜•ํƒœ / ์‹คํ–‰ ์กฐ๊ฑด SELECT ์—ด FROM ํ…Œ์ด๋ธ” WHERE ์กฐ๊ฑด์‹ ( SELECT ์—ด FROM ํ…Œ์ด๋ธ” WHERE ์กฐ๊ฑด์‹ ) (1) ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ์— ๊ฐ์‹ธ์ง„ ํ˜•ํƒœ๋กœ ์“ฐ์ธ๋‹ค. (2) SELECT๋ฌธ์˜ ํ˜•ํƒœ๋กœ๋งŒ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (3) ์ฟผ๋ฆฌ์˜ ๋์—์„œ ;์„ธ๋ฏธ ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. (4) ORDER BY์ ˆ์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†๋‹ค. ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ํŠน์ง• (1) ๋น„๊ต ํ˜น์€ ์กฐํšŒ์˜ ๋Œ€์ƒ์ด ๋  ๋•Œ ์กฐํšŒ ๋Œ€์ƒ..
list_img
SQL: mysql์—์„œ์˜ FULL OUTER JOIN
2024.02.21
์‹ค๋ฌด์—์„œ๋Š” ์ข…์ข… ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐใ…ก๊ธฐ์ค€ํ‚ค๊ฐ€ ๊ณต๋ฐฑ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ, ๋‹ค์‹œ ๋งํ•ด ํ•ฉ์ง‘ํ•ฉใ…ก๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. ํƒ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ด๋ฅผ FULL OUTER JOIN์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ง€์›ํ•˜์ง€๋งŒ, mysql์—์„œ๋Š” ์•„์‰ฝ๊ฒŒ๋„ ์ด๋ฅผ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋ฉด mysql์—์„œ๋Š” ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋ƒ๊ณ ? ๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค. LEFT JOIN๊ณผ RIGHT JOIN์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ mysql์—์„œ๋„ ์ด๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ธ๊ตญ ๋ธ”๋กœ๊ทธ์— ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•ด ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•œ ํฌ์ŠคํŠธ๊ฐ€ ์žˆ์–ด ๋ฒˆ์—ญํ•ด ๊ฐ€์ ธ์™€ ๋ณธ๋‹ค. sales์™€ orders๋ผ๋Š” ๋‘ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. sales์™€ orders์—๋Š” ๋™์ผํ•˜๊ฒŒ id์ฃผ๋ฌธ ์•„์ด๋””์™€ order_date(ํ˜•์‹์ด ์‚ด์ง ๋‹ค๋ฅธ)์ฃผ๋ฌธ ์ผ์ž, a..
list_img
SQL: ์œˆ๋„์šฐ ํ•จ์ˆ˜Window Function VS GROUP BY
2024.02.20
์œˆ๋„์šฐ ํ•จ์ˆ˜Window Function๋Š” 'ํ–‰์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ตฌ๋ถ„ํ•ด ์ฃผ๋Š”' ํ•จ์ˆ˜๋‹ค. ์ด์ฏค ๋งํ•˜๋ฉด ๋‹น์‹  ๋จธ๋ฆฟ์†์— ๋– ์˜ค๋ฅธ ๋ฌธ๋ฒ•์ด ํ•˜๋‚˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋งž๋‹ค. GROUP BY. ์ด๊ฒƒ ์—ญ์‹œ ํ–‰์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ตฌ๋ถ„ํ•ด ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜๋ฌธ์ด ๋“ ๋‹ค. GROUP BY ์ ˆ๊ณผ ๋Œ€๋น„ํ•ด ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๊ณ  ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฑธ๊นŒ. ์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์ด์ฒ˜๋Ÿผ ์œ ์‚ฌํ•œ ๋ฌธ๋งฅ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๋ฌธ๋ฒ•, GROUP BY ์ ˆ๊ณผ ์œˆ๋„์šฐ ํ•จ์ˆ˜์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ํƒ๊ตฌํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ธฐ ์•ž์„œ์„œ ์ฆ‰ 'ํ–‰์„ ๋ฌถ๋Š”๋‹ค'๋Š” ํ–‰๋™์— ๋Œ€ํ•ด ๋จผ์ € ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํ–‰์„ ๋ฌถ๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์ผ์ฐจ์ ์œผ๋กœ ํ–‰ ์‚ฌ์ด์˜ ๊ณตํ†ต์ ์„ ์ฐพ๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์—‘์…€ ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. ์ด๋ฆ„ ์„ฑ๋ณ„ ๋‚˜์ด ๊น€์—์ด ๋‚จ 15 ์ด๋น„ ์—ฌ 17 ๊น€..
list_img
SQL: ์กฐ๊ฑด ์ ์šฉํ•ด ์œ ์˜๋ฏธํ•œ ๊ธฐ์ค€์  ๋ฝ‘๊ธฐ, CASE WHEN 2
2024.02.08
CASE WHEN(CASE ๋ฌธ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.)์€ SQL์˜ ์กฐ๊ฑด๋ฌธ์ด๋‹ค. ๊ธฐ์ค€ ์ปฌ๋Ÿผ A๊ฐ€ B๋ผ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด C๋ผ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ˜•ํƒœ๋กœ 'CASE WHEN A = B THEN C'์™€ ๊ฐ™์ด ํ‘œํ˜„๋œ๋‹ค. "์กฐ๊ฑด์— ๋งž๋Š” ๋‹ต์„ ์ถœ๋ ฅ"ํ•˜๋Š” ์‹์ด์–ด์„œ ์ฃผ๋กœ SELECT ์ ˆ์ด๋‚˜ ์ง‘๊ณ„ํ•จ์ˆ˜์—์„œ ์“ฐ์ธ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์•„์ง ์ง‘๊ณ„๋˜์ง€ ์•Š์€ ์œ ์˜๋ฏธํ•œ ์ง€ํ‘œ๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด ๋ณด๊ณ  ์ด๋ฅผ ํ†ตํ•ด CASE WHEN์˜ SELECT์ ˆ ์šฉ๋ก€๋ฅผ ์‚ดํŽด๋ณด๋ ค ํ•œ๋‹ค. ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„๋ž˜๋กœ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋‹ค. (mySQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ƒ˜ํ”Œ์ด๋‹ค.) ์šฐ๋ฆฌ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๋“ค์„ ์‚ดํŽด๋ณด๊ณ  CASE WHEN์„ ํ†ตํ•ด ํšŒ์‚ฌ ์šด์˜ ์ „๋ฐ˜์— ์œ ์˜๋ฏธํ•œ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์—ฌ๋Ÿ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด..
list_img
SQL: ์ค‘๋ณต ๊ฐ’๋งŒ ๋ฆฌ์ŠคํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•, HAVING COUNT()
2024.02.06
๋ถ„์„ ํˆด์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ๋‹นํ™ฉ์Šค๋Ÿฌ์šธ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ณ ์œ  ๋ฒˆํ˜ธ๊นŒ์ง€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋‚˜์˜ค๋Š” ๊ฑฐ๋‹ค. ์ด์œ ๊ฐ€ ์–ด๋–ป๋“ (์šฐ๋ฆฌ๊ฐ€ ๋ณ€๋ณ„๋ ฅ ์—†๋Š” ์กฐ๊ฑด์„ ์„ค์ •ํ–ˆ๋“ , ๋ง ๊ทธ๋Œ€๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ์‹ค์ˆ˜๋ฅผ ํ–ˆ๋“ ) ๊ฐ„์— ์ด ๊ฐ’๋“ค์€ ๊ฑธ๋Ÿฌ์ ธ์•ผ ํ•˜๊ณ  ๋ฐ˜๋Œ€๋กœ ์ˆ˜์ง‘ ํ”„๋กœ์„ธ์Šค ์ž์ฒด์˜ ๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ์ง‘๊ณ„๋˜๊ธฐ๋„ ํ•ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜ order_list๋Š” ๊ฐ€์ƒ์˜ ๋ธŒ๋žœ๋“œ์˜ ์ฃผ๋ฌธ ์ •๋ณด ์ˆ˜์ง‘ ๋‚ด์—ญ์ด๋‹ค. ์ด ์ค‘ ์ฃผ๋ฌธ๋ฒˆํ˜ธ 10251์€ ๋‘ ๋ฒˆ ๋‚˜์˜ค๋Š”๋ฐ ๋ณด๋‹ค์‹œํ”ผ ๊ณ ๊ฐID๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ’์ด ๋™์ผํ•˜๋‹ค. ๊ธฐ์žฌํ•˜์ง„ ์•Š์•˜์ง€๋งŒ ์ˆ˜์ง‘๋œ ์‹œ๊ฐ„๊นŒ์ง€. ์˜ค๋Š˜์€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ/ ์ง‘๊ณ„ ๊ด€๋ จํ•œ ์ฟผ๋ฆฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ๋‹ค. order_list ์ฃผ๋ฌธ๋ฒˆํ˜ธ ๊ณ ๊ฐID ์ฃผ๋ฌธ์ผ์ž ๋ฐฐ์†กID 10248 90 2024-01-03 3 10249 81 2024-01-..
list_img
SQL: ์ ‘์ ์ด๋“  ์ฐจ์ด์ ์ด๋“  ๋ชจ์•„ ๋†”์•ผ ๋ณด์ธ๋‹ค, JOIN 1
2024.02.03
์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Join์— ๋Œ€ํ•ด ๋‹ค๋ฃฌ๋‹ค. Join์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉํ•ด ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ‚ค์›Œ๋“œ๋‹ค. ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋ถ„๋ฆฌํ•ด ๋ณด๊ด€ํ•˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)์™€ ๋‘ ํ…Œ์ด๋ธ” ์ด์ƒ์˜ ์ ‘์  ํ˜น์€ ์ฐจ์ด์ ์—์„œ ์œ ์˜๋ฏธํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋„์ถœํ•ด๋‚ด๋Š” ์ง‘ํ•ฉ์€ ๋—„๋ ˆ์•ผ ๋—„ ์ˆ˜ ์—†๋Š” ์‚ฌ์ด๋ผ ํ•˜๊ฒ ๋‹ค. Join์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ํ…Œ์ด๋ธ”์„ ๊ฐ–๋‹ค ๋†“๊ณ  ๊ธฐ์ค€์ ๊ณผ ์ถœ๋ ฅ ๋ฒ”์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๋‘๋ƒ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ์„ธ๋ถ„ํ™”๋˜์–ด ์žˆ๊ณ  ์ด๋Š” ์ง‘ํ•ฉ์˜ ๊ฐœ๋…๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ๋‹ค๋งŒ ๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ๋“ฑ ์ผ๋ถ€ ์ง‘ํ•ฉ ๊ตฌํ˜„ ๊ธฐ๋Šฅ์€ mySQL์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, exists ๊ตฌ๋ฌธ์œผ๋กœ ์ง์ ‘ ๋งŒ๋“ค์–ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฌธ๋ฒ•๋“ค์„ ์•„๋ž˜ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋А์Šจํ•˜๊ฒŒ ํ†บ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 1) Inne..
list_img
SQL: ํ•„์ˆ˜ ๋ฌธ๋ฒ• ๋ชจ์Œ ์‹œํŠธ 1
2024.01.30
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/ ํ…Œ์ด๋ธ” ๊ด€๋ จ ํ‚ค์›Œ๋“œ ์˜๋ฏธ ์ฟผ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ CREATE DATABASE [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„]; ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒํ•˜๊ธฐ SHOW DATABASES; ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ์„ ์–ธํ•˜๊ธฐ USE [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„]; ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ CREATE TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] ( [์ปฌ๋Ÿผ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…], [์ปฌ๋Ÿผ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…], ... ); ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] RENAME [์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ” ์ด๋ฆ„] ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] ADD COLUMN [์ปฌ๋Ÿผ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…]; ๊ธฐ์กด ์ปฌ๋Ÿผ ํƒ€์ž… ๋ณ€๊ฒฝํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] MODIFY COLUMN [์ปฌ๋Ÿผ ์ด๋ฆ„] [์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํƒ€์ž…]; ๊ธฐ์กด ์ปฌ๋Ÿผ ์ด๋ฆ„..

 

 

 

02์›” 26์ผ์ž๋กœ ๋น…์ฟผ๋ฆฌ์— GROUP BY ALL ๋ฌธ๋ฒ•์ด ์ถ”๊ฐ€๋๋‹ค. ๊ธฐ์กด์—๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋ฌถ๊ณ  ์‹ถ์œผ๋ฉด GROUP BY์— ์ปฌ๋Ÿผ์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ–ˆ๋Š”๋ฐ, GROUP BY ALL ๋ฌธ๋ฒ•์˜ ์ถ”๊ฐ€๋กœ ์ด์ œ ๋น…์ฟผ๋ฆฌ๊ฐ€ SELECT ์ ˆ์—์„œ ๊ทธ๋ฃนํ™”ํ•  ํ‚ค๋ฅผ ์•Œ์•„์„œ ๋ฌถ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.

 

 

๋ฌถ๋Š” ์กฐ๊ฑด์€ ๋‹จ์ˆœํ•œ๋ฐ, ์ง‘๊ณ„ ํ•จ์ˆ˜๋‚˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜ ์™ธ ๋ช‡ ๊ฐ€์ง€ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ง€์ •ํ•œ ๋ถˆ๊ฐ€ ํ˜•ํƒœ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ปฌ๋Ÿผ์€ ๋‹ค ๊ทธGROUP BY์— ํฌํ•จ์‹œํ‚ค๋Š” ์‹์ด๋‹ค. ์ด ๋•Œ ์ƒ๊ธฐ ์กฐ๊ฑด๋“ค์„ ์ œ์™ธํ•˜๊ณ  ๋‚œ ํ›„, ๋‚จ์€ SELECT ํ•ญ๋ชฉ ์ค‘ ๊ทธ๋ฃนํ™” ๋ถˆ๊ฐ€ํ•œ ์œ ํ˜•์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

 

๋‹ค์Œ ์˜ˆ์ œ์—์„œ ์ฟผ๋ฆฌ๋Š” first_name๊ณผ last_name ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ๋‹ค. total_points๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜ ๊ฐ’์ด๋ฏ€๋กœ ์ œ์™ธ๋๋‹ค.

 

WITH PlayerStats AS (
  SELECT 'Adams' as LastName, 'Noam' as FirstName, 3 as PointsScored UNION ALL
  SELECT 'Buchanan', 'Jie', 0 UNION ALL
  SELECT 'Coolidge', 'Kiran', 1 UNION ALL
  SELECT 'Adams', 'Noam', 4 UNION ALL
  SELECT 'Buchanan', 'Jie', 13)
  
SELECT SUM(PointsScored) AS total_points
  		, FirstName AS first_name
  		, LastName AS last_name
FROM PlayerStats
GROUP BY ALL;

 

/*--------------+------------+-----------+
 | total_points | first_name | last_name |
 +--------------+------------+-----------+
 | 7            | Noam       | Adams     |
 | 13           | Jie        | Buchanan  |
 | 1            | Kiran      | Coolidge  |
 +--------------+------------+-----------*/

 

 

๋‹ค์Œ ์˜ˆ์ œ ์—ญ์‹œ ์ฟผ๋ฆฌ๋Š” first_name๊ณผ last_name ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ๋‹ค. total_points๋Š” ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๊ฐ’์ด๋ฏ€๋กœ ์ œ์™ธ๋๋‹ค.

 

WITH PlayerStats AS (
  SELECT 'Adams' as LastName, 'Noam' as FirstName, 3 as PointsScored UNION ALL
  SELECT 'Buchanan', 'Jie', 0 UNION ALL
  SELECT 'Coolidge', 'Kiran', 1 UNION ALL
  SELECT 'Adams', 'Noam', 4 UNION ALL
  SELECT 'Buchanan', 'Jie', 13)
  
SELECT COUNT(*) OVER () AS total_people
  		, FirstName AS first_name
  		, LastName AS last_name
FROM PlayerStats
GROUP BY ALL;

 

/*--------------+------------+-----------+
 | total_people | first_name | last_name |
 +--------------+------------+-----------+
 | 3            | Noam       | Adams     |
 | 3            | Jie        | Buchanan  |
 | 3            | Kiran      | Coolidge  |
 +--------------+------------+-----------*/

 

 

์—ฌ๋Ÿฌ SELECT ํ•ญ๋ชฉ์ด FROM ์ ˆ์˜ ๋™์ผํ•œ ๋ถ€๋ถ„์„ ์ฐธ๊ณ ํ•œ๋‹ค๋ฉด ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์žฅ ์ง์ ‘์ ์œผ๋กœ ์ง€์ •ํ•œ ํ•˜๋‚˜๋งŒ GROUP BY์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ coordinates์˜ ๋‘ ๊ตฌ์„ฑ ์š”์†Œ์ธ Values.x์™€ Values.y๊ฐ€ ์ด๋ฏธ ์ง์ ‘ ๊ฒฝ๋กœ๋กœ ์ง€์ •๋ผ ์žˆ๋Š” ์ƒํƒœ์ด๋ฏ€๋กœ coordinates ์ปฌ๋Ÿผ์€ GROUP BY์—์„œ ์ œ์™ธ๋๋‹ค.

 

WITH Values AS (
  SELECT 1 AS x, 2 AS y
  UNION ALL SELECT 1 AS x, 4 AS y
  UNION ALL SELECT 2 AS x, 5 AS y
)

SELECT Values.x AS x_coordinate
  	, Values.y AS y_coordinate
  	, [Values.x, Values.y] AS coordinates
FROM Values
GROUP BY ALL

 

/*--------------+--------------+-------------+
 | x_coordinate | y_coordinate | coordinates |
 +--------------+--------------+-------------+
 | 1            | 4            | [1, 4]      |
 | 1            | 2            | [1, 2]      |
 | 2            | 5            | [2, 5]      |
 +--------------+--------------+-------------*/

 

 

 

 

 

๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

์„œ๋ธŒ ์ฟผ๋ฆฌSubquery๋ž€ ๋ฉ”์ธ ์ฟผ๋ฆฌMain query๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๊ฐ€์ ์ธ SELECT๋ฌธ์„ ๋งํ•œ๋‹ค. ์–ด๋–ค ๋ฉ”์ธ ์ฟผ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ๋‚ด๋ถ€ ์ฟผ๋ฆฌInner query๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋•Œ, ๋ฉ”์ธ ์ฟผ๋ฆฌ๋Š” ์™ธ๋ถ€ ์ฟผ๋ฆฌOuter query๋กœ ์ง€์นญ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ํ˜•ํƒœ / ์‹คํ–‰ ์กฐ๊ฑด

 

SELECT ์—ด
FROM ํ…Œ์ด๋ธ”
WHERE ์กฐ๊ฑด์‹ ( SELECT ์—ด
                             FROM ํ…Œ์ด๋ธ”
                             WHERE ์กฐ๊ฑด์‹ )

 

(1) ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ์— ๊ฐ์‹ธ์ง„ ํ˜•ํƒœ๋กœ ์“ฐ์ธ๋‹ค.

(2) SELECT๋ฌธ์˜ ํ˜•ํƒœ๋กœ๋งŒ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

(3) ์ฟผ๋ฆฌ์˜ ๋์—์„œ ;์„ธ๋ฏธ ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

(4) ORDER BY์ ˆ์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

 

 

์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ํŠน์ง•

 

 

(1) ๋น„๊ต ํ˜น์€ ์กฐํšŒ์˜ ๋Œ€์ƒ์ด ๋  ๋•Œ ์กฐํšŒ ๋Œ€์ƒ์˜ ์˜ค๋ฅธ์ชฝ์— ๋†“์ธ๋‹ค.

(2) ๋ฉ”์ธ ์ฟผ๋ฆฌ์™€์˜ ๋น„๊ต๋ฅผ ์œ„ํ•ด ์กด์žฌํ•˜๋Š” ์ฟผ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ SELECT ์ ˆ์€ ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ ๋น„๊ต ๋Œ€์ƒ๊ณผ ๊ฐ™์€ ์ž๋ฃŒํ˜•๊ณผ ๊ฐ™์€ ๊ฐœ์ˆ˜๋กœ ์ง€์ •๋ผ์•ผ ํ•œ๋‹ค.

(3) ๊ฒฐ๊ณผ๊ฐ’ ์—ญ์‹œ ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ ์—ฐ์‚ฐ์ž ์ข…๋ฅ˜์™€ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

(4) ๋ฉ”์ธ ์ฟผ๋ฆฌ์™€์˜ ๊ด€๊ณ„๋Š” ๋‹จ๋ฐฉํ–ฅ์ด๋‹ค. ์ด๋Š” Java ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ƒ์†๊ณผ๋„ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์ธ๋ฐ, ์ƒ์†๋‹นํ•œ ์ž์‹ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ถ€๋ชจ๋Š” ์ž์‹ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

 

(5) ๊ตฌ์กฐํ™”๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ์˜ ๊ฐ ๋ถ€๋ถ„์„ ๊ฐ€๋…์„ฑ ์žˆ๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค.

(6) ์œ„์˜ ํŠน์ง• ๋•Œ๋ฌธ์—, ๋ณต์žกํ•œ JOIN๊ณผ UNION์„ ๋ช…๋ฃŒํ•˜๊ฒŒ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์ฒด์žฌ๋กœ ๊ธฐ๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ์‚ฌ์šฉ์ฒ˜

 

(1) SELECT ์ ˆ์—์„œ ์‚ฌ์šฉ / ์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌScalar Subquery

(2) FROM ์ ˆ์—์„œ ์‚ฌ์šฉ / ์ธ๋ผ์ธ ๋ทฐInline View

(3) WHERE ์ ˆ์—์„œ ์‚ฌ์šฉ / ์ค‘์ฒฉ ์„œ๋ธŒ ์ฟผ๋ฆฌNested Subquery

(4) HAVING ์ ˆ์—์„œ ์‚ฌ์šฉ

(5) ORDER BY ์ ˆ์—์„œ ์‚ฌ์šฉ

(6) INSERT๋ฌธ์˜ VALUES ๊ฐ’ ๋Œ€์ฒด์žฌ๋กœ์จ ์‚ฌ์šฉ

(7) UPDATE๋ฌธ์˜ SET ๊ฐ’ ๋Œ€์ฒด์žฌ๋กœ์จ ์‚ฌ์šฉ

 

 

 

 

 

์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ์‚ฌ์šฉ

 

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ์˜ ์‚ฌ์šฉ์ฒ˜ ์ค‘ SELECT, FROM, WHERE์ ˆ์—์„œ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ, ์ฆ‰ ์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌ, ์ธ๋ผ์ธ ๋ทฐ, ์ค‘์ฒฉ ์„œ๋ธŒ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

 

 

SELECT์ ˆ, ์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌScalar Subquery

 

ใ…ก์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ(Scalar Subquery)
  ์ •๋Œ€๋ฆฌ ๊ธ‰์—ฌ์™€ ํ…Œ์ด๋ธ” ์ „์ฒด ํ‰๊ท  ๊ธ‰์—ฌ๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.

SELECT name
	, salary
   	, (SELECT ROUND(AVG(salary), -1) FROM employee) AS ํ‰๊ท ๊ธ‰์—ฌ
FROM employee
WHERE name = '์ •๋Œ€๋ฆฌ';

 

์Šค์นผ๋ผ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” SELECT์ ˆ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ๋‹ค. ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ์–ด๋– ํ•œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ์ฃผ๋กœ ์“ฐ์ด๋ฉฐ, '์Šค์นผ๋ผ'๋ผ๋Š” ์ด๋ฆ„์—์„œ ๋ณด์—ฌ์ง€๋“ฏ ๋‹จ์ผ ๊ฐ’๋งŒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ์ผ์น˜ํ•˜๋Š” ๊ฐ’์ด ์—†๋‹ค๋ฉด NULL์„ ๋ฆฌํ„ดํ•œ๋‹ค(ํ•ด๋‹น ๋ถ€๋ถ„์€ ๊ทธ๋ฃน ํ•จ์ˆ˜์˜ ํŠน์ง•์ด๊ธฐ๋„ ํ•˜๋‹ค.).

 

 

 

FROM์ ˆ, ์ธ๋ผ์ธ ๋ทฐInline View

 

ใ…ก์ธ๋ผ์ธ ๋ทฐ(Inline View)
  ์ง๊ธ‰์ด ์‚ฌ์›์ธ ์‚ฌ๋žŒ๋“ค์˜ ์ด๋ฆ„๊ณผ ๊ธ‰์—ฌ๋ฅผ ๊ตฌํ•˜์‹œ์˜ค.

SELECT ex1.name
	, ex1.salary
FROM (SELECT * FROM employee li
WHERE li.office_worker= '์‚ฌ์›') ex1;

 

์ธ๋ผ์ธ ๋ทฐ๋Š” FROM ์ ˆ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ๋‹ค. ํŠน์ • ํ…Œ์ด๋ธ”์—์„œ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•ด ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•  ๋•Œ ์“ด๋‹ค. ํƒ€ ์„œ๋ธŒ ์ฟผ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ๊ผญ ๋ณ„์นญalias์„ ์ง€์ •ํ•ด ์ค˜์•ผ์ง€๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฐธ๊ณ ๋กœ, WITH ๋ฌธ์„ ์‚ฌ์šฉํ•ด๋„ ๊ฒฐ๊ณผ๋ฌผ์€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†์— ๋งž๋Š” ๊ฒƒ์„ ์ทจ์‚ฌ์„ ํƒํ•ด ์“ฐ๋ฉด ๋œ๋‹ค.

 

WITH
[๋ณ„์นญ1] AS (SELECT๋ฌธ 1),
[๋ณ„์นญ2] AS (SELECT๋ฌธ 2),
...,
[๋ณ„์นญN] AS (SELECT๋ฌธ N)
SELECT 
FROM ๋ณ„์นญ1, ๋ณ„์นญ2, ..., ๋ณ„์นญN

 

 

 

WHERE์ ˆ, ์ค‘์ฒฉ ์„œ๋ธŒ ์ฟผ๋ฆฌNested Subquery

 

ใ…กNested Subquery - ๋‹จ์ผ ํ–‰ 
  ์ •๋Œ€๋ฆฌ๋ผ๋Š” ์‚ฌ๋žŒ์˜ ์ง๊ธ‰์„ ๊ตฌํ•˜์‹œ์˜ค.

SELECT office_worker
FROM employee
WHERE office_worker = (SELECT office_worker FROM employee WHERE name = '์ •๋Œ€๋ฆฌ')

 

ใ…กNested Subquery - ๋ณต์ˆ˜(๋‹ค์ค‘) ํ–‰ 
  ์ •๋Œ€๋ฆฌ๋ณด๋‹ค ๊ธ‰์—ฌ๊ฐ€ ๋†’์€ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌํ•˜์‹œ์˜ค.

SELECT *
FROM employee
WHERE salary > (SELECT salary FROM employee WHERE name = '์ •๋Œ€๋ฆฌ')

  ์ง๊ธ‰์ด ์‚ฌ์›์ธ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌํ•˜์‹œ์˜ค.

SELECT *
FROM employee
WHERE office_worker IN (SELECT office_worker FROM employee WHERE office_worker = '์‚ฌ์›')

 

WHERE์ ˆ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” ์ค‘์ฒฉ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ผ ๋ถ€๋ฅธ๋‹ค. ์‹คํ–‰ ๊ฒฐ๊ณผ์˜ ํ–‰ ์ˆ˜, ์—ด ์ˆ˜์— ๋”ฐ๋ผ ๋‹จ์ผ ํ–‰ ์„œ๋ธŒ ์ฟผ๋ฆฌ, ๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ ์ฟผ๋ฆฌ, ๋‹ค์ค‘ ์—ด ์„œ๋ธŒ ์ฟผ๋ฆฌ๋กœ ๋‚˜๋ˆ„๋ฉฐ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์‹ค๋ฌด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์ผ ํ–‰/ ๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋งŒ ๋‹ค๋ฃฌ๋‹ค. 

 

๋‹จ์ผ ํ–‰ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” >, >=, =, <=, <, <>, ^=, != ๋“ฑ์˜ ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์“ฐ์ด๋ฉฐ, ๋‹ค์ค‘ ํ–‰ ์„œ๋ธŒ ์ฟผ๋ฆฌ๋Š” IN, ANY, SOME, ALL, EXISTS ๋“ฑ์˜ ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค. ์ถœ๋ ฅํ•˜๋Š” ํ–‰ ์ˆ˜์™€ ์—ฐ๊ฒฐ์ง€์–ด์„œ, ์ „์ž๋ฅผ ๋‹จ์ผ ํ–‰ ์—ฐ์‚ฐ์ž, ํ›„์ž๋ฅผ ๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž๋ผ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. 

 

IN : ํ•˜๋‚˜๋ผ๋„ ์ผ์น˜ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋ฉด TRUE
ANY, SOME : ๋งŒ์กฑํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ด๋ฉด TRUE
ALL : ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฉด TRUE
EXISTS : ๊ฒฐ๊ณผ๊ฐ€ ์กด์žฌํ•˜๋ฉด TRUE (ํ–‰์ด 1๊ฐœ ์ด์ƒ์ด๋ฉด TRUE)

 <IN> ๋ถ€์„œ๋ณ„ ์ตœ๊ณ  ๊ธ‰์—ฌ์™€ ๋™์ผํ•œ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์› ์ •๋ณด

SELECT *
FROM emp
WHERE sal IN (SELECT MAX(sal) FROM emp GROUP BY deptno);

 

 <SOME> ๋“ฑ๊ฐ€ ๋น„๊ต ์—ฐ์‚ฐ์ž(=)์™€ ANY, SOME์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด IN ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰

SELECT *
FROM emp
WHERE sal = SOME (SELECT MAX(sal) FROM emp GROUP BY deptno);

 

 <ANY> ๋“ฑ๊ฐ€ ๋น„๊ต ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹Œ ๋Œ€์†Œ ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ANY๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด?
 < ANY : ๋ถ€์„œ 30 ์ค‘ ์ตœ๋Œ€๊ฐ’๋ณด๋‹ค ์ ์€ ๊ธ‰์—ฌ๋ฅผ ๊ฐ€์ง„ ์‚ฌ์›์„ ์ฐพ๊ฒŒ ๋จ
 > ANY : ๋ถ€์„œ 30 ์ค‘ ์ตœ์†Œ๊ฐ’๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๊ฐ€์ง„ ์‚ฌ์›์„ ์ฐพ๊ฒŒ ๋จ

SELECT *
FROM emp
WHERE sal < ANY (SELECT sal FROM emp WHERE deptno = 30);

 

 <ALL> ๋ถ€์„œ 30 ์ค‘ ์ตœ๋Œ€ ๊ธ‰์—ฌ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์› ์ถœ๋ ฅ

SELECT *
FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 30);

 

 <EXISTS> ๋ถ€์„œ50์ด ์žˆ์œผ๋ฉด EMP ์ „์ฒด ์ถœ๋ ฅ

SELECT *
FROM emp
WHERE EXISTS (SELECT dname FROM dept WHERE deptno = 50);

 

 

 

 

 

 

์ถœ์ฒ˜

์–‘๋””๋กœ๊ทธ ๋ธ”๋กœ๊ทธ

Inpa Dev ๋ธ”๋กœ๊ทธ

java์˜ ๊ฐœ๋ฐœ์ผ๊ธฐ ๋ธ”๋กœ๊ทธ

 
๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

 

<์„œ๋ก >

์‹ค๋ฌด์—์„œ๋Š” ์ข…์ข… ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐใ…ก๊ธฐ์ค€ํ‚ค๊ฐ€ ๊ณต๋ฐฑ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ, ๋‹ค์‹œ ๋งํ•ด ํ•ฉ์ง‘ํ•ฉใ…ก๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค. ํƒ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ด๋ฅผ FULL OUTER JOIN์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ง€์›ํ•˜์ง€๋งŒ, mysql์—์„œ๋Š” ์•„์‰ฝ๊ฒŒ๋„ ์ด๋ฅผ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋ฉด mysql์—์„œ๋Š” ํ•ฉ์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋ƒ๊ณ ? ๊ทธ๊ฑด ์•„๋‹ˆ๋‹ค. LEFT JOIN๊ณผ RIGHT JOIN์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ mysql์—์„œ๋„ ์ด๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ธ๊ตญ ๋ธ”๋กœ๊ทธ์— ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•ด ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ํ‘œ์‹œํ•œ ํฌ์ŠคํŠธ๊ฐ€ ์žˆ์–ด ๋ฒˆ์—ญํ•ด ๊ฐ€์ ธ์™€ ๋ณธ๋‹ค.

 

 

FULL OUTER JOIN์˜ ํ˜•ํƒœ. ์ถœ์ฒ˜ //&nbsp;https://sql-joins.leopard.in.ua/

 

 

 

 

<๋ณธ๋ฌธ>

sales์™€ orders๋ผ๋Š” ๋‘ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. sales์™€ orders์—๋Š” ๋™์ผํ•˜๊ฒŒ id์ฃผ๋ฌธ ์•„์ด๋””์™€ order_date(ํ˜•์‹์ด ์‚ด์ง ๋‹ค๋ฅธ)์ฃผ๋ฌธ ์ผ์ž, amount์ฃผ๋ฌธ ๊ธˆ์•ก ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค.

 

SELECT *
FROM sales;

 +------+---------------------+--------+
 | id   | order_date          | amount |
 +------+---------------------+--------+
 |    1 | 2021-02-02 08:15:00 |    250 |
 |    2 | 2021-02-02 08:30:00 |    200 |
 |    3 | 2021-02-02 08:55:00 |    150 |
 |    4 | 2021-02-02 09:15:00 |    125 |
 |    5 | 2021-02-02 09:30:00 |    250 |
 |    6 | 2021-02-02 09:45:00 |    200 |
 |    7 | 2021-02-02 10:15:00 |    180 |
 |    8 | 2021-02-02 10:30:00 |    125 |
 |    9 | 2021-02-02 10:45:00 |    200 |
 |   10 | 2021-02-02 11:15:00 |    250 |
 |   11 | 2021-02-02 11:30:00 |    150 |
 |   12 | 2021-02-02 11:45:00 |    200 |
 +------+---------------------+--------+


SELECT *
FROM orders;

 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    5 | 2021-01-28 |    250 |
 |    6 | 2021-01-29 |    250 |
 |    7 | 2021-01-30 |    250 |
 |    8 | 2021-01-31 |    250 |
 |    9 | 2021-02-01 |    250 |
 +------+------------+--------+

 

 

๋งŒ์•ฝ ๋‹น์‹ ์ด ์ „์ฒด ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ๋งค์ถœ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์ด์œ ๋กœ ๋‘ ํ…Œ์ด๋ธ”์„ ํ•ฉ์ณ์•ผ ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด LEFT JOIN๊ณผ RIGHT JOIN์„ UNION ALL๋กœ ๊ฒฐํ•ฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์‹์œผ๋กœ.

mysql> SELECT * FROM sales
       LEFT JOIN orders ON sales.id = orders.id
       UNION ALL
       SELECT * FROM sales
       RIGHT JOIN orders ON sales.id = orders.id
       WHERE sales.id IS NULL ;
       
 +------+---------------------+--------+------+------------+--------+
 | id   | order_date          | amount | id   | order_date | amount |
 +------+---------------------+--------+------+------------+--------+
 |    5 | 2021-02-02 09:30:00 |    250 |    5 | 2021-01-28 |    250 |
 |    6 | 2021-02-02 09:45:00 |    200 |    6 | 2021-01-29 |    250 |
 |    7 | 2021-02-02 10:15:00 |    180 |    7 | 2021-01-30 |    250 |
 |    8 | 2021-02-02 10:30:00 |    125 |    8 | 2021-01-31 |    250 |
 |    9 | 2021-02-02 10:45:00 |    200 |    9 | 2021-02-01 |    250 |
 |    1 | 2021-02-02 08:15:00 |    250 | NULL | NULL       |   NULL |
 |    2 | 2021-02-02 08:30:00 |    200 | NULL | NULL       |   NULL |
 |    3 | 2021-02-02 08:55:00 |    150 | NULL | NULL       |   NULL |
 |    4 | 2021-02-02 09:15:00 |    125 | NULL | NULL       |   NULL |
 |   10 | 2021-02-02 11:15:00 |    250 | NULL | NULL       |   NULL |
 |   11 | 2021-02-02 11:30:00 |    150 | NULL | NULL       |   NULL |
 |   12 | 2021-02-02 11:45:00 |    200 | NULL | NULL       |   NULL |
 +------+---------------------+--------+------+------------+--------+

 

 

๋‹ค๋งŒ UNION ALL์˜ ๊ฒฝ์šฐ ํ•ฉ์ง‘ํ•ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต ํ–‰์ด ์„ž์—ฌ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ์—๋Š” UNION์„ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด ๋˜๋Š”๋ฐ, UNION์˜ ๊ฒฝ์šฐ์—๋Š” t1๊ณผ t2 ์‚ฌ์ด์˜ ์ค‘๋ณต ๊ฐ’์„ ๊ฑธ๋Ÿฌ์„œ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด์–ด์„œ ์œ ๋‹ˆํฌ ๊ฐ’์„ ๊ฑฐ๋ฅด๋Š” ์ธ๋ฑ์Šค๊ฐ€ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ใ…ก์ค‘๋ณต์„ ๊ฑฐ๋ฅด์ง€ ์•Š๋Š” UNION ALL๊ณผ ๋Œ€๋น„ํ•ด์„œใ…ก ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ 1.5๋ฐฐ์—์„œ 4๋ฐฐ๊นŒ์ง€ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๋‚  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ .

 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ์›ฌ๋งŒํ•˜๋ฉด FULL OUTER JOIN์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” UNION ALL์„ ์“ฐ๋Š” ๊ฒŒ ํšจ์œจ์ ์ด๊ฒ ๋‹ค. (+ ์ตœ์†Œํ•œ์œผ๋กœ SELECTํ•ด์„œ.)๋ฌผ๋ก  ์• ์ดˆ์— ๋ชจ๋ธ๋ง ์ฐจ์›์—์„œ ๊ฒฐํ•ฉํ•  ์ผ์„ ๋ฐฐ์ œํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ข‹๊ฒ ์ง€๋งŒ.

 

 

 

<์ •๋ฆฌ>

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋‘๊ณ  ๊ธ€์„ ๋งˆ์นœ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ UNION ALL์ค‘๋ณต ๋ฏธ์ œ๊ฑฐ, UNION์ค‘๋ณต ์ œ๊ฑฐ์œผ๋กœ FULL OUTER JOIN์„ ์ ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๋‹ค.

SELECT * FROM t1 
LEFT JOIN t2 ON t1.id = t2.id 
UNION ALL 
SELECT * FROM t1 
RIGHT JOIN t2 ON t1.id = t2.id 
WHERE t1.id IS NULL

 

 

SELECT * FROM t1 
LEFT JOIN t2 ON t1.id = t2.id 
UNION 
SELECT * FROM t1 
RIGHT JOIN t2 ON t1.id = t2.id

 

 

<์ฐธ๊ณ >

ubiq ๋ธ”๋กœ๊ทธ

sewonzzang๋‹˜ ๋ธ”๋กœ๊ทธ

 

 

 

๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

 

<GROUP BY์™€ ์œˆ๋„์šฐ ํ•จ์ˆ˜Window Function๋Š” ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€>

์œˆ๋„์šฐ ํ•จ์ˆ˜Window Function๋Š” 'ํ–‰์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ตฌ๋ถ„ํ•ด ์ฃผ๋Š”' ํ•จ์ˆ˜๋‹ค. ์ด์ฏค ๋งํ•˜๋ฉด ๋‹น์‹  ๋จธ๋ฆฟ์†์— ๋– ์˜ค๋ฅธ ๋ฌธ๋ฒ•์ด ํ•˜๋‚˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋งž๋‹ค. GROUP BY. ์ด๊ฒƒ ์—ญ์‹œ ํ–‰์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๊ตฌ๋ถ„ํ•ด ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์˜๋ฌธ์ด ๋“ ๋‹ค. GROUP BY ์ ˆ๊ณผ ๋Œ€๋น„ํ•ด ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๊ณ  ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฑธ๊นŒ. ์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์ด์ฒ˜๋Ÿผ ์œ ์‚ฌํ•œ ๋ฌธ๋งฅ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๋ฌธ๋ฒ•, GROUP BY ์ ˆ๊ณผ ์œˆ๋„์šฐ ํ•จ์ˆ˜์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ํƒ๊ตฌํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

<'ํ–‰์„ ๋ฌถ๋Š”๋‹ค' ๋Š” ํ–‰๋™์— ๋Œ€ํ•œ ์ดํ•ด>

๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ธฐ ์•ž์„œ์„œ ์ฆ‰ 'ํ–‰์„ ๋ฌถ๋Š”๋‹ค'๋Š” ํ–‰๋™์— ๋Œ€ํ•ด ๋จผ์ € ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํ–‰์„ ๋ฌถ๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์ผ์ฐจ์ ์œผ๋กœ ํ–‰ ์‚ฌ์ด์˜ ๊ณตํ†ต์ ์„ ์ฐพ๋Š”๋‹ค๋Š” ๋œป์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์—‘์…€ ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์ž. 

 

์ด๋ฆ„ ์„ฑ๋ณ„ ๋‚˜์ด
๊น€์—์ด ๋‚จ 15
์ด๋น„ ์—ฌ 17
๊น€์”จ ์—ฌ 22
์ด์ด ๋‚จ 19

 

์ด ์—‘์…€ ํŒŒ์ผ์— 'ํ–‰์„ ๋ฌถ์œผ๋ฉด' ์–ด๋””์— ํฌ์ปค์Šค๋ฅผ ๋‘๋А๋ƒ์— ๋”ฐ๋ผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

1) ํ–‰์— ํฌ์ปค์Šค๋ฅผ ๋‘๋Š” ๊ฒฝ์šฐ. ์•„๋ž˜๋Š” ์„ฑ๋ณ„ ๊ธฐ์ค€์œผ๋กœ ํ–‰์„ ๋ฌถ์–ด์„œ ์„ฑ๋ณ„ ๋ณ„ ์ตœ์—ฐ์žฅ์ž๋ฅผ ๊ฐ๊ฐ ์ถœ๋ ฅํ•œ ๊ฒฝ์šฐ๋‹ค.

์ด๋ฆ„ ์„ฑ๋ณ„ ๋‚˜์ด
์ด์ด ๋‚จ 19
๊น€์”จ ์—ฌ 22

 

 

2) ์—ฐ์‚ฐํ•œ ๊ฐ’์— ํฌ์ปค์Šค๋ฅผ ๋‘๋Š” ๊ฒฝ์šฐ. ์•„๋ž˜๋Š” ์ด๋ฆ„์˜ ์ฒซ ๊ธ€์ž, ์„ฑ ๊ธฐ์ค€์œผ๋กœ ํ–‰์„ ๋ฌถ์–ด์„œ ์„ฑ ๋ณ„ ๋‚˜์ด ์ตœ๋Œ€๊ฐ’์„ ๊ฐ๊ฐ ์ถœ๋ ฅํ•œ ๊ฒฝ์šฐ๋‹ค.

์„ฑ๋ณ„ ๋‚˜์ด ์ตœ๋Œ€๊ฐ’
๋‚จ 19
์—ฌ 22

 

 

๋‘˜ ๋ชจ๋‘ ํฌ์ปค์Šค๋งŒ ๋‹ค๋ฅด์ง€ 'ํ–‰์„ ๋ฌถ์—ˆ๋‹ค'๊ณ  ๋ถ€๋ฅผ ๋งŒํ•˜๋‹ค. ์ด๋•Œ ํ›„์ž๋Š” GROUP BY๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „์ž๋Š” ์–ด๋ ต๋‹ค. GROUP BY๋Š” ํŠน์„ฑ์ƒ ๋™์ผํ•œ ๊ธฐ์ค€์„ ๊ฐ€์ง„ ๋กœ์šฐ๋“ค์„ ํ•˜๋‚˜๋กœ 'ํ•ฉ์น˜๊ณ ' ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ GROUP BY๋ฅผ ๊ฐ€์ง„ ์ฟผ๋ฆฌ์˜ SELECT ์ ˆ์—๋Š” GROUP BY๋œ ์ปฌ๋Ÿผ๊ณผ ํ•ฉ์ณ์ง„ ๊ฐ’๋“ค์„ ์—ฐ์‚ฐํ•˜๋Š” ์ง‘๊ณ„ํ•จ์ˆ˜๋ฐ–์— ์˜ฌ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ์ „์ž๋Š” ์œˆ๋„์šฐ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

<์œˆ๋„์šฐ ํ•จ์ˆ˜Window Fuction>

'ํ–‰๊ณผ ํ–‰ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋น„๊ต, ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜'๊ฐ€ ์œˆ๋„์šฐ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •์˜๋‹ค. ์œ„์—์„œ ์•Œ์•„๋ดค๋“ฏ์ด GROUP BY๋Š” ๋™์ผํ•œ ๊ธฐ์ค€์„ ๊ฐ€์ง€๋Š” ๋กœ์šฐ๋“ค์„ ๋‹ค ํ•ฉ์ณ ๋ฒ„๋ฆฌ์ง€๋งŒ, ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ๋ณด์กดํ•ด ์ค€๋‹ค. ์ด ๋•Œ๋ฌธ์— GROUP BY๋กœ ํ•˜์ง€ ๋ชป ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ฃน ๋‚ด์—์„œ ์ˆœ์œ„/ ๋น„์œจ ๋ฝ‘๊ธฐ, ์—ฐ์‚ฐ์— ๋งž๋Š” ๊ฒฐ๊ณผ ๋กœ์šฐ ์ถœ๋ ฅํ•˜๊ธฐ(์ตœ๋Œ€๊ฐ’์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๊ฑฐ๋‚˜) ๋“ฑ.

 

์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์“ฐ์ธ๋‹ค.

SELECT WINDOW_FUNCTION (ARGUMENTS) OVER 
( [PARTITION BY ์ปฌ๋Ÿผ] [ORDER BY ์ปฌ๋Ÿผ] [WINDOWING ์ ˆ] )
FROM ํ…Œ์ด๋ธ”๋ช… ; 

 

   1) WINDOW_FUNCTION : ์œˆ๋„์šฐ ํ•จ์ˆ˜ 

   2) ARGUMENTS(์ธ์ˆ˜) : ํ•จ์ˆ˜์— ๋”ฐ๋ผ 0 ~ N๊ฐœ ์ธ์ˆ˜๊ฐ€ ์ง€์ •๋  ์ˆ˜ ์žˆ๋‹ค. 

   3) PARTITION BY ์ ˆ : ์ „์ฒด ์ง‘ํ•ฉ์„ ๊ธฐ์ค€์— ์˜ํ•ด ์†Œ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.   

   4) ORDER BY ์ ˆ : ์–ด๋–ค ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ง€ order by ์ ˆ์„ ๊ธฐ์ˆ ํ•œ๋‹ค.

   5) WINDOWING ์ ˆ : WINDOWING ์ ˆ์€ ํ•จ์ˆ˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํ–‰ ๊ธฐ์ค€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ด๋•Œ์˜ WINDOW_FUNCTION์—๋Š” ์ „์šฉ ์œˆ๋„์šฐ ํ•จ์ˆ˜ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ์ด ํฌ์ŠคํŠธ์—์„œ ์ •๋ฆฌํ•˜์ง€๋Š” ์•Š๊ณ  ์ฐธ๊ณ  ํฌ์ŠคํŠธ ์ค‘ ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•ด ์ž˜ ์ •๋ฆฌํ•œ ํฌ์ŠคํŠธ๊ฐ€ ์žˆ์–ด ์žฌ์ธ์šฉํ•œ๋‹ค*๋งํฌ๋Š” SQL ์ „๋ฌธ๊ฐ€ ๊ฐ€์ด๋“œ 2013 Edition๋ฅผ ์š”์•ฝํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•ด๋‹น ํฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•ด ์“ฐ๋ฉด, WINDOW_FUNCTION์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋“ค์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

   1) ์ˆœ์œ„ ํ•จ์ˆ˜: RANK, DENSE_RANK, ROW_NUMBER

   2) ์ง‘๊ณ„ ํ•จ์ˆ˜: SUM, MAX, MIN, AVG, COUNT

   3) ๋น„์œจ ํ•จ์ˆ˜: CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT

 

์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” SQL์˜ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•๋“ค๋ณด๋‹จ ๊ฝค ๋‚œ์ด๋„๊ฐ€ ์žˆ์–ด ์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์ง€๋งŒ, ์ผ๋‹จ ์ตํ˜€๋‘๊ณ  ๋‚˜๋ฉด ์ฟผ๋ฆฌ ๋‹ค์ด์–ดํŠธ์— ๋„์›€์„ ์ฃผ๋Š” ํšจ์ž ํ•จ์ˆ˜๋‹ค. ์‹œ๊ฐ„ ๋‚ด์„œ ์ต์ˆ™ํ•ด์ ธ ๋ณด์ž.

 

 

 

 

 
๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

 

CASE WHEN(CASE ๋ฌธ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.)์€ SQL์˜ ์กฐ๊ฑด๋ฌธ์ด๋‹ค. ๊ธฐ์ค€ ์ปฌ๋Ÿผ A๊ฐ€ B๋ผ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด C๋ผ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ˜•ํƒœ๋กœ 'CASE WHEN A = B THEN C'์™€ ๊ฐ™์ด ํ‘œํ˜„๋œ๋‹ค. "์กฐ๊ฑด์— ๋งž๋Š” ๋‹ต์„ ์ถœ๋ ฅ"ํ•˜๋Š” ์‹์ด์–ด์„œ ์ฃผ๋กœ SELECT ์ ˆ์ด๋‚˜ ์ง‘๊ณ„ํ•จ์ˆ˜์—์„œ ์“ฐ์ธ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ ์•„์ง ์ง‘๊ณ„๋˜์ง€ ์•Š์€ ์œ ์˜๋ฏธํ•œ ์ง€ํ‘œ๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•ด ๋ณด๊ณ  ์ด๋ฅผ ํ†ตํ•ด CASE WHEN์˜ SELECT์ ˆ ์šฉ๋ก€๋ฅผ ์‚ดํŽด๋ณด๋ ค ํ•œ๋‹ค.

 

 

 

์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

 

์•„๋ž˜๋กœ ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๋‹ค. (mySQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ƒ˜ํ”Œ์ด๋‹ค.) ์šฐ๋ฆฌ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๋“ค์„ ์‚ดํŽด๋ณด๊ณ  CASE WHEN์„ ํ†ตํ•ด ํšŒ์‚ฌ ์šด์˜ ์ „๋ฐ˜์— ์œ ์˜๋ฏธํ•œ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์—ฌ๋Ÿ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. customers, employees, offices, orderdetails, orders, payments, productline, products...... ์ด ํšŒ์‚ฌ์—์„œ ๋ฌด์Šจ ์ผ์„ ํ•˜๋Š”์ง€๋Š” ์•„์ง ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ํ”„๋กœ๋•ํŠธ ์ •๋ณด, ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ๊ฐ€์ง„ ๊ฒƒ์œผ๋กœ ๋ณด์•„ ์–ด๋–ค ํ”„๋กœ๋•ํŠธ๋ฅผ ํŒ๋งคํ•˜๋Š” ์ปค๋จธ์Šค์ž„์„ ์šฐ์„  ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฒŒ ์œ ํ˜•์˜ ์ œํ’ˆ์ด๋“ , ๋ฌดํ˜•์˜ ์ œํ’ˆ์ด๋“ ๊ฐ„์—. ์šฐ์„  products๋ฅผ ํ•œ ๋ฒˆ ๋ณผ๊นŒ.

 

 

 

 

 

 

 

์œ„ ์‚ฌ์ง„์€ products์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ถ€ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๋‹ค. ์ต์ˆ™ํ•œ ์ž๋™์ฐจ/ ์˜คํ† ๋ฐ”์ด ๋ธŒ๋žœ๋“œ๊ฐ€ ๋ณด์ด๋Š”๋ฐ, ์ „๋ฐ˜์ ์œผ๋กœ ์—„์ฒญ ์˜›๋‚  ๊ฒƒ์ด๊ณ (productName) ์žฌ๊ณ  ์ˆ˜๋Ÿ‰๋„ ๋„ˆ๋ฌด ๋งŽ๋‹ค. ์ข€ ๋” ์‚ดํŽด ๋ณด๋‹ˆ productScale์ด๋ผ๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค. 1:10, 1:12...... ์ž๋™์ฐจ ๋ฏธ๋‹ˆ์–ด์ฒ˜๋ฅผ ํŒŒ๋Š” ํšŒ์‚ฌ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ œ์กฐ ๋ฒค๋”์‚ฌ(productVender)๊ฐ€ ์—ฌ๋Ÿฟ์ธ ๊ฒƒ์œผ๋กœ ๋ด์„  ์ œ์กฐ์‚ฌ๋ณด๋‹ค๋Š” ์œ ํ†ต์‚ฌ์— ๊ฐ€๊นŒ์šด ํšŒ์‚ฌ๊ฒ ๋‹ค.

 

์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์ฃผ๋กœ ๋’ค์— ์žˆ๋‹ค. ์žฌ๊ณ  ์ˆ˜๋Ÿ‰(quantityInstock), ๊ตฌ๋งค์›๊ฐ€(buyPrice), ํŒ๋งค๊ฐ€(MSRP). ํŒ๋งค ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋ณด๋ฉด ๋œฏ์–ด๋ณผ ๋ถ€๋ถ„์ด ๋งŽ์•„ ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ ์ด ํšŒ์‚ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—” ํŒ๋งค ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•ด๋‚ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

๋‹ค์Œ์œผ๋กœ ์‚ดํŽด ๋ณผ ํ…Œ์ด๋ธ”์€ orderdetails ํ…Œ์ด๋ธ”์ด๋‹ค. ์ œํ’ˆ์˜ ๊ฐœ๋‹น ๋‹จ๊ฐ€์™€ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด ์žˆ๊ณ  productCode๋กœ products ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ๋ผ ์žˆ๋‹ค. ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด ์ญ‰ ๋‚˜์—ด๋ผ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— products์™€ orders๋ฅผ ํ•จ๊ป˜ ๋ณด๋ฉด ์ œํ’ˆ์˜ ํ‰๊ท  ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด๋‚˜ ์ด ๋งค์ถœ์•ก, ์ž”์—ฌ ์žฌ๊ณ ์ˆ˜๋Ÿ‰, ์•ˆ์ „ ์žฌ๊ณ  ๋“ฑ์˜ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๊ฒ ๋‹ค. ์•„์‰ฌ์šด ๊ฒƒ์€, ์ฃผ๋ฌธ ์ผ์ž๊ฐ€ ์—†๋‹ค. ๊ธฐ๊ฐ„๋ณ„๋กœ ๊ทธ๋ฃนํ•ด ๋ณผ ์ˆ˜ ์—†์œผ๋‹ˆ ์œ ์˜๋ฏธํ•œ ์ •๋ณด๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜๋Š” ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ด๋ธ” ํ•˜๋‚˜๊ฐ€ ๋” ํ•„์š”ํ•˜๊ฒ ๋‹ค. 

 

 

 

 

๋ฐ”๋กœ orders ํ…Œ์ด๋ธ”์ด๋‹ค. ์ด ํ…Œ์ด๋ธ”์—๋Š” ์ฃผ๋ฌธ ์ผ์ž(orderDate)์™€ ์ฃผ๋ฌธํ•œ ์‚ฌ๋žŒ์˜ ๊ณ ๊ฐ ๋ฒˆํ˜ธ(customerNumber), ๊ทธ๋ฆฌ๊ณ  ์ฃผ๋ฌธ ๋ฒˆํ˜ธ๊ฐ€ ์ ํ˜€ ์žˆ๋‹ค. ํ…Œ์ด๋ธ”์„ ์‚ดํŽด ๋ณด๋‹ˆ 2003๋…„ 01์›”๋ถ€ํ„ฐ 2005๋…„ 05์›”๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋ผ ์žˆ๋‹ค. ์ด๊ฑธ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ๋ชจ์•„์กŒ๋‹ค. ์ด์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ์˜๊ฒŒ ๋‹ค๋“ฌ์–ด๋ณด์ž.

 

 

 

 

INNER JOIN: ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ๋ชจ์•„์„œ ๋ณด๊ธฐ

 

CASE WHEN์€ ์กฐ๊ฑด์„ ๋‹ค๋Š” ๋ฐ ์ˆ˜๋Ÿ‰ ์ œํ•œ์ด ์—†๋‹ค. ์›ํ•˜๋Š” ์ˆ˜๋Ÿ‰๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋‹จ ์†Œ๋ฆฌ๋‹ค. SELECT ์ ˆ์—์„œ CASE WHEN์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์—์„œ ๊ตฌ๊ฐ„์— ๋งž์ถฐ ๊ฐ’์„ ๋‹ค์‹œ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ๋กœ์šฐ๋“ค์„ ์„ธ๋ถ„ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•œ ํ…Œ์ด๋ธ”์—์„œ๋งŒ ์ง„ํ–‰ํ•˜๊ธฐ๋Š” ์กฐ๊ธˆ ์–ด๋ ต๋‹ค. ๊ฐ ์ •๋ณด๊ฐ’์ด ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณต์œ ํ•˜๋Š” ๊ฐ’(๊ธฐ๋ณธํ‚ค)์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ํ…Œ๋ฉด, orderdetails์—์„œ๋Š” ์ œํ’ˆ์˜ ๊ฐ’๊ณผ ์ฃผ๋ฌธ ์ˆ˜๋Ÿ‰์ด ์žˆ์ง€๋งŒ ์ฃผ๋ฌธ ์ผ์ž์™€ ์ฃผ๋ฌธ์ž๋ช…์ด ์—†๋‹ค. ์ด ๋‘ ์ •๋ณด๊ฐ’์€ orders ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด์ „ ํฌ์ŠคํŠธ์—์„œ JOIN์— ๊ด€ํ•ด ๋ฐฐ์› ๋‹ค. INNER JOIN์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐ๊ธฐ ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์›ํ•˜๋Š” ์ปฌ๋Ÿผ์„ ๊ฐ๊ฐ ๊ฐ€์ ธ์™€ ์žฌ์กฐ๋ฆฝํ•ด SELECT ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ๋ง์ด๋‹ค.

 

SELECT ods.orderDate
, ods.customerNumber
, odd.orderNumber
, odd.productCode
        , odd.quantityOrdered
        , odd.priceEach
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber

 

 

 

 

์ด๋ ‡๊ฒŒ INNER JOIN์œผ๋กœ ์ •๋ณด๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ ธ์™€ ์ฃผ๋ฉด, ์ผ์ž๋ณ„๋กœ ์–ด๋–ค ์ƒํ’ˆ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ํŒ”๋ ธ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ 2003๋…„ ๊ธฐ์ค€์œผ๋กœ ์ œํ’ˆ๋ณ„ ๋งค์ถœ ์ˆœ์œ„๋ฅผ ๋ฝ‘์•„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

WHERE, GROUP BY: 1๋…„์น˜ ์ œํ’ˆ๋ณ„ ๋งค์ถœ ์ˆœ์œ„ ๋ฝ‘๊ธฐ

 

SELECT ods.orderDate
, ods.customerNumber
, odd.orderNumber
, odd.productCode
        , odd.quantityOrdered
        , odd.priceEach
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
ORDER BY productCode;

 

 

 

 

WHERE ์ ˆ์— ์กฐ๊ฑด์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ด ์คฌ๋‹ค. 2003๋…„์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์กฐ๊ฑด์ด๋‹ค. ORDER BY๋Š” productCode๋กœ ์คฌ๋‹ค. ์ œํ’ˆ ์ฝ”๋“œ ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ๊ฒŒ ๋ณด์ธ๋‹ค. (์‹œ๊ธฐ๋‚˜ ๊ณ ๊ฐ ์ง‘๋‹จ์˜ ์ฐจ์ด์— ๋”ฐ๋ผ ์ตœ์ข… ํŒ๋งค๊ฐ€๋Š” ์˜ค๋ฅด๋‚ด๋ฆฌ๋Š” ๊ฒŒ ๋ณด์ธ๋‹ค.) ์—ฌ๊ธฐ๋‹ค ์ƒํ’ˆ๋ณ„ ์—ฐ๋งค์ถœ์•ก์„ ๋ฝ‘๊ณ  ์ •๋ ฌํ•ด ์ฃผ๋ฉด ์˜ˆ์˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

SELECT productCode
, ROUND(AVG(priceEach), 2) AS avg_priceEach
    , SUM(quantityOrdered) AS sum_quantity
    , (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) AS year_sales
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
GROUP BY productCode
ORDER BY year_sales DESC;

 

 

 

 

ํ›จ์”ฌ ๋ณด๊ธฐ ํŽธํ•ด์กŒ๋‹ค. ์—ฌ๊ธฐ์„œ ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜๋ฌธ์„ ํ•ด์†Œํ•˜๊ณ  ๊ฐˆ๊นŒ. ์™œ priceEach๋Š” ํ‰๊ท ์„ ๊ตฌํ•˜๊ณ  quantity๋Š” ํ•ฉ๊ณ„ ๊ฐ’์„ ๊ตฌํ•˜๋Š”๊ฐ€๊ฐ€ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๊ฑด priceEach๊ฐ€ ๊ตฌ๋งค์•ก(๊ฐœ๋‹น ๋‹จ๊ฐ€*์ˆ˜๋Ÿ‰)์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋‹น ๋‹จ๊ฐ€์—ฌ์„œ ๊ทธ๋ ‡๋‹ค. ํ•ด๋‹น ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ ๋„๋งค๋กœ๋งŒ ๊ฑฐ๋ž˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œํ’ˆ ๊ฐ€๊ฒฉ์ด ๊ณ ์ •๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  ํ˜‘์˜ ์—ฌ๋ถ€์™€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ ๋™์ ์œผ๋กœ ๋‹จ๊ฐ€๊ฐ€ ์กฐ์ •๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฐ๋งค์ถœ, year_sales๋ฅผ ๋ฝ‘๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ๊ฐœ๋‹น ์‹คํŒ๋งค๊ฐ€์˜ ํ‰๊ท ๊ณผ ํŒ๋งค ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค.

 

 

CASE WHEN: ์ƒํ’ˆ ์„ธ๋ถ„ํ™”ํ•ด์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ”„๋กœ๋ชจ์…˜ ์ „๋žต ์งœ๊ธฐ

 

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ๋งค์ถœ 1์œ„ ์ƒํ’ˆ๊ณผ 2์œ„ ์ƒํ’ˆ์˜ ํŽธ์ฐจ๊ฐ€ ํฌ๋‹ค. ์ญ‰ ๋‚ด๋ ค๋ณด๋ฉด ๋ง‰์ˆœ์œ„ ์ƒํ’ˆ์€ 1๋งŒ ๋‹ฌ๋Ÿฌ ์ •๋„๋กœ 1์œ„์™€ ๊ฑฐ์˜ 10๋ฐฐ ๊ฐ€๋Ÿ‰ ๋งค์ถœ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๋ฐ ์ƒ์œ„๊ถŒ ์ƒํ’ˆ ๋Œ€๋น„ํ•ด์„œ ์ œํ’ˆ ๋‹จ๊ฐ€๋„ ๋‚ฎ๊ณ  ํŒ๋งค ์ˆ˜๋Ÿ‰ ์ข€ ๋ถ€์ง„ํ•˜๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ ๋ณด๋ฉด ๊ทธ๋ฃน๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. 

 

SELECT productCode
, ROUND(AVG(priceEach), 2) AS avg_priceEach
    , SUM(quantityOrdered) AS sum_quantity
    , (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) AS year_sales
    , ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) AS sales_rank
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
GROUP BY productCode
ORDER BY year_sales DESC;

 

 

 

 

year_sales๋ฅผ ์กฐ๊ธˆ ๋” ์ง๊ด€์ ์œผ๋กœ ๋ณด๊ณ , ์ฐจํ›„์— ๋‹ค๋ฅธ ๋…„๋„๋ณ„ ์„ธ๋ถ„ํ™” ์ง„ํ–‰ ์‹œ์—๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ˆœ์œ„๋ฅผ ๋จผ์ € ๋ฝ‘์•˜๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒํ’ˆ์„ 'high', 'medium', 'low' ์„ธ ๊ฐ€์ง€ ์ง‘๋‹จ์œผ๋กœ ๋‚˜๋ˆ ๋ณผ ๊ฒƒ์ด๋‹ค. 'high'๋Š” ๋งค์ถœ ์ƒ์œ„๊ถŒ์œผ๋กœ ์žฌ๊ณ ๋ฅผ ์ง€์† ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•˜๋ฉฐ ํŒ๋งค ๋™ํ–ฅ์„ ์ง€์†์ ์œผ๋กœ ์ฒดํฌํ•ด์•ผ ํ•  ์ƒ์œ„ ์‹ญ ํผ์„ผํŠธ, ๋ฐ˜๋Œ€๋กœ 'low'๋Š” ์žฌ๊ณ ๊ฐ€ ๊ณผ๋‹คํ•˜๋‹ค๋ฉด ์ตœ์šฐ์„ ์œผ๋กœ ์†Œ์ง„ํ•˜๊ณ  ์žฌ๊ณ ๋ฅผ ๊ฐ์ถ• ์šด์˜ํ•ด์•ผ ํ•  ํ•˜์œ„ ์‹ญ ํผ์„ผํŠธ๋‹ค.

 

ํผ์„ผํŠธ๋ฅผ ์ง์ ‘ ์ง‘๊ณ„ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์งœ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์„œ์นญ ์‹ค๋ ฅ์ด ๋ถ€์กฑํ–ˆ๋˜ ๊ฑด์ง€ ๊ฒฐ๊ตญ ๋ชป ์ฐพ์•„์„œ, ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ 10์œผ๋กœ ๋‚˜๋ˆ ์„œ ์œ„ ์•„๋ž˜๋กœ 11์œ„์”ฉ ๋นผ ์คฌ๋‹ค(...)

 

 

์ž‘ํ’ˆ๋ช… ๋ฏธ์Šคํ„ฐ ์•„๋‚ ๋กœ๊ทธ......

 

 

SELECT productCode
, ROUND(AVG(priceEach), 2) AS avg_priceEach
    , SUM(quantityOrdered) AS sum_quantity
    , (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) AS year_sales
    , ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) AS sales_rank
CASE 
WHEN ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) BETWEEN 1 AND 11 THEN 'high'
WHEN ROW_NUMBER () 
OVER (
ORDER BY (ROUND(AVG(priceEach), 2) * SUM(quantityOrdered)) DESC
            ) BETWEEN 98 AND 109 THEN 'low'
ELSE 'medium'
END AS sales_seg
FROM orderdetails odd, orders ods
WHERE odd.orderNumber = ods.orderNumber
AND orderDate LIKE '2003%'
GROUP BY productCode;

 

 

 

 

 

๊ฒฐ๊ณผ์ ์œผ๋ก  ์ž˜ ๋‚˜์™”๋‹ค! ๊ฐ€๋…์„ฑ ์œ„ํ•ด BETWEEN์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•ด ์คฌ๋Š”๋ฐ ์—ฐ์‚ฐ๋ถ€ํ˜ธ๋กœ ์žก์•„ ์ค˜๋„ ๋ฌด๋ฐฉํ•˜๊ฒ ๋‹ค. ๊ตณ์ด ์ˆœ์œ„๋ฅผ ์ง‘๊ณ„ํ•œ ๊นŒ๋‹ญ์€ ์ดํ›„์— ์ผ์ผ์ด ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ๋‹ค. year_sales๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์žก๋‹ค ๋ณด๋‹ˆ ๋งŽ์ด ๊ธธ์–ด์กŒ๋Š”๋ฐ, ๋” ํšจ์œจ ์ข‹๊ฒŒ ์งค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ถ„๋ช… ์žˆ์ง€ ์•Š๋‚˜ ์‹ถ๋‹ค. ์ฐจํ›„ ์•Œ๊ฒŒ ๋˜๋ฉด ์™€์„œ ๋ง๋ถ™์—ฌ ๋ณด๊ฒ ๋‹ค.

 

CASE WHEN์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ๋‹ค. 1) ์ƒ์œ„ ์กฐ๊ฑด์ด ์šฐ์„ ์ˆœ์œ„๋กœ ์žกํ˜€ ์žˆ์–ด์„œ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ์‹œ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ๋„ฃ์–ด ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฑฐ. ๋งŒ์•ฝ์— ์œ„ ์ฟผ๋ฆฌ๋ฅผ ์—ฐ์‚ฐ๊ธฐํ˜ธ๋กœ ์กฐ๊ฑด์„ ๊ฒน์น  ์ˆ˜ ์žˆ๊ฒŒ ์žก์•„ ๋’€๋‹ค๋ฉด ๋จผ์ € ์„ ์–ธ๋œ ํ•œ ๊ฐ€์ง€ ์ง‘๋‹จ์— ๊ฐ’๋“ค์ด ๋‹ค ๋ชฐ๋ ค ๋ฒ„๋ฆฌ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๋ฌธ๋ฒ•์€ ํ•œ ๋ฒˆ ํฌํ•จ๋œ ์ดํ›„์˜ ๋งŒ์กฑ ์กฐ๊ฑด์„ ๋ฌด์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 2) ELSE๋ฅผ ๋„ฃ์ง€ ์•Š์•„๋„ ๋™์ž‘ํ•˜์ง€๋งŒ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์„ธ๋ถ„ํ™”๋˜์ง€ ์•Š๋Š” ๋กœ์šฐ๋Š” ์ „๋ถ€ ๋‹ค NULL ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค๋Š” ๊ฑฐ๋‹ค. ํ•ด๋‹น ๋‘ ๊ฐ€์ง€๋ฅผ ์ฃผ์˜ํ•ด์„œ ์งœ ์ฃผ์ž.

 

 

 

 

 

 

 

 

์ฐธ๊ณ 

suy379๋‹˜ ํ‹ฐ์Šคํ† ๋ฆฌ

mySQL ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

๋ถ„์„ ํˆด์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘๋‹ค ๋ณด๋ฉด ๊ฐ€๋” ๋‹นํ™ฉ์Šค๋Ÿฌ์šธ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ณ ์œ  ๋ฒˆํ˜ธ๊นŒ์ง€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋‚˜์˜ค๋Š” ๊ฑฐ๋‹ค. ์ด์œ ๊ฐ€ ์–ด๋–ป๋“ (์šฐ๋ฆฌ๊ฐ€ ๋ณ€๋ณ„๋ ฅ ์—†๋Š” ์กฐ๊ฑด์„ ์„ค์ •ํ–ˆ๋“ , ๋ง ๊ทธ๋Œ€๋กœ ์ปดํ“จํ„ฐ๊ฐ€ ์‹ค์ˆ˜๋ฅผ ํ–ˆ๋“ ) ๊ฐ„์— ์ด ๊ฐ’๋“ค์€ ๊ฑธ๋Ÿฌ์ ธ์•ผ ํ•˜๊ณ  ๋ฐ˜๋Œ€๋กœ ์ˆ˜์ง‘ ํ”„๋กœ์„ธ์Šค ์ž์ฒด์˜ ๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ์ง‘๊ณ„๋˜๊ธฐ๋„ ํ•ด์•ผ ํ•œ๋‹ค.

 

 

์•„๋ž˜ order_list๋Š” ๊ฐ€์ƒ์˜ ๋ธŒ๋žœ๋“œ์˜ ์ฃผ๋ฌธ ์ •๋ณด ์ˆ˜์ง‘ ๋‚ด์—ญ์ด๋‹ค. ์ด ์ค‘ ์ฃผ๋ฌธ๋ฒˆํ˜ธ 10251์€ ๋‘ ๋ฒˆ ๋‚˜์˜ค๋Š”๋ฐ ๋ณด๋‹ค์‹œํ”ผ ๊ณ ๊ฐID๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ’์ด ๋™์ผํ•˜๋‹ค. ๊ธฐ์žฌํ•˜์ง„ ์•Š์•˜์ง€๋งŒ ์ˆ˜์ง‘๋œ ์‹œ๊ฐ„๊นŒ์ง€. ์˜ค๋Š˜์€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ/ ์ง‘๊ณ„ ๊ด€๋ จํ•œ ์ฟผ๋ฆฌ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ๋‹ค.

 

 

order_list

์ฃผ๋ฌธ๋ฒˆํ˜ธ ๊ณ ๊ฐID ์ฃผ๋ฌธ์ผ์ž ๋ฐฐ์†กID
10248 90 2024-01-03 3
10249 81 2024-01-04 1
10250 34 2024-01-08 2
10251 84 2024-01-08 1
10251 84 2024-01-08 1
10252 76 2024-01-09 2
... ... ... ...
10443 66 2024-02-06 1

 

* learnsql ํฌ์ŠคํŠธ๋ฅผ ๋ฒˆ์—ญํ•ด ๊ณต์œ ํ•œ ๊ฒƒ.

 

 

 

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ, ์šฐ์„  '์ค‘๋ณต'์˜ ์กฐ๊ฑด์„ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๋ ค๋ฉด ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. '์™„์ „ ๋™์ผ' ์„ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ๋ผ ์ค„ ์ปฌ๋Ÿผ์€ ๋ช…ํ™•ํ•˜๋‹ค. ์ค‘๋ณต๋  ์ˆ˜ ์—†๋Š” ๊ณ ์œ ํ•œ ๊ฐ’, ๊ธฐ๋ณธ ํ‚ค์ธ '์ฃผ๋ฌธ๋ฒˆํ˜ธ'๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ฃผ๋ฌธ๋ฒˆํ˜ธ๋ผ๋ฆฌ ๊ทธ๋ฃน์„ ๋ฌถ์–ด ์ •๋ ฌํ•˜๊ณ  ๊ทธ๋ฃน๋ณ„ ์ˆ˜๋Ÿ‰์„ ์„ผ๋‹ค๋ฉด ์ค‘๋ณต์ด ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํžˆ ๋ณด์ด์ง€ ์•Š์„๊นŒ.

 

 

SELECT ์ฃผ๋ฌธ๋ฒˆํ˜ธ

               , COUNT(์ฃผ๋ฌธ๋ฒˆํ˜ธ) AS ์ค‘๋ณต์ฒดํฌ FROM order_list
GROUP BY ์ฃผ๋ฌธ๋ฒˆํ˜ธ
HAVING COUNT(์ฃผ๋ฌธ๋ฒˆํ˜ธ);

 

 

order_list

์ฃผ๋ฌธ๋ฒˆํ˜ธ ์ค‘๋ณต์ฒดํฌ
10248 1
10249 1
10250 1
10251 2
10252 1

 

 

 

์ฃผ๋ฌธ๋ฒˆํ˜ธ์˜ ์ค‘๋ณต์ด ์žกํžŒ 10251 ๋ง๊ณ ๋Š” ์ „์ฒด๊ฐ€ 1๋กœ ์ฒดํฌ๋˜๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์—ฌ๊ธฐ์„œ ์ง‘๊ณ„ ๊ธฐ์ค€์„ '1๋ณด๋‹ค ํฐ ๊ฐ’'์œผ๋กœ ๋ฐ”๊ฟ” ์ค€๋‹ค๋ฉด ์ค‘๋ณต ๊ฐ’๋งŒ ์ฃฝ ์ถœ๋ ฅํ•ด ๋ฆฌ์ŠคํŠธ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

 

SELECT ์ฃผ๋ฌธ๋ฒˆํ˜ธ

               , COUNT(์ฃผ๋ฌธ๋ฒˆํ˜ธ) AS ์ค‘๋ณต์ฒดํฌ FROM order_list
GROUP BY ์ฃผ๋ฌธ๋ฒˆํ˜ธ
HAVING COUNT(์ฃผ๋ฌธ๋ฒˆํ˜ธ) > 1;

 

 

์ฃผ๋ฌธ๋ฒˆํ˜ธ ์ค‘๋ณต์ฒดํฌ
10251 2

 

 

์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ ์—†๋‹ค๋ฉด ์ง€์›Œ๋ฒ„๋ฆฌ๋ฉด ๊ทธ๋งŒ์ด๊ฒ ์ง€๋งŒ, ๊ณผํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ปดํ“จํ„ฐ์˜ ์‹ค์ˆ˜๋ณด๋‹จ ๋‚ด ์‹ค์ˆ˜์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ์ „์ฒด ์ปฌ๋Ÿผ์„ ๋„์›Œ ๋†“๊ณ  ๋ฐ์ดํ„ฐ ์‚ฌ์ด์˜ ์ ‘์ ์„ ์ฒดํฌํ•ด๋ณด๋ฉด ๋˜๊ฒ ๋‹ค. HAVING์„ ๋‹จ์ˆœํžˆ ์กฐ๊ฑด ์ง‘๊ณ„์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฟผ๋ฆฌ์™€ ํ‘œ๋ฅผ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณด์—ฌ์ฃผ๋ฉฐ ๋งˆ๋ฌด๋ฆฌํ•œ๋‹ค.

 

 

SELECT ์ฃผ๋ฌธ๋ฒˆํ˜ธ, ๊ณ ๊ฐID, ์ฃผ๋ฌธ์ผ์ž, ๋ฐฐ์†กID

               , COUNT(์ฃผ๋ฌธ๋ฒˆํ˜ธ) AS ์ค‘๋ณต์ฒดํฌ FROM order_list
GROUP BY ์ฃผ๋ฌธ๋ฒˆํ˜ธ, ๊ณ ๊ฐID, ์ฃผ๋ฌธ์ผ์ž, ๋ฐฐ์†กID
HAVING COUNT(์ฃผ๋ฌธ๋ฒˆํ˜ธ) > 1;

 

 

์ฃผ๋ฌธ๋ฒˆํ˜ธ ๊ณ ๊ฐID ์ฃผ๋ฌธ์ผ์ž ๋ฐฐ์†กID
10251 84 2024-01-08 1

 

 

 

 

 

 

์ฐธ๊ณ 

learnsql ํ™ˆํŽ˜์ด์ง€

๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

 

 

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Join์— ๋Œ€ํ•ด ๋‹ค๋ฃฌ๋‹ค. Join์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉํ•ด ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ‚ค์›Œ๋“œ๋‹ค. ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋ถ„๋ฆฌํ•ด ๋ณด๊ด€ํ•˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)์™€ ๋‘ ํ…Œ์ด๋ธ” ์ด์ƒ์˜ ์ ‘์  ํ˜น์€ ์ฐจ์ด์ ์—์„œ ์œ ์˜๋ฏธํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋„์ถœํ•ด๋‚ด๋Š” ์ง‘ํ•ฉ์€ ๋—„๋ ˆ์•ผ ๋—„ ์ˆ˜ ์—†๋Š” ์‚ฌ์ด๋ผ ํ•˜๊ฒ ๋‹ค.

 

 

Join์˜ ์ข…๋ฅ˜. ์ถœ์ฒ˜//&nbsp;https://lyk00331.tistory.com/107

 

 

Join์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ํ…Œ์ด๋ธ”์„ ๊ฐ–๋‹ค ๋†“๊ณ  ๊ธฐ์ค€์ ๊ณผ ์ถœ๋ ฅ ๋ฒ”์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๋‘๋ƒ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ์„ธ๋ถ„ํ™”๋˜์–ด ์žˆ๊ณ  ์ด๋Š” ์ง‘ํ•ฉ์˜ ๊ฐœ๋…๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ๋‹ค๋งŒ ๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ๋“ฑ ์ผ๋ถ€ ์ง‘ํ•ฉ ๊ตฌํ˜„ ๊ธฐ๋Šฅ์€ mySQL์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, exists ๊ตฌ๋ฌธ์œผ๋กœ ์ง์ ‘ ๋งŒ๋“ค์–ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฌธ๋ฒ•๋“ค์„ ์•„๋ž˜ ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๋А์Šจํ•˜๊ฒŒ ํ†บ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

 

1) Inner Join

2) (Left/ Right) Outer Join

3) intersect/ minus

 

 

์ถ”๊ฐ€๋กœ, ๋ฐ์ดํ„ฐ๋Š” ๊ธˆ์ผ์ž ๊ธฐ์ค€ 29cm์˜ ์‹ค์‹œ๊ฐ„ ๋ฒ ์ŠคํŠธ๋ฅผ ํฌ๋กค๋งํ•œ ๋’ค, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ตœ๋Œ€ํ•œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€๊ณตํ•ด ์˜ฌ๋ ธ๋‹ค. (ํ˜น์‹œ ๊ถ๊ธˆํ•˜์‹  ๋ถ„์ด ์žˆ์œผ์‹ค๊นŒ ํ•ด์„œ ๋ง๋ถ™์ด๋ฉด ํฌ๋กค๋ง์—๋Š” listly, ํฌ๋กค๋ง ํŒŒ์ผ์˜ sql์‹ ๊ฐ€๊ณต์—๋Š” tableconvert.com๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.) ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

select * from lrank;  *์ƒํ’ˆ์ฝ”๋“œ, ์ œํ’ˆ์˜ ์ •์ƒ๊ฐ€, ๋งค์ถœ ์ˆœ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค.
select * from linfo;  *์นดํ…Œ๊ณ ๋ฆฌ, ๋ธŒ๋žœ๋“œ, ์ƒํ’ˆ๋ช…, ์ข‹์•„์š” ์ˆ˜, ์ƒํ’ˆํ‰ ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค.

(์ƒํ’ˆ์ฝ”๋“œ์™€ ์ˆœ์œ„๋Š” ๋ถ„์„์„ ์œ„ํ•ด ๋‚ด๊ฐ€ ์ž„์˜๋กœ ๋ถ€์—ฌํ•œ ๊ฐ’์ด๋‹ค.)

 

 

lrank ํ…Œ์ด๋ธ”์˜ ํ˜•ํƒœ.
linfo ํ…Œ์ด๋ธ”์˜ ํ˜•ํƒœ.

 

 

 

 

 

1) Inner Join

 

Inner Join์€ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ต์ง‘ํ•ฉ ๊ฐœ๋…์ด๋‹ค. (์Œ๋ฐฉ ๊ต์ง‘ํ•ฉ์€ ์•„๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐœ๋… ๊ด€๋ จํ•ด์„œ๋Š” 3) intersect ํŒŒํŠธ๋ฅผ ๋ณด๋ฉด ๋œ๋‹ค.) on์— ์ง€์ •ํ•ด ์ค€ ์ค‘์‹ฌ์ด ๋˜๋Š” ์ปฌ๋Ÿผ(Primary Key, PK: ๊ธฐ๋ณธํ‚ค) ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉ์ณ์„œ ๋ณด์—ฌ ์ค€๋‹ค. ๊ฐ€์žฅ ์ตœ์†Œ๊ฐ’์œผ๋กœ Inner Join์„ ์ ์šฉํ•ด ๋ณธ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜์˜ค๊ณ  ์ถœ๋ ฅ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

 

 

select * from linfo li
inner join lrank lr on li.์ƒํ’ˆ์ฝ”๋“œ = lr.์ƒํ’ˆ์ฝ”๋“œ;

 

 

 

 

๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์ค„์—ˆ๋‹ค. ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ณผ๋ฅจ ์ฐจ์ด ๋•Œ๋ฌธ์ด๋‹ค. linfo๋Š” ์ „์ฒด ๋“ฑ๋ก ์ƒํ’ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋‹ˆ ๋ณผ๋ฅจ์ด ํฌ์ง€๋งŒ lrank๋Š” ๊ฐœ์ค‘ ๋งค์ถœ ํƒ‘ ์‹์Šค๋งŒ ๋ฝ‘์€ ๊ฒƒ์ด๋‹ˆ ๊ทธ๋ ‡๋‹ค. ์ด๋ ‡๊ฒŒ ๋‘ ํ…Œ์ด๋ธ”์„ Inner Join ๋ฐฉ์‹์œผ๋กœ ์ •์ œํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์ง€ ๋ชป ํ•œ null ๊ฐ’์ด ๋น ์ง„ ์ƒํƒœ๋กœ ๋‚˜์˜จ๋‹ค. ์—ฌ๊ธฐ์„œ ์ •๋ณด๊ฐ’์„ ์ข€ ์ค„์—ฌ ์ค€๋‹ค๋ฉด ์ง๊ด€์ ์ธ ํ‘œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

 

select lr.์ˆœ์œ„, lr.์ƒํ’ˆ์ฝ”๋“œ, li.์นดํ…Œ๊ณ ๋ฆฌ, li.๋ธŒ๋žœ๋“œ๋ช…, li.์ƒํ’ˆ๋ช… from linfo li
inner join lrank lr on li.์ƒํ’ˆ์ฝ”๋“œ = lr.์ƒํ’ˆ์ฝ”๋“œ
order by lr.์ˆœ์œ„;

 

 

 

 

์ด๋ ‡๊ฒŒ ์žก์•„ ์ฃผ๋ฉด ๋’ค์ฃฝ๋ฐ•์ฃฝ์ด๋˜ ์ˆœ์œ„๊ฐ€ ์ผ๋ ฌ๋กœ ์ •๋ ฌ๋˜๊ณ  ์ƒํ’ˆ์ฝ”๋“œ, ์นดํ…Œ๊ณ ๋ฆฌ, ๋ธŒ๋žœ๋“œ๋ช…, ์ƒํ’ˆ๋ช…๊นŒ์ง€ ์ง๊ด€์ ์œผ๋กœ ๋ณด์ธ๋‹ค. 

 

 

๋˜ Inner Join์€ (mySQL์—์„œ) ๊ธฐ๋ณธ ์กฐ์ธ์ด๊ธฐ ๋•Œ๋ฌธ์— from์— ์ถ”๊ฐ€ ํ…Œ์ด๋ธ”์„ ๋„ฃ์–ด์ฃผ๊ณ  where ์ ˆ์— ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ํ˜•์‹์œผ๋กœ๋„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด.

 

 

select lr.์ˆœ์œ„, lr.์ƒํ’ˆ์ฝ”๋“œ, li.๋ธŒ๋žœ๋“œ๋ช…, li.์ƒํ’ˆ๋ช…, li.์ข‹์•„์š”, li.์ƒํ’ˆํ‰ 
from linfo li, lrank lr
where li.์ƒํ’ˆ์ฝ”๋“œ = lr.์ƒํ’ˆ์ฝ”๋“œ
order by lr.์ˆœ์œ„;

 

 

 

์ด๊ฒƒ๋„ ์œ„์™€ ๋™์ผํ•˜๊ฒŒ ์ถœ๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜ ์ค‘ ํŽธํ•œ ์ชฝ์„ ์ทจ์‚ฌ์„ ํƒํ•ด์„œ ์“ฐ๋ฉด ๋˜๊ฒ ๋‹ค. ๋˜, ํ•ด๋‹น ๋ฐฉ์‹์€ ์กฐ๊ฑด์„ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฑธ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๋ฐ์ดํ„ฐ ์ค‘ ์ƒํ’ˆํ‰์ด ์ ์€ ๊ฒƒ์€ ์‹ ์ƒํ’ˆ์ธ๋ฐ ๋งค์ถœ์ด ์ž˜ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ˆ ํ”„๋กœ๋ชจ์…˜ ๋“ฑ์œผ๋กœ ๋ฐ€์–ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿด ๋•Œ๋Š”,

 

 

select lr.์ˆœ์œ„, lr.์ƒํ’ˆ์ฝ”๋“œ, li.๋ธŒ๋žœ๋“œ๋ช…, li.์ƒํ’ˆ๋ช…, li.์ข‹์•„์š”, li.์ƒํ’ˆํ‰ 
from linfo li, lrank lr
where li.์ƒํ’ˆ์ฝ”๋“œ = lr.์ƒํ’ˆ์ฝ”๋“œ and li.์ƒํ’ˆํ‰ < 10
order by lr.์ˆœ์œ„;

 

 

 

 

ํ•ด๋‹น ๋ฐฉ์‹์œผ๋กœ ์ƒํ’ˆํ‰์ด ์ ์€ ๊ฑธ ๊ฑธ๋Ÿฌ์„œ ์œ ์˜๋ฏธํ•œ ํ‘œ๋ฅผ ๋งŒ๋“ค์–ด๋„ ์ข‹๊ฒ ๋‹ค.

 

 

 

 

 

 

2) (Left/ Right) Outer Join

 

Outer Join์—๋Š” ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๊ฐ์ž ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์„ ์–ด๋””๋กœ ์žก๋А๋ƒ์— ๋”ฐ๋ผ ๊ฐ๊ฐ Left/ Right/ Full Outer Join์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์ด ์ค‘ ์„ฑ๋Šฅ ์ƒ ๊ฑฐ์˜ ์“ธ ์ผ์ด ์—†๋Š” Full Outer Join์„ ์ œํ•˜๊ณ  ์—ฌ๊ธฐ์„œ๋Š” Left์™€ Right Join๋งŒ ๋‹ค๋ฃฌ๋‹ค. ๋‘˜์€ ์„ฑ๋Šฅ ์ฐจ์ด ์—†์ด ์™„์ „ํžˆ ๋™์ผํ•ด์„œ, ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‘˜ ์ด์ƒ์ด ์ฟผ๋ฆฌ ์ž‘์—…ํ•  ๊ฒฝ์šฐ์—๋Š” ์™ผ์ชฝ์ด๋“  ์˜ค๋ฅธ์ชฝ์ด๋“  ํ•œ ์ชฝ์œผ๋กœ ํ†ต์ผํ•˜๊ธธ ๊ถŒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ฐ€๋…์„ฑ์ด ์‹ฌํžˆ ์•ˆ ์ข‹๋‹ค๊ณ ......

 

 

Outer Join์€ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์— ๋‚˜๋จธ์ง€ ํ•œ ํ…Œ์ด๋ธ”์ด ํ•ฉ์ณ์ง€๋Š” ํ˜•ํƒœ๋‹ค. ๋งŒ์•ฝ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋ผ๋ฉด ํ•ฉ์ณ์ง€๋Š” ํ…Œ์ด๋ธ”์—๋„ ๊ทธ ๊ฐ’์€ ์ง€์›Œ์ง„๋‹ค. ์˜จ์ „ํ•œ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์— ๋‚˜๋จธ์ง€ ํ•œ ํ…Œ์ด๋ธ”์˜ ๊ต์ง‘ํ•ฉ๊นŒ์ง€๋งŒ ์‚ด์•„๋‚จ๋Š” ๊ฒƒ์ด๋‹ค.  

 

 

select lr.์ˆœ์œ„, li.์ƒํ’ˆ๋ช…, lr.์ •์ƒ๊ฐ€ from linfo li
right outer join lrank lr on li.์ƒํ’ˆ์ฝ”๋“œ = lr.์ƒํ’ˆ์ฝ”๋“œ;

 

select lr.์ˆœ์œ„, li.์ƒํ’ˆ๋ช…, lr.์ •์ƒ๊ฐ€ from linfo li
left outer join lrank lr on li.์ƒํ’ˆ์ฝ”๋“œ = lr.์ƒํ’ˆ์ฝ”๋“œ;

 

 

์—ฌ๊ธฐ์„œ ์งˆ๋ฌธ, ์ด ๋‘ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ’์€ ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ ์—†์„๊นŒ? ๋‘ ์ฟผ๋ฆฌ๋Š” right์™€ left๋งŒ ๋นผ๊ณ ๋Š” ๋‹ค ๋™์ผํ•˜๋‹ค.

 

 

right outer join ๊ฒฐ๊ณผ๊ฐ’.

 

left outer join ๊ฒฐ๊ณผ๊ฐ’.

 

 

์ฐจ์ด๊ฐ€ ๋ณ„๋กœ ์—†์„ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ๋ณด๋‹ค์‹œํ”ผ ์ฐจ์ด๊ฐ€ ํฌ๋‹ค.  ๋‘ Join ๊ฐ„์˜ ๊ธฐ์ค€ ํ…Œ์ด๋ธ” ์„ค์ •์ด ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ํ˜„์ƒ์ด๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ” ์žˆ๋“ฏ์ด, linfo๋Š” ์ „์ฒด ์ƒํ’ˆ์ •๋ณด ํ…Œ์ด๋ธ”์ด๋‹ค. lrank๋Š” ๊ทธ ์ค‘ ๋งค์ถœ ์ƒ์œ„๊ถŒ ์ƒํ’ˆ๋งŒ ๋žญํ‚น์— ์˜ฌ๋ฆฌ๋ฉด์„œ ์ง‘๊ณ„๋œ ๋ฐ์ดํ„ฐ์ด๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ž์ฒด ํฌ๊ธฐ๋Š” ๋ญ๊ฐ€ ๋” ํด๊นŒ? ๋‹น์—ฐํžˆ linfo์ด๋‹ค. linfo๊ฐ€ lrank๋ณด๋‹ค ๋ฐ์ดํ„ฐ์˜ ๋ณผ๋ฅจ์ด ํ›จ์”ฌ ํฌ๋‹ค. ์ƒํ’ˆ๋“ฑ๋ก์ด ๋˜์ง€ ์•Š์€ ์ƒํ’ˆ์ด ๋žญํ‚น์— ์˜ค๋ฅผ ๋ฆฌ ์—†์œผ๋‹ˆ linfo๊ฐ€ lrank๋ฅผ ์•„์˜ˆ ํฌํ•จํ•œ๋‹ค๊ณ  ๋งํ•ด๋„ ์ข‹๊ฒ ๋‹ค.

 

 

Outer Join์€ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์— ๋‚˜๋จธ์ง€ ํ•œ ํ…Œ์ด๋ธ”์ด ํ•ฉ์ณ์ง€๋Š” ํ˜•ํƒœ๋ผ๊ณ  ํ–ˆ๋‹ค. lrank์— Left Join์„ ํ•œ๋‹ค๋ฉด ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์€ lrank๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ๋˜์ง€๋งŒ, lrank์— Right Join์„ ํ•œ๋‹ค๋ฉด ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์€ linfo๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— lrank์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ๋‚˜๋จธ์ง€ ์ƒํ’ˆ๋“ค๊นŒ์ง€ ๊ฐ™์ด ๋œฌ๋‹ค. Outer Join ์‹œ์—๋Š” ์–ด๋–ค ๊ฑธ ์จ๋„ ์ƒ๊ด€ ์—†์ง€๋งŒ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์ด ์–ด๋”˜์ง€๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์ž‘์—…ํ•ด์•ผ ํ•œ๋‹ค.

 

 

์ถ”๊ฐ€๋กœ ๋ง๋ถ™์ด๋ฉด, Outer Join์œผ๋กœ Inner Join์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

select * from lrank lr 
left outer join linfo li on lr.์ƒํ’ˆ์ฝ”๋“œ = li.์ƒํ’ˆ์ฝ”๋“œ 
where li.์ƒํ’ˆ์ฝ”๋“œ is not null;

 

 

 

 

on๊ตฌ ๋’ค์— where์ ˆ์„ ์ฃผ๊ณ  is not null๋กœ null๊ฐ’์„ ์ œ๊ฑฐํ•ด ์ฃผ๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋А๋‹ˆ ๊ทธ๋ƒฅ Inner Join์„ ๊ฑฐ๋Š” ๊ฒŒ ๋น ๋ฅด๊ณ  ๊น”๋”ํ•˜๊ฒ ๋‹ค.

 





3) intersect/ minus

 

์œ„์—์„œ Inner์™€ Outer Join์„ ๋‹ค๋ค˜๋‹ค. ์ด์ฏค ๋˜๋ฉด ๊ถ๊ธˆํ•˜๋‹ค. ์•„๋‹ˆ, Join์ด ๊ทธ๊ฒŒ ๋์ด๋ƒ. ์ง„์‹ฌ์ด์•ผ? ์ง‘ํ•ฉ ์„ค๋ช…ํ•˜๋ ค๋ฉด ํ•œ์ฐธ ๋‚จ์•˜์ž–์•„. ๊ทธ๋ž˜. ๋‚˜๋„ ์„ค๋ช…ํ•˜๊ณ  ์‹ถ๋‹ค. ํ•˜์ง€๋งŒ ์•„์‰ฝ๊ฒŒ๋„ mySQL์˜ ๊ฒฝ์šฐ์—๋Š” ๊ต์ง‘ํ•ฉ๊ณผ ์ฐจ์ง‘ํ•ฉ์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ณ„๋„๋กœ ๋งŒ๋“ค์–ด ์จ์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ.

 

 

intersect (๊ต์ง‘ํ•ฉ) ๊ตฌ๋ฌธ
select * from linfo a
where exists (select 1 from lrank b where a.์ƒํ’ˆ์ฝ”๋“œ = b.์ƒํ’ˆ์ฝ”๋“œ);

 

 

์ด๋•Œ select ๋’ค์˜ 1์€ ๋‹จ์ˆœํžˆ exists(์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋งŒ ์ฐพ์œผ๋ฉด ๋˜๋Š” ํ•จ์ˆ˜)๊ฐ€ ์•ž์— ์™”๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์ถœ๋ ฅ์„ ์œ„ํ•ด ์จ์คฌ๋‹ค. select 1 from ํ˜•์‹์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์น˜๋ฉด ์‹ค์ œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ  ๊ฐ’์ด ์žˆ๋ƒ ์—†๋ƒ๋งŒ ๊ฒ€์ฆํ•˜๊ณ  ์žˆ์œผ๋ฉด 1 ์ณ ์ค€๋‹ค. ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. 

 

 

 



minus ๊ตฌ๋ฌธ
select * from linfo a
where not exists (select 1 from lrank b where a.์ƒํ’ˆ์ฝ”๋“œ = b.์ƒํ’ˆ์ฝ”๋“œ);

 

 

๊ต์ง‘ํ•ฉ์˜ ๋ฐ˜๋Œ€๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. ์ฐจ์ง‘ํ•ฉ์ด๋‹ค. ๋งŽ์ด ๋ฐ”๊ฟ€ ํ•„์š” ์—†์ด exists ์•ž์— not ๋ถ™์—ฌ์„œ ๊ต์ง‘ํ•ฉ์ด ์•„๋‹Œ ๊ฐ’๋งŒ ๋ถˆ๋Ÿฌ์™€ ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

 

 

 

์—ฌ๊ธฐ๊นŒ์ง€, ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™€ ํ•œ ๋ˆˆ์— ๋ณด๊ฒŒ ํ•ด ์ฃผ๋Š” Join์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋‹ค. ์“ฐ๋ฉด์„œ ๋А๋‚€ ๊ฒŒ, ์• ์ดˆ์— ๋ญ˜ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ์ฃฝ์ด ๋˜๋“  ๋ฐฅ์ด ๋˜๋“  ํ•  ๊ฑฐ ๊ฐ™๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณผ ๊ฑด๋ฐ, ์˜ˆ์œ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์™€์„œ ์ž˜ ์„ค๋ช…ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

 

 

์ฐธ๊ณ 

Inpa dev ๋‹˜ ๋ธ”๋กœ๊ทธ

BK_Paul ๋‹˜ ๋ธ”๋กœ๊ทธ

๋”๋ณด๊ธฐ
TOOLS/SQL

 

 

 

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/ ํ…Œ์ด๋ธ” ๊ด€๋ จ ํ‚ค์›Œ๋“œ

์˜๋ฏธ ์ฟผ๋ฆฌ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ CREATE DATABASE [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„];
๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒํ•˜๊ธฐ SHOW DATABASES;
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ์„ ์–ธํ•˜๊ธฐ USE [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„];
ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ CREATE TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] (
[์ปฌ๋Ÿผ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…],
[์ปฌ๋Ÿผ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…], ...
);
ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„]
RENAME [์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ” ์ด๋ฆ„]
์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ถ”๊ฐ€ํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„]
ADD COLUMN [์ปฌ๋Ÿผ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…];
๊ธฐ์กด ์ปฌ๋Ÿผ ํƒ€์ž… ๋ณ€๊ฒฝํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„]
MODIFY COLUMN [์ปฌ๋Ÿผ ์ด๋ฆ„] [์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํƒ€์ž…];
๊ธฐ์กด ์ปฌ๋Ÿผ ์ด๋ฆ„๊ณผ ํƒ€์ž… ๋ณ€๊ฒฝํ•˜๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] CHANGE COLUMN [์ปฌ๋Ÿผ ์ด๋ฆ„]
[์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ์ด๋ฆ„] [์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํƒ€์ž…];
์ปฌ๋Ÿผ ์ง€์šฐ๊ธฐ ALTER TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] DROP COLUMN [์ปฌ๋Ÿผ ์ด๋ฆ„];
ํ…Œ์ด๋ธ” ๊ฐ’๋งŒ ์ง€์šฐ๊ธฐ TRUNCATE TABLE [ํ…Œ์ด๋ธ” ์ด๋ฆ„];
๋ฐ์ดํ„ฐ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฝ์ž…ํ•˜๊ธฐ INSERT INTO [ํ…Œ์ด๋ธ” ์ด๋ฆ„] (
[์ปฌ๋Ÿผ1 ์ด๋ฆ„], [์ปฌ๋Ÿผ2 ์ด๋ฆ„], [์ปฌ๋Ÿผ3 ์ด๋ฆ„])
VALUES ([์ปฌ๋Ÿผ1 ๊ฐ’], [์ปฌ๋Ÿผ2 ๊ฐ’] [์ปฌ๋Ÿผ3 ๊ฐ’]),
([์ปฌ๋Ÿผ1 ๊ฐ’], [์ปฌ๋Ÿผ2 ๊ฐ’] [์ปฌ๋Ÿผ3 ๊ฐ’]),
([์ปฌ๋Ÿผ1 ๊ฐ’], [์ปฌ๋Ÿผ2 ๊ฐ’] [์ปฌ๋Ÿผ3 ๊ฐ’]);
๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ DELETE FROM [ํ…Œ์ด๋ธ” ์ด๋ฆ„] WHERE ์กฐ๊ฑด์‹;
๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๊ธฐ UPDATE [ํ…Œ์ด๋ธ” ์ด๋ฆ„] SET [์ปฌ๋Ÿผ ์ด๋ฆ„] = [์ƒˆ ๊ฐ’] WHERE ์กฐ๊ฑด์‹;

 

 

 

 

๋ฐ์ดํ„ฐ ํƒ€์ž…

๋ฐ์ดํ„ฐํ˜• ํ‘œํ˜„ ๋ฐ”์ดํŠธ ์ˆ˜ ํ‘œํ˜„ ๋ฒ”์œ„
์ •์ˆ˜ํ˜•(์ˆซ์žํ˜•) TINYINT 1 -128~ 127
์ •์ˆ˜ํ˜•(์ˆซ์žํ˜•) SMALLINT 2 -32,768~ 32,767
์ •์ˆ˜ํ˜•(์ˆซ์žํ˜•) MEDIUMINT 3 ์•ฝ -838๋งŒ~ 838๋งŒ
์ •์ˆ˜ํ˜•(์ˆซ์žํ˜•) INT 4 ์•ฝ -21์–ต~ 21์–ต
์ •์ˆ˜ํ˜•(์ˆซ์žํ˜•) BIGINT 8 ์•ฝ -900๊ฒฝ~ 900๊ฒฝ
์‹ค์ˆ˜ํ˜•(์ˆซ์žํ˜•) FLOAT 4 ์†Œ์ˆ˜์  ์•„๋ž˜ 7์ž๋ฆฌ๊นŒ์ง€
์‹ค์ˆ˜ํ˜•(์ˆซ์žํ˜•) DOUBLE 8 ์†Œ์ˆ˜์  ์•„๋ž˜ 15์ž๋ฆฌ๊นŒ์ง€
๋ฌธ์žํ˜• CHAR(n) ์ตœ๋Œ€ 255 n์„ 1๋ถ€ํ„ฐ 255๊นŒ์ง€ ์ง€์ •
๋ฌธ์žํ˜• VARCHAR(n) ์ตœ๋Œ€ 65,535 n์„ 1๋ถ€ํ„ฐ 65,535๊นŒ์ง€ ์ง€์ •
๋ฌธ์žํ˜• TINYTEXT 255 ๊ณ ์ • 255 ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๊นŒ์ง€
๋ฌธ์žํ˜• TEXT 65,535 ๊ณ ์ • 65,535 ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๊นŒ์ง€
๋ฌธ์žํ˜• MEDIUMTEXT ์•ฝ 1,600๋งŒ ์•ฝ 1,600๋งŒ ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๊นŒ์ง€
๋ฌธ์žํ˜• LONGTEXT ์•ฝ 42์–ต ์•ฝ 42์–ต ๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๊นŒ์ง€
๋‚ ์งœํ˜• DATE 3 0000-00-00~ 9999-12-31
๋‚ ์งœํ˜• DATETIME 3 0000-00-00 00:00:00~ 9999-12-31 23:59:59
๋‚ ์งœํ˜• TIME 4 -838:59:59~ 838:59:59
๋‚ ์งœํ˜• YEAR 1 1901~2155

 

 

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/ ํ…Œ์ด๋ธ”/ ์ปฌ๋Ÿผ ์ด๋ฆ„ ์ •ํ•˜๊ธฐ ๊ทœ์น™

1) ๋ฌธ์ž, ์ˆซ์ž, _ ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
2) ์ด๋ฆ„์— ์“ฐ์ด๋Š” ๋ฌธ์ž๋Š” ์ฃผ๋กœ ์˜๋ฌธ ์†Œ๋ฌธ์ž๋ฅผ ์“ด๋‹ค. ํ•œ๊ธ€๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ธ์ฝ”๋”ฉ ์ด์Šˆ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ. 
๋ณดํ†ต ํ‚ค์›Œ๋“œ๋‚˜ ํ•จ์ˆ˜๋ช…์€ ๋Œ€๋ฌธ์ž, ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์ด๋ฆ„์—๋Š” ์†Œ๋ฌธ์ž ์‚ฌ์šฉ.
3) ์ด๋ฏธ ํ‚ค์›Œ๋“œ, ํ•จ์ˆ˜๋ช… ๋“ฑ ๋ฌธ๋ฒ•์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” "์˜ˆ์•ฝ์–ด"๋Š” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
4) ๋‹จ์–ด์™€ ๋‹จ์–ด ์‚ฌ์ด์—๋Š” ๋นˆ์นธ ๋Œ€์‹  _๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
5) ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ์ˆซ์ž, _ ๋ถˆ๊ฐ€.
6) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค. ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์—ญ์‹œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์—์„œ ์ค‘๋ณต๋  
์ˆ˜ ์—†์œผ๋ฉฐ ์ปฌ๋Ÿผ ์ด๋ฆ„์€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.

 

 

 

 

 

์ฃผ์š” ์ฟผ๋ฆฌ ํ‚ค์›Œ๋“œ

ํ‚ค์›Œ๋“œ ์˜๋ฏธ ๋ฌธ๋ฒ• ์ž‘์„ฑ ์ˆœ์„œ ์‹คํ–‰ ์ˆœ์„œ
SELECT ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ํ‚ค์›Œ๋“œ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„] 1 5
FROM ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•˜๋Š” ํ‚ค์›Œ๋“œ FROM [ํ…Œ์ด๋ธ” ์ด๋ฆ„] 2 1
WHERE ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ์˜ ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ WHERE ์กฐ๊ฑด์‹ 3 2
GROUP BY ์ปฌ๋Ÿผ์—์„œ ๋™์ผํ•˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋กœ์šฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ํ‚ค์›Œ๋“œ๋กœ ์—‘์…€์˜ ํ”ผ๋ฒ—๊ณผ ์œ ์‚ฌ
GROUP BY๊ฐ€ ์“ฐ์ธ ์ฟผ๋ฆฌ์˜ SELECT ์ ˆ์—๋Š” 
GROUP BY ๋Œ€์ƒ ์ปฌ๋Ÿผ๊ณผ ๊ทธ๋ฃน ํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ ๋Œ€์ƒ์œผ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
GROUP BY [์ปฌ๋Ÿผ ์ด๋ฆ„] 4 3
HAVING ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน์— ์กฐ๊ฑด์„ ์ง€์ •ํ•ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ
๊ทธ๋ฃน ํ•จ์ˆ˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—
GROU BY์˜ WHERE ์ ˆ๋กœ ๋ถˆ๋ฆผ
HAVING ์กฐ๊ฑด์‹ 5 4
ORDER BY ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•ด์ฃผ๋Š” ํ‚ค์›Œ๋“œ
๊ธฐ๋ณธ์ ์œผ๋กœ ASC(์˜ค๋ฆ„์ฐจ์ˆœ)๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ 
DESC(๋‚ด๋ฆผ์ฐจ์ˆœ)์œผ๋กœ ๋ณ„๋„ ์„ค์ • ๊ฐ€๋Šฅ
์ปฌ๋Ÿผ ์ด๋ฆ„ ๋’ค์— ๊ธฐ์ž…ํ•˜๋ฉด ๋จ
ORDER BY [์ปฌ๋Ÿผ ์ด๋ฆ„] 6 6
AS ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ์— ๋ณ„๋ช…์„ ์ง€์ •ํ•˜๋Š” ํ‚ค์›Œ๋“œ AS [์ปฌ๋Ÿผ ๋ณ„๋ช…] - -
LIMIT ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ์˜ ๋กœ์šฐ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํ‚ค์›Œ๋“œ LIMIT [๋กœ์šฐ ์ˆ˜] - -
DISTINCT ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋Š” ์ œ์™ธํ•˜๊ณ  ๊ฐ™์€ ๊ฐ’์€ ํ•œ ๋ฒˆ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ํ‚ค์›Œ๋“œ DISTINCT [์ปฌ๋Ÿผ ์ด๋ฆ„] - -

 

 

 

 

์™€์ผ๋“œ์นด๋“œ

% / 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž
_ / 1๊ฐœ์˜ ๋ฌธ์ž

 

'%e' / e๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด
e, ee, eevee, apple, pineapple

'e%' / e๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด
e, ee, eevee, eric

'%e%' / e๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด
e, ee, eevee, apple, pineapple, aespa

'_e' / e๋กœ ๋๋‚˜๊ณ  e ์•ž์— 1๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด
ae, ee, ce

'%_e' / e๋กœ ๋๋‚˜๊ณ  e ์•ž์— 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด
ee, eevee, apple, pineapple

'%_e_%' / e๋ฅผ ํฌํ•จํ•˜๊ณ  e ์•ž๋’ค๋กœ ๊ฐ๊ฐ 1๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด
eevee, aespa

 

 

 

 

์ˆœ์œ„ ํ•จ์ˆ˜

[ํ•จ์ˆ˜ ์ด๋ฆ„] () OVER (ORDER BY [์ปฌ๋Ÿผ ์ด๋ฆ„])

ํ•จ์ˆ˜ ์ฐจ์ด์ 
RANK ๊ณต๋™ ์ˆœ์œ„๊ฐ€ ์žˆ์œผ๋ฉด ๋‹ค์Œ ์ˆœ์„œ๋กœ ๊ฑด๋„ˆ ๋œ€
DENSE_RANK ๊ณต๋™ ์ˆœ์œ„๊ฐ€ ์žˆ์–ด๋„ ๋‹ค์Œ ์ˆœ์œ„๋ฅผ ๋›ฐ์–ด ๋„˜์ง€ ์•Š์Œ
ROW_NUMBER ๊ณต๋™ ์ˆœ์œ„๋ฅผ ๋ฌด์‹œํ•จ

 

 

 

 

๊ทธ๋ฃน ํ•จ์ˆ˜

GROUP BY๊ฐ€ ์—†๋Š” ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉ ์‹œ ์ „์ฒด ๋กœ์šฐ์— ์ ์šฉ๋จ

ํ•จ์ˆ˜ ์˜๋ฏธ
COUNT ๊ทธ๋ฃน์˜ ๊ฐ’ ์ˆ˜๋ฅผ ์„ธ๋Š” ํ•จ์ˆ˜
COUNT(1)์€ ํ•˜๋‚˜์˜ ๊ฐ’์„ 1๋กœ ์„ธ์–ด ์ฃผ๋Š” ํ‘œํ˜„์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ
GROUP BY๊ฐ€ ์—†๋Š” ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉ ์‹œ ์ „์ฒด ๋กœ์šฐ์— ์ ์šฉ๋จ
SUM ๊ทธ๋ฃน์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
AVG ๊ทธ๋ฃน์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
MIN ๊ทธ๋ฃน์˜ ์ตœ์†Ÿ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
MAX ๊ทธ๋ฃน์˜ ์ตœ๋Œ“๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

 

 

 

 

์ฃผ์š” ์—ฐ์‚ฐ์ž

์—ฐ์‚ฐ์ž ์˜๋ฏธ ํ™œ์šฉ
BETWEEN ํŠน์ • ๋ฒ”์œ„ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ž BETWEEN A AND B
IN ๋ชฉ๋ก ๋‚ด ํฌํ•จ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ž [์ปฌ๋Ÿผ ์ด๋ฆ„] IN (A, B, ..., C)
LIKE ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์—ฐ์‚ฐ์ž [์ปฌ๋Ÿผ ์ด๋ฆ„] LIKE [๊ฒ€์ƒ‰ํ•  ๋ฌธ์ž์—ด]
IS NULL ๋ฐ์ดํ„ฐ๊ฐ€ NULL์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž [์ปฌ๋Ÿผ ์ด๋ฆ„] IS NULL

 

 

 

 

์ฃผ์š” ๋ฌธ์žํ˜• ๋ฐ์ดํ„ฐ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ํ™œ์šฉ
LOCATE "ABC"์—์„œ "A"๋Š” ๋ช‡ ๋ฒˆ์งธ์— ์œ„์น˜ํ•ด ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•ด ์œ„์น˜ ๋ฐ˜ํ™˜ LOCATE("A","ABC")
SUBSTRING "ABC"์—์„œ 2๋ฒˆ์งธ ๋ฌธ์ž๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ SUBSTRING("ABC", 2)
RIGHT "ABC"์—์„œ ์˜ค๋ฅธ์ชฝ 1๋ฒˆ์งธ ๋ฌธ์ž๊นŒ์ง€ ๋ฐ˜ํ™˜ RIGHT("ABC", 1)
LEFT "ABC"์—์„œ ์™ผ์ชฝ 1๋ฒˆ์งธ ๋ฌธ์ž๊นŒ์ง€ ๋ฐ˜ํ™˜ LEFT("ABC", 1)
UPPER "abc"๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊ฟ” ๋ฐ˜ํ™˜ UPPER("abc")
LOWER "ABC"๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ” ๋ฐ˜ํ™˜ LOWER("ABC")
LENGTH "ABC"์˜ ๊ธ€์ž ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ LENGTH("ABC")
CONCAT "ABC" ๋ฌธ์ž์—ด๊ณผ "CDF" ๋ฌธ์ž์—ด์„ ํ•ฉ์ณ ๋ฐ˜ํ™˜ CONCAT("ABC", "DEF")
REPLACE "ABC"์˜ "A"๋ฅผ "Z"๋กœ ๋ฐ”๊ฟ” ๋ฐ˜ํ™˜ REPLACE("ABC", "A", "Z")

 

 

 

 

์ฃผ์š” ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ํ™œ์šฉ
ABS ์ˆซ์ž์˜ ์ ˆ๋Œ“๊ฐ’ ๋ฐ˜ํ™˜ ABS(์ˆซ์ž)
CEILING ์ˆซ์ž๋ฅผ ์ •์ˆ˜๋กœ ์˜ฌ๋ฆผํ•ด์„œ ๋ฐ˜ํ™˜ CEILING(์ˆซ์ž)
FLOOR ์ˆซ์ž๋ฅผ ์ •์ˆ˜๋กœ ๋‚ด๋ฆผํ•ด์„œ ๋ฐ˜ํ™˜ FLOOR(์ˆซ์ž)
ROUND ์ˆซ์ž๋ฅผ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฐ˜์˜ฌ๋ฆผ ํ•ด์„œ ๋ฐ˜ํ™˜ ROUND(์ˆซ์ž, ์ž๋ฆฟ์ˆ˜)
TRUNCATE ์ˆซ์ž๋ฅผ ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๋ฒ„๋ฆผ ํ•ด์„œ ๋ฐ˜ํ™˜ TRUNCATE(์ˆซ์ž, ์ž๋ฆฟ์ˆ˜)
POWER ์ˆซ์žA์˜ ์ˆซ์žB ์ œ๊ณฑ ๋ฐ˜ํ™˜ POWER(์ˆซ์žA, ์ˆซ์žB)
MOD ์ˆซ์žA๋ฅผ ์ˆซ์žB๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๋ฐ˜ํ™˜ MOD(์ˆซ์žA, ์ˆซ์žB)

 

 

 

 

์ฃผ์š” ๋‚ ์งœํ˜• ๋ฐ์ดํ„ฐ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์„ค๋ช… ํ™œ์šฉ
NOW ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜ NOW()
CURRENT_DATE ํ˜„์žฌ ๋‚ ์งœ ๋ฐ˜ํ™˜ CURRENT_DATE()
CURRENT_TIME ํ˜„์žฌ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜ CURRENT_TIME
YEAR ๋‚ ์งœ์˜ ์—ฐ๋„ ๋ฐ˜ํ™˜ YEAR(๋‚ ์งœ)
MONTH ๋‚ ์งœ์˜ ์›” ๋ฐ˜ํ™˜ MONTH(๋‚ ์งœ)
MONTHNAME ๋‚ ์งœ์˜ ์›”์„ ์˜์–ด๋กœ ๋ฐ˜ํ™˜ MONTHNAME(๋‚ ์งœ)
DAYNAME ๋‚ ์งœ์˜ ์š”์ผ์„ ์˜์–ด๋กœ ๋ฐ˜ํ™˜ DAYNAME(๋‚ ์งœ)
DAYOFMONTH ๋‚ ์งœ์˜ ์ผ ๋ฐ˜ํ™˜ DAYOFMONTH(๋‚ ์งœ)
DAYOFWEEK ๋‚ ์งœ์˜ ์š”์ผ์„ ์ˆซ์ž๋กœ ๋ฐ˜ํ™˜ DAYOFWEEK(๋‚ ์งœ)
WEEK ๋‚ ์งœ๊ฐ€ ํ•ด๋‹น ์—ฐ๋„์— ๋ช‡ ๋ฒˆ์งธ ์ฃผ์ธ์ง€ ๋ฐ˜ํ™˜ WEEK(๋‚ ์งœ)
HOUR ์‹œ๊ฐ„์˜ ์‹œ ๋ฐ˜ํ™˜ HOUR(์‹œ๊ฐ„)
MINUTE ์‹œ๊ฐ„์˜ ๋ถ„ ๋ฐ˜ํ™˜ MINUTE(์‹œ๊ฐ„)
SECOND ์‹œ๊ฐ„์˜ ์ดˆ ๋ฐ˜ํ™˜ SECOND(์‹œ๊ฐ„)
DATEFORMAT ๋‚ ์งœ/ ์‹œ๊ฐ„์˜ ํ˜•์‹์„ ํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟ”  ๋ฐ˜ํ™˜ DATEFORMAT(๋‚ ์งœ/์‹œ๊ฐ„, ํ˜•์‹)
DATEDIFF ๋‚ ์งœ1๊ณผ ๋‚ ์งœ2์˜ ์ฐจ์ด ๋ฐ˜ํ™˜(๋‚ ์งœ1- ๋‚ ์งœ2) DATEDIFF(๋‚ ์งœ1- ๋‚ ์งœ2)
TIMEDIFF ์‹œ๊ฐ„1๊ณผ ์‹œ๊ฐ„2์˜ ์ฐจ์ด ๋ฐ˜ํ™˜(์‹œ๊ฐ„1- ์‹œ๊ฐ„2) TIMEDIFF(์‹œ๊ฐ„1- ์‹œ๊ฐ„2)

 

 

 

 

์กฐ๊ฑด ๋งŒ๋“ค๊ธฐ

์กฐ๊ฑด ๋งŒ๋“ค๊ธฐ IF (์กฐ๊ฑด์‹, ์ฐธ์ผ ๋•Œ ๊ฐ’, ๊ฑฐ์ง“์ผ ๋•Œ ๊ฐ’)
์—ฌ๋Ÿฌ ์กฐ๊ฑด ํ•œ๋ฒˆ์— ๋งŒ๋“ค๊ธฐ CASE [์ปฌ๋Ÿผ ์ด๋ฆ„]
   WHEN ์กฐ๊ฑด๊ฐ’1 THEN ๊ฒฐ๊ณผ๊ฐ’1
   WHEN ์กฐ๊ฑด๊ฐ’2 THEN ๊ฒฐ๊ณผ๊ฐ’2
   ELSE ๊ฒฐ๊ณผ๊ฐ’3
END

 

 

 

 

ํ…Œ์ด๋ธ” ํ•ฉ์น˜๊ธฐ

 ํ‘œํ˜„ ์„ค๋ช… ํ™œ์šฉ
INNER JOIN ๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘์— ์žˆ๋Š” ๊ฐ’๋งŒ ํ•ฉ์น˜๊ธฐ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
INNER JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„]
ON [ํ…Œ์ด๋ธ” A ์ด๋ฆ„].[์ปฌ๋Ÿผ A ์ด๋ฆ„]=[ํ…Œ์ด๋ธ” B ์ด๋ฆ„].[์ปฌ๋Ÿผ B ์ด๋ฆ„]
LEFT JOIN ์™ผ์ชฝ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฐ’๋งŒ ํ•ฉ์น˜๊ธฐ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
LEFT JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„]
ON [ํ…Œ์ด๋ธ” A ์ด๋ฆ„].[์ปฌ๋Ÿผ A ์ด๋ฆ„]=[ํ…Œ์ด๋ธ” B ์ด๋ฆ„].[์ปฌ๋Ÿผ B ์ด๋ฆ„]

RIGHT JOIN ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฐ’๋งŒ ํ•ฉ์น˜๊ธฐ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
RIGHT JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„]
ON [ํ…Œ์ด๋ธ” A ์ด๋ฆ„].[์ปฌ๋Ÿผ A ์ด๋ฆ„]=[ํ…Œ์ด๋ธ” B ์ด๋ฆ„].[์ปฌ๋Ÿผ B ์ด๋ฆ„]
OUTER JOIN ๋‘ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’ ํ•ฉ์น˜๊ธฐ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
LEFT JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„]
ON [ํ…Œ์ด๋ธ” A ์ด๋ฆ„].[์ปฌ๋Ÿผ A ์ด๋ฆ„]=[ํ…Œ์ด๋ธ” B ์ด๋ฆ„].[์ปฌ๋Ÿผ B ์ด๋ฆ„]
UNION
SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
RIGHT JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„]
ON [ํ…Œ์ด๋ธ” A ์ด๋ฆ„].[์ปฌ๋Ÿผ A ์ด๋ฆ„]=[ํ…Œ์ด๋ธ” B ์ด๋ฆ„].[์ปฌ๋Ÿผ B ์ด๋ฆ„]
CROSS JOIN ๋‘ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์„ ๊ฐ๊ฐ ํ•ฉ์น˜๊ธฐ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
CROSS JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„];
SELF JOIN ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฐ’ ํ•ฉ์น˜๊ธฐ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„] AS t1
INNER JOIN [ํ…Œ์ด๋ธ” A ์ด๋ฆ„] AS t2
ON t1.[์ปฌ๋Ÿผ A ์ด๋ฆ„] = t2.[์ปฌ๋Ÿผ A ์ด๋ฆ„];

 

 

 

 

์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ํ•œ ๋ฒˆ์— ๋‹ค๋ฃจ๊ธฐ

ํ‘œํ˜„ ํ™œ์šฉ
ํ•ฉ์ง‘ํ•ฉ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„] FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
UNION
SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„] FROM [ํ…Œ์ด๋ธ” B ์ด๋ฆ„];
์ค‘๋ณต ํฌํ•จ ํ•ฉ์ง‘ํ•ฉ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„] FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„]
UNION ALL
SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„] FROM [ํ…Œ์ด๋ธ” B ์ด๋ฆ„];
๊ต์ง‘ํ•ฉ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” A ์ด๋ฆ„] AS A
INNER JOIN [ํ…Œ์ด๋ธ” B ์ด๋ฆ„] AS B
ON A.[์ปฌ๋Ÿผ1 ์ด๋ฆ„] = B.[์ปฌ๋Ÿผ1 ์ด๋ฆ„] AND ... AND A.[์ปฌ๋Ÿผn ์ด๋ฆ„] = B.[์ปฌ๋Ÿผn ์ด๋ฆ„];
์ฐจ์ง‘ํ•ฉ SELECT [์ปฌ๋Ÿผ ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ”A ์ด๋ฆ„] AS A
LEFT JOIN [ํ…Œ์ด๋ธ” B] AS B
ON A.[์ปฌ๋Ÿผ1 ์ด๋ฆ„] = B.[์ปฌ๋Ÿผ1 ์ด๋ฆ„] AND ... AND A.[์ปฌ๋Ÿผn ์ด๋ฆ„] = B.[์ปฌ๋Ÿผn ์ด๋ฆ„]
WHERE B.[์ปฌ๋Ÿผ ์ด๋ฆ„] IS NULL;

 

 

 

 

 

ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ ์ฟผ๋ฆฌ

SET GLOVAL log_bin_trust_function_creators=1; #์‚ฌ์šฉ์ž ๊ณ„์ •์— function create ๊ถŒํ•œ ์ƒ์„ฑ

DELIMITER // # ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ์ง€์ •

CREATE FUNCTION [ํ•จ์ˆ˜ ์ด๋ฆ„] ([์ž…๋ ฅ๊ฐ’ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…], ...)
RETURNS [๊ฒฐ๊ณผ๊ฐ’ ๋ฐ์ดํ„ฐ ํƒ€์ž…]
BEGIN
DECLARE [์ž„์‹œ๊ฐ’ ์ด๋ฆ„] [๋ฐ์ดํ„ฐ ํƒ€์ž…];
SET [์ž„์‹œ๊ฐ’ ์ด๋ฆ„] = [์ž…๋ ฅ๊ฐ’ ์ด๋ฆ„];
์ฟผ๋ฆฌ;
RETURN ๊ฒฐ๊ณผ๊ฐ’
END

//
DELIMITER; #ํ•จ์ˆ˜์˜ ๋ ์ง€์ •
๋”๋ณด๊ธฐ
TOOLS/SQL