19. Views
Mục tiêu bài học: Hiểu cách tạo và sử dụng Views để đơn giản hóa truy vấn SQL.
📌 1. View là gì?
View là một bảng ảo được tạo từ kết quả của một truy vấn SQL. Nó giúp:
✔ Giảm độ phức tạp của truy vấn.
✔ Bảo mật dữ liệu bằng cách ẩn đi các cột nhạy cảm.
✔ Giúp tái sử dụng truy vấn phức tạp một cách dễ dàng.
💡 Ví dụ: Tạo một View hiển thị danh sách đơn hàng kèm thông tin khách hàng thay vì phải JOIN nhiều bảng.
🛠 2. Cách tạo View trong SQL
Cấu trúc cơ bản
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
🔹 Sau khi tạo, có thể sử dụng View như một bảng thông thường:
SELECT * FROM view_name;
⚙️ 3. Ví dụ thực tế: Đơn giản hóa truy vấn
1️⃣ Tạo bảng khách hàng (customers)
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
phone VARCHAR(20)
);
2️⃣ Tạo bảng đơn hàng (orders)
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id),
total_amount DECIMAL(10,2),
order_date DATE
);
3️⃣ Tạo View hiển thị danh sách đơn hàng kèm thông tin khách hàng
CREATE VIEW customer_orders AS
SELECT
o.id AS order_id,
c.name AS customer_name,
o.total_amount,
o.order_date
FROM orders o
JOIN customers c ON o.customer_id = c.id;
🔹 Sử dụng View thay vì JOIN thủ công:
SELECT * FROM customer_orders;
👉 View giúp đơn giản hóa truy vấn và dễ đọc hơn.
🔄 4. Cập nhật View
Sửa đổi View
CREATE OR REPLACE VIEW customer_orders AS
SELECT
o.id AS order_id,
c.name AS customer_name,
c.email,
o.total_amount,
o.order_date
FROM orders o
JOIN customers c ON o.customer_id = c.id;
🔹 CREATE OR REPLACE VIEW giúp cập nhật View mà không cần xóa.
Xóa View
DROP VIEW customer_orders;
🚨 5. View có cập nhật được không?
✅ Có thể UPDATE/DELETE/INSERT nếu View liên kết với một bảng duy nhất và không chứa:
GROUP BY,HAVING,DISTINCTJOINnhiều bảng- Hàm tổng hợp (
SUM,AVG,COUNT,...)
💡 Ví dụ: Cập nhật dữ liệu qua View
UPDATE customer_orders
SET total_amount = 500
WHERE order_id = 1;
👉 Nếu View không hỗ trợ cập nhật, cần sử dụng INSTEAD OF TRIGGER.
🎯 6. Bài tập thực hành
✅ Bài 1: Tạo View hiển thị tổng doanh thu theo khách hàng
Viết View hiển thị
customer_id,customer_name, vàtotal_spent(tổng tiền đã chi tiêu).
💡 Gợi ý lời giải:
CREATE VIEW customer_spending AS
SELECT
c.id AS customer_id,
c.name AS customer_name,
SUM(o.total_amount) AS total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id, c.name;
✅ Bài 2: Tạo View chỉ hiển thị khách hàng VIP (tổng chi tiêu > 1000$)
Viết View chỉ lấy khách hàng có tổng chi tiêu lớn hơn 1000$ từ View
customer_spending.
💡 Gợi ý lời giải:
CREATE VIEW vip_customers AS
SELECT *
FROM customer_spending
WHERE total_spent > 1000;
👉 Giờ chỉ cần SELECT * FROM vip_customers; là lấy được danh sách khách hàng VIP.
🔥 Tóm tắt bài học Ngày 19
✅ Views giúp đơn giản hóa truy vấn SQL.
✅ Cú pháp: CREATE VIEW view_name AS SELECT ....
✅ Có thể UPDATE/DELETE/INSERT trên View nếu nó liên kết với một bảng duy nhất.
✅ Thực hành: Tạo View tổng doanh thu khách hàng, lọc khách hàng VIP.
🚀 Tiếp theo: Phân tích hiệu suất truy vấn.
📌 Lộ trình: Học SQL trong 30 ngày.