CodeGym/Java Course/All lectures for KO purposes/ํ•˜์œ„ ์ฟผ๋ฆฌ

ํ•˜์œ„ ์ฟผ๋ฆฌ

์‚ฌ์šฉ ๊ฐ€๋Šฅ

SQL์˜ ์ค‘์ฒฉ ์ฟผ๋ฆฌ

SQL ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ ๋‚ด์— ์ค‘์ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ํฌ๊ฒŒ ๋–จ์–ด์ง€๋”๋ผ๋„ ํฌ๊ณ  ๋ณต์žกํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋งค์šฐ ํฐ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ด ๋‹ฌ๋ผ์ง„๋‹ค. ์ด ์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•˜์œ„ ์ฟผ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋‹จ์ผ ๊ฐ’ (ํ•˜๋‚˜์˜ ์—ด๊ณผ ํ•˜๋‚˜์˜ ํ–‰)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์œ„ ์ฟผ๋ฆฌ๋Š” ๊ฐ’ ๋ชฉ๋ก (ํ•˜๋‚˜์˜ ์—ด์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•˜์œ„ ์ฟผ๋ฆฌ๋Š” ํ…Œ์ด๋ธ” (๋งŽ์€ ์—ด, ์—ฌ๋Ÿฌ ํ–‰)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šค์นผ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋œ ํ•˜์œ„ ์ฟผ๋ฆฌ

๊ธ‰์—ฌ๊ฐ€ ํšŒ์‚ฌ ํ‰๊ท ๋ณด๋‹ค ๋†’์€ ์ง์› ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ์ง์› ๋ชฉ๋ก์„ ์ฐพ์•„๋ด…์‹œ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฏธ๋ฆฌ ์•Œ๋ฉด ์ง์›์˜ ๊ธ‰์—ฌ๋ฅผ ํ‰๊ท ๊ณผ ๋น„๊ตํ•˜์—ฌ ์ง์›์„ ์‰ฝ๊ฒŒ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ํšŒ์‚ฌ ์ง์›์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ด๋ฏธ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์–ตํ•ฉ์‹œ๋‹ค:

SELECT AVG(salary) FROM employee 

๊ทธ๋Ÿฐ ๋‹ค์Œ MySQL์€ 76833.3333 ๊ฐ’์„ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค .

๊ธ‰์—ฌ๊ฐ€ ํ‰๊ท  ์ด์ƒ์ธ ๋ชจ๋“  ์ง์›์˜ ๋ชฉ๋ก์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋˜ํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 SELECT * FROM employee 
   WHERE salary > 76833.3333 

์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ID ์ด๋ฆ„ ์ง์—… ์ƒ๋Ÿฌ๋ฆฌ
1 ์ด๋ฐ”๋…ธํ”„ ์ด๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘์ž 100000
2 ํŽ˜ํŠธ๋กœํ”„ ํŽ˜ํŠธ๋ฅด ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘์ž 80000
4 ๋ผ๋น„๋…ธ๋น„์น˜ ๋ชจ์ด์ƒค ๊ฐ๋… 200000

์ด์ œ ๊ฐ’ 76833 ๋Œ€์‹  ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์„ ๋Œ€์ฒดํ•˜์—ฌ ๋‘ ์š”์ฒญ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

   SELECT * FROM employee 
   WHERE salary > (SELECT AVG(salary) FROM employee) 

์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

ID ์ด๋ฆ„ ์ง์—… ์ƒ๋Ÿฌ๋ฆฌ
1 ์ด๋ฐ”๋…ธํ”„ ์ด๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘์ž 100000
2 ํŽ˜ํŠธ๋กœํ”„ ํŽ˜ํŠธ๋ฅด ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘์ž 80000
4 ๋ผ๋น„๋…ธ๋น„์น˜ ๋ชจ์ด์ƒค ๊ฐ๋… 200000

๊ฐ’ ๋ชฉ๋ก์ด ํฌํ•จ๋œ ํ•˜์œ„ ์ฟผ๋ฆฌ

ํ•œ ํ…Œ์ด๋ธ”์—์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ์ž‘์—…์„ ํ•œ ๋ฒˆ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ?

์ด๋Ÿฐ ์‚ฌ์ง„๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐฉ๊ฐํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž‘์—… ํ…Œ์ด๋ธ”์— ์ž‘์—…์ด ์—†๋Š” ์ง์› ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ง์› ๋ชฉ๋ก ํ‘œ์‹œ .

๋‘ ๋‹จ๊ณ„๋กœ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•„๋ด…์‹œ๋‹ค.

๋จผ์ € ์ž‘์—… ํ…Œ์ด๋ธ”์— ์ž‘์—…์ด ์žˆ๋Š” ๋ชจ๋“  ์ง์›์˜ ID๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”.

  • ์ค‘๋ณต ์ œ๊ฑฐ - DISTINCT ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • ๊ฒฐ๊ณผ์—์„œ NULL ๊ฐ’์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
SELECT DISTINCT employee_id FROM task 
   WHERE employee_id IS NOT NULL

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์•„๋ฆ„๋‹ค์šด ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

employee_id
1
2
5
4
6

ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ผ์‹œ์ ์œผ๋กœ 1,2,5,4,6์˜ ์ˆœ์„œ๋กœ ์ ์–ด๋‘ก๋‹ˆ๋‹ค. ์ด์ œ ์ฒซ ๋ฒˆ์งธ ๋ชฉ๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์€ ID๋ฅผ ๊ฐ€์ง„ ์ง์› ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ง์› ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT * FROM employee  
WHERE id NOT IN (1,2,5,4,6)

๊ทธ๋ฆฌ๊ณ  ์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ID ์ด๋ฆ„ ์ง์—… ์ƒ๋Ÿฌ๋ฆฌ ๋‚˜์ด ๊ฐ€์ž… ๋‚ ์งœ
์‚ผ ์ด๋ฐ”๋…ธํ”„ ์„ธ๋ฅด๊ฒŒ์ด ์‹œํ—˜ ์žฅ์น˜ 40000 ์„œ๋ฅธ 2014-01-01

์ด์ œ ์•ž์˜ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด id ๋ชฉ๋ก ๋Œ€์‹  ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์˜ ๋ณธ๋ฌธ์„ ๊ฐ„๋‹จํžˆ ๋Œ€์ฒดํ•˜์—ฌ ๋‘ ์š”์ฒญ์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 SELECT * FROM employee 
   WHERE id NOT IN ( 
      	SELECT DISTINCT employee_id FROM task 
      	WHERE employee_id IS NOT NULL 
   )
์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค