Notice
Recent Posts
Recent Comments
Link
Today
Total
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๊ฐ์ž์˜ Data Lab ๐Ÿ“Š

[๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ถ„์„ ๋ถ€ํŠธ์บ ํ”„ 5๊ธฐ] SQL ์กฐ์ธ, ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณธ๋ฌธ

๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ เป’(โŠ™แด—โŠ™)เฅญโœŽ

[๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ถ„์„ ๋ถ€ํŠธ์บ ํ”„ 5๊ธฐ] SQL ์กฐ์ธ, ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ์ž์Šˆ๋‹ˆ 2025. 5. 2. 17:49

0. ํ•™์Šต ๋ชฉํ‘œ

์กฐ์ธ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ , 
์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ˜ผ์ž์„œ ์™„์„ฑํ•ด๋ณด๋Š” ๊ฒƒ์ด ์˜ค๋Š˜ ๋ณต์Šต์˜ ๋ชฉํ‘œ์ด๋‹ค.


1. ์กฐ์ธ JOIN

sql ๋ณต์Šตํ•˜๊ธฐ 1ํŽธ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.
๊ทผ๋ฐ ๋งŒ์•ฝ ๋‘ ๊ฐœ ์ด์‚ฌ์˜ ํ…Œ์ด๋ธ”์—์„œ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๋ฐ”๋กœ ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค !
but!! ์กฐ๊ฑด์€ ๋‘ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ์ด ์กด์žฌํ•ด์•ผํ•œ๋‹ค.

 

 

Company DB ERD๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์™”๋‹ค.
employees์™€ dept_manager ํ…Œ์ด๋ธ”์„ ๋ณด๋ฉด "emp_no" ๋ผ๋Š” ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ์ด ์กด์žฌํ•œ๋‹ค.
๊ทธ๋Ÿผ employees ์™€ dept_manager ํ…Œ์ด๋ธ”์€ emp_no ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ์ œ1) ๊ฐ ์‚ฌ์›๋“ค์˜ ์‚ฌ์›๋ฒˆํ˜ธ, ๊ทผ๋ฌด ๋ถ€์„œ ๋ฒˆํ˜ธ, ๊ทผ๋ฌด ๋ถ€์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค. ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„ ์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.

์ปฌ๋Ÿผ ์ด๋ฆ„ ์กด์žฌํ•˜๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„
์‚ฌ์›๋ฒˆํ˜ธ dept_emp
๊ทผ๋ฌด ๋ถ€์„œ๋ฒˆํ˜ธ dept_emp, departments
๊ทผ๋ฌด ๋ถ€์„œ ์ด๋ฆ„ departments 

๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ์€ ๊ทผ๋ฌด ๋ถ€์„œ๋ฒˆํ˜ธ dept_no ์ด๋‹ค. => dept_no ๊ธฐ์ค€์œผ๋กœ ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜์ž !

select a1.emp_no, a1.dept_no, a2.dept_no, a2.dept_name
from dept_emp a1
     join departments a2
     on a1.dept_no = a2.dept_no
where a1.to_date = '9999-01-01'
order by a1.emp_no;


select ๊ฐ€์ ธ์˜ฌ ์ปฌ๋Ÿผ ์ด๋ฆ„
from ์ปฌ๋Ÿผ์ด ์žˆ๋Š” ํ…Œ์ด๋ธ” 1
join
ํ…Œ์ด๋ธ” 2 on ๊ณตํ†ต์ปฌ๋Ÿผ1 = ๊ณตํ†ต์ปฌ๋Ÿผ2
where ์กฐ๊ฑด์ ˆ

๐Ÿ’ญ ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ from ํ…Œ์ด๋ธ” 1 ํ•˜๊ณ  ํ•œ ์ค„ ๋„์šฐ๊ณ  join์ ˆ์„ ์“ฐ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค.


Join ์ข…๋ฅ˜

INNER JOIN ๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘์— ์กด์žฌํ•˜๋Š” ๊ณตํ†ต๋œ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜
LEFT JOIN (๋˜๋Š” LEFT OUTER JOIN) ์™ผ์ชฝ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘ ๋ณด์—ฌ์ฃผ๊ณ , ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’๋งŒ ํ‘œ์‹œ
RIGHT JOIN (๋˜๋Š” RIGHT OUTER JOIN) ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘ ๋ณด์—ฌ์ฃผ๊ณ , ์™ผ์ชฝ ํ…Œ์ด๋ธ”์€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’๋งŒ ํ‘œ์‹œ
FULL OUTER JOIN ์–‘์ชฝ ํ…Œ์ด๋ธ” ๋ชจ๋‘์—์„œ ์ผ์น˜ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œ

 


 

์˜ˆ์ œ2) ๊ฐ ์‚ฌ์›๋“ค์˜ ์‚ฌ์›๋ฒˆํ˜ธ, first_name, ํ˜„์žฌ ๋ฐ›๊ณ  ์žˆ๋Š” ๊ธ‰์—ฌ์•ก, from_date, to_date์„ ๊ฐ€์ ธ์˜จ๋‹ค.

์ด๋•Œ, ์‚ฌ์›๋ฒˆํ˜ธ์™€ first_name์€ employees ํ…Œ์ด๋ธ”์—, ๋‚˜๋จธ์ง€๋Š” salaries ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— right join์ด ์ ์ ˆํ•˜๋‹ค.

select e.emp_no, e.first_name, s.salary, s.from_date, s.to_date
from employees as e 
right join salaries as s on e.emp_no = s.emp_no
where s.to_date = '9999-01-01';

 


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

: ์ฟผ๋ฆฌ ์•ˆ์— ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ (like ๋งˆํŠธ๋ฃŒ์‹œ์นด ๐Ÿช†)

์˜ˆ์ œ3) Development ๋ถ€์„œ์— ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์›๋“ค์˜ ์‚ฌ์›๋ฒˆํ˜ธ์™€ ๊ธ‰์—ฌ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

SELECT emp_no, salary
FROM salaries
WHERE emp_no IN (
    SELECT emp_no
    FROM dept_emp
    WHERE dept_no = (
        SELECT dept_no
        FROM departments
        WHERE dept_name = 'Development'
    )
);

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด where์ ˆ์— ์ฟผ๋ฆฌ๋ฌธ์ด ํ•˜๋‚˜ ๋” ์žˆ๋‹ค.
์ผ๋‹จ ๊ฐ€์ ธ์™€์•ผํ•˜๋Š” emp_no, salary๋Š” ๋ชจ๋‘ salaries ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—

select emp_no, salary
from salaries 
where emp_no = 'development ๋ถ€์„œ์— ๊ทผ๋ฌด์ค‘์ธ ์ง์›์˜ emp_no'

ํ˜„์žฌ ๊ทผ๋ฌดํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋‹ˆ๊นŒ to_date = '9999-01-01'์ด์–ด์•ผ ํ•˜๊ณ ,
๊ฐ€์ ธ์˜ฌ ์‚ฌ์›๋ฒˆํ˜ธ๊ฐ€ development ๋ถ€์„œ์— ๊ทผ๋ฌด์ค‘์ธ ์ง์›๋“ค์˜ ์‚ฌ์›๋ฒˆํ˜ธ์ด์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿผ development ๋ถ€์„œ์— ๊ทผ๋ฌด์ค‘์ธ ์ง์›๋“ค์˜ ์‚ฌ์›๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฟผ๋ฆฌ๋ฅผ ์งœ๋ณด์ž.

select emp_no
from dept_emp
where dept_no = 'development์˜ ๋ถ€์„œ๋ฒˆํ˜ธ'

๐Ÿคจ

์–ด๋ผ๋ผ? ๋‚˜๋Š” development์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๋งŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋์ธ๋ฐ ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฅธ๋‹ค....
๊ทธ๋Ÿผ department ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•ด์„œ ํ•ด๋‹น ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ ๋ญ”์ง€ ๋“ค๊ณ ์™€์•ผ ํ•˜๋Š”๋ฐ.

์˜ค์ผ€์ด ๋ถ€์„œ์ด๋ฆ„์ด development์ธ dept_no๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฟผ๋ฆฌ๋ฅผ ์งœ๋ณด์ž.

select dept_no
from department
where dept_name = 'Development'

์ด์ œ ๋‹ค ์™„์„ฑ์ด ๋˜์—ˆ๋‹ค. ์กฐ๊ฑด ์•ˆ์— ์กฐ๊ฑด ์•ˆ์— ์กฐ๊ฑด์ด ์žˆ๋Š” ๋А๋‚Œ์ด๋‹ค.
์œ„ ์ฟผ๋ฆฌ๋“ค์„ ๋‹ค ํ•ฉ์ณ๋ณด๋ฉด ?

์ฒ˜์Œ์˜ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ฐ™์•„์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค !!

์ฒ˜์Œ์—๋Š” ์ฝ”๋“œ๊ฐ€ ๋ง‰ ์—‰์ผœ์žˆ๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๋”๋ผ๋„. ํ•˜๋‚˜์”ฉ ํ’€์–ด์„œ ๋ณด๋ฉด ์ „ํ˜€ ์–ด๋ ต์ง€ ์•Š๋‹ค.


๐Ÿ’ญ ๋А๋‚€ ์ 

์„œ๋ธŒ์ฟผ๋ฆฌ ํ•˜๋Š” ๋‚  ํ•˜ํ•„ ์ž๊ฒฉ์ฆ ์‹œํ—˜์„ ์ณ์„œ ๋ชป๋“ค์€๊ฒŒ ์•„์‰ฝ๋‹ค.
๋‹ค๋ฅธ๊ฑฐ ๋‹ค ์•Œ์•„๋„ ๋ฐ๋ฒ  ์ˆ˜์—… ๋“ค์„ ๋•Œ๋„ ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ ์ œ์ผ ์–ด๋ ค์›Œ์„œ
์ด๋ฒˆ ๊ธฐํšŒ์— ๋‹ค์‹œ ๋“ฃ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ,,

๊ทธ๋ž˜๋„ ํ˜ผ์ž์„œ ์ฝ”๋“œ ํ’€์–ด์„œ ํ™•์ธํ•˜๋‹ˆ๊นŒ ์ดํ•ด๊ฐ€ ์•„์ฃผ ์ž˜๋œ๋‹ค.
๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ๋‚˜๋ฉด University DB๋กœ ํ˜ผ์ž ์—ฐ์Šตํ•ด๋ด์•ผ๊ฒ ๋‹ค !

 

์ถœ์ฒ˜ : ๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ