Search

์กฐ์ธ

์กฐ์ธ (JOIN)

์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐํ•ฉํ•˜์—ฌ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹

์กฐ์ธ ์ข…๋ฅ˜

โ€ข
๋‚ด๋ถ€์กฐ์ธ
โ—ฆ
๋™๋“ฑ ์กฐ์ธ
โ—ฆ
์„ธ๋ฏธ ์กฐ์ธ
โ—ฆ
์•ˆํ‹ฐ ์กฐ์ธ
โ—ฆ
์…€ํ”„ ์กฐ์ธ
โ€ข
์™ธ๋ถ€์กฐ์ธ
โ—ฆ
(+)
โ—ฆ
ANSI ์กฐ์ธ
โ–ช
LEFT OUTER JOIN
โ–ช
RIGTH OUTER JOIN
โ–ช
FULL OUTER JOIN
โ–ช
CROSS JOIN (์นดํƒ€์‹œ์•ˆ ์กฐ์ธ)

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

โ€ข
๋™๋“ฑ ์กฐ์ธ
โ€ข
์„ธ๋ฏธ ์กฐ์ธ
โ€ข
์•ˆํ‹ฐ ์กฐ์ธ
โ€ข
์…€ํ”„ ์กฐ์ธ

๋™๋“ฑ ์กฐ์ธ (EQUI JOIN)

๋“ฑํ˜ธ(=) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐ์ง€์–ด ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹
ex) SELECT * FROM A, B WHERE A.x = B.y;
SQL
๋ณต์‚ฌ

INNER JOIN

์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ์กฐ์ธ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ต์ง‘ํ•ฉ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹
ex) SELECT * FROM A INNER JOIN B ON (A.x = B.y);
SQL
๋ณต์‚ฌ

์„ธ๋ฏธ ์กฐ์ธ (SEMI JOIN)

์„œ๋ธŒ ์ฟผ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์ถ”์ถœํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹
IN ๋˜๋Š” EXISTS ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ์ธ

์•ˆํ‹ฐ ์กฐ์ธ (ANTI JOIN)

์„œ๋ธŒ ์ฟผ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ œ์™ธํ•˜๊ณ  ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์ถ”์ถœํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹

์…€ํ”„ ์กฐ์ธ (SELF JOIN)

๋™์ผํ•œ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ 2๋ฒˆ์ด์ƒ ์กฐํ•ฉํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹

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

โ€ข
LEFT OUTER JOIN
โ€ข
RIGTH OUTER JOIN
โ€ข
FULL OUTER JOIN
โ€ข
CROSS JOIN (์นดํƒ€์‹œ์•ˆ ์กฐ์ธ)

LEFT OUTER JOIN

์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ์–ด๋“œ๋ฆฐ ํ›„, ์กฐ์ธ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์„ ํ•จ๊ป˜ ์กฐํšŒํ•˜๋Š” ๊ฒƒ
์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”, ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” NULL ๋กœ ์กฐํšŒ๋œ๋‹ค.
1.
ANSI
ํ…Œ์ด๋ธ”1 A LEFT [OUTER] JOIN ํ…Œ์ด๋ธ”2 B ON ์กฐ์ธ์กฐ๊ฑด;
SQL
๋ณต์‚ฌ
2.
(+)
WHERE A.๊ณตํ†ต์ปฌ๋Ÿผ = B.๊ณตํ†ต์ปฌ๋Ÿผ(+)
SQL
๋ณต์‚ฌ

RIGHT OUTER JOIN

์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ์–ด๋“œ๋ฆฐ ํ›„, ์กฐ์ธ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ํ•จ๊ป˜ ์กฐํšŒํ•˜๋Š” ๊ฒƒ
์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”, ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋Š” NULL ๋กœ ์กฐํšŒ๋œ๋‹ค.
1.
ANSI
ํ…Œ์ด๋ธ”1 A RIGHT [OUTER] JOIN ํ…Œ์ด๋ธ”2 B ON ์กฐ์ธ์กฐ๊ฑด;
SQL
๋ณต์‚ฌ
2.
(+)
WHERE A.๊ณตํ†ต์ปฌ๋Ÿผ(+) = B.๊ณตํ†ต์ปฌ๋Ÿผ
SQL
๋ณต์‚ฌ

FULL OUTER JOIN

์กฐ์ธ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์กฐํšŒํ•˜๋Š” ๊ฒƒ
์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”, ์–‘์ชฝ์— ๋ฐ์ดํ„ฐ๋Š” NULL ๋กœ ์กฐํšŒ๋œ๋‹ค.
ํ…Œ์ด๋ธ”1 A FULL [OUTER] JOIN ํ…Œ์ด๋ธ”2 B ON ์กฐ์ธ์กฐ๊ฑด;
SQL
๋ณต์‚ฌ
FULL JOIN ์€ MySQL ์—์„œ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
๊ฐ„์ ‘์ ์œผ๋กœ, LEFT JOIN + RIGHT JOIN + UNION ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค
SELECT * FROM A LEFT JOIN B ON A.x = B.y UNION SELECT * FROM A RIGHT JOIN B ON A.x = B.y
SQL
๋ณต์‚ฌ

์นดํƒ€์‹œ์•ˆ ์กฐ์ธ (Cartesian; CATASIAN PRODUCT) : CROSS ์กฐ์ธ

WHERE ์ ˆ์— ์กฐ์ธ ์กฐ๊ฑด์ด ์—†๋Š” ์กฐ์ธ
โ€ข
A ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ : X
โ€ข
B ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜ : Y
โ€ข
๊ฒฐ๊ณผ ๊ฑด์ˆ˜ : X * Y (๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณฑ)
ex) SELECT * FROM employees e ,departments d;
SQL
๋ณต์‚ฌ
โ€ข
์นดํƒ€์‹œ์•ˆ ์กฐ์ธ์„ ANSI ๋ฌธ๋ฒ•์—์„œ๋Š” CROSS ์กฐ์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค
ex) SELECT * FROM employees e CROSS JOIN departments d;
SQL
๋ณต์‚ฌ