Database SQL – VIEW
จาการใช้งาน SQL Select statement จะเห็นว่า ในบางครั้งเรามักจะมี Select statement ที่ต้องใช้งานประจำเพื่อดึงข้อมูลออกมาในรูปแบบที่ต้องการ เราสามารถใช้ SQL View นี้ช่วยได้ โดย SQL View จะทำการเก็บรูปแบบการ query หรือ SQL Select statement ที่เราตั้งไว้ใน SQL View ซึ่งสามารถทำได้ตั้งแต่ query ข้อมูลทั้งหมดของ table รวมถึงการทำ SQL Join, SQL Union, SQL Intersect และ SQL Except ที่ผลลัพธุ์ออกมาในรูปแบบตาราง หรือ table
คุณสมบัติของ VIEW
- สร้างโครงสร้างของข้อมูลในรูปแบบที่ user ใช้งานปกติจาก table
- ปรับเปลี่ยนข้อมูลภายใน table ให้แสดงออกมาในรูปแบบที่ต้องการ โดยไม่กระทบกับข้อมูลหลัก
- สรุปข้อมูลจาก table ในรูปแบบของ report ที่ user ต้องการ
รูปแบบการสร้าง VIEW (Syntax)
การใช้งาน SQL View สามรถสร้างได้จากรูปแบบของ SQL Select statement ที่ต้องการ โดยสามารถสร้างจาก table เดียว หรือ หลาย table ก็ได้ แต่ต้องมีสิทธิ์ในการเข้าถึงข้อมูลภายใต้ table นั้น (GRANT VIEW)
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
ตัวอย่างคำสั่ง VIEW TABLE
Table – CUSTOMERS
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
ทำการสร้าง VIEW จากการ Select ข้อมูลบน table CUSTOMERS
SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS;
ผลลัพธ์ที่ได้ จากการลอง select ข้อมูลใน VIEW
SQL > SELECT * FROM CUSTOMERS_VIEW; +----------+-----+ | name | age | +----------+-----+ | Ramesh | 32 | | Khilan | 25 | | kaushik | 23 | | Chaitali | 25 | | Hardik | 27 | | Komal | 22 | | Muffy | 24 | +----------+-----+
เงื่อนไข WITH CHECK OPTION
WITH CHECK OPTION กำหนดมาเพื่อใช้งานการ CREATE VIEW statement เป้าหมายของ WITH CHECK OPTION มีเพื่อให้มั่นใจได้ว่าการ INSERT หรือ UPDATE อยู่ในเงื่อนไขของ VIEW ซึ่งถ้าไม่อยู่ในเงื่อนไข การ INSERT หรือ UPDATE นั้นจะได้ผล error
CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;
ด้วยเงื่อนไข WITH CHECK OPTION จะเห็นว่าข้อมูล column age ห้ามมีค่าเป็น NULL
การ UPDATE VIEW
view จะสามารถ update ภายใต้เงื่อนไข statement ดังนี้
- SELECT clause ห้ามใช้ DISTINCT
- SELECT clause ห้ามใช้ summary function
- SELECT clause ห้ามใช้ set function
- SELECT clause ห้ามใช้ set operator
- SELECT clause ห้ามใช้ ORDER BY
- FROM clause ห้าม JOIN table
- WHERE clause ห้ามทำ subquery
- ห้ามใช้งาน GROUP BY และ HAVING
- NOT NULL column ทั้งหมดจะต้องอยู่ใน VIEW ด้วยเพื่อให้ INSERT function ทำงานถูกต้อง
ถ้าเงื่อนไขทั้งหมดถูกต้อง เราจึงสามารถใช้งาน SQL VIEW updatte ได้
SQL > UPDATE CUSTOMERS_VIEW
SET AGE = 35
WHERE name = 'Ramesh';
ผลลัพธ์ที่ได้
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
การ INSERT VIEW
ใช้เงื่อนไขเดียวกับ UPDATE VIEW ซึ่งจากตัวอย่าง เราไม่สามารถทำการ INSERT VIEW บน CUSTOMERS_VIEW นี้ได้เพราะ column ทั้งหมดของ VIEW ไม่ได้มีเงื่อนไข NOT NULL ทั้งหมด
การ DELETE VIEW
ใช้เงื่อนไขเดียวกับ UPDATE VIEW และ INSERT VIEW
SQL > DELETE FROM CUSTOMERS_VIEW
WHERE age = 22;
ผลลัพธ์ที่ได้
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
รูปแบบการลบ VIEW (Syntax)
DROP VIEW view_name;
ตัวอย่างการ DROP VIEW
DROP VIEW CUSTOMERS_VIEW;
Reference:
รวมคำสั่ง SQL Command พื้นฐานเบื้องต้น
Author: Suphakit Annoppornchai
Credit: https://saixiii.com, https://www.tutorialspoint.com