Category Archive Oracle

Byphunsanit

SQL: AS Alias (นามแฝง)

เวลาเขียน SQL จะเห็น select มันจะเขียน SELECT post_id AS id, GETDATE create_date จะเห็นว่าบางคน บางที่ก็ใส่ AS บางคนก็ไม่ได้ใช้ AS แล้วมีกับไม่มี มันต่างกันยังไง จริง ๆ หลัง function หรือ column ส่วนนี้เรียกว่า Alias (นามแฝง) มีไว้เพื่อให้แทน column หรือ function ให้จำง่าย ใช้ง่าย สื่อความหมายมากขึ้น โดยจะมี AS หรือ ไม่มีคั่นกลางกลางก็ได้ แต่ AS จะช่วยให้อ่าน code ได้ง่ายกว่าไม่มี (Readability)


Column Alias

ตามมาตรฐาน ANSI SQL-86 (SQL2), ISO/IEC 9075 การใช้คีย์เวิร์ด AS เพื่อกำหนด Alias (นามแฝง) นั้นถูกกำหนดไว้ในข้อกำหนดพื้นฐานเพื่อให้โค้ดอ่านง่ายขึ้น (Readability)

การใช้กับคอลัมน์ (Column Alias)

การใช้ AS กับคอลัมน์ถือเป็น Best Practice และเป็นมาตรฐานที่ทุก Database Engine (MySQL, PostgreSQL, SQL Server, Oracle, SQLite) ยอมรับ ถึงแม้ว่าในหลายๆ ระบบจะอนุญาตให้ละ AS ไว้ได้ (เช่น SELECT name n FROM users u) แต่การใส่ AS มีข้อดีกว่าดังนี้:

  • อ่านง่ายขึ้น: แยกแยะระหว่างชื่อคอลัมน์จริงกับชื่อ Alias ได้ชัดเจน โดยเฉพาะเมื่อมีการคำนวณซับซ้อน
  • ป้องกันความผิดพลาด: ในกรณีที่คุณลืมใส่เครื่องหมายคอมม่า (,) ระหว่างสองคอลัมน์ หากไม่มี AS ตัว SQL อาจเข้าใจผิดว่าคอลัมน์ที่สองคือ Alias ของคอลัมน์แรก ทำให้หา Bug ได้ยาก

ข้อควรระวัง: หาก Alias ของคุณมี ช่องว่าง หรือเป็น คำสงวน (Reserved Words) อย่าลืมครอบด้วยเครื่องหมาย Quote เช่น "My Name" (Postgres/Oracle) หรือ [My Name] (SQL Server) หรือ `My Name` (MySQL)


การใช้กับตาราง (Table Alias)

ในมาตรฐาน SQL การตั้งชื่อเล่นให้ตารางสามารถทำได้ทั้งแบบใส่ AS และไม่ใส่ แต่มีข้อควรระวังคือ Oracle Database ไม่รองรับการใช้ AS หน้าชื่อตาราง (จะเกิด Error ทันที) ขณะที่ระบบอื่นๆ ส่วนใหญ่ยอมรับทั้งสองแบบ

ระบบฐานข้อมูลColumn Alias (มี AS)Table Alias (มี AS)
MySQL / MariaDB✅ รองรับ (แนะนำ)✅ รองรับ
PostgreSQL
✅ รองรับ (แนะนำ)

✅ รองรับ
SQL Server (T-SQL)
✅ รองรับ (แนะนำ)

✅ รองรับ
Oracle✅ รองรับ (แนะนำ)ไม่รองรับ (ต้องเขียน FROM table t เท่านั้น)
SQLite✅ รองรับ (แนะนำ)✅ รองรับ

ถ้าต้องการเขียน SQL ให้ run ได้ใน database หลัก ๆ ควรใช้ AS กับ function หรือ column แต่ถ้าใช้ Oracle ด้วยการไม่ใช้ AS เป็นประจำก็เป็นทางเลือกที่ดีจะได้ Portability