- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
Giới thiệu về View
Bài viết này mình sẽ nói một vài điều về view trong SQL Server. View là gì? View là một bảng ảo mà dữ liệu chứa trong nó được mô tả bởi một câu truy vấn.
1. Khái niệm View
- Ta có ví dụ đơn giản về view:
--Tạo một bảng gốc BaseTable và dữ liệu trong nó
CREATE TABLE BaseTable
(
CustomerID VARCHAR(20),
CustomerName VARCHAR(200),
CustomerEmail VARCHAR(200),
CustomerDOB DATETIME
);
INSERT INTO BaseTable(CustomerID, CustomerName, CustomerDOB)
SELECT 'MS001','Wayne Rooney','2005/05/05'
UNION ALL
SELECT 'MS002','Rio Ferdinand','2006/06/06'
UNION ALL
SELECT 'MS003','Ashley Young','2007/07/07'
UNION ALL
SELECT 'MS004','Nemanja Vidic','2008/08/08'
UNION ALL
SELECT 'MS005','De Gea','2009/09/09';
--Tạo một View có tên ViewBaseTable:
CREATE VIEW ViewBaseTable
AS
SELECT CustomerID, CustomerName, CustomerDOB
FROM BaseTable
ViewBaseTable đã được tạo ra, dữ liệu trong View này chính là kết quả trả về của câu truy vấn.
SELECT CustomerID, CustomerName, CustomerDOB
FROM BaseTable
Về logic, ta có thể coi View như 1 bảng bình thường, tức là có thể truy vấn, thay đổi dữ liệu, tạo index trên các cột của View, v.v…
Về mặt vật lý, View KHÔNG chứa dữ liệu. Đúng như tên gọi của nó, View chỉ là một khung nhìn, cấu trúc của View trong CSDL chỉ là một câu lệnh SELECT tham chiếu đến các bảng khác.
Nhiều bạn cho rằng, sử dụng View thì truy vấn sẽ nhanh hơn. Thực chất không phải như vậy. Với ví dụ View ở trên:
SELECT *
FROM ViewBaseTable
Thì SQL Server xử lý nó cũng như sau:
SELECT *
FROM (
SELECT CustomerID,
CustomerName,
CustomerDOB
FROM BaseTable
) DT
Điều này giải thích rất đơn giản. Vì View không chưa dữ liệu, nên khi làm việc với View, bắt buộc hệ thống phải thực hiện lại truy vấn tạo View.
2. Khi nào sử dụng view:
Trong các hệ thống lớn, nhiều lúc chúng ta tưởng rằng mình đang SELECT trên một bảng X. Nhưng có thể, X chỉ là synonyms của View Y, mà Y lại tham chiếu lên nhiều bảng Z1, Z2, Z3, … khác nhau.
- Khi bạn muốn user chỉ có thể truy cập giới hạn một số lượng cột ( trong câu lệnh SELECT ), hoặc số lượng dòng (thêm WHERE để lọc điều kiện ) nhất định.
- Khi một câu truy vấn phức tạp trong tương lai có thể phải sử dụng lại nhiều lần. Tạo View để lưu câu truy vấn. Trường hợp hay xảy ra nhất là các câu truy vấn tính toán, tổng hợp dữ liệu.
- Không muốn user biết được tên bảng, cấu trúc thật sự của bảng.
3. Các loại view:
Trong thực tế các loại View mà ta gặp thường có dạng sau
- Là 1 tập các cột trong 1 bảng (SELECT không đủ cột)
- Là 1 tập các dòng trong 1 bảng (SELECT có mệnh đề WHERE)
- Là 1 tập các dòng, các cột trong 1 bảng (Kết hợp của hai trường hợp trên)
- Là 1 tập kết quả của các phép JOIN
- Là 1 truy vấn tổng hợp, sử dụng các hàm trên một tập giá trị như SUM, COUNT, MIN, MAX, v.v…
- Là tổng hợp của các trường hợp trên.
Ngoài cách phân loại trên, còn hai kiểu View đặc biệt mà ít người để ý đến. Đó là Updatable View và Partition View
4. Update View:
Như đã nói ở trên, View cũng có thể coi như là 1 bảng. Vì vậy có thể thực hiện các thao tác DML ( Insert, Update, Delete ) trên View. Và khi thay đổi dữ liệu trong View thì những bảng liên quan đến View dữ liệu cũng sẽ thay đổi theo.
Với ví dụ đã nói ở đầu bài.
DELETE FROM ViewBaseTable
Sau khi thực hiện câu lệnh này thì toàn bộ các rows trong BaseTable cũng bị xóa. Vì thế khi làm việc với View, các bạn nên để ý xem View của mình có phải Updatable View hay không. Nếu có thì nên GRANT quyền cho User chỉ được phép SELECT trên View để tránh trường hợp đáng tiếc.
View không phải là Updatable trong một số tình huống sau:
- Trong View sử dụng các hàm như SUM, COUNT, MIN, MAX, v.v…
- Sử dụng các mệnh đề UNION, UNION ALL, CROSSJOIN, INTERSECT, EXCEPT, v.v….
Chi tiết các bạn có thể tham khảo thêm trong MSDN
5. Partition View:
Nếu View có dạng sau thì được gọi là Partition View
SELECT
FROM T1
UNION ALL
SELECT
FROM T2
UNION ALL
...
SELECT
FROM Tn
Trong đó T1, T2,…Tn là các bảng có thể ở nhiều Server khác nhau.
Nguồn sưu tầm