SQL - การใช้มุมมอง
มุมมองไม่มีอะไรมากไปกว่าคำสั่ง SQL ที่เก็บไว้ในฐานข้อมูลด้วยชื่อที่เกี่ยวข้อง จริงๆแล้วมุมมองเป็นองค์ประกอบของตารางในรูปแบบของแบบสอบถาม SQL ที่กำหนดไว้ล่วงหน้า
มุมมองสามารถมีแถวทั้งหมดของตารางหรือเลือกแถวจากตาราง สามารถสร้างมุมมองได้จากตารางหนึ่งหรือหลายตารางซึ่งขึ้นอยู่กับคิวรี SQL ที่เขียนเพื่อสร้างมุมมอง
มุมมองซึ่งเป็นตารางเสมือนประเภทหนึ่งให้ผู้ใช้ทำสิ่งต่อไปนี้ -
จัดโครงสร้างข้อมูลในลักษณะที่ผู้ใช้หรือคลาสของผู้ใช้พบว่าเป็นธรรมชาติหรือใช้งานง่าย
จำกัด การเข้าถึงข้อมูลในลักษณะที่ผู้ใช้สามารถมองเห็นและ (บางครั้ง) แก้ไขสิ่งที่พวกเขาต้องการและไม่ต้องทำอีกต่อไป
สรุปข้อมูลจากตารางต่างๆซึ่งสามารถใช้ในการสร้างรายงาน
การสร้างมุมมอง
มุมมองฐานข้อมูลถูกสร้างขึ้นโดยใช้ไฟล์ CREATE VIEWคำให้การ. มุมมองสามารถสร้างจากตารางเดียวหลายตารางหรือมุมมองอื่น
ในการสร้างมุมมองผู้ใช้ต้องมีสิทธิ์ระบบที่เหมาะสมตามการนำไปใช้งานเฉพาะ
พื้นฐาน CREATE VIEW ไวยากรณ์มีดังนี้ -
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
คุณสามารถรวมหลายตารางในคำสั่ง SELECT ของคุณในลักษณะเดียวกันกับที่คุณใช้ในแบบสอบถาม SQL SELECT ปกติ
ตัวอย่าง
พิจารณาตารางลูกค้าที่มีบันทึกต่อไปนี้ -
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
ต่อไปนี้เป็นตัวอย่างในการสร้างมุมมองจากตาราง CUSTOMERS มุมมองนี้จะใช้เพื่อตั้งชื่อและอายุลูกค้าจากตาราง CUSTOMERS
SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS;
ตอนนี้คุณสามารถสืบค้น CUSTOMERS_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 เป็นตัวเลือกคำสั่ง CREATE VIEW จุดประสงค์ของตัวเลือกการตรวจสอบคือเพื่อให้แน่ใจว่า UPDATE และ INSERT ทั้งหมดเป็นไปตามเงื่อนไขในนิยามมุมมอง
หากไม่เป็นไปตามเงื่อนไข UPDATE หรือ INSERT จะส่งกลับข้อผิดพลาด
บล็อกโค้ดต่อไปนี้มีตัวอย่างของการสร้างมุมมองเดียวกัน CUSTOMERS_VIEW โดยใช้ตัวเลือกการตรวจสอบ
CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;
ด้วยตัวเลือกการตรวจสอบในกรณีนี้ควรปฏิเสธการป้อนค่า NULL ในคอลัมน์ AGE ของมุมมองเนื่องจากมุมมองถูกกำหนดโดยข้อมูลที่ไม่มีค่า NULL ในคอลัมน์ AGE
การอัปเดตมุมมอง
สามารถอัปเดตมุมมองได้ภายใต้เงื่อนไขบางประการซึ่งระบุไว้ด้านล่าง -
ส่วนคำสั่ง SELECT ต้องไม่มีคีย์เวิร์ด DISTINCT
ส่วนคำสั่ง SELECT ต้องไม่มีฟังก์ชันสรุป
ส่วนคำสั่ง SELECT ต้องไม่มีฟังก์ชัน set
ส่วนคำสั่ง SELECT ต้องไม่มีตัวดำเนินการชุด
ส่วนคำสั่ง SELECT ต้องไม่มีคำสั่ง ORDER BY
คำสั่ง FROM ต้องไม่มีหลายตาราง
ส่วนคำสั่ง WHERE ต้องไม่มีเคียวรีย่อย
คำค้นหาต้องไม่มี GROUP BY หรือ HAVING
คอลัมน์จากการคำนวณอาจไม่ได้รับการอัปเดต
คอลัมน์ NOT NULL ทั้งหมดจากตารางฐานต้องรวมอยู่ในมุมมองเพื่อให้แบบสอบถาม INSERT ทำงานได้
ดังนั้นหากมุมมองเป็นไปตามกฎที่กล่าวถึงข้างต้นคุณสามารถอัปเดตมุมมองนั้นได้ บล็อกโค้ดต่อไปนี้มีตัวอย่างในการอัปเดตอายุของ Ramesh
SQL > UPDATE CUSTOMERS_VIEW
SET AGE = 35
WHERE name = 'Ramesh';
ในที่สุดนี่จะเป็นการอัปเดตลูกค้าของตารางฐานและสิ่งเดียวกันนี้จะสะท้อนให้เห็นในมุมมองนั้นเอง ตอนนี้ลองค้นหาตารางฐานและคำสั่ง SELECT จะให้ผลลัพธ์ดังต่อไปนี้
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
การแทรกแถวลงในมุมมอง
สามารถแทรกแถวข้อมูลลงในมุมมองได้ กฎเดียวกันกับที่ใช้กับคำสั่ง UPDATE ยังใช้กับคำสั่ง INSERT
ที่นี่เราไม่สามารถแทรกแถวใน CUSTOMERS_VIEW ได้เนื่องจากเราไม่ได้รวมคอลัมน์ NOT NULL ทั้งหมดไว้ในมุมมองนี้มิฉะนั้นคุณสามารถแทรกแถวในมุมมองในลักษณะเดียวกับที่คุณแทรกลงในตารางได้
การลบแถวในมุมมอง
สามารถลบแถวข้อมูลออกจากมุมมองได้ กฎเดียวกันกับที่ใช้กับคำสั่ง UPDATE และ INSERT ใช้กับคำสั่ง DELETE
ต่อไปนี้เป็นตัวอย่างในการลบบันทึกที่มี AGE = 22
SQL > DELETE FROM CUSTOMERS_VIEW
WHERE age = 22;
ในที่สุดนี่จะเป็นการลบแถวออกจากตารางฐานลูกค้าและสิ่งเดียวกันนี้จะสะท้อนให้เห็นในมุมมองนั้นเอง ตอนนี้ลองค้นหาตารางฐานและคำสั่ง SELECT จะให้ผลลัพธ์ดังต่อไปนี้
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
การลดมุมมอง
เห็นได้ชัดว่าคุณมีมุมมองที่ใดคุณต้องมีวิธีลดมุมมองหากไม่ต้องการอีกต่อไป ไวยากรณ์นั้นง่ายมากและได้รับด้านล่าง -
DROP VIEW view_name;
ต่อไปนี้เป็นตัวอย่างในการวาง CUSTOMERS_VIEW จากตาราง CUSTOMERS
DROP VIEW CUSTOMERS_VIEW;