Search

์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ (Sub Query)

SQL๋ฌธ ๋‚ด๋ถ€์— ์‚ฌ์šฉํ•˜๋Š” SELECT ๋ฌธ
๋ฉ”์ธ์ฟผ๋ฆฌ : ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ข…์ ์ธ SELECT ๋ฌธ

์„œ๋ธŒ์ฟผ๋ฆฌ ๋ถ„๋ฅ˜

โ€ข
์‹คํ–‰ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
โ—ฆ
๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ—ฆ
๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ–ช
๋‹ค์ค‘ ํ–‰ ์—ฐ์‚ฐ์ž : IN, ANY, ALL, EXISTS
โ€ข
์‚ฌ์šฉ ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜
โ—ฆ
์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ—ฆ
์ธ๋ผ์ธ ๋ทฐ
โ—ฆ
์„œ๋ธŒ ์ฟผ๋ฆฌ

์‹คํ–‰ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

โ€ข
๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ : ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜์ธ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ€ข
๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ : ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ํ–‰์ธ ์„œ๋ธŒ์ฟผ๋ฆฌ
์—ฐ์‚ฐ
์„ค๋ช…
IN
ํ•ด๋‹น ์ปฌ๋Ÿผ๊ณผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์ด ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ
ANY
A ๋น„๊ต์—ฐ์‚ฐ ANY B: ๋น„๊ตํ•œ ๊ฒฐ๊ณผ ์ค‘, ํ•˜๋‚˜ ๋งŒ์ด๋ผ๋„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” A๋ฅผ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ
ALL
A ๋น„๊ต์—ฐ์‚ฐ ALL B: ๋น„๊ตํ•œ ๊ฒฐ๊ณผ ์ค‘, ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” A๋ฅผ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ
EXISTS
์„œ๋ธŒ์ฟผ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒํ•˜๋Š” ์—ฐ์‚ฐ

์‚ฌ์šฉ ์œ„์น˜์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

โ€ข
์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ : SELECT ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ
โ€ข
์ธ๋ผ์ธ ๋ทฐ : FROM ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ
โ€ข
์„œ๋ธŒ ์ฟผ๋ฆฌ : WHERE ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ ์˜ˆ์‹œ์ฝ”๋“œ

โ€ข
๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ€ข
๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ—ฆ
IN
โ—ฆ
ANY
โ—ฆ
ALL
โ—ฆ
EXISTS
โ€ข
์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ
โ€ข
์ธ๋ผ์ธ ๋ทฐ
โ€ข
์„œ๋ธŒ์ฟผ๋ฆฌ

๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

์ง์› ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์ง์›์˜ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ๋ถ€์„œ ID๋ฅผ ์กฐํšŒํ•˜๊ณ , ๊ทธ ๋ถ€์„œ์˜ ์ด๋ฆ„์„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹ญ์‹œ์˜ค.
SELECT e.first_name, e.department_id, (SELECT department_name FROM departments d WHERE d.department_id = e.department_id) AS department_name FROM employees e WHERE e.salary = (SELECT MAX(salary) FROM employees);
SQL
๋ณต์‚ฌ
์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋จผ์ € ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์ง์›์˜ ๊ธ‰์—ฌ๋ฅผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ธ‰์—ฌ์™€ ์ผ์น˜ํ•˜๋Š” ์ง์›์˜ ์ด๋ฆ„๊ณผ ๋ถ€์„œ ID๋ฅผ ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์„ ํƒํ•˜๊ณ , ๋ถ€์„œ ํ…Œ์ด๋ธ”์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋ถ€์„œ์˜ ์ด๋ฆ„์„ ์ฐพ์•„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ

IN

3000๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์ง์›์ด ์†ํ•œ ๋ถ€์„œ์˜ ๋ถ€์„œ ID์™€ ๋ถ€์„œ ์ด๋ฆ„์„ ์กฐํšŒํ•˜๋˜, ๋ถ€์„œ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์‹ญ์‹œ์˜ค.
SELECT department_id, department_name FROM departments d WHERE d.department_id IN (SELECT e.department_id FROM employees e WHERE e.salary > 3000) ORDER BY d.department_name;
SQL
๋ณต์‚ฌ
1.
departments ํ…Œ์ด๋ธ”์—์„œ department_id์™€ department_name ์—ด์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
2.
์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์› ํ…Œ์ด๋ธ”(employees)์—์„œ ๊ธ‰์—ฌ๊ฐ€ 3000๋ณด๋‹ค ๋†’์€ ์ง์›์˜ ๋ถ€์„œ ID๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
3.
๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” ๋ถ€์„œ ํ…Œ์ด๋ธ”์—์„œ ์„ ํƒ๋œ ๋ถ€์„œ ID๋ฅผ ๊ฐ€์ง„ ๋ถ€์„œ๋งŒ์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
4.
๋งˆ์ง€๋ง‰์œผ๋กœ ๋ถ€์„œ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

ANY

EMPLOYEE ํ…Œ์ด๋ธ”์˜ DEPT_CODE ๊ฐ€ 'D9' ์ธ ๋ถ€์„œ์˜ ์ตœ์ €๊ธ‰์—ฌ ๋ณด๋‹ค ๋” ํฐ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›์„ ์กฐํšŒํ•˜์‹œ์˜ค.
SELECT e.emp_id ์‚ฌ์›๋ฒˆํ˜ธ ,e.emp_name ์ง์›๋ช… ,d.dept_id ๋ถ€์„œ๋ฒˆํ˜ธ ,d.dept_title ๋ถ€์„œ๋ช… ,TO_CHAR(e.salary, '999,999,999') ๊ธ‰์—ฌ FROM employee e ,department d WHERE e.dept_code = d.dept_id AND e.salary > ANY ( SELECT salary FROM employee WHERE dept_code = 'D9' )
SQL
๋ณต์‚ฌ
1.
employee ํ…Œ์ด๋ธ”(e)๊ณผ department ํ…Œ์ด๋ธ”(d)์„ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ง์›์˜ ๋ถ€์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
2.
์ง์›์˜ ์‚ฌ์›๋ฒˆํ˜ธ(emp_id), ์ง์›๋ช…(emp_name), ๋ถ€์„œ๋ฒˆํ˜ธ(dept_id), ๋ถ€์„œ๋ช…(dept_title), ๊ทธ๋ฆฌ๊ณ  ๊ธ‰์—ฌ(salary)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
3.
WHERE ์ ˆ์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:
โ€ข
e ํ…Œ์ด๋ธ”๊ณผ d ํ…Œ์ด๋ธ”์˜ dept_code์™€ dept_id๊ฐ€ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
e ํ…Œ์ด๋ธ”์˜ ๊ธ‰์—ฌ๊ฐ€ 'D9' ๋ถ€์„œ์˜ ์–ด๋–ค ์ง์›์˜ ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
4.
TO_CHAR ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ‰์—ฌ๋ฅผ ํŠน์ • ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, '999,999,999' ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธˆ์•ก์„ 3์ž๋ฆฌ๋งˆ๋‹ค ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” 'D9' ๋ถ€์„œ์˜ ์–ด๋–ค ์ง์›์˜ ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ๋ชจ๋“  ์ง์›์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

ALL

EMPLOYEE ํ…Œ์ด๋ธ”์˜ DEPT_CODE ๊ฐ€ 'D1' ์ธ ๋ถ€์„œ์˜ ์ตœ๋Œ€๊ธ‰์—ฌ ๋ณด๋‹ค ๋” ํฐ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›์„ ์กฐํšŒํ•˜์‹œ์˜ค.
SELECT e.emp_id ์‚ฌ์›๋ฒˆํ˜ธ ,e.emp_name ์ง์›๋ช… ,d.dept_id ๋ถ€์„œ๋ฒˆํ˜ธ ,d.dept_title ๋ถ€์„œ๋ช… ,TO_CHAR(e.salary, '999,999,999') ๊ธ‰์—ฌ FROM employee e, department d WHERE e.dept_code = d.dept_id AND e.salary > ALL ( SELECT salary FROM employee WHERE dept_code = 'D1' ) ;
SQL
๋ณต์‚ฌ
1.
employee ํ…Œ์ด๋ธ”(e)๊ณผ department ํ…Œ์ด๋ธ”(d)์„ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ง์›์˜ ๋ถ€์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
2.
์ง์›์˜ ์‚ฌ์›๋ฒˆํ˜ธ(emp_id), ์ง์›๋ช…(emp_name), ๋ถ€์„œ๋ฒˆํ˜ธ(dept_id), ๋ถ€์„œ๋ช…(dept_title), ๊ทธ๋ฆฌ๊ณ  ๊ธ‰์—ฌ(salary)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
3.
WHERE ์ ˆ์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:
โ€ข
e ํ…Œ์ด๋ธ”๊ณผ d ํ…Œ์ด๋ธ”์˜ dept_code์™€ dept_id๊ฐ€ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
e ํ…Œ์ด๋ธ”์˜ ๊ธ‰์—ฌ๊ฐ€ 'D1' ๋ถ€์„œ์˜ ๋ชจ๋“  ์ง์›์˜ ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
4.
TO_CHAR ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ‰์—ฌ๋ฅผ ํŠน์ • ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, '999,999,999' ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธˆ์•ก์„ 3์ž๋ฆฌ๋งˆ๋‹ค ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” 'D1' ๋ถ€์„œ์˜ ๋ชจ๋“  ์ง์›์˜ ๊ธ‰์—ฌ๋ณด๋‹ค ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ๋ชจ๋“  ์ง์›์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

EXISTS

๊ธ‰์—ฌ๊ฐ€ 3000๋ณด๋‹ค ๋†’์€ ์ง์›์ด ์†ํ•œ ๋ถ€์„œ์˜ ๋ถ€์„œ ID์™€ ๋ถ€์„œ ์ด๋ฆ„์„ ์กฐํšŒํ•˜์‹ญ์‹œ์˜ค. ๋‹จ, ๋ถ€์„œ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์‹ญ์‹œ์˜ค. EXISTS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€์„œ ํ…Œ์ด๋ธ”๊ณผ ์ง์› ํ…Œ์ด๋ธ”์˜ ๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.
SELECT department_id, department_name FROM departments d WHERE EXISTS(SELECT * FROM employees e WHERE e.department_id = d.department_id AND e.salary > 3000 ) ORDER BY d.department_name;
SQL
๋ณต์‚ฌ
1.
๋ถ€์„œ ํ…Œ์ด๋ธ”(departments)์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
2.
EXISTS ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ถ€์„œ์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:
โ€ข
์ง์› ํ…Œ์ด๋ธ”(employees)์—์„œ ํ•ด๋‹น ๋ถ€์„œ์˜ ์ง์›์ด ๊ธ‰์—ฌ๊ฐ€ 3000๋ณด๋‹ค ๋†’์€์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
3.
๋งŒ์•ฝ ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ(์ฆ‰, ์ ์–ด๋„ ํ•œ ๋ช…์˜ ์ง์›์ด ๊ธ‰์—ฌ๊ฐ€ 3000๋ณด๋‹ค ๋†’์€ ๊ฒฝ์šฐ)์ด๋ฉด, ํ•ด๋‹น ๋ถ€์„œ๋ฅผ ๊ฒฐ๊ณผ์— ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
4.
WHERE ์ ˆ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ๋ถ€์„œ์˜ ๋ถ€์„œ ID์™€ ๋ถ€์„œ ์ด๋ฆ„์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
5.
๋งˆ์ง€๋ง‰์œผ๋กœ ๋ถ€์„œ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
์ด ์ฟผ๋ฆฌ๋Š” ๊ฐ ๋ถ€์„œ์— ๋Œ€ํ•ด ๊ธ‰์—ฌ๊ฐ€ 3000๋ณด๋‹ค ๋†’์€ ์ง์›์ด ์ ์–ด๋„ ํ•œ ๋ช… ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ถ€์„œ์˜ ๋ถ€์„œ ID์™€ ๋ถ€์„œ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ

์ง์› ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ์กฐํšŒ
SELECT employee_name, salary, (SELECT MAX(salary) FROM employees) AS max_salary FROM employees;
SQL
๋ณต์‚ฌ
์ด ์˜ˆ์‹œ์—์„œ๋Š” ์Šค์นผ๋ผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์› ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๊ฐ ์ง์›์˜ ํ–‰์— ํฌํ•จ์‹œ์ผœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ธ๋ผ์ธ ๋ทฐ

์ธ๋ผ์ธ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ‰์—ฌ๊ฐ€ 3000 ์ด์ƒ์ธ ์‚ฌ์›์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋˜, ๋ถ€์„œ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜์—ฌ ๋ถ€์„œ์˜ ๋ถ€์„œ๋ช…์„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹œ์˜ค.
SELECT e.employee_id, e.employee_name, d.department_name FROM ( SELECT * FROM employees WHERE salary > 3000 ) e JOIN departments d ON e.department_id = d.department_id;
SQL
๋ณต์‚ฌ
1.
๋‚ด๋ถ€์—์„œ๋Š” ๊ธ‰์—ฌ๊ฐ€ 3000 ์ด์ƒ์ธ ๋ชจ๋“  ์‚ฌ์›์„ ์„ ํƒํ•˜๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
2.
์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” e๋ผ๋Š” ๋ณ„์นญ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
3.
๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” ์„ ํƒ๋œ ์‚ฌ์›๋“ค(e)๊ณผ ๋ถ€์„œ ํ…Œ์ด๋ธ”(departments)์„ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค.
4.
์ด๋•Œ, ์‚ฌ์› ํ…Œ์ด๋ธ”(e)์˜ ๋ถ€์„œ ID์™€ ๋ถ€์„œ ํ…Œ์ด๋ธ”(d)์˜ ๋ถ€์„œ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค.
5.
์กฐ์ธ ๊ฒฐ๊ณผ๋กœ๋Š” ์‚ฌ์›์˜ ์‚ฌ์› ๋ฒˆํ˜ธ(employee_id), ์‚ฌ์›๋ช…(employee_name), ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ถ€์„œ์˜ ๋ถ€์„œ๋ช…(department_name)์ด ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ

์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๊ฐ€์ง„ ์‚ฌ์›๋“ค์˜ ๋ถ€์„œ ID์™€ ์ตœ๋Œ€ ๊ธ‰์—ฌ๋ฅผ ์กฐํšŒํ•˜์‹œ์˜ค.
SELECT e.employee_id, e.employee_name, e.salary, e.department_id FROM employees e WHERE (e.department_id, e.salary) IN ( SELECT department_id, MAX(salary) FROM employees GROUP BY department_id );
SQL
๋ณต์‚ฌ
1.
๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” ์ง์› ํ…Œ์ด๋ธ”(employees)์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
2.
WHERE ์ ˆ์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:
โ€ข
์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ง์› ํ…Œ์ด๋ธ”์„ ๋ถ€์„œ๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๊ฐ ๊ทธ๋ฃน์—์„œ ์ตœ๋Œ€ ๊ธ‰์—ฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
โ€ข
๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ๋Š” ๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์ง์›๋“ค์˜ ๋ถ€์„œ ID์™€ ๊ธ‰์—ฌ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ด๋ฅผ ์œ„ํ•ด ๋ฉ”์ธ ์ฟผ๋ฆฌ์˜ ์ง์› ํ…Œ์ด๋ธ”์—์„œ (๋ถ€์„œ ID, ๊ธ‰์—ฌ) ์Œ์ด ์„œ๋ธŒ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์™€ ์ผ์น˜ํ•˜๋Š” ํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
3.
์„ ํƒ๋œ ํ–‰์—๋Š” ์‚ฌ์› ๋ฒˆํ˜ธ(employee_id), ์‚ฌ์›๋ช…(employee_name), ๊ธ‰์—ฌ(salary), ๊ทธ๋ฆฌ๊ณ  ๋ถ€์„œ ID(department_id)๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋กœ๋Š” ๊ฐ ๋ถ€์„œ๋ณ„๋กœ ๊ฐ€์žฅ ๋†’์€ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์ง์›๋“ค์˜ ์ •๋ณด๋งŒ์ด ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.