View

WASยท2025๋…„ 9์›” 29์ผ
0

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
5/7

๐Ÿ’ก View ๋ฅผ ์™œ์‚ฌ์šฉํ• ๊นŒ?

๋‹ค๋ฅธ ๋ถ€์„œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์œ ์šฉํ•œ ๊ธด ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ,์ด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ž์ฒด๋ฅผ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ•˜๋‚˜์˜ '๋ฐ”๋กœ๊ฐ€๊ธฐ' ์ฒ˜๋Ÿผ ์ €์žฅํ•ด๋‘๊ณ , ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๊ฐ„๋‹จํ•œ ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•

์™œ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

  • ์ฟผ๋ฆฌ๋ฅผ ์ž˜ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ด ์ฟผ๋ฆฌ๋ฅผ ๋งค๋ฒˆ ์ •ํ™•ํ•˜๊ฒŒ ์ž…๋ ฅํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  • ๋กœ์ง์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•ด๋‹น ์ฟผ๋ฆฌ๋ฅผ ๋‹ค ๋ฐ”๊ฟ”์„œ ์ „์†กํ•ด์•ผํ•˜๋Š” ๋ถˆํŽธํ•œ์ ์ด ์žˆ๋‹ค.
  • ๊ฐœ์ธ์ •๋ณด์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ๋…ธ์ถœ๋˜์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ๋‚ด์šฉ๋งŒ ๋ณด์ด๊ฒŒ ํ•ด์•ผํ•œ๋‹ค
    -> ์›๋ณธ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ ‘๊ทผ๊ถŒํ•œ์„ ์ฃผ์ง€ ์•Š๊ณ , ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ์ œํ•œ๋œ ์ปฌ๋Ÿผ์—๋งŒ ์ ‘๊ทผํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ
    -> VIEW๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ถŒํ•œ์ œ์–ด ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

โœ… View

  • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ” ์ด๋‹ค
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์ €์žฅ๋œ ํ•˜๋‚˜์˜ SELECT ์ฟผ๋ฆฌ๋ฌธ
  • ์‰ฝ๊ฒŒ๋งํ•ด ๋ฐ”ํƒ•ํ™”๋ฉด์˜ ๋ฐ”๋กœ๊ฐ€๊ธฐ ์•„์ด์ฝ˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค

์ฆ‰ View ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ฉฐ, ๋‹จ์ง€ ๋ณต์žกํ•œ SELECT ์ฟผ๋ฆฌ๋ฌธ ์ž์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค

๊ทธ๋Ÿฌ๋ฉด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์‹คํ–‰ ์—†์ด
SELECT * FROM ๋ฐ”๋กœ๊ฐ€๊ธฐ_๋ทฐ; ๋ผ๋Š” ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋กœ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค
์‚ฌ์šฉ์ž๋Š” ๋งˆ์น˜ ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋А๊ปด์ง„๋‹ค


โœ… VIEW ์ƒ์„ฑ ๋ฐฉ๋ฒ•
CREATE VIEW ๋ทฐ์ด๋ฆ„ AS SELECT ์ฟผ๋ฆฌ๋ฌธ;

// ex)
create view v_category_count as 
select u.name, count(o.order_id) as 'total_orders',
	count(case when category = '์ „์ž๊ธฐ๊ธฐ' then 1 end) as 'elcetronic_orders',
	count(case when category = '๋„์„œ' then 1 end) as 'book_orders',
	count(case when category = 'ํŒจ์…˜' then 1 end) as 'fasion_orders'
  from users u
  left join orders o 
  on u.user_id = o.user_id
  left  join products p
  on o.product_id = p.product_id
group by u.name;

์ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด v_category_count ๋ผ๋Š” view ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค

โœ… VIEW ์กฐํšŒ ๋ฐฉ๋ฒ•
์œ„์—์„œ ๋งŒ๋“  view ๊ฐ์ฒด๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•œ๋‹ค
SELECT * FROM v_category_count;

โœ… VIEW ์ˆ˜์ • ๋ฐฉ๋ฒ•
ALTER VIEW ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋’ค์— SELECT ๋ฌธ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค
๐Ÿ’ก View ์ด๋ฆ„์€ ๊ทธ๋Œ€๋กœ ๋‘ฌ์•ผํ•จ

alter view v_category_count as  // alert view ์ด๋ฆ„์€ ๊ทธ๋Œ€๋กœ
select u.name, count(o.order_id) as 'total_orders', 
	count(case when category = '์ „์ž๊ธฐ๊ธฐ' then 1 end) as 'elcetronic_orders',
	count(case when category = '๋„์„œ' then 1 end) as 'book_orders',
	count(case when category = 'ํŒจ์…˜' then 1 end) as 'fasion_orders',
	1 as 'alert_view' // ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ ์ถ”๊ฐ€
  from users u
  left join orders o 
  on u.user_id = o.user_id
  left  join products p
  on o.product_id = p.product_id
group by u.name;

โœ… VIEW ์‚ญ์ œ ๋ฐฉ๋ฒ•
DROP VIEW ๋กœ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅ
DROP VIEW v_category_count;


์‹ค๋ฌด์—์„œ๋Š” VIEW๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค
์žฅ์ ์€ VIEW๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒƒ์ด๊ณ 
๋‹จ์ ์€ VIEW ์•ˆ์— ์ฟผ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ํฌ๋ฉด ๋งŽ์€ ์„ฑ๋Šฅ์ด ์žˆ์„์ˆ˜๋„ ์žˆ์œผ๋ฉฐ
๋ทฐ๋ฅผ ์ค‘์ฒฉ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด, ์„ฑ๋Šฅ์ €ํ•˜์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค

VIEW๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์กฐํšŒ์šฉ ์ƒ๊ฐํ•˜๋Š”๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์›์น™์ด๋‹ค

VIEW์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ • ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
JOIN ์ง‘๊ณ„ํ•จ์ˆ˜ GROUP BY DISTINCT ๋“ฑ ์„ ์‚ฌ์šฉํ•œ ๋ณต์žกํ•œ ๋ทฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ
INSERT, DELETE, UPDATE ๊ฐ€ ๋ถˆ๊ฐ€ํ•˜๋‹ค

๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ผ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด, ๋ทฐ๊ฐ€ ์•„๋‹Œ ์›๋ณธํ…Œ์ด๋ธ”์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค

profile
์šฐ์ธก ์ƒ๋‹จ ํ–‡๋‹˜๋ชจ์–‘ ํด๋ฆญํ•˜์…”์„œ ๋ฌด์กฐ๊ฑด ์•ผ๊ฐ„๋ชจ๋“œ๋กœ ๋ด์ฃผ์„ธ์š”!!

0๊ฐœ์˜ ๋Œ“๊ธ€