ในโลกของการพัฒนาซอฟต์แวร์ที่ต้องมีการจัดการข้อมูล (Data Management) การทำความเข้าใจความแตกต่างระหว่างภาษา SQL และภาษาเชิงกระบวนการ (Procedural Language) เป็นสิ่งสำคัญอย่างยิ่ง โดยเฉพาะอย่างยิ่งเมื่อทำงานกับฐานข้อมูลอย่าง PostgreSQL
แม้ว่าทั้งสองภาษาจะถูกใช้เพื่อสื่อสารกับฐานข้อมูล แต่มีหน้าที่และโครงสร้างที่แตกต่างกันโดยสิ้นเชิง หากเปรียบเทียบง่าย ๆ คือ SQL คือ “ภาษาที่ใช้สั่งการข้อมูล (What to do) ส่วน PL/pgSQL คือ “ภาษาที่ใช้เขียนโปรแกรมเพื่อกำหนดขั้นตอน (How to do)
1. SQL (Structured Query Language): ภาษาแห่งการเรียกดูข้อมูล
SQL เป็นภาษามาตรฐานสากลที่ใช้สำหรับสื่อสารกับระบบฐานข้อมูลเชิงสัมพันธ์ (RDBMS) โดยมีจุดเน้นหลักคือการดึงข้อมูล การจัดการข้อมูล และการกำหนดโครงสร้างของตาราง
ลักษณะเด่นของ SQL:
- Non-procedural: เราบอกแค่ว่าต้องการข้อมูลอะไร (What) แต่ไม่ได้บอกขั้นตอนการทำงาน (How)
- การทำงาน: ประมวลผลเป็นชุดคำสั่งที่เน้นผลลัพธ์ (Result Set) เช่น การดึงข้อมูลทั้งหมด, การเพิ่มแถวใหม่, หรือการอัปเดตข้อมูล
- คำสั่งหลัก: ประกอบด้วยคำสั่งพื้นฐาน เช่น
SELECT,INSERT,UPDATE, และDELETE
ตัวอย่างการใช้งาน SQL ใน PostgreSQL:
SQL
-- ต้องการดึงชื่อสินค้าที่ราคาสูงกว่า 100 บาท</code><code class="language-sql">SELECT product_name, price FROM products WHERE price > 100;
2. PL/pgSQL: การเขียนโปรแกรมในฐานข้อมูล
PL/pgSQL (Procedural Language/PostgreSQL) คือส่วนขยายที่นำความสามารถของภาษาโปรแกรมมิ่ง (Procedural) มาผสานรวมกับความสามารถของ SQL ทำให้เราสามารถเขียน Logic ที่ซับซ้อนได้ภายในฐานข้อมูล
ลักษณะเด่นของ PL/pgSQL:
- Procedural: สามารถกำหนดขั้นตอนการทำงาน (Step-by-step) ได้อย่างชัดเจน
- การควบคุม Flow: รองรับโครงสร้างการควบคุมที่ซับซ้อน เช่น
IF-ELSE(เงื่อนไข),LOOP(การวนซ้ำ), และการจัดการตัวแปร (Variables) - การใช้งาน: มักใช้ในการสร้าง Stored Procedures, Functions, หรือ Triggers เพื่อให้ฐานข้อมูลทำงานอัตโนมัติเมื่อมีเหตุการณ์บางอย่างเกิดขึ้น
ตัวอย่างการใช้งาน PL/pgSQL ใน PostgreSQL (ใช้ DO block):
SQL
-- ตัวอย่างการตรวจสอบและอัปเดตข้อมูลตามเงื่อนไข</code><code class="language-sql">DO $$</code><code class="language-sql">DECLARE</code><code class="language-sql"> v_product_id INTEGER := 1;</code><code class="language-sql">BEGIN</code><code class="language-sql"> IF EXISTS (SELECT 1 FROM products WHERE product_id = v_product_id) THEN</code><code class="language-sql"> UPDATE products SET stock = stock - 1 WHERE product_id = v_product_id;</code><code class="language-sql"> RAISE NOTICE 'Stock updated successfully.';</code><code class="language-sql"> ELSE</code><code class="language-sql"> RAISE EXCEPTION 'Product ID % not found.', v_product_id;</code><code class="language-sql"> END IF;</code><code class="language-sql">END $$ LANGUAGE plpgsql;
บทสรุป: เมื่อไหร่ควรใช้ภาษาใด?
การเลือกใช้ภาษาขึ้นอยู่กับเป้าหมายงาน (Goal) ของคุณ:
- ใช้ SQL เมื่อ: คุณต้องการเพียงแค่การเรียกดูข้อมูล การกรองข้อมูล หรือการเปลี่ยนแปลงข้อมูลพื้นฐาน (CRUD Operations)
- ใช้ PL/pgSQL เมื่อ: คุณต้องการสร้างระบบอัตโนมัติที่ซับซ้อน มีการตรวจสอบเงื่อนไข (Validation) หรือต้องมีการวนซ้ำเพื่อประมวลผลข้อมูลจำนวนมาก
โดยสรุปแล้ว SQL และ PL/pgSQL ไม่ได้มาแทนที่กัน แต่ทำงานร่วมกัน โดย SQL จะทำหน้าที่เป็นเครื่องมือในการจัดการข้อมูลหลัก ส่วน PL/pgSQL จะทำหน้าที่เป็นสมองที่ควบคุมการทำงานทั้งหมดให้เป็นไปตามขั้นตอนที่กำหนด