[MySQL] JOIN

codeing999ยท2023๋…„ 3์›” 8์ผ
0

MySQL

๋ชฉ๋ก ๋ณด๊ธฐ
8/13

์ฐธ๊ณ  ์ž๋ฃŒ

INNER JOIN

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์กฐ์ธ์œผ๋กœ ์–‘์ชฝ ํ…Œ์ด๋ธ”์— ๋‹ค ์žˆ๋Š” ๊ฒƒ๋งŒ ๋ณด์—ฌ์ค€๋‹ค.
  • ํ‘œ์ค€SQL๊ณผ ๋‹ฌ๋ฆฌ MySQL์—์„œ๋Š” JOIN = INNER JOIN์ด ๊ฐ™์€ ์˜๋ฏธ๋ผ๊ณ  ํ•œ๋‹ค.
  • MySQL์—์„œ from์ ˆ์— ํ…Œ์ด๋ธ” ๋‘๊ฐœ๋ฅผ ๊ทธ๋ƒฅ ์ฝค๋งˆ๋กœ ์ ๊ณ , where์„์“ด๊ฒƒ๊ณผ ์™„์ „ํžˆ ๊ฐ™๋‹ค.

CROSS JOIN

SELECT * FROM ATable
CROSS JOIN BTable;
  • ํ•œ์ชฝ ํ–‰์˜ ํ…Œ์ด๋ธ”์„ ๋‹ค๋ฅธ ํ•œ์ชฝ์˜ ํ–‰์ด๋ž‘ ํ•˜๋‚˜์”ฉ ๋ชจ๋‘ ์กฐ์ธํ•˜๋Š” ๊ฒƒ.
  • MySQL์—์„œ๋Š” ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ” ๋‘๊ฐœ๋ฅผ ์ฝค๋งˆ ์ฐ๊ธฐ๋งŒ ํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

OUTER JOIN

  • ๋ ˆํ”„ํŠธ ์•„์šฐํ„ฐ, ๋ผ์ดํŠธ ์•„์šฐํ„ฐ, ํ’€ ์•„์šฐํ„ฐ ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์–‘์ชฝ์— ๋‘˜๋‹ค ์žˆ๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ๊ฐ, ์™ผ์ชฝ์—๋งŒ ์žˆ๋Š” ๊ฒƒ, ์˜ค๋ฅธ์ชฝ์—๋งŒ ์žˆ๋Š” ๊ฒƒ, ์™ผ์ชฝ์—๋งŒ ์žˆ๋Š”๊ฒƒ+์˜ค๋ฅธ์ชฝ์—๋งŒ ์žˆ๋Š” ๊ฒƒ๊นŒ์ง€ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ.
  • ์ฃผ๋กœ ๋ ˆํ”„ํŠธ ์•„์šฐํ„ฐ ์กฐ์ธ์„ ์‚ฌ์šฉ. (๋ผ์ดํŠธ ์•„์šฐํ„ฐ๋Š” ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ” ์ˆœ์„œ๋งŒ ๋ฐ”๊พธ๋ฉด ๋ ˆํ”„ํŠธ๋ž‘ ๋˜‘๊ฐ™์€ ๊ฑฐ์ธ ๋“ฏ)
  • MySQL์—์„œ๋Š” ์•„์šฐํ„ฐ๋ฅผ ๋นผ๊ณ  left join, right join์œผ๋กœ ์“ด๋‹ค.
  • MySQL์—๋Š” ํ’€์•„์šฐํ„ฐ ์กฐ์ธ์ด ์—†์œผ๋ฏ€๋กœ ๋ ˆํ”„ํŠธ์กฐ์ธ๊ณผ ๋ผ์ดํŠธ ์กฐ์ธ์„ ๊ฐ๊ฐ ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์œ ๋‹ˆ์˜จํ•˜์—ฌ ํ•ฉ์นœ๋‹ค.
  • ํ•œ์ชฝ์—๋งŒ ์žˆ๋Š” ๊ฑธ ์ถœ๋ ฅํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด IS NULL์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋จ(EXCLUSIVE LEFT JOIN)
SELECT * 
FROM table1 A LEFT JOIN table2 B
ON A.ID_SEQ = B.ID_SEQ 
WHERE B.ID_SEQ IS NULL -- ์กฐ์ธํ•œ B ํ…Œ์ด๋ธ”์˜ ๊ฐ’์ด null๋งŒ ์ถœ๋ ฅํ•˜๋ผ๋Š” ๋ง์€, ์กฐ์ธ์ด ์•ˆ๋œ A ๋ ˆ์ฝ”๋“œ ๋‚˜๋จธ์ง€๊ฐ’๋งŒ ์ถœ๋ ฅํ•˜๋ผ๋Š” ๋ง

UNION

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

SELF JOIN

  • ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธํ•˜๋Š” ๊ฒƒ
-- ์˜ˆ) ๋ชจ๋“  ์‚ฌ์›์— ๋Œ€ํ•ด ์‚ฌ์›์˜ ์ด๋ฆ„๊ณผ ์ง์† ์ƒ์‚ฌ์˜ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ ํ•ด๋ผ.
-- EMPNAME ํ…Œ์ด๋ธ”์— ์–ด๋–ค ์‚ฌ์›์˜ MANAGER ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ์–ด๋–ค ์‚ฌ์›์˜ EMPNO์™€ ๊ฐ™์œผ๋ฉด ๊ทธ ์‚ฌ์›์ด ์ง์† ์ƒ๊ด€

SELECT E.EMPNAME as ์‚ฌ์›, M.EMPNAME as ์ง์†์ƒ๊ด€
FROM EMPLOYEE E, EMPLOYEE M -- inner join
WHERE E.MANAGER = M.EMPNO;
profile
์ฝ”๋”ฉ ๊ณต๋ถ€ ing..

0๊ฐœ์˜ ๋Œ“๊ธ€