Tags:

Hướng dẫn thực hành SQL | VIEWS

SQL View là một dạng table ảo, một View cũng có các dòng, cột tương tự như một bảng thật trong database. Chúng ta có thể khởi tạo một View bằng cách chọn các trường dữ liệu trong một hay nhiều bảng của database dựa trên một điều kiện cụ thể.

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu các thao tác cơ bản với một View như khởi tạo, xoá, và cập nhật View.

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 view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];

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.

Sau khi tạo thành công, View giờ đây giống như một bảng ảo mà khi truy xuất đến nó sẽ trả về kết quả tương ứng là các trường chúng ta đã chỉ định khi khởi tạo.

Đ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. Các thao tác INSERT, UPDATE, DELETE trên View cũng sẽ ảnh hưởng đến các table thật trong database.

Ví dụ về VIEW trong SQL

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

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

SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS;

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

SQL > SELECT * FROM CUSTOMERS_VIEW;

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

+----------+-----+
| name     | age |
+----------+-----+
| Ramesh   |  32 |
| Khilan   |  25 |
| kaushik  |  23 |
| Chaitali |  25 |
| Hardik   |  27 |
| Komal    |  22 |
| Muffy    |  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ả UPDATE và INSERT 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 khi tạo ra CUSTOMERS_VIEW với tùy chọn WITH CHECK OPTION không cho phép AGE được null.

CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM  CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;

Trong trường hợp này, nếu bạn cố gắng UPDATE hoặc INSERT CUSTOMERS_VIEW với giá trị age= 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à Ramesh.

SQL > UPDATE CUSTOMERS_VIEW
   SET AGE = 35
   WHERE name = 'Ramesh';

Cuối cùng, bảng CUSTOMERS 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 | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 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 CUSTOMERS_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 CUSTOMERS_VIEW
   WHERE age = 22;

Kết quả một hàng trong bảng CUSTOMERS 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 | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  35 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  7 | Muffy    |  24 | Indore    | 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 CUSTOMERS_VIEW từ bảng ban đầu:

DROP VIEW CUSTOMERS_VIEW;

Nguồn tham khảo

https://www.tutorialspoint.com/sql/sql-using-views.htm

https://www.geeksforgeeks.org/sql-views/

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x