Khung nhìn VIEW trong SQL

Create View trong SQL là gì? Cách tạo view trong SQL như thế nào? Hãy cùng Quantrimang.com tìm hiểu mọi điều cần biết về view trong SQL nhé!

Ngôn ngữ truy vấn có cấu trúc (Structured Query Language = SQL) sử dụng nhiều cấu trúc dữ liệu khác nhau, trong đó bảng là một cấu trúc được sử dụng phổ biến nhất. Tuy nhiên, các bảng có những hạn chế nhất định. Chẳng hạn, bạn không thể giới hạn người dùng chỉ có quyền truy cập vào một phần của bảng. Người dùng phải được cấp quyền truy cập vào toàn bộ bảng, không chỉ một vài cột trong đó.

Một ví dụ khác, giả sử bạn muốn kết hợp dữ liệu từ nhiều bảng khác vào một cấu trúc mới, nhưng lại không muốn xóa các bảng gốc. Bạn chỉ có thể tạo một bảng khác, tuy nhiên, sau đó bạn sẽ có dữ liệu dư thừa được lưu trữ ở nhiều nơi. Điều này có thể gây ra nhiều bất tiện: nếu một số dữ liệu của bạn thay đổi, bạn sẽ phải cập nhật dữ liệu đó ở nhiều nơi. Trong những trường hợp như thế này, cách tạo view trong SQL sẽ hữu ích.

Trong SQL, một khung nhìn VIEW là một bảng ảo trong cơ sở dữ liệu có nội dung được định nghĩa thông qua một câu lệnh SQL nào đó. Một VIEW bao gồm các hàng và cột giống như một bảng thực. Các trường trong một khung nhìn là các trường từ một hoặc nhiều bảng thực trong Database.

Điểm khác biệt giữa khung nhìn VIEW và bảng là VIEW không được xem là một cấu trúc lưu trữ dữ liệu tồn tại trong cơ sở dữ liệu. Thực chất dữ liệu quan sát được trong VIEW được lấy từ các bảng thông qua câu lệnh truy vấn dữ liệu và được sử dụng để hạn chế truy cập cơ sở dữ liệu hoặc để ẩn dữ liệu phức tạp.

Ở bài viết này, Quantrimang sẽ hướng dẫn chi tiết cho bạn cách sử dụng VIEW trong SQL với cú pháp và những ví dụ cụ thể để dễ hình dung và nắm bắt lệnh tốt hơn.

Tạo VIEW trong SQL

VIEW được tạo ra bởi câu lệnh CREATE VIEW. Các VIEW có thể được tạo từ một bảng đơn, nhiều bảng hoặc từ VIEW khác.

Cú pháp cơ bản của lệnh CREATE VIEW trong SQL như sau:

CREATE VIEW ten_view AS
SELECT cot1, cot2.....
FROM ten_bang
WHERE [dieu_kien];

Bạn có thể thêm nhiều bảng trong câu lệnh SELECT tương tự như cách sử dụng chúng trong một truy vấn SQL SELECT bình thường.

Ví dụ về VIEW trong SQL

Giả sử bảng NHANVIEN có các bản ghi như sau:

 +----+----------+-----+-----------+----------+
| ID | TEN      |TUOI | DIACHI    | LUONG    |
+----+----------+-----+-----------+----------+
|  1 | Thanh    |  32 | Haiphong  |  2000.00 |
|  2 | Loan     |  25 | Hanoi     |  1500.00 |
|  3 | Nga      |  23 | Hanam     |  2000.00 |
|  4 | Manh     |  25 | Hue       |  6500.00 |
|  5 | Huy      |  27 | Hatinh    |  8500.00 |
|  6 | Cao      |  22 | HCM       |  4500.00 |
|  7 | Lam      |  24 | Hanoi     | 10000.00 |
+----+----------+-----+-----------+----------+

Sau đây là một ví dụ để tạo một VIEW từ bảng NHANVIEN. VIEW này được sử dụng để lấy tên và tuổi từ bảng NHANVIEN.

SQL > CREATE VIEW NHANVIEN_VIEW AS
SELECT ten, tuoi
FROM NHANVIEN;

Bây giờ, bạn có thể truy vấn NHANVIEN_VIEW theo cách tương tự như bạn truy vấn bảng thực tế, ví dụ:

SQL > SELECT * FROM NHANVIEN_VIEW;

Lệnh trên trả về kết quả:

 +----------+-----+
| ten      | tuoi|
+----------+-----+
| Thanh    |  32 |
| Loan     |  25 |
| Nga      |  23 |
| Manh     |  25 |
| Huy      |  27 |
| Cao      |  22 |
| Lam      |  24 |
+----------+-----+

Tùy chọn WITH CHECK OPTION trong SQL

WITH CHECK OPTION là một tùy chọn của lệnh CREATE VIEW. Mục đích của WITH CHECK OPTION là bảo đảm rằng tất cả UPDATEINSERT thỏa mãn các điều kiện trong định nghĩa VIEW.

Nếu chúng không thỏa mãn các điều kiện, UPDATE và INSERT sẽ trả về một lỗi.

Ví dụ sau tạo ra view NHANVIEN_VIEW với tùy chọn WITH CHECK OPTION.

CREATE VIEW NHANVIEN_VIEW AS
SELECT ten, tuoi
FROM NHANVIEN
WHERE tuoi IS NOT NULL
WITH CHECK OPTION;

Trong trường hợp này, nếu bạn cố gắng UPDATE hoặc INSERT NHANVIEN_VIEW với giá trị tuoi = null thì sẽ xảy ra lỗi, còn nếu tuoi khác NULL thì UPDATE hoặc INSERT sẽ thành công.

UPDATE một VIEW trong SQL

Một VIEW có thể được cập nhật dưới các điều kiện cụ thể sau:

  • Mệnh đề SELECT không được chứa từ khoá DISTINCT.
  • Mệnh đề SELECT không được chứa các hàm tổng.
  • Mệnh đề SELECT không được chứa các hàm tập hợp.
  • Mệnh đề SELECT không được chứa các biểu thức tính toán.
  • Mệnh đề SELECT không được chứa mệnh đề ORDER BY.
  • Mệnh đề FROM không được chứa nhiều bảng.
  • Mệnh đề WHERE không được chứa các truy vấn con.
  • Truy vấn không chứa GROUP BY hoặc HAVING.
  • Các cột được ước lượng không thể được update.
  • Tất cả các cột NOT NULL từ bảng ban đầu phải được select trong VIEW để truy vấn INSERT hoạt động.

Vì vậy, nếu một VIEW thỏa mãn tất cả các quy tắc trên thì bạn có thể sử dụng câu lệnh UPDATE cho VIEW đó. Ví dụ sau cập nhật tuoi cho nhân viên có tên là Thanh.

SQL > UPDATE NHANVIEN_VIEW
SET AGE = 35
WHERE ten = 'Thanh';

Cuối cùng, bảng NHANVIEN ban đầu được update và theo đó VIEW được cập nhật. Bây giờ, thử truy vấn bảng ban đầu và lệnh SELECT sẽ cho kết quả:

 +----+----------+-----+-----------+----------+
| ID | TEN      |TUOI | DIACHI    | LUONG    |
+----+----------+-----+-----------+----------+
|  1 | Thanh    |  35 | Haiphong  |  2000.00 |
|  2 | Loan     |  25 | Hanoi     |  1500.00 |
|  3 | Nga      |  23 | Hanam     |  2000.00 |
|  4 | Manh     |  25 | Hue       |  6500.00 |
|  5 | Huy      |  27 | Hatinh    |  8500.00 |
|  6 | Cao      |  22 | HCM       |  4500.00 |
|  7 | Lam      |  24 | Hanoi     | 10000.00 |
+----+----------+-----+-----------+----------+

Chèn hàng vào VIEW trong SQL

Các hàng dữ liệu có thể được chèn vào trong một VIEW. Các quy tắc tương tự UPDATE cũng áp dụng cho lệnh INSERT.

Ở đây không thể chèn hàng vào trong NHANVIEN_VIEW bởi ta không select tất cả các cột NOT NULL từ bảng ban đầu vào trong VIEW. Chúng ta chèn các hàng vào trong một VIEW theo cách tương tự khi bạn chèn chúng vào trong một bảng.

Xóa hàng từ VIEW trong SQL

Các hàng dữ liệu có thể bị xóa khỏi một VIEW. Các quy tắc tương tự UPDATE và INSERT cũng áp dụng cho lệnh DELETE trong SQL.

Ví dụ sau sẽ xóa một hàng có TUOI = 22:

SQL > DELETE FROM NHANVIEN_VIEW
WHERE tuoi = 22;

Kết quả một hàng trong bảng NHANVIEN ban đầu sẽ bị xóa và kết quả tương tự với chính VIEW đó. Bây giờ, thử truy vấn bảng ban đầu, và lệnh SELECT sẽ cho kết quả:

 +----+----------+-----+-----------+----------+
| ID | TEN      |TUOI | DIACHI    | LUONG    |
+----+----------+-----+-----------+----------+
|  1 | Thanh    |  32 | Haiphong  |  2000.00 |
|  2 | Loan     |  25 | Hanoi     |  1500.00 |
|  3 | Nga      |  23 | Hanam     |  2000.00 |
|  4 | Manh     |  25 | Hue       |  6500.00 |
|  5 | Huy      |  27 | Hatinh    |  8500.00 |
|  7 | Lam      |  24 | Hanoi     | 10000.00 |
+----+----------+-----+-----------+----------+

Xóa VIEW trong SQL

Bạn có thể xóa VIEW nếu nó không còn cần thiết. Cú pháp như sau:

DROP VIEW ten_view;

Ví dụ xóa view NHANVIEN_VIEW từ bảng ban đầu:

DROP VIEW NHANVIEN_VIEW;

Những cách sử dụng View phổ biến trong SQL

Một database tốt sẽ chứa các view vì những lí do sau đây:

  • Giới hạn truy cập dữ liệu - Trình xem cung cấp một cấp độ bảo mật bảng bổ sung bằng cách hạn chế truy cập tới một nhóm hàng và cột của bảng được xác định trước.
  • Ẩn độ phức tạp của dữ liệu - Một trình xem có thể ẩn độ phức tạp hiện có ở nhiều bảng liên quan tới nhau.
  • Đơn giản hóa lệnh cho người dùng - Cửa sổ xem cho phép người dùng chọn thông tin từ nhiều bảng mà không cần người dùng phải thực sự biết cách triển khai một kết nối.
  • Lưu trữ các truy vấn phức tạp - Trình xem có thể được dùng để lưu trữ các truy vấn phức tạp.
  • Đổi lại tên cột - Trình xem cũng có thể được dùng để đổi lại tên cột với điều kiện số cột trong chế độ xem phải khớp với số cột được chỉ định trong câu lệnh chọn. Như vậy, việc đổi tên giúp ẩn tên các cột của bảng cơ sở.
  • Hỗ trợ nhiều chế độ xem - Các trình xem khác nhau có thể được tạo trên cùng bảng cho người dùng khác nhau.

Trong phần tiếp theo, chúng ta sẽ tìm hiểu về cách sử dụng mệnh đề HAVING trong SQL, các bạn nhớ theo dõi nhé.

Bài trước: Lệnh TRUNCATE TABLE trong SQL

Bài tiếp: Mệnh đề HAVING trong SQL

Thứ Tư, 20/09/2023 16:57
3,717 👨 81.963
0 Bình luận
Sắp xếp theo
    ❖ Học SQL