Trong SQL Server, bạn có thể truy vấn dưới dạng các dạng xem. Chế độ xem có lợi vì nhiều lý do, bao gồm bảo mật, khả năng sử dụng và sự tiện lợi.
Trong SQL Server, một dạng xem là một bảng ảo có nội dung được xác định bởi một truy vấn. Về cơ bản, nó là một truy vấn viết trước được lưu trữ trên cơ sở dữ liệu.
Một chế độ xem bao gồm một SELECT
và khi bạn chạy một truy vấn đối với dạng xem, bạn sẽ thấy kết quả của nó giống như khi mở một bảng. Chế độ xem được gọi là bảng ảo vì chúng có thể tập hợp dữ liệu từ nhiều bảng, cũng như dữ liệu tổng hợp và hiển thị nó như thể nó là một bảng duy nhất.
Lợi ích của Chế độ xem
Một dạng xem có thể hữu ích khi có nhiều người dùng với các cấp độ truy cập khác nhau, tất cả những người này đều cần xem các phần dữ liệu trong cơ sở dữ liệu (nhưng không nhất thiết là tất cả dữ liệu). Chế độ xem có thể thực hiện những việc sau:
- Hạn chế quyền truy cập vào các hàng cụ thể trong bảng
- Hạn chế quyền truy cập vào các cột cụ thể trong bảng
- Nối các cột từ nhiều bảng và trình bày chúng như thể chúng là một phần của một bảng duy nhất
- Trình bày thông tin tổng hợp (chẳng hạn như kết quả của
COUNT()
chức năng)
Cách tạo chế độ xem
Bạn tạo chế độ xem bằng cách sử dụng CREATE VIEW
, theo sau là SELECT
tuyên bố.
CREATE VIEW ViewName AS SELECT ...
Bây giờ chúng tôi sẽ tạo một chế độ xem từ truy vấn trước đó của chúng tôi.
-
Thiết kế Chế độ xem
Lấy truy vấn từ ví dụ trước của chúng tôi và tiền tố nó bằng CREATE VIEW RecentAlbums AS .
Đồng thời xóa
ORDER BY
mệnh đề, bởi vì các chế độ xem không hỗ trợ mệnh đề này (trừ khiTOP
,OFFSET
hoặcFOR XML
cũng được chỉ định).Ngoài ra, hãy thêm dấu chấm phẩy vào cuối câu lệnh, làm dấu chấm dứt câu lệnh (thêm thông tin về điều đó bên dưới).
Mã mẫu
Dưới đây là mã từ ví dụ của chúng tôi, với
ORDER BY
mệnh đề bị xóa và dấu chấm phẩy được thêm vào làm dấu chấm dứt câu lệnh.Tôi cũng đã định dạng lại nó một chút để dễ đọc hơn).
CREATE VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));
Trong ví dụ này, tôi đã thêm dấu chấm phẩy vào cuối dạng xem. Trình thiết kế truy vấn không bao gồm điều này, nhưng bạn nên đưa nó vào.
Dấu chấm phẩy là một phần của tiêu chuẩn ANSI SQL-92. Nó là một ký tự kết thúc câu lệnh.
Ngoài ra, Microsoft đã thông báo rằng các câu lệnh Transact-SQL kết thúc bằng dấu chấm phẩy không được dùng trong SQL Server 2016 và chúng sẽ không được hỗ trợ trong phiên bản tương lai (SQL Server trước đây đã sử dụng
GO
từ khóa dưới dạng dấu chấm dứt câu lệnh thay vì dấu chấm phẩy). -
Thực thi Chế độ xem
Bây giờ thực thi chế độ xem giống như bạn thực hiện bất kỳ truy vấn nào khác.
Nhấp vào Execute trên thanh công cụ.
Bây giờ bạn có thể điều hướng đến chế độ xem trong Trình khám phá đối tượng. Mở rộng nó ra và bạn sẽ thấy các cột cũng như kiểu dữ liệu và thuộc tính của chúng - như thể nó là một bảng.
-
Truy vấn chế độ xem
Bây giờ chế độ xem đã được tạo, bạn có thể truy vấn chế độ xem bằng cách chạy
SELECT
tuyên bố chống lại nó.Vì vậy, bạn có thể truy vấn chế độ xem mới được tạo của chúng tôi bằng cách sử dụng
SELECT * FROM RecentAlbums;
. -
Lọc Chế độ xem
Một trong những điều tốt về chế độ xem là bạn có thể áp dụng tiêu chí lọc của riêng mình để chống lại chúng - lọc thêm kết quả.
Ví dụ:bạn có thể thêm
WHERE Genre = 'Pop'
, để chế độ xem chỉ trả về pop album trong 10 năm qua.
Thay đổi chế độ xem
Bạn có thể sửa đổi chế độ xem của mình bằng cách sử dụng ALTER VIEW
thay cho câu lệnh CREATE VIEW
tuyên bố.
-
Thiết kế Dạng xem Thay đổi
Ở đây, chúng tôi sẽ sửa đổi quan điểm của mình để trả lại các album trong 20 năm qua thay vì chỉ 10.
Đó là một bộ sưu tập của trường học khá cũ, vì vậy bất kỳ album nào được phát hành trong vòng 20 năm qua đều được phân loại là "gần đây" :)
Chúng tôi cũng sẽ trả về một cột khác: Artists.ActiveFrom
Mã mẫu
Đây là mã chúng tôi sử dụng cho ví dụ:
ALTER VIEW RecentAlbums AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
-
Truy vấn chế độ xem
Bây giờ, truy vấn chế độ xem sẽ trả về giá trị 20 năm của album. Nó cũng sẽ hiển thị ngày nghệ sĩ hoạt động.