SQL Server: Khung Nhìn (VIEW) | V1Study
Có thể bạn quan tâm
Tổng quan
Bạn đã biết đầu ra của câu lệnh SELECT là một tập kết quả thể hiện dưới dạng một bảng ảo, bạn có thể lưu trữ bảng ảo bằng cách sử dụng View (Khung nhìn). Những bảng từ đó khung nhìn được tạo được gọi là bảng cơ sở. Những bảng cơ sở này lại có thể là thuộc về các cơ sở dữ liệu khác nhau. Mỗi View có thể có tối đa 1024 cột và những hàng và cột của View được sinh ra ở dạng động khi View được tham chiếu.
View chỉ áp dụng cho câu lệnh SELECT, các cột của View cũng có thể được lấy từ các cột của View khác.
Bạn có thể có những thao tác trên View tương tự trên bảng như SELECT, INSERT, UPDATE, DELETE.
Phân loại View
Ta có thể có ba loại View cơ bản sau đây:
Standard View: View được tạo bao gồm các cột là các cột của các bảng hoặc các View khác.
Indexed View: View được tạo và được đặt chỉ mục Unique Clustered Index.
Partitioned View: View được tạo bao gồm các dữ liệu được phân cụm ngang từ một hoặc nhiều bảng.
Ưu điểm của View
- Tăng tính bảo mật thông qua các truy cập được phân quyền riêng.
- Cho phép tuỳ chỉnh việc hiển thị dữ liệu.
- Cho phép gộp dữ liệu trên nhiều bảng và View.
System View (View hệ thống)
Các thuộc tính của các đối tượng như bảng hay View có thể được lưu trữ vào các bảng hệ thống đặc biệt gọi là metadata (siêu dữ liệu). Metadata có thể được xem thông qua System View (View hệ thống).
System View sẽ tự động được chèn vào cơ sở dữ liệu của người dùng, bạn có thể xem hình dưới đây để thấy được điều này:

System View gồm các loại như: Catalog Views, Information Schema Views, Compatibility Views, Replication Views, Dynamic Management Views, Notification Services Views.
Tạo View
Cú pháp:
CREATE VIEW Tên_view AS Câu_lệnh_select;Lưu ý: bạn không tạo được View mà trong đó có hai cột có tên giống nhau.
Ví dụ, tạo một View để xem thông tin của tất cả các sinh viên sinh năm 1995:
CREATE VIEW vw_ViewStudent AS SELECT * FROM Student WHERE datepart(yy,dateofbirth)=1995;Thao tác với View
Mặc dù View là một bảng ảo nhưng nó cũng là bảng, nên việc thao tác với View khá tương tự như việc thao tác với bảng.
Dưới đây là một số minh họa cho việc thao tác với View.
* Câu lệnh Select:
SELECT * FROM vw_ViewStudent;SELECT * FROM vw_ViewStudent where id in(1, 3, 5);
Các câu lệnh select ở trên bản chất là lấy các bản ghi của bảng Student.
* Câu lệnh Insert:
Insert vw_ViewStudent(id, name) values (11, 'Alex');
Bản chất câu lệnh Insert ở trên là chèn bản ghi vào bảng Student. Bạn có thể sử dụng câu lệnh Select để kiểm tra: Select * from Student;
* Câu lệnh Update:
Update vw_ViewStudent set name = 'Victor' where id = 11;
Câu lệnh trên bản chất là update bản ghi của bảng Student.
* Câu lệnh Delete:
Delete from vw_ViewStudent where id = 11;
Câu lệnh trên bản chất là xóa bản ghi từ bảng Student.
* Sửa tên cột của View:
exec sp_rename 'vw_ViewStudent.phone','mobile';Câu lệnh trên sẽ sửa tên cột phone của View thành mobile.
Lưu ý: câu lệnh trên chỉ sửa tên cột của View, không làm thay đổi tên cột của bảng Student.
Sửa View
Bạn có thể sửa View bằng cách sử dụng câu lệnh ALTER VIEW, cú pháp như sau:
ALTER VIEW Tên_view AS Câu_lệnh_select;Ví dụ, View vw_ViewStudent sẽ được sửa lại để nó chỉ bao gồm các cột studentid, studentname và dateofbirth:
ALTER VIEW vw_ViewStudent AS SELECT studentid, studentname, dateofbirth FROM Student WHERE datepart(yy,dateofbirth)=1995;Xem định nghĩa View
Cách 1: Sử dụng thủ tục lưu trữ sp_helptext theo cú pháp sau:
EXEC sp_helptext 'Tên_view';Ví dụ:
EXEC sp_helptext 'vw_ViewStudent';Cách 2: Sử dụng hàm OBJECT_DEFINITION() theo cú pháp sau:
SELECT OBJECT_DEFINITION (OBJECT_ID('Tên_view'));Ví dụ:
SELECT OBJECT_DEFINITION (OBJECT_ID('vw_ViewStudent'));Cách 3: Sử dụng thủ tục lưu trữ sp_depends theo cú pháp sau:
EXEC sp_depends 'Tên_view';Ví dụ:
EXEC sp_depends 'vw_ViewStudent';Các tuỳ chọn khi tạo hoặc sửa View
1. WITH ENCRYPTION
Dùng để mã hoá định nghĩa View. Bạn sẽ không biết được View được định nghĩa như thế nào khi đã áp dụng tuỳ chọn này.
Cú pháp:
CREATE VIEW Tên_view WITH ENCRYPTION AS Câu_lệnh_select; Hoặc áp dụng khi sửa View: ALTER VIEW Tên_view WITH ENCRYPTION AS Câu_lệnh_select;Ví dụ, ta sửa View vw_ViewStudent để không cho phép người dùng xem thông tin về nó, ta làm như sau:
ALTER VIEW vw_ViewStudent WITH ENCRYPTION AS SELECT studentid, studentname, dateofbirth FROM Student WHERE datepart(yy,dateofbirth)=1995;Thực thi:
EXEC sp_helptext 'vw_ViewStudent';Kết quả:
The text for object 'vw_ViewStudent' is encrypted.2. WITH CHECK OPTION
Dùng để đảm bảo rằng những giá trị áp dụng khi sửa (UPDATE) bản ghi qua View phải đáp ứng được điều kiện đã đặt ra trong quá trình tạo View.
Cú pháp:
CREATE VIEW Tên_view AS Câu_lệnh_select WITH CHECK OPTION; Hoặc áp dụng khi sửa View: ALTER VIEW Tên_view AS Câu_lệnh_select WITH CHECK OPTION;Ví dụ, ta sửa View vw_ViewStudent để không cho phép người dùng xem thông tin về nó, ta làm như sau:
ALTER VIEW vw_ViewStudentAS SELECT studentid, studentname, dateofbirth FROM Student WHERE datepart(yy,dateofbirth)=1995 WITH CHECK OPTION;Thực thi:
Cập nhật trên cột dateofbirth của View vw_ViewStudent:
UPDATE vw_ViewStudent SET dateofbirth=getdate();Kết quả là xuất hiện một lỗi với nội dung như sau:
Msg 550, Level 16, State 1, Line 1 The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint. The statement has been terminated.Điều kiện ở câu lệnh SELECT đưa ra là năm phải = 1995, nhưng ở câu lệnh UPDATE thì năm sẽ là năm hiện tại (khác 1995), CHECK OPTION không cho phép làm điều này.
3. WITH SCHEMABINDING
View có thể được thiết lập ràng buộc vào giản đồ của các bảng được dùng để tạo ra nó bằng cách sử dụng WITH SCHEMABINDING. Khi đã thiết lập WITH SCHEMABINDING cho View rồi thì ta sẽ không thể sửa được cấu trúc của những cột dùng để tạo View nữa.
Cú pháp:
CREATE VIEW Tên_view WITH SCHEMABINDING AS Câu_lệnh_select; Hoặc áp dụng khi sửa View: ALTER VIEW Tên_view WITH SCHEMABINDING AS Câu_lệnh_select;Lưu ý: Bạn cần nói rõ các bảng tham gia tạo View thuộc chủ sở hữu nào bằng cú pháp: Chủ_sở_hữu.Tên_bảng. Trong trường hợp không tạo chủ sở hữu (người dùng) thì chủ sở hữu mặc định là dbo (dbo.Tên_bảng). Ví dụ:
ALTER VIEW vw_ViewStudent WITH SCHEMABINDINGAS SELECT studentid, studentname, dateofbirth FROM dbo.Student WHERE datepart(yy,dateofbirth)=1995;Thực thi:
ALTER TABLE Student ALTER COLUMN dateofbirth datetime; --sửa từ kiểu date thành datetimeKết quả ta nhận được lỗi sau:
Msg 5074, Level 16, State 1, Line 1 The object 'vw_ViewStudent' is dependent on column 'dateofbirth'. Msg 4922, Level 16, State 9, Line 1 ALTER TABLE ALTER COLUMN dateofbirth failed because one or more objects access this column.Chú ý: Bạn có quyền thiết lập tất cả các tuỳ chọn cho View nếu cần thiết như ví dụ dưới đây:
ALTER VIEW vw_ViewStudent WITH ENCRYPTION, SCHEMABINDINGAS SELECT studentid, studentname, dateofbirth FROM dbo.Student WHERE datepart(yy,dateofbirth)=1995 WITH CHECK OPTION;Tạo chỉ mục (INDEX) cho View
Để tạo chỉ mục (Index) cho một View nào đó bạn cần thiết lập tuỳ chọn WITH SCHEMABINDING cho View đó trước.
Lưu ý:
- Bạn chỉ thiết lập được Unique Clustered Index cho View, vì vậy cột hay tập cột của View được dùng để đặt chỉ mục phải chứa những giá trị hoặc tập giá trị duy nhất.
- Một điểm lưu ý nữa là bạn cần phải bỏ đi (nếu có) mệnh đề TOP và ORDER BY trước khi tạo chỉ mục cho View.
- Không được chứa hàm count() trong Hàm tập hợp.
- Không được sử dụng các loại Outer Join.
- Không tạo được index cho View khi View chứa mệnh đề HAVING.
Cú pháp:
CREATE | ALTER VIEW Tên_view WITH SCHEMABINDING AS Câu_lệnh_select; CREATE UNIQUE CLUSTERED INDEX Tên_index ON Tên_view(Các_cột);Ví dụ, ta tạo chỉ mục cho View vw_ViewStudent ở trên cho cột studentid như sau:
ALTER VIEW vw_ViewStudent WITH SCHEMABINDINGAS SELECT studentid, studentname, dateofbirth FROM dbo.Student WHERE datepart(yy,dateofbirth)=1995; CREATEUNIQUE CLUSTERED INDEXuniclus_vw_ViewStudent ON vw_ViewStudent(studentid);Sắp xếp trên View
Nếu bạn muốn tập kết quả của View được sắp xếp (ORDER BY) theo thứ tự tăng hay giảm của cột hay tập cột nào đó, bạn có thể sử dụng mệnh đề TOP(99.99) PERCENT ... ORDER BY như ví dụ dưới đây:
Ví dụ, ta sửa View vw_ViewStudent để tập kết quả trên View này sắp xếp theo chiều tăng dần của cột studentname (họ và tên sinh viên):
ALTER VIEW vw_ViewStudent AS SELECT TOP(99.99) PERCENT studentid, studentname, dateofbirth FROM Student ORDER BY studentname ASC;Xoá View
Để xoá View ta sử dụng câu lệnh DROP VIEW. Ví dụ:
DROP VIEW vw_ViewStudent;Từ khóa » Cách Tạo Bảng View Trong Sql
-
Khung Nhìn VIEW Trong SQL
-
VIEW Trong SQL Server
-
Giới Thiệu Views Trong SQL Server - Viblo
-
Sử Dụng VIEW Trong SQL - Học Sql Cơ Bản đến Nâng Cao - VietTuts
-
View Trong SQL Server | Comdy
-
Hướng Dẫn Thực Hành SQL | VIEWS - Deft Blog
-
Sử Dụng View Trong SQL Server - Hoclaptrinh
-
CREATE VIEW - Lệnh Tạo Bảng ảo - SQL & Database
-
View Trong SQL Server | How Kteam
-
Bài 41: Làm Việc Với View Trong SQL - TEDU
-
Lệnh Create View Trong MySQL (Tạo View Mới) - Freetuts
-
Cách Sử Dụng VIEW Trong SQL Server - Freetuts
-
VIEW Trong SQL, Lệnh VIEW, Cú Pháp Và Ví Dụ Minh Họa - Thủ Thuật
-
Tạo VIEW Trong SQL Server - GreenSQL