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;