LEFT, RIGHT JOIN

์šฐ์„  ์‹œ์ž‘์ „์— Program๊ณผ Teacher ์˜ Foreign Key๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Foreign Key ์‚ญ์ œ๋Š”

์‚ญ์ œ ํ›„ ์ €์žฅ์„ ๊ผญ ํ•ด์ฃผ์…”์•ผ ๋ฉ๋‹ˆ๋‹ค.

Teacher ํ…Œ์ด๋ธ”๊ณผ Program ํ…Œ์ด๋ธ”์— ์ด์ƒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ง‘์–ด๋„ฃ๊ณ  ์‹œ์ž‘์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์™ผ์ชฝ ํ…Œ์ด๋ธ” ์ „์ฒด + ๊ณตํ†ต๋œ ํ–‰ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด LEFT JOIN

INNER JOIN ๊ฒฐ๊ณผ + ์™ผ์ชฝ ํ…Œ์ด๋ธ” ๋ชจ๋“  ํ–‰์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด

LEFT JOIN ๋ฌธ๋ฒ• ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

SELECT * 
FROM program 
  LEFT JOIN teacher
    ON program.๊ฐ•์‚ฌid = teacher.id 

INNER JOIN ๋Œ€์‹  LEFT JOIN๊ณผ ON ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค.

๊ทธ๋Ÿผ INNER JOIN ๊ฒฐ๊ณผ + ์™ผ์ชฝ program ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์™ผ์ชฝํ…Œ์ด๋ธ”์˜ ๊ฐ•์‚ฌid์™€ ์ผ์น˜ํ•˜๋Š” ์˜ค๋ฅธ์ชฝํ…Œ์ด๋ธ” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” NULL ๋กœ ์ฑ„์›Œ์ค๋‹ˆ๋‹ค.

NULL์€ ํ…… ๋น„์—ˆ๋‹ค๋Š” ๋œป์ž„

์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ์ „์ฒด + ๊ณตํ†ต๋œ ํ–‰ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด RIGHT JOIN

INNER JOIN ๊ฒฐ๊ณผ + ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ๋ชจ๋“  ํ–‰์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด

RIGHT JOIN ๋ฌธ๋ฒ• ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

SELECT * 
FROM program 
  RIGHT JOIN teacher
    ON program.๊ฐ•์‚ฌid = teacher.id 

INNER JOIN ๋Œ€์‹  RIGHT JOIN๊ณผ ON ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค.

๊ทธ๋Ÿผ INNER JOIN ๊ฒฐ๊ณผ + ์˜ค๋ฅธ์ชฝ teacher ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด๋Ÿฐ LEFT, RIGHT JOIN์€ ์–ด๋””์— ์‚ฌ์šฉํ• ๊นŒ์š”?

ํ…Œ์ด๋ธ”๋ผ๋ฆฌ ํ•ฉ์น  ๋•Œ NULL์ด ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ฏธ๋ฆฌ ์ฐพ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

 SELECT * 
FROM program 
  LEFT JOIN teacher
    ON program.๊ฐ•์‚ฌid = teacher.id
WHERE teacher.id IS NULL

IS NULL ์กฐ๊ฑด์€ NULL์„ ๋‹ด๊ณ ์žˆ๋Š” ํ–‰๋งŒ ํ•„ํ„ฐ๋ง ํ•ด์ค๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ NULL์ด ๋œจ๋Š” ๋‚ด์šฉ์„ ์ƒ‰์ถœํ•ด์„œ ์ด์ƒํ•œ ์ ์„ ํŒŒ์•…ํ•ด๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

FULL JOIN

LEFT JOIN๊ณผ RIGHT JOIN ๊ฒฐ๊ณผ๋ฅผ ํ•ฉํ•ด์„œ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด FULL JOIN ๋ฌธ๋ฒ•์„ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

SELECT * 
FROM program 
  FULL JOIN teacher
    ON program.๊ฐ•์‚ฌid = teacher.id

ํ•˜์ง€๋งŒ MYSQL, MariaDB, SQLite ์—์„  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์„  LEFT JOIN, RIGHT JOIN ๊ฒฐ๊ณผ๋ฅผ UNION ์—ฐ์‚ฐ์ž๋กœ ๋ฌถ์œผ๋ฉด ๋˜๋Š”๋ฐ ํ•„์š”ํ•˜๋ฉด ์ฐพ์•„๋ด…์‹œ๋‹ค.

4๊ฐœ์˜ JOIN ๋ฌธ๋ฒ•๋“ค์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด ์ด๋Ÿฐ ์‹์ž…๋‹ˆ๋‹ค.

CROSS JOIN์€ ์“ธ๋ฐ์—†์–ด์„œ ์•ˆ๊ปด์คŒ

(์ฐธ๊ณ )

LEFT JOIN / LEFT OUTER JOIN

RIGHT JOIN / RIGHT OUTER JOIN

FULL JOIN / FULL OUTER JOIN

๊ฐ™์€ ๋œป์ด๋ผ ๋Œ€๋ถ€๋ถ„์˜ DBMS์—์„  ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โœจ ์‹ค์Šต. ์ง€๋‚œ์‹œ๊ฐ„์— ์‚ฌ์šฉํ–ˆ๋˜ item, sales, user_table์„ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ด…์‹œ๋‹ค.

Q1. ๋งค์ถœ๋‚ด์—ญ์ด ์—†๋Š” item์„ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค.

Q2. ๋งค์ถœ๋‚ด์—ญ์— ์—†๋Š” ๊ณ ๊ฐ๋“ค์„ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค.

Last updated