๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-end ๋ฐ๋ธŒ์ฝ”์Šค/week 01 - 02 TIL (java, DB)

[TIL] 221027 - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค SQL : JOIN

by young-ji 2022. 10. 28.

์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ์—์„œ ๋‚ ์•„์˜จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - 4. SQL ๊ณ ๊ธ‰ ๋‹ค๊ธฐ์ง€(JOIN)

 

1. INSERT / UPDATE / DELET

MySQL ์ปฌ๋Ÿผ ํƒ€์ž…

  • Numeric Type
    • INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
    • DECIMAL, NUMERIC
    • FLOAT, DOUBLE, BIT
  • Date and Time
    • DATE, DATETIME, TIMESTAMP, TIME, YEAR
  • String Type
    • CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, SET
  • JSON Type : ๋‹ค์–‘ํ•œ JSON ์กฐ์ž‘ํ•จ์ˆ˜ ์ œ๊ณต
  • Spatial Type : ์œ„๋„ ๊ฒฝ๋„ ์ค‘์‹ฌ ์œ„์น˜ ๊ด€๋ จ ํƒ€์ž…

 

INSERT INTO _ VALUES(_)

: primary key ์œ ๋‹ˆํฌ๊ฐ’ ์œ„๋ฐฐ์‹œ ์ž‘์—… ์‹คํŒจ

 

 

DELETE FROM _ (WHERE _)

: ์กฐ๊ฑด ๊ธฐ๋ฐ˜ ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ ํ˜น์€ ๋ชจ๋“  ๋ ˆํฌ๋„ ์‚ญ์ œ. ํ…Œ์ด๋ธ”์€ ์‚ญ์ œ ๋˜์ง€์•Š๋Š”๋‹ค.

: vs TRUNCATE

  • ์กฐ๊ฑด ์—†์ด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ์‚ญ์ œ
  • ์†๋„๊ฐ€ ๋น ๋ฅธ ๋Œ€์‹  ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉ์‹œ ๋กค๋ฐฑ ๋ถˆ๊ฐ€

UPDATE _ SET _ WHERE

 

2. JOIN

์Šคํƒ€ ์Šคํ‚ค๋งˆ๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”๋“ค์„ mergeํ•ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋˜ ์ •๋ณด๋ฅผ ํ†ตํ•ฉํ•œ๋‹ค.

  • ๊ณ ๋ ค ์‚ฌํ•ญ
    • ์ค‘๋ณต ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†๊ณ  Primary key์˜ ์œ ๋‹ˆํฌํ•จ์ด ๋ณด์žฅ๋˜๋Š”์ง€ ์ฒดํฌ
    • ํ…Œ์ด๋ธ”๋“ค๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฉดํ™•ํ•˜๊ฒŒ ์ •์˜ (one to one, one to many โ†’ ์ค‘๋ณต ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ)

 

INNER JOIN

์–‘์ชฝ ํ…Œ์ด๋ธ”์— ๋งค์น˜๊ฐ€ ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๋ฆฌํ„ดํ•จ

์ฆ‰, ์–‘์ชฝ ํ…Œ์ด๋ธ” ํ•„๋“œ๊ฐ€ ๋ชจ๋‘ ์ฑ„์›Œ์ง„ ์ƒ์ฑ„๋กœ ๋ฆฌํ„ด

 

 

LEFT/RIGHT JOIN

  • LEFT JOIN

์™ผ์ชฝ ํ…Œ์ด๋ธ”(Base)์˜ ๋ ˆ์ฝ”๋“œ๋“ค์„ ๋ฆฌํ„ดํ•จ.

์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ๋Š” ์™ผ์ชฝ ๋ ˆ์ฝ”๋“œ์™€ ๋งค์นญ๋˜๋Š” ๊ฒฝ์šฐ๋งŒ ์ฑ„์›Œ์ง„ ์ƒํƒœ๋กœ ๋ฆฌํ„ด. ์ฑ„์›Œ์ง€์ง€ ์•Š๋Š” ํ•„๋“œ๋Š” null

 

  • RIGHT JON

LEFT JOIN ๋ฐ˜๋Œ€

 

 

OUTER JOIN

(= FULL JOIN) MySQL์€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

LEFT JOIN๊ณผ RIGHT JOIN ์„ UNION ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค.

 

 

CROSS JOIN

์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋“ค์˜ ์กฐํ•ฉ์„ ๋ฆฌํ„ด

 

 

SELF JOIN

๊ฐ™์€ ํ…Œ์ด๋ธ”์˜ ๋ณ„๋ช…์„ ๋‹ค๋ฅด๊ฒŒ ์ค˜์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์ธ๊ฒƒ ์ฒ˜๋Ÿผ join ํ•œ๋‹ค

 

 

์‹ค์Šต

--left join
select * from vital v --์™ผ์ชฝ ํ…Œ์ด๋ธ”
left join alert a on v.vital_id = a.vital_id;

--full join
select * from vital v
left join alert a on v.vital_id = a.vital_id
union -- ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ค€๋‹ค. vs union all
select * from vital v
right join alert a on v.vital_id = a.vital_id

--cross join
select * from vital v
left join alert a

--self join
select * from vital v1
join vital v2 on v1.vital_id = v2.vital_id

 

 

์ถœ์ฒ˜ - ํ•œ๊ธฐ์šฉ ๊ฐ•์‚ฌ๋‹˜ : ์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ์—์„œ ๋‚ ์•„์˜จ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

๋Œ“๊ธ€