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

STUDY/DATABASE

MySQL - JOIN

๋ฐ˜์‘ํ˜•
JOIN ? 
    ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉ
    ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์ปฌ๋Ÿผ์„ ์ฐพ์•„์„œ ์กฐ์ธ ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•จ.
    ๋ชจํ˜ธํ•œ ์ปฌ๋Ÿผ๋ช… ์•ž์—๋Š” ๋ฐ˜๋“œ์‹œ ํ…Œ์ด๋ธ” ๋ช…์ด๋‚˜ ํ…Œ์ด๋ธ” ALIAS๋ช…์„ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ์•ผ ํ•จ.
    ํ•œ์ชฝ ํ…Œ์ด๋ธ”์—๋งŒ ์žˆ๋Š” ์œ ์ผํ•œ ์ปฌ๋Ÿผ๋ช…์•ž์—๋Š” ํ…Œ์ด๋ธ”๋ช…์ด๋‚˜ ํ…Œ์ด๋ธ” alias ๋ช…์ด ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‚˜,  ๊ถŒ์žฅ์‚ฌํ•ญ

 

์˜ˆ์ œ1. employees ํ…Œ์ด๋ธ”๊ณผ departments ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

   >> employees ํ…Œ์ด๋ธ”๊ณผ dapartments ํ…Œ์ด๋ธ”์ด ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” department_id๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ

 

์˜ˆ์ œ2. employees ํ…Œ์ด๋ธ”๊ณผ departments ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

    >> department_id ์ปฌ๋Ÿผ์€ ๋‘ ํ…Œ์ด๋ธ”์— ๋™์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋ฏ€๋กœ ํ…Œ์ด๋ธ”๋ช…์„ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ์ค˜์•ผ ํ•จ.

    >> ๋‘ ํ…Œ์ด๋ธ”์ด department_id ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ

 

์˜ˆ์ œ3. employees ํ…Œ์ด๋ธ”๊ณผ departments ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๋งค๋‹ˆ์ €๋ฒˆํ˜ธ, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

    >> manager_id์ปฌ๋Ÿผ๊ณผ department_id ์ปฌ๋Ÿผ์€ ๋‘ ํ…Œ์ด๋ธ”์— ๋™์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋ฏ€๋กœ ํ…Œ์ด๋ธ”๋ช…์„ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ์ค˜์•ผ ํ•จ.

    >> ๋‘ ํ…Œ์ด๋ธ”์ด department_id ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ

 

์˜ˆ์ œ4. departments ํ…Œ์ด๋ธ”๊ณผ locations ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„, ๋„์‹œ๋ฒˆํ˜ธ, ๋„์‹œ๋ช…์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

    >> location_id์ปฌ๋Ÿผ์€ ๋‘ ํ…Œ์ด๋ธ”์— ๋™์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋ฏ€๋กœ ํ…Œ์ด๋ธ”๋ช…์„ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ์ค˜์•ผ ํ•จ.

    >> ๋‘ ํ…Œ์ด๋ธ”์ด location_id ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ

 

 

์˜ˆ์ œ5. ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ from์ ˆ์— ํ…Œ์ด๋ธ” alias๋ฅผ ์„ ์–ธํ•˜์—ฌ ์ปฌ๋Ÿผ๋ช… ์•ž์— ํ…Œ์ด๋ธ” alias๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.

 

์˜ˆ์ œ 6. employees ํ…Œ์ด๋ธ”๊ณผ departments ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ฒˆํ˜ธ, ๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋˜ 80๋ฒˆ ๋ถ€์„œ์— ์†Œ์†๋œ ์‚ฌ์›๋งŒ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

N๊ฐœ์˜ ํ…Œ์ด๋ธ” JOIN
   ํ…Œ์ด๋ธ” ๊ฐœ์ˆ˜ | ์กฐ์ธ ์กฐ๊ฑด ์ˆ˜
           2       |       1
           3       |       2
           N      |       N-1

 

์˜ˆ์ œ7. employees, departments, locations ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์ง์› ์ •๋ณด, ๋ถ€์„œ ์ •๋ณด, ์œ„์น˜ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

    >> emloyees์™€ departments ํ…Œ์ด๋ธ”์€ department_id ์ปฌ๋Ÿผ์„,

         departments์™€ locations ํ…Œ์ด๋ธ”์€ location_id ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ

 

Self JOIN ? 
    ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ๋งˆ์น˜ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ธ ๋“ฏ ํ…Œ์ด๋ธ” alias๋ฅผ ๋‹ฌ๋ฆฌ ๋ถ€์—ฌํ•˜์—ฌ ์ž๊ธฐ ์ž์‹  ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋Š” ์œ ํ˜•

 

์˜ˆ์ œ8. ์ง์›์˜ ์‚ฌ๋ฒˆ, ์ง์›์˜ ์ด๋ฆ„, ์ง์›์˜ ๊ธ‰์—ฌ, ๋งค๋‹ˆ์ € ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

    >> e2.last_name ์€ e1.manager_id ์˜ last_name

    >> employee_id 101 kochhar์˜ manager_id๋Š” 100

    >> 100๋ฒˆ์˜ last_name ์€ king

 

equi join VS non-equi join ?
    equi JOIN : ์กฐ์ธ ์กฐ๊ฑด๋ฌธ์— ๋™๋“ฑ์—ฐ์‚ฐ์ž(=)๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ์ธ ์œ ํ˜•
    non-equi JOIN : ์กฐ์ธ์กฐ๊ฑด๋ฌธ์— ๋™๋“ฑ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹Œ ๊ทธ ์™ธ ๋‹ค๋ฅธ ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ์กฐ์ธ ์œ ํ˜•
inner JOIN VS outer JOIN ?
    inner : ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์กฐ์ธ ์œ ํ˜•
    outer : ์กฐ์ธ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์€ ๋ฌผ๋ก ์ด๊ณ  ์กฐ์ธ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ํ–‰๊นŒ์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์กฐ์ธ ์œ ํ˜•

left outer join : ์กฐ์ธ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ๋ฐ˜ํ™˜ ํ•ด์ฃผ๋Š” ์กฐ์ธ ์œ ํ˜•
right outer join : ์กฐ์ธ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ๋ฐ˜ํ™˜ ํ•ด์ฃผ๋Š” ์กฐ์ธ ์œ ํ˜•
full outer join : ์กฐ์ธ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ๋ชจ๋‘ ๋ฐ˜ํ™˜ ํ•ด์ฃผ๋Š” ์กฐ์ธ ์œ ํ˜•
๋ฐ˜์‘ํ˜•