DB(Database)/Basic Concept

SQL ์กฐ์ธ, ์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„ - Inner Join, Outer Join, Cross Join, Self Join

ํƒฑ์ ค 2021. 2. 15. 22:49

๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋Œ€์šฉ๋Ÿ‰์ด๋ผ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์ €์žฅํ•œ๋‹ค.

์ค‘๋ณต๊ณผ ๊ณต๊ฐ„ ๋‚ญ๋น„ ๋ฐฉ์ง€, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ„ํ•จ

๋ถ„๋ฆฌ๋œ ํ…Œ์ด๋ธ”์€ ์„œ๋กœ ๊ด€๊ณ„(relation) ๊ฐ€์ง€๋ฏ€๋กœ  join ์‹œ ์ˆ™์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ DBMS ์ •์˜ ์ฐธ๊ณ ) ahnty0122.tistory.com/26

 

[DB] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€? DBMS๋ž€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •์˜์™€ ํŠน์ง• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ณต์œ  + ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๊ณต๊ฐ„ ๊ทธ ์ž์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง• ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ: ์˜ค๋ฅ˜๊ฐ€ ์žˆ์–ด

ahnty0122.tistory.com


JOIN

  • 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ” ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • Inner join ํ†ต์ƒ ์กฐ์ธ

    • ๊ต์ง‘ํ•ฉ, ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰๋งŒ ์ถœ๋ ฅํ•˜๋Š” ์กฐ์ธ
SELECT [COLUMN ๋ชฉ๋ก]
	FROM [ํ…Œ์ด๋ธ”1]
    INNER JOIN [ํ…Œ์ด๋ธ”2]
    	ON [์กฐ์ธ ์กฐ๊ฑด]
WHERE [๊ฒ€์ƒ‰ ์กฐ๊ฑด]

 

  • Outer join 

    • ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ํ–‰๊นŒ์ง€ ํฌํ•จํ•ด ์ถœ๋ ฅ
-- LEFT OUTER JOIN
SELECT [COLUMN ๋ชฉ๋ก]
	FROM [LEFT ํ…Œ์ด๋ธ”]
    [LEFT] OUTER JOIN [RIGHT ํ…Œ์ด๋ธ”]
    	ON [์กฐ์ธ ์กฐ๊ฑด]
WHERE [๊ฒ€์ƒ‰ ์กฐ๊ฑด]

-- RIGHT OUTER JOIN
SELECT [COLUMN ๋ชฉ๋ก]
	FROM [RIGHT ํ…Œ์ด๋ธ”]
    [RIGHT] OUTER JOIN [LEFT ํ…Œ์ด๋ธ”]
    	ON [์กฐ์ธ ์กฐ๊ฑด]
WHERE [๊ฒ€์ƒ‰ ์กฐ๊ฑด]

 

  • Cross join ์ƒํ˜ธ ์กฐ์ธ

    • ํ•œ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๊ณผ ๋‹ค๋ฅธ ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ
    • ์ƒํ˜ธ ์กฐ์ธ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์˜ ํ–‰์ˆ˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ํ–‰์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’
    • = cartesian product
-- table1๊ณผ table2 ์ƒํ˜ธ ์กฐ์ธ
SELECT *
	FROM [table1]
    	CROSS JOIN [table2]
        
-- count(*) ํ•จ์ˆ˜๋กœ ์ƒํ˜ธ ์กฐ์ธ ๊ฒฐ๊ณผ์˜ ๊ฐœ์ˆ˜๋งŒ ๋ณด๊ธฐ
SELECT COUNT(*)
	FROM [table1]
    	CROSS JOIN [table2]

 

  • Self join ์ž์ฒด ์กฐ์ธ

    • ์ž๊ธฐ ์ž์‹ ์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ
    • ex) ์กฐ์ง๋„ ๊ด€๋ จ ํ…Œ์ด๋ธ”

์กฐ์ง๋„ ๊ด€๋ จ ํ…Œ์ด๋ธ”

SELECT A.emp AS '๋ถ€ํ•˜์ง์›', B.emp AS '์ง์†์ƒ๊ด€', B.empTEL AS '์ง์†์ƒ๊ด€์—ฐ๋ฝ์ฒ˜'
	FROM empTBL A
    	INNER JOIN empTBL B
        	ON A.manager = B.emp
    WHERE A.emp = '์šฐ๋Œ€๋ฆฌ';

 

์œ„ sql ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ๊ฒฐ๊ณผ


์ผ๋Œ€๋‹ค, ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„

  • 1:๋‹ค ๊ด€๊ณ„
    • ํ•œ์ชฝ ํ…Œ์ด๋ธ”์—๋Š” ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์กด์žฌํ•˜๊ณ , ๊ทธ ๊ฐ’๋งŒ ๋Œ€์‘๋˜๋Š” ๋‹ค๋ฅธ ์ชฝ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ด€๊ณ„
    • EX) ํ•™์ƒ ํ…Œ์ด๋ธ”๊ณผ ์ ์ˆ˜ ํ…Œ์ด๋ธ”, ์ง์› ํ…Œ์ด๋ธ”๊ณผ ์›”๊ธ‰ ํ…Œ์ด๋ธ”
  • ๋‹ค:๋‹ค ๊ด€๊ณ„
    • ํ•œ ํ•™์ƒ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์•„๋ฆฌ์— ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•œ ๋™์•„๋ฆฌ์—๋Š” ์—ฌ๋Ÿฌ ํ•™์ƒ์ด ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ์–ด ํ•™์ƒ ํ…Œ์ด๋ธ”๊ณผ ๋™์•„๋ฆฌ ํ…Œ์ด๋ธ”์€ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„์ž„.
    • ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„์˜ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”๊ณผ ๋‘ ํ…Œ์ด๋ธ”์ด ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๋งบ๋„๋ก ๊ตฌ์„ฑ
    • EX) ํ•™์ƒ ํ…Œ์ด๋ธ”, ํ•™์ƒ_๋™์•„๋ฆฌ ํ…Œ์ด๋ธ”(ํ•™์ƒํ…Œ์ด๋ธ”๊ณผ ๋™์•„๋ฆฌํ…Œ์ด๋ธ”์˜ ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”), ๋™์•„๋ฆฌ ํ…Œ์ด๋ธ”


์ฐธ๊ณ ) MySQL ๊ธฐ์ดˆ์—์„œ ์‹ค๋ฌด๊นŒ์ง€ ์™„์ „์ •๋ณต ํ•˜๊ธฐ - ์•„์ดํ‹ฐ๊ณ  ์‹ ๊ฒฝ์ง„ ๊ฐ•์‚ฌ

728x90