1. ์กฐ์ธ Join

 

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

 โšก๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์€ ์ค‘๋ณต๊ณผ ๊ณต๊ฐ„ ๋‚ญ๋น„๋ฅผ ํ”ผํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐœ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ•ด ์ €์žฅ

 โšก๏ธ ๋ถ„๋ฆฌ๋œ ํ…Œ์ด๋ธ”์€ ์„œ๋กœ ๊ด€๊ณ„ Relation ๋ฅผ ๋งบ๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ด€๊ณ„๋Š” '1๋Œ€ ๋‹ค' ๊ด€๊ณ„

     ex. ํ•™์ƒ ํ•œ ๋ช…์ด ์—ฌ๋Ÿฌ ๊ณผ๋ชฉ์˜ ํ•™์ ์„ ๋ฐ›๋Š” ๊ฒƒ, ํ•œ ๊ฐœ์˜ ์•„์ด๋””๋กœ ์—ฌ๋Ÿฌ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋Š” ๊ฒƒ

 


 

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

 


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

 

ยท ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์€ ๊ตฌ๋งคํ…Œ์ด๋ธ”(buytbl), ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์€ ํšŒ์›ํ…Œ์ด๋ธ”(usertbl)

 


  
SELECT * FROM buytbl
INNER JOIN usertbl
ON buytbl.userID = usertbl.userID
WHERE buytbl.userID = 'JYP';
 
์‹คํ–‰ ๊ฒฐ๊ณผ

  ๐Ÿ“Œ  ์ถ”์ถœ ๊ณผ์ •

     1.  ๊ตฌ๋งค ํ…Œ์ด๋ธ”์˜ userID์ธ 'JYP'๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

     2.  'JYP'์™€ ๋™์ผํ•œ ๊ฐ’์„ ํšŒ์› ํ…Œ์ด๋ธ”์˜ userID์—ด์—์„œ ๊ฒ€์ƒ‰ํ•œ ํ›„ ์ฐพ์œผ๋ฉด ๊ตฌ๋งค ํ…Œ์ด๋ธ”๊ณผ ํšŒ์› ํ…Œ์ด๋ธ”์˜ ๋‘ ํ–‰์„ ๊ฒฐํ•ฉ

 

  ๐Ÿ“Œ WHERE ์ ˆ์„ ์ƒ๋žตํ•˜๋ฉด buytbl ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด์„œ ์œ„์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ถ”์ถœ

WHERE์ ˆ์„ ์ƒ๋žตํ•œ ๊ฒฐ๊ณผ

 

 


 

๐Ÿ‘พ ํ•„์š”ํ•œ ์—ด๋งŒ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•


  
SELECT userID, name, prodName, addr, CONCAT(mobile1, mobile2) AS '์—ฐ๋ฝ์ฒ˜'
FROM buytbl
INNER JOIN usertbl
ON buytbl.userID = usertbl.userID
ORDER BY num;
 

  ๐Ÿ“Œ ์œ„์˜ ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ ์ฝ”๋“œ๊ฐ€ ๋œฌ๋‹ค.


  
Error Code: 1052. Column 'userID' in field list is ambiguous
 

  ๐Ÿ’ก userID์˜ ๊ฒฝ์šฐ ๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘์— ๋“ค์–ด ์žˆ์–ด ์–ด๋А ํ…Œ์ด๋ธ”์˜ userID ์ถ”์ถœํ•  ์ง€ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•จ


  
SELECT buytbl.userID, name, prodName, addr, CONCAT(mobile1, mobile2) AS '์—ฐ๋ฝ์ฒ˜'
FROM buytbl
INNER JOIN usertbl
ON buytbl.userID = usertbl.userID
ORDER BY num;
 
๊ฒฐ๊ณผ

 

 

๐Ÿ‘พ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ๋ณต์žกํ•ด ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํ…Œ์ด๋ธ”์— '๋ณ„์นญ Alias' ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•


  
SELECT B.userID, U.name, B.prodName, U.addr, CONCAT(U.mobile1, U.mobile2) AS '์—ฐ๋ฝ์ฒ˜'
FROM buytbl B
INNER JOIN usertbl U
ON B.userID = U.userID
WHERE B.userID = 'JYP';
 

  ๐Ÿ“Œ ์œ„์™€ ๊ฐ™์ด FROM ์ ˆ์— ๋‚˜์˜ค๋Š” ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„ ๋’ค์— ๋ณ„์นญ์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

๊ฒฐ๊ณผ

 

 

 

๐Ÿ‘พ ์„ธ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

ยท ์ฒซ ๋ฒˆ์งธ stdTbl(ํ•™์ƒํ…Œ์ด๋ธ”) / ๋‘ ๋ฒˆ์งธ stdclubTbl / ์„ธ ๋ฒˆ์งธ clubTbl

 


  
-- ํ•™์ƒ ํ…Œ์ด๋ธ”, ๋™์•„๋ฆฌ ํ…Œ์ด๋ธ”, ํ•™์ƒ๋™์•„๋ฆฌ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด์„œ ํ•™์ƒ์„ ๊ธฐ์ค€์œผ๋กœ ํ•™์ƒ ์ด๋ฆ„/์ง€์—ญ/๊ฐ€์ž…ํ•œ ๋™์•„๋ฆฌ/๋™์•„๋ฆฌ๋ฐฉ์„ ์ถœ๋ ฅ
SELECT S.stdName, S.addr, C.clubName, C.roomNo
FROM stdTbl S
INNER JOIN stdclubTbl SC
ON S.stdName = SC.stdName
INNER JOIN clubTbl C
ON SC.clubName = C.clubName
ORDER BY S.stdName;
 
๊ฒฐ๊ณผ

 

 

 

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

 

 

๐Ÿ‘พ ์ฃผ์ข…๊ด€๊ณ„์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์—์„œ ์ฃผํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๋ฅผ ๊ฐ™์ด ์ถœ๋ ฅ


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

 

  ๐Ÿ“Œ ์ „์ฒด ํšŒ์›์˜ ๊ตฌ๋งค๊ธฐ๋ก ๊ตฌํ•˜๊ธฐ (๋‹จ, ๊ตฌ๋งค ๊ธฐ๋ก ์—†๋Š” ํšŒ์›๋„ ์ถœ๋ ฅ)


  
SELECT U.userID, U.name, B.prodName, U.addr, CONCAT(U.mobile1, U.mobile2) AS '์—ฐ๋ฝ์ฒ˜'
FROM usertbl U
LEFT OUTER JOIN buytbl B -- LEFT OUTER JOIN์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”(usertbl)์˜ ๊ฒƒ์€ ๋ชจ๋‘ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป
ON U.userID = B.userID
ORDER BY U.userID;
 
๊ฒฐ๊ณผ

 

 

๐Ÿ“Œ RIGHT OUTER JOIN์„ ์‚ฌ์šฉํ•ด์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ ๊ฐ’์„ ์–ป์œผ๋ ค๋ฉด ๋‹จ์ˆœํžˆ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ์œ„์น˜๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋จ

 

 

 

๐Ÿ’ก  FULL OUTER JOIN (์ „์ฒด ์กฐ์ธ) : LEFT JOIN + RIGHT JOIN

      โžก๏ธ  ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ๋ฐ˜ํ™˜. ์กฐ์ธ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์—ด์—๋Š” NULL ๊ฐ’์ด ์ฑ„์›Œ์ง

 

 

 

3) CROSS JOIN (์ƒํ˜ธ ์กฐ์ธ)

 

 

๐Ÿ‘พ ํ•œ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๋“ค๊ณผ ๋‹ค๋ฅธ ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์กฐ์ธ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

โžก๏ธ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐœ์ˆ˜

๐Ÿ‘พ ์นดํ‹ฐ์…˜ ๊ณฑ Cartesian Product์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

๐Ÿ‘พ ON ๊ตฌ๋ฌธ ์‚ฌ์šฉ x, ์šฉ๋„๋Š” ํ…Œ์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•  ๋งŽ์€ ์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ

 

 

  ๐Ÿ“Œ ํšŒ์› ํ…Œ์ด๋ธ”๊ณผ ๊ตฌ๋งค ํ…Œ์ด๋ธ”์˜ CROSS JOIN ๊ตฌ๋ฌธ


  
SELECT COUNT(*) AS '๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜' FROM buytbl CROSS JOIN usertbl;
 
๊ฒฐ๊ณผ

 

 

 

4) SELF JOIN (์ž์ฒด ์กฐ์ธ)

 

 

๐Ÿ‘พ ์ž๊ธฐ ์ž์‹ ๊ณผ ์ž๊ธฐ ์ž์‹ ์ด ์กฐ์ธํ•œ๋‹ค๋Š” ์˜๋ฏธ

๐Ÿ‘พ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ ์กฐ์ง๋„์™€ ๊ด€๋ จ๋œ ํ…Œ์ด๋ธ”

 

empTbl

 


  
-- ์šฐ๋Œ€๋ฆฌ ์ƒ๊ด€์˜ ์—ฐ๋ฝ์ฒ˜๋ฅผ ํ™•์ธ
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 = '์šฐ๋Œ€๋ฆฌ';
 
๊ฒฐ๊ณผ

 

 

 

 

 

 

[ ๋‚ด์šฉ ์ฐธ๊ณ  : ์ฑ… '์ด๊ฒƒ์ด MySQL'์ด๋‹ค ]

 

+ Recent posts