๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

RDB๐Ÿ—‚๏ธ

SQL : JOIN

728x90

์ถœ์ฒ˜ : ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

 

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

 

์—ฐ๊ด€๊ด€๊ณ„

* ์ผ๋Œ€๋‹ค : ํ•œ ๋ช…์˜ ๋ฉค๋ฒ„๊ฐ€ ๊ตฌ๋งค๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

-> ๋ฉค๋ฒ„ ํ…Œ์ด๋ธ”์˜ PK๊ฐ€ ๊ตฌ๋งค ํ…Œ์ด๋ธ”์˜ FK๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.

 

๋‚ด๋ถ€ ์กฐ์ธ : ๋‘ ํ…Œ์ด๋ธ”์ด ์„œ๋กœ ๊ด€๋ จ์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ ~ ๊ต์ง‘ํ•ฉ 

๋‚ด๋ถ€ ์กฐ์ธ์˜ ํ˜•์‹

SELECT <์—ด ๋ชฉ๋ก>
FROM <์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”>
	INNER JOIN <๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”> -- INNER JOIN์€ 'INNER' ์ƒ๋žต๊ฐ€๋Šฅ
	ON <์กฐ์ธ๋  ์กฐ๊ฑด>
[WHERE ๊ฒ€์ƒ‰ ์กฐ๊ฑด]

ex) ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ๋ณ„์นญ์„ ๋ถ™์ธ ๋‚ด๋ถ€ ์กฐ์ธ

SELECT buy.mem_id, member.mem_name, buy.prod_name, member.addr
	FROM buy
		JOIN member
		ON buy.mem_id = member.mem_id;


-- ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ๋ณ„์นญ์„ ๋ถ™์ด๋ฉด
SELECT B.mem_id, M.mem_name, B.prod_name, M.addr
	FROM buy B
		JOIN member M
		ON B.mem_id = M.mem_id;

์™ธ๋ถ€ ์กฐ์ธ : ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๋•Œ ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ํ•œ์ชฝ ํ…Œ์ด๋ธ”์—๋งŒ ์žˆ์–ด๋„ ๊ฒฐ๊ณผ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค

์™ธ๋ถ€ ์กฐ์ธ์˜ ํ˜•์‹

SELECT <์—ด ๋ชฉ๋ก>
FROM <์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”(LEFT ํ…Œ์ด๋ธ”)>
	<LEFT | RIGHT | FULL> OUTER JOIN <๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”(RIGHT ํ…Œ์ด๋ธ”)>
	ON <์กฐ์ผ๋  ์กฐ๊ฑด>
[WHERE ๊ฒ€์ƒ‰ ์กฐ๊ฑด];

ex) 

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

ex) ํšŒ์› ๊ฐ€์ž…๋งŒ ํ•˜๊ณ  ํ•œ ๋ฒˆ๋„ ๊ตฌ๋งคํ•œ ์ ์ด ์—†๋Š” ํšŒ์›์˜ ๋ชฉ๋ก์„ ์ถ”์ถœํ•˜๋ ค๋ฉด

SELECT M.mem_id, M.mem_name, B.prod_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

 

๊ทธ ๋ฐ–์˜ ์กฐ์ธ 

- ์ƒํ˜ธ ์กฐ์ธ

- ์ž์ฒด ์กฐ์ธ

728x90