Notice
Recent Posts
Recent Comments
Link
ยซ   2024/09   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

BUILD_SSO

[Database/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] DB Query & JOIN ๋ณธ๋ฌธ

Tech Interview

[Database/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] DB Query & JOIN

sohyeonnn 2023. 5. 3. 14:49

๐Ÿ‘‰๐ŸปJOIN ์ด๋ž€

  • JOIN ์—ฐ์‚ฐ์€ ๋‘ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜๋Š” ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.
    ๋ฐ์ดํ„ฐ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ์ •๋ณด๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋ฉด ํ…Œ์ด๋ธ”์„ ๋ถ„ํ• ํ•˜๊ณ  ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„์„ฑ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰๐ŸปJOIN์˜ ์ข…๋ฅ˜

INNER JOIN

  • ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ต์ง‘ํ•ฉ, ์ฆ‰ ๋‘ ํ…Œ์ด๋ธ”๊ฐ„ JOIN ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

OUTER JOIN

  • OUTER JOIN์ด๋ž€ ์กฐ์ธ ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์—†๋Š” ํ–‰๋„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN์ด ์žˆ๋‹ค.

CROSS JOIN

  • Cartesian Product(์นด๋””์…˜ ๊ณฑ)์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ์กฐ์ธ๋˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณฑ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

SELF JOIN

  • ์ž๊ธฐ์ž์‹ ๊ณผ ์ž๊ธฐ์ž์‹ ์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณต์‚ฌํ•ด์„œ ์กฐ์ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ”์— ๋ฐ˜๋“œ์‹œ ๋ณ„๋ช…์„ ๋ถ™์—ฌ์•ผํ•œ๋‹ค.

๐Ÿ‘‰๐ŸปJOIN์—์„œ ON๊ณผ WHERE์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ON : JOIN ์„ ํ•˜๊ธฐ ์ „ ํ•„ํ„ฐ๋ง์„ ํ•œ๋‹ค (=ON ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋ง์ด ๋œ ๋ ˆ์ฝ”๋“œ๋“ค๊ฐ„ JOIN์ด ์ด๋ฃจ์–ด์ง„๋‹ค.)
  • WHERE : JOIN ์„ ํ•œ ํ›„ ํ•„ํ„ฐ๋ง์„ ํ•œ๋‹ค (=JOIN์„ ํ•œ ๊ฒฐ๊ณผ์—์„œ WHERE ์กฐ๊ฑด์ ˆ๋กœ ํ•„ํ„ฐ๋ง์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ผ๋ฐ˜ ์กฐ๊ฑด์ ˆ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)

๐Ÿ‘‰๐ŸปSELECT ์ฟผ๋ฆฌ์˜ ์ˆ˜ํ–‰ ์ˆœ์„œ๋ฅผ ๋งํ•ด์ฃผ์„ธ์š”

  1. FROM ์œผ๋กœ ๊ฐ ํ…Œ์ด๋ธ”์„ ํ™•์ธํ•œ๋‹ค
  2. ON ์œผ๋กœ ์กฐ์ธ ์กฐ๊ฑด์„ ํ™•์ธํ•œ๋‹ค
  3. JOIN ์กฐ์ธ์ด ์‹คํ–‰๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ์…‹์œผ๋กœ ๋ชจ์•„์ง€๊ฒŒ๋œ๋‹ค.
  4. WHERE ๋ฐ์ดํ„ฐ์…‹์„ ํ˜•์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์›จ์–ผ์˜ ์กฐ๊ฑด์ด ๊ฐœ๋ณ„ ํ–‰์— ์ ์šฉ๋œ๋‹ค
  5. GROUP BY ์›จ์–ผ์กฐ๊ฑด์˜ ์ ์šฉ ํ›„ ๋‚˜๋จธ์ง€ ํ–‰์€ ๊ทธ๋ฃน๋ฐ”์ด ์ ˆ์— ์ง€์ •๋œ ์—ด์˜ ๊ณตํ†ต ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•œ๋‹ค. ์ฟผ๋ฆฌ์— ์ง‘๊ณ„ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  6. HAVING ๊ทธ๋ฃน๋ฐ”์ด์ ˆ์ด ํ€˜ใ…“๋ฆฌ์— ์žˆ์„ ๊ฒฝ์šฐ ํ—ค๋น™์ ˆ์˜ ์ œ์•ฝ์กฐ๊ฑด์ด ๊ทธ๋ฃนํ™”๋œ ํ–‰์— ์ ์šฉ๋œ๋‹ค.
  7. SELECT ์— ํ‘œํ˜„๋œ ์‹์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ ์šฉ๋œ๋‹ค.
  8. DISTINCT ํ‘œํ˜„๋œ ํ–‰์—์„œ ์ค‘๋ณต๋œ ํ–‰์€ ์‚ญ์ œํ•œ๋‹ค
  9. ORDER BY ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค
  10. LIMIT ์›ํ•˜๋Š” ๊ฐœ์ˆ˜๋งŒํผ ์ถœ๋ ฅํ•œ๋‹ค

๐Ÿ‘‰๐ŸปGROUP BY์˜ ์—ญํ• ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์ปฌ๋Ÿผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™” ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

*์ฐธ๊ณ ๋งํฌ: [MySQL] GROUP BY, HAVING, ORDER BY

๐Ÿ‘‰๐ŸปHAVING๊ณผ WHERE์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ์ฒ˜์Œ๋ถ€ํ„ฐ ํ…Œ์ด๋ธ” ์ž์ฒด์— ์กฐ๊ฑด์„ ๊ฑธ๊ณ ์‹ถ๋‹ค๋ฉด → WHERE
  • ๊ทธ๋ฃน๋ณ„๋กœ ๋ฌถ์ธ(group by) ์ปฌ๋Ÿฝ์— ์กฐ๊ฑด์„ ๊ฑธ๊ณ ์‹ถ๋‹ค๋ฉด → HAVING

๐Ÿ‘‰๐ŸปDELETE, TRUNCATE, DROP์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

DELETE

  • WHERE์ ˆ์„ ์‚ฌ์šฉํ•˜ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ ํƒํ•˜์—ฌ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • DELETE๋œ ๋ฐ์ดํ„ฐ๋Š” COMMIT ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์ด๋ผ๋ฉด, ROLLBACK ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

TRUNCATE

  •  ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ž๋™ COMMIT์ด ๋˜๋Š” ๋ช…๋ น์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฏธ ์ง€์šด ๋ฐ์ดํ„ฐ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค.

DROP

  • ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์™„์ „ํžˆ ๋‚ ๋ ค๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹, ํ…Œ์ด๋ธ” ์ž์ฒด๊ฐ€ ๋ชจ๋‘ ์ง€์›Œ์ง€๋ฉฐ, ํ•ด๋‹น ํ…Œ์ด๋ธ”์— ์ƒ์„ฑ๋˜์–ด์žˆ๋˜ ๋ชจ๋“  ์ธ๋ฑ์Šค๋„ ์‚ฌ๋ผ์ง„๋‹ค.
  • ์ž๋™ COMMIT์ด ๋˜๋Š” ๋ช…๋ น์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฏธ ์ง€์šด ๋ฐ์ดํ„ฐ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค.

โžก์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ณจ๋ผ์„œ ์‚ญ์ œํ•  ๋•Œ์—๋Š” DELETE ์‚ฌ์šฉ / ์ „์ฒด ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•  ๋•Œ์—๋Š” TRUNCATE ์‚ฌ์šฉ

๐Ÿ‘‰๐ŸปINSERT/ UPDATE/ DELETE/ LIKE/ NULL

INSERT

  • ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์œผ๋ฉฐ ํ•œ ๋ฒˆ์— ํ•œ ๊ฑด๋งŒ ์ž…๋ ฅ๋œ๋‹ค.
    ํ•ด๋‹น ์นผ๋Ÿผ๋ช…๊ณผ ์ž…๋ ฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ’์„ ์„œ๋กœ 1:1๋กœ ๋งคํ•‘ํ•ด์„œ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

UPDATE

  • ์ž…๋ ฅํ•œ ์ •๋ณด ์ค‘์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ

DELETE

  • ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๊ฐ€ ํ•„์š” ์—†๊ฒŒ ๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    FROM ๋ฌธ๊ตฌ๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

LIKE

  • ํŠน์ • ๋‚ด์šฉ์ด ํฌํ•จ๋œ ๋‹จ์–ด๋ฅผ ์ฐพ์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

NULL

  • ๋ฐ์ดํ„ฐ์— ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

๐Ÿ‘‰๐Ÿปํ‰๊ท , ํ•ฉ๊ณ„, ์ตœ๊ณ , ์ตœ์ €(์ง‘๊ณ„ํ•จ์ˆ˜)

  • AVG: ํ‰๊ท 
  • SUM: ํ•ฉ๊ณ„
  • MIN: ์ตœ์†Œ ๊ฐ’
  • MAX: ์ตœ๋Œ€ ๊ฐ’
  • COUNT: ํ–‰์˜ ๊ฐœ์ˆ˜

๐Ÿ‘‰๐Ÿป์ค‘๋ณต ์ œ๊ฑฐ

DISTINCT

  • SELECT DISTINCT(NAME), ID FROM POPLES ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์‹œ, NAME๊ณผ ID์˜ ํ•ฉ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์„œ ์ถœ๋ ฅ๋œ๋‹ค.

๐Ÿ‘‰๐ŸปIN, NOT IN ์„ค๋ช…

IN

  • (MySQL์—์„œ) IN์€ ํŠน์ • ๊ฐ’์ด ๋“ค์–ด์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์กฐํšŒํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • WHERE ์ปฌ๋Ÿผ๋ช… IN ('๊ฐ’', '๊ฐ’')
    WHERE ์ปฌ๋Ÿผ๋ช… IN (SELECT์ ˆ)

NOT IN

  • IN๊ณผ ๋ฐ˜๋Œ€๋กœ (MySQL์—์„œ) ํŠน์ • ๊ฐ’์ด ๋“ค์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ์กฐํšŒํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œํƒ€์ž…๋ณ€ํ™˜

CONCAT() 

CAST()


ํƒ€์ž… ๋ณ€ํ™˜ ํ˜•ํƒœ

SELECT CAST(๋ณ€ํ™˜๋Œ€์ƒ AS TYPE) FROM DUAL 
SELECT CONVERT(๋ณ€ํ™˜๋Œ€์ƒ, TYPE) FROM DUAL

 

๋ฌธ์ž โžก ์ˆซ์ž

SELECT CAST('123' AS UNSIGNED) FROM DUAL;

 

์ˆซ์ž โžก ๋ฌธ์ž

SELECT CAST(123 AS CHAR(3)) FROM DUAL;

SELECT CONVERT(202203020950, CHAR);

 

๋ฌธ์ž/์ˆซ์ž โžก ๋‚ ์งœ

SELECT CAST(20220302 AS DATE) FROM DUAL;   

SELECT CAST('20220302' AS DATE) FROM DUAL;


๐Ÿ“Œ๋‚ ์งœ ๊ด€๋ จ ํ•จ์ˆ˜

DATE_FORMAT(๋‚ ์งœ, 'ํฌ๋งท')

 

Comments