มาทำความรู้จัก โครงสร้างอย่างง่ายของ Common Table Expressions (CTE) ใน SQL Server

--

โอเค…เรามาเริ่มทำความรู้จัก CTE กันเลย…

Common Table Expressions (CTE) เป็นฟีเจอร์ใน SQL ที่ช่วยให้เราสามารถสร้างผลลัพธ์ชั่วคราวที่สามารถอ้างอิงได้ภายในคำสั่ง SQL โดยที่เราไม่ต้องสร้างตารางจริง และมองง่ายก็จะคล้ายๆ กับ Temp table นั้นเอง

โดยโครงสร้าง ของ CTE ประกอบด้วย

  • คำสั่งWITH
  • ชื่อของ CTE
  • คำสั่ง AS

ซึ่งมีการใส่คำสั่ง SQL ที่จะสร้างผลลัพธ์ชั่วคราวไว้ภายใน
ตัวอย่าง โครงสร้างเเละการเรียกใช้งาน

WITH cte_name AS (
SELECT column1, column2
FROM table_name
WHERE condition
)
SELECT column1, column2
FROM cte_name
WHERE another_condition;

ตัวอย่างที่ 1: การใช้ CTE เพื่อเลือกข้อมูล

WITH cte_user AS (
SELECT fistname, lastname, position , age
FROM tb_user
WHERE position='manager'
AND age > 30
)
SELECT fistname, lastname, position , age
FROM cte_user;

ในตัวอย่างนี้ CTE ชื่อ cte_user จะเลือก user ที่มีตำแหน่งเป็น 'manager' และอายุมากว่า 30 และนำข้อมูลนั้นมาใช้ในคำสั่ง SELECT ต่อ

ตัวอย่างที่ 2: การใช้ CTE เพื่อเลือกข้อมูลโดยเงื่อนไขต่างกันเเต่ต้องการเพียง 1 ชุดข้อมูลเท่านั้น

WITH cte_user AS (
SELECT fistname, lastname, position , age
FROM tb_user
WHERE position ='manager'
AND age > 30
UNION ALL
SELECT fistname, lastname, position , age
FROM tb_user
WHERE position !='manager'
)
SELECT fistname, lastname, position , age
FROM cte_user
WHERE fistname like 'f%';

ในตัวอย่างนี้ CTE ชื่อ cte_user จะเลือก user ที่มีตำแหน่งเป็น ‘manager’ และอายุมากว่า 30 และ user ที่ไม่มีตำแหน่งเป็น ‘manager’ โดยไม่จำกัดอายุ โดยข้อมูลนั้นมาใช้ในคำสั่ง SELECT ต่อ โดยมีเงื่อนไขอีกว่าจะต้องมีชื่อ fistname ตัวอักษรขึ้นด้วย “f” ด้วยในการเเสดงข้อมูล

ดังนั้นจากตัวอย่างทั้ง 2 ก็ขึ้นอยู่กับ เราจะนำ CTE มาใช้งานอย่างไรให้เหมาะสมเเละถูกเวลากับงานเรานั้นเอง โดยที่เราก็สามารถที่ลองศึกษาเพิ่มเติมได้ที่ https://learn.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver16

สุดท้ายเเล้ว หลังจากอ่านบทความนี้หวังว่าทุกคนสามารถเริ่มเข้าใจเเละใช้งาน CTE กันนะครับ

…………………………………….ด้วยความหวังดี ……………………………………….

เราคือเป็ด
นายเป็ดน้อย

--

--