MySQL การทำงานกับ VIEW

View คือ ตารางเสมือน (Virtual Table) ที่สร้างขึ้นจากคำสั่ง SELECT โดยไม่มีการเก็บข้อมูลจริงใน View นั้น แต่จะอ้างอิงข้อมูลจากตารางจริงแบบ “เรียลไทม์” ทุกครั้งที่มีการเรียกใช้งาน View ทำให้เราสามารถจัดรูปแบบการแสดงข้อมูลให้เรียบร้อย ชัดเจน และปลอดภัย โดยไม่ต้องแก้ไขตารางจริง เหมาะสำหรับใช้สร้างรายงาน, ซ่อนคอลัมน์ที่ไม่จำเป็น หรือจัดกลุ่มข้อมูลให้เหมาะสมกับผู้ใช้งานแต่ละประเภท

รูปแบบการสร้าง View

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • view_name คือ ชื่อของ View ที่เราตั้งขึ้นมาเอง
  • ดึงข้อมูลจากตารางจริงที่มีอยู่ โดยสามารถใส่ WHERE, JOIN, GROUP BY ได้ตามปกติ

ตัวอย่างการใช้งาน

สร้าง View แสดงเฉพาะลูกค้าที่อยู่ในประเทศไทย

SQL
CREATE VIEW th_customers AS
SELECT customer_id, first_name, last_name, country
FROM customers
WHERE country = 'Thailand';
  • View นี้จะแสดงเฉพาะลูกค้าที่อยู่ในประเทศไทย
  • ช่วยให้ผู้ใช้สามารถดูข้อมูลเฉพาะส่วนที่จำเป็น

เรียกใช้งาน View

SQL
SELECT * FROM th_customers;
  • เหมือนกับใช้คำสั่ง SELECT จากตารางปกติ แต่ข้อมูลมาจาก View

ลบ View

SQL
DROP VIEW th_customers;
  • ลบ View ออกจากระบบ (ไม่กระทบข้อมูลจริง)

สร้าง View ที่รวมข้อมูลจากหลายตาราง

SQL
CREATE VIEW order_summary AS
SELECT o.order_id, c.customer_name, o.total_amount
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;
  • View นี้รวมข้อมูลการสั่งซื้อกับชื่อลูกค้าให้อยู่ในตารางเดียว

การอัปเดต View

แม้ว่า View จะเป็นเพียง “ตารางเสมือน” ที่อิงข้อมูลจากตารางจริง แต่เราสามารถอัปเดต View ได้ 2 แบบ คือ

  1. อัปเดตโครงสร้างของ View ด้วยคำสั่ง CREATE OR REPLACE VIEW
  2. อัปเดตข้อมูลผ่าน View (เฉพาะในบางกรณีที่ View ไม่ซับซ้อน) อย่างไรก็ตาม MySQL จะมีข้อจำกัดเมื่อ View ซับซ้อน เช่น มี JOIN, GROUP BY หรือ DISTINCT

รูปแบบการอัปเดตโครงสร้าง View

CREATE OR REPLACE VIEW view_name AS
SELECT ...
  • ใช้เพื่อแทนที่ View เดิมด้วยโครงสร้างใหม่ โดย ไม่ต้องลบ View เดิมก่อน

ตัวอย่างการอัปเดต View

เปลี่ยน View th_customers ให้รวมอีเมลลูกค้า

SQL
CREATE OR REPLACE VIEW th_customers AS
SELECT customer_id, first_name, last_name, email, country
FROM customers
WHERE country = 'Thailand';
  • View เดิมจะถูกแทนที่ด้วยเวอร์ชันใหม่นี้
  • ข้อมูลจะอัปเดตอัตโนมัติเมื่อมีการเปลี่ยนแปลงในตาราง customers

การอัปเดตข้อมูลผ่าน View (ทำได้ในบางกรณี)

เราสามารถอัปเดตข้อมูลผ่าน View ได้เมื่อ

  • View ต้องอิงจากตารางเดียว
  • ไม่มี DISTINCT, GROUP BY, JOIN, LIMIT
  • ไม่มีการคำนวณ (เช่น SUM(), COUNT())

ตัวอย่าง

สร้าง View

SQL
CREATE VIEW simple_view AS
SELECT id, name, email FROM users;

อัปเดต View

SQL
UPDATE simple_view
SET email = '[email protected]'
WHERE id = 1;
  • คำสั่งนี้สามารถทำงานได้ เพราะ View อิงจากตารางเดียวและไม่มีความซับซ้อน
แชร์เรื่องนี้