Các ứng dụng của view trong mysql

  • March 17, 2023
  • 313

View trong mysql là gì

View là một bảng ảo dựa trên kết quả của một câu lệnh sql. Các trường trong view chỉ có thể xem mà không thể sửa đổi, nó là các trường được lấy ra từ 1 or nhiều bảng khác dựa theo câu lệnh tạo view của bạn.

Create view


CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

Drop view


DROP VIEW IF EXISTS view_name

Ứng dụng Mysql View

1. Thống kê

Tạo một view để lấy ra phần trăm hoàn thành mục tiêu bán một sản phẩm, dựa theo 2 bảng products và transactions.


CREATE VIEW target_transactions AS
            SELECT p.id as product_id, p.achievement_price, SUM(t.price) as total_amount,
            (
            CASE
                WHEN SUM(t.price) * 100 / p.achievement_price < '100' THEN SUM(t.price) * 100 / p.achievement_price
                WHEN SUM(t.price) * 100 / p.achievement_price >= '100' THEN SUM(t.price) * -100 / p.achievement_price
                ELSE 0
            END) AS target_percent
            FROM products p 
            LEFT JOIN transactions t
            ON p.id = t.product_id
            GROUP BY p.id;

achievement_price là số tiền mong muốn đạt được khi bán 1 sản phẩm, transactions.price là số tiền bán một sản phẩm. Như vậy chúng ta đã tạo view target_transactions để lấy ra xem 1 sản phẩm đã bán được bao nhiêu phần trăm. khi quá 100% thì sẽ để phần trăm là số âm. Làm như trên chúng ta có thể order theo target_percent desc để lấy ra các sản phẩm gần hoàn thành mục tiêu nhất.

Tạo một view để thống kê có bao nhiêu coupons đã được sử dụng trong 2 bảng transactions và cf_transactions.


CREATE VIEW coupon_counts AS
        SELECT
            `coupon_id`,
            'normal' AS `v_type`,
            `coupon_price`
            FROM transactions
            WHERE `coupon_id` IS NOT NULL
        UNION
        SELECT
            `coupon_id`,
            'cf' AS `v_type`,
            `coupon_price`
            FROM cf_transactions
            WHERE `coupon_id` IS NOT NULL;

2. Gộp bảng

Tạo một view gộp 2 bảng products và cf_products sắp xếp dữ liệu theo ngày tạo giảm dần.


CREATE VIEW v_products AS
        SELECT X.*
          FROM ( SELECT `id`,
                        `uuid`,
                        `title`,
                        `description`,
                        `status`,
                        `price`,
                        NULL AS `achievement_price`,
                        `published_from`
                        `created_at`,
                        `updated_at`,
                        `deleted_at`,
                        'normal' AS `v_type`
                   FROM `products`
                   WHERE `status` = 2
                   AND `published_from` <= CONVERT_TZ(NOW(),'+00:00','+09:00')
                   AND `deleted_at` IS NULL
                 UNION
                 SELECT `id`,
                        `uuid`,
                        `title`,
                        `description`,
                        `status`,
                        NULL AS `price`,
                        `achievement_price`,
`publish_start_at` `created_at`, `updated_at`, `deleted_at`, 'cf' AS `v_type` FROM `cf_products` WHERE `published_status` = 2 AND `review_status` = 1 AND `publish_start_at` <= CONVERT_TZ(NOW(),'+00:00','+09:00') AND `deleted_at` IS NULL ) X ORDER BY X.`created_at` DESC;

3. Truy vấn

Đối với các câu query phức tạp có thể tạo view để lấy dữ liệu dễ dàng hơn, query trong view cũng giống như query trong table bình thường. Để thay đổi view chúng ta chỉ việc xoá view đi rồi tạo lại, xoá view không ảnh hưởng gì đến dữ liệu của các bảng gốc.

Tổng kết

Như vậy chúng ta đã tìm hiểu được các ứng dụng của view trong mysql. Bạn hay sử dụng view làm gì, hãy comment bên dưới nhé. Thank for reading...