Tools/- SQL

[MySQL] ์กฐ์ธ | INNER JOIN, OUTER JOIN

์Šค์œ„๋ฏผ 2024. 3. 12. 00:02

์กฐ์ธ

๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ

 

 

๋‚ด๋ถ€ ์กฐ์ธ (INNER JOIN)

  • ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”๋“ค์˜ ๊ต์ง‘ํ•ฉ (์ผ๋Œ€๋‹ค ๊ด€๊ณ„ = PK-FK ๊ด€๊ณ„)
  • ์˜ˆ์‹œ๋กœ, ํšŒ์›ํ…Œ์ด๋ธ”๊ณผ ๊ตฌ๋งคํ…Œ์ด๋ธ”์—์„œ ๊ตฌ๋งค์ด๋ ฅ์ด ์žˆ๋Š” ํšŒ์›์˜ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‚ด๋ถ€ ์กฐ์ธ์˜ ๋ฌธ๋ฒ•

SELECT ์—ด
FROM ํ…Œ์ด๋ธ” 1
	INNER JOIN ํ…Œ์ด๋ธ” 2 -- JOIN์œผ๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅ
	ON ํ…Œ์ด๋ธ” 1.KEY = ํ…Œ์ด๋ธ” 2.KEY

 

์˜ˆ์ œ)

SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
	FROM buy B -- ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ๋ณ„์นญ์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค
		JOIN member M
		ON B.mem_id = M.mem_id
	ORDER BY M.mem_id

 

์™ธ๋ถ€ ์กฐ์ธ (OUTER JOIN)

  • ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”๋“ค์˜ ํ•ฉ์ง‘ํ•ฉ
  • ์˜ˆ์‹œ๋กœ, ๊ตฌ๋งค ๊ธฐ๋ก์ด ์—†๋Š” ํšŒ์›์„ ํฌํ•จํ•œ ์ „์ฒด ํšŒ์›์˜ ๊ตฌ๋งค ๊ธฐ๋ก์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • LEFT OUTER JOIN : ์ฒซ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ ๋ชจ๋‘ ์ถœ๋ ฅ
  • RIGHT OUTER JOIN : ๋‘๋ฒˆ์ฉจ ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ ๋ชจ๋‘ ์ถœ๋ ฅ
  • FULL OUTER JOIN : ์ „์ฒด ํ…Œ์ด๋ธ” ๋‚ด์šฉ ๋ชจ๋‘ ์ถœ๋ ฅ (MySQL์€ ์ง€์› X)

์™ธ๋ถ€ ์กฐ์ธ ๋ฌธ๋ฒ•

SELECT ์—ด
FROM ํ…Œ์ด๋ธ” 1
	< LEFT | RIGHT | FULL > OUTER JOIN ํ…Œ์ด๋ธ” 2
	ON ํ…Œ์ด๋ธ” 1.KEY = ํ…Œ์ด๋ธ” 2.KEY

 

์˜ˆ์ œ ) ๊ตฌ๋งค ์ด๋ ฅ์ด ์—†๋Š” ํšŒ์› ์ •๋ณด ์ถœ๋ ฅ

SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
	FROM member M
		LEFT OUTER JOIN buy B
		ON M.mem_id = B.mem_id
	WHERE B.prod_name IS NULL
    ORDER BY M.mem_id;