Hướng dẫn sử dụng lệnh Create View trong MySQL

0
135

Hướng dẫn chi tiết cách sử dụng lệnh Create View trong MySQL để tạo mới một View trong Database, hoặc thay thế nội dung của view có sẵn.

Về cơ bản lệnh này sẽ phải kết hợp với câu lệnh Select để lấy kết quả từ nhiều table đổ vào trong View. Mỗi khi có thay đổi ở các bảng đó thì data trong View cũng sẽ thay đổi theo.

1. Giới thiệu lệnh Create View trong MySQL

Lệnh Create View sẽ tạo ra một View mới trong Database, sau đây là cú pháp:

CREATE [OR REPLACE] VIEW [db_name.]view_name [(column_list)]
AS
select-statement;

Ý nghĩa của các từ khóa như sau:

  • Từ khóa Create View cho thấy bạn đang muốn tạo một View mới có tên là view_name, năm trong database db_name.
  • Nếu bạn dùng thêm từ khóa Or Replace thay thì nó sẽ thay thế View có tên là view_name bằng nội dung SQL mới. Nếu view_name chưa tồn tại thì nó sẽ tạo view mới.
  • Column_list là danh sách các cột sẽ được đặt tên lại. Nếu bạn không truyền vào thì nó sẽ lấy tên cột mặc định của các table.
  • Select-statement chính là câu lệnh Select trả về danh sách dữ liệu sẽ được lưu vào trong View. Bạn có thể sử dụng kết hợp các lệnh Join, Order By, Limit, … miễn là nó trả về kết quả là danh sách dữ liệu.

Theo mặc định thì lệnh Create View sẽ tạo mới một view nằm trong DB hiện tại đang kết nối. Nhưng nếu bạn muốn chỉ định rõ DB nào thì sẽ đặt nó ở vị trí của db_name.

2. Cách sử dụng lệnh Create View trong MySQL

Hãy làm một vài ví dụ để hiểu rõ hơn lệnh này.

Ví dụ 1: Tạo một view đơn giản

Hãy xem cấu trúc của table orderdetails như trong hình dưới đây.

Hướng dẫn sử dụng lệnh Create View trong MySQL (1)

Bây giờ mình sẽ viết một View lưu trữ doanh thu của mỗi đơn hàng, bằng cách sử dụng lệnh Select kết hợp Group By.

CREATE VIEW salePerOrder AS
SELECT
orderNumber,
SUM(quantityOrdered * priceEach) total
FROM
orderDetails
GROUP by orderNumber
ORDER BY total DESC;

Để kiểm tra View đã xuất hiện chưa thì hãy sử dụng lệnh sau:

SHOW TABLES;

Lệnh này sẽ hiển thị danh sách tất cả các table đang có trong DB hiện tai. Vì View cũng là table nên cũng sẽ xuất hiện trong đó.

Hướng dẫn sử dụng lệnh Create View trong MySQL (2)

Ngoài ra, để xem chi tiết đâu là table và đâu là view thì bạn sử dụng lệnh sau:

SHOW FULL TABLES;

Kết quả lệnh này như sau:

Hướng dẫn sử dụng lệnh Create View trong MySQL (3)

Bây giờ nếu bạn muốn xem tổng doanh thu của mỗi đơn hàng thì chỉ cần truy vấn trong View SalePerOrder mà đã tạo ở trên.

SELECT * FROM salePerOrder;

Kết quả dạng như sau:

Hướng dẫn sử dụng lệnh Create View trong MySQL (4)

Ví dụ 2: Tạo mới một View từ một View khác

Nghe có vẻ kì lạ phải không? Thực tế bạn có thể tạo mới một view với dữ liệu được lấy từ một View khác.

Giả sử mình muốn lấy danh sách những đơn hàng có giá trị hơn 6000, lúc này chỉ cần lấy trong view salesPerOrder mà ta đã tạo ở trên là được.

CREATE VIEW bigSalesOrder AS
SELECT
orderNumber,
ROUND(total,2) as total
FROM
salePerOrder
WHERE
total > 60000;

Bây giờ dữ liệu trong view bigSalesOrder chính là những đơn hàng có doanh thu hơn 6000. Hãy thử chạy một câu truy vấn xem sao.

SELECT
orderNumber,
total
FROM
bigSalesOrder;

Hướng dẫn sử dụng lệnh Create View trong MySQL (5)

Ví dụ 3: Tạo View với lệnh Join

Hãy xem ví dụ dưới đây, mình tạo ra một view có tên là customerOrders để lưu trữ thông tin khách hàng và tổng số tiền mà khách hàng đã mua. Mình đã JOIN 3 bảng gồm: orderDetails, orders và customers

CREATE OR REPLACE VIEW customerOrders AS
SELECT
orderNumber,
customerName,
SUM(quantityOrdered * priceEach) total
FROM
orderDetails
INNER JOIN orders o USING (orderNumber)
INNER JOIN customers USING (customerNumber)
GROUP BY orderNumber;

Bây giờ sử dụng lệnh Select trong view customerOrders là được.

SELECT * FROM customerOrders
ORDER BY total DESC;

Kết quả tham khảo:

Hướng dẫn sử dụng lệnh Create View trong MySQL (6)

Ví dụ 4: Tạo View với truy vấn con

Trong ví dụ dưới đây mình có sử dụng cấu trúc truy vấn con để tạo ra View.

CREATE VIEW aboveAvgProducts AS
SELECT
productCode,
productName,
buyPrice
FROM
products
WHERE
buyPrice > (
SELECT
AVG(buyPrice)
FROM
products)
ORDER BY buyPrice DESC;

* Lời kết: Như vậy bản chất của lệnh Select trong View là không quan trọng, bởi View chỉ quan tâm kết quả mà lệnh Select trả về, còn việc nó kết hợp với bao nhiêu lệnh khác đi nữa thì nó không quan tâm.

LEAVE A REPLY

Please enter your comment!
Please enter your name here