데이터베이스

10. 효율적 쿼리_뷰 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 19. 20:26

1. 뷰(view)

  • SELECT의 결과로 만들어지는 가상의 테이블
  • 쿼리 단순화 가능
  • 모든 데이터를 보여줄 필요가 없어짐
# 뷰 생성
USE VIEW 뷰이름 AS SELECT 문;

# 뷰 삭제
DROP VIEW 뷰이름;

 

2. 뷰에 대한 작업 제한

  • 조회는 제한이 없을지 모르나 삽입, 수정, 삭제 등은 안될 '수도' 있다.
  • 예제
CREATE DATABASE IF NOT EXISTS example;
USE example;

CREATE TABLE IF NOT EXISTS users(
    id INT AUTO_INCREMENT PRIMARY KEY,
    person VARCHAR(255) NOT NULL,
    age INT,
    city VARCHAR(255),
    email VARCHAR(255) NOT NULL
);

INSERT INTO users (person, age, city, email) VALUES
    ('John', 25, 'New York', 'john@example.com'),
    ('Alice', 30, 'Los Angeles', 'alice@example.com'),
    ('Bob', 28, 'Chicago', 'bob@example.com'),
    ('Eve', 35, 'San Francisco', 'eve@example.com'),
    ('Charlie', 22, 'Houston', 'charlie@example.com');
    
SELECT * FROM users;

CREATE VIEW example_view 
AS SELECT id, person, age, email FROM users WHERE age >= 28;

SELECT * FROM example_view;

-- 뷰를 대상으로 데이터 삽입
INSERT INTO example_view (person, age, email) VALUES ('Frank', 40, 'frank@example.com');
-- 불가능
INSERT INTO example_view (person, city) VALUES (40, 'Miami');

-- 뷰를 대상으로 데이터 업데이트
UPDATE example_view SET person = 'UpdatedName' WHERE id = 2;

-- 뷰를 대상으로 데이터 삭제
DELETE FROM example_view WHERE id = 3;

-- 뷰 삭제
DROP VIEW example_view;


-- 집계함수를 이용한 view
CREATE VIEW age_average_view AS
SELECT AVG(age) AS average_age
FROM users;

-- 삽입, 삭제, 수정 불가능
SELECT * FROM age_average_view;

SELECT city, COUNT(person) AS population
FROM users
GROUP BY city;