Trong bài này, tôi sẽ giới thiệu về View (còn gọi là bảng ảo). Bản thân View không chứa dữ liệu như Table. View chỉ truy vấn kết hợp dữ liệu từ một bảng hay nhiều bảng có quan hệ lại với nhau.
1. Mục đích
- Hạn chế tính phức tạp của dữ liệu đến với người dùng
- Kết nối dữ liệu từ nhiều bảng lại với nhau
- Sử dụng tài nguyên server để thực hiện việc truy vấn
- Tạo ra một bảng ảo có dữ liệu như yêu cầu
- Kết hợp một số hàm và phương thức tạo ra các cột mới
2. Cách tạo
Cú pháp:
CREATE VIEW <Tên_View>
AS
<Câu lệnh SELECT>
Ví dụ 1: Tạo View từ bảng DonHang gồm 4 cột MaDonHang, NgayDatHang, DiaChiNhanHang và MaBuuChinh
1 2 3 4 5 6 7 |
CREATE VIEW vwDonHang AS SELECT [MaDonHang] ,[NgayDatHang] ,[DiaChiNhanHang] ,[MaBuuChinh] FROM [dbo].[DonHang] |
Sử dụng lệnh Select trên View để xem kết quả
1 |
SELECT * FROM vwDonHang |
Kết quả:

Ví dụ 2: Tạo View từ 2 bảng DonHang và KhachHang với điều kiện lọc NgayDatHang để lấy ra thông tin đơn hàng
1 2 3 4 5 6 |
CREATE VIEW vwThongTinDonHang AS SELECT MaDonHang, dh.MaKhachHang, kh.TenKhachHang, dh.NgayDatHang, dh.DiaChiNhanHang FROM DonHang dh JOIN KhachHang kh ON dh.MaKhachHang = kh.MaKhachHang WHERE dh.NgayDatHang IS NOT NULL |
Kết quả:

Ví dụ 3: Tạo View từ 3 bảng thực hiện tính tổng tiền đơn hàng theo từng khách hàng.
1 2 3 4 5 6 7 8 |
CREATE VIEW vwTinhTien AS SELECT dh.MaDonHang, kh.TenKhachHang, SUM(ct.GiaSanPham * ct.SoLuong) TongTien FROM DonHang dh JOIN KhachHang kh ON dh.MaKhachHang = kh.MaKhachHang JOIN DonHangChiTiet ct ON dh.MaDonHang = ct.MaDonHang WHERE MONTH(dh.NgayDatHang)=12 AND YEAR(dh.NgayDatHang)=2017 GROUP BY dh.MaDonHang, kh.TenKhachHang |
Kết quả:

3. Mã hóa Views
Để mã hóa View các bạn thêm khai báo WITH ENCRYPTION trong câu lệnh tạo View
Cú pháp:
CREATE VIEW <Tên_View>
WITH ENCRYPTION
AS
<Câu lệnh SELECT>
Ví dụ 4: Tạo view giống ví dụ 3 với thuộc tính WITH ENCRYPTION
1 2 3 4 5 6 7 8 |
CREATE VIEW vwTinhTien WITH ENCRYPTION AS SELECT dh.MaDonHang, kh.TenKhachHang, SUM(ct.GiaSanPham * ct.SoLuong) TongTien FROM DonHang dh JOIN KhachHang kh ON dh.MaKhachHang = kh.MaKhachHang JOIN DonHangChiTiet ct ON dh.MaDonHang = ct.MaDonHang GROUP BY dh.MaDonHang, kh.TenKhachHang |
Chú ý:
- WITH ENCRYPTION không sử dụng từ khóa OPTION
- Nếu sử dụng ALTER VIEW, View sẽ bị thay đổi, DROP VIEW thì View sẽ bị xóa.
- Sử dụng lệnh sp_helptext vwTinhTien sẽ có thông báo View đã bị mã khóa như sau: The text for object ‘vwTinhTien’ is encrypted.