SQL alias คือชื่อเรียกแทน (reference name) สำหรับตารางหรือคอลัมน์ ใช้ทำให้คิวรี่สั้นลงหากมีชื่อตารางยาว ทั้ง table alias และ column alias กำหนดด้วยคีย์เวิร์ด AS Alias ทำงานจนคิวรี่รันเสร็จ ไม่ถาวร
เคยรู้สึกเบื่อกับการพิมพ์ชื่อคอลัมน์หรือตารางยาวๆ ในคิวรี่ซับซ้อน? มักเกิดขึ้นเมื่อเรียน SQL มากขึ้น นี่คือที่มาของ aliases ช่วยทำให้คิวรี่สั้นและอ่านง่าย
ในคู่มือนี้ เราพูดถึงว่ SQL aliases คืออะไร ทำไมจึงใช้ และเดินทางผ่าน 2 สถานการณ์ตัวอย่าง
หมายเหตุ: บทช่วยสอนนี้เขียนโดยใช้ PostgreSQL
SQL Alias คืออะไร?
SQL alias คล้าย alias ของมนุษย์ กำหนดชื่อ placeholder ให้ตารางหรือคอลัมน์ในตาราง Aliases มีประโยชน์เพราะทำให้คิวรี่และผลลัพธ์อ่านง่าย เข้าใจง่ายขึ้น
Alias ที่ดีคือ alias ที่เข้าใจได้เร็วที่สุด
Alias n อาจสับสนสำหรับคอลัมน์ name หากมีคอลัมน์ number_of_products ด้วย เพราะทั้งคู่ขึ้นต้นด้วย n
fn อาจเหมาะสมกว่า เพราะ取首字母ของ full name Alias นี้น่าจะสร้างความสับสนน้อยกว่า
จำไว้ว่า SQL queries ของคุณอาจถูกใช้โดยคนอื่น ไม่ใช่แค่คุณเอง ควรพยายามทำให้คิวรี่เข้าใจง่ายที่สุดสำหรับทุกคน
SQL Aliases: คอลัมน์ (Columns)
ใช้ aliases บนชื่อคอลัมน์ Column alias ให้เปลี่ยนชื่อคอลัมน์ในผลลัพธ์ของคิวรี่
มาดู 2 ตารางในฐานข้อมูลตัวอย่าง: employees และ branches
| Employees | Branches | |||||
| name | title | branch_id | salary | branch_id | branch_name | |
| Geoff | Senior Sales Associate | 1 | 38000 | 1 | San Francisco | |
| Adam | Senior Sales Associate | 2 | 38000 | 2 | Cambridge | |
| Emma | Marketing Executive | 2 | 50000 | 3 | Los Angeles | |
| Luke | Marketing Assistant | 3 | 32000 |
ตาราง employees มี 4 คอลัมน์ 4 แถว ตาราง branches มี 2 คอลัมน์ 3 แถว
เขียนคิวรี่ SELECT หาเงินเดือนสูงสุดแต่ละสาขา:
SELECT branches.branch_name, MAX(employees.salary) FROM employees LEFT JOIN branches ON employees.branch_id = branches.branch_id GROUP BY branches.branch_name;
ใช้ฟังก์ชันรวม MAX() หาค่าสูงสุดในคอลัมน์ "salary" ของตาราง "employees" ใช้ LEFT JOIN เชื่อมตาราง "branches" และ "employees" เพื่อดูผลลัพธ์แต่ละสาขา
ผลลัพธ์:
| branch_name | max |
| San Francisco | 38000 |
| Los Angeles | 32000 |
| Cambridge | 50000 |
คิวรี่ทำงาน แต่ชื่อคอลัมน์ผลลัพธ์ไม่ค่อยเข้าใจง่าย "max" อาจสับสนคนที่ไม่ได้เขียนคิวรี่นี้
แก้ไขด้วยการระบุ column alias:
SELECT branches.branch_name AS "Branch Name", MAX(employees.salary) as "Highest Salary" FROM employees LEFT JOIN branches ON employees.branch_id = branches.branch_id GROUP BY branches.branch_name;
ระบุ 2 aliases: "branch_name" → "Branch Name", MAX() → "Highest Salary" รันคิวรี่ใหม่:
| Branch Name | Highest Salary |
| San Francisco | 38000 |
| Los Angeles | 32000 |
| Cambridge | 50000 |
แถวที่คืนเหมือนเดิม แต่หัวตารางเปลี่ยน: "branch_name" → "Branch Name", "max" → "Highest Salary"
SQL Aliases: ตาราง (Tables)
สามารถกำหนด SQL alias บนตารางได้ มีประโยชน์หากอ้างอิงตารางเดิมหลายครั้งในคิวรี่ เกิดขึ้นบ่อยในคิวรี่ซับซ้อน
เมื่อสืบค้นหลายตาราง ต้องระบุชื่อตารางก่อนชื่อคอลัมน์ คั่นด้วยจุด (.) เพื่อให้ SQL รู้ว่าคำสั่งอ้างอิงตารางไหน
แม้ฟีเจอร์นี้ป้องกันความกำกวม แต่ทำให้คิวรี่อ่านยากขึ้น ดังนั้นควรตั้ง aliases ให้เข้าใจง่าย
เขียนคิวรี่ดึงชื่อพนักงานทุกคนพร้อมชื่อสาขาที่ทำงาน:
SELECT employees.name, branches.branch_name FROM employees LEFT JOIN branches ON employees.branch_id = branches.branch_id;
ผลลัพธ์:
| name | branch_name |
| Geoff | San Francisco |
| Adam | Cambridge |
| Emma | Cambridge |
| Luke | Los Angeles |
คิวรี่ค่อนข้างยาว ใช้คำว่า "employees" และ "branches" ซ้ำ 2 ครั้ง ในคิวรี่ยาวกว่านี้จะซ้ำมากขึ้น
ใช้ aliases ทำให้สั้นลง ต้องใช้คีย์เวิร์ด AS สร้าง table alias:
SELECT e.name, b.branch_name FROM employees AS e LEFT JOIN branches AS b ON e.branch_id = b.branch_id;
คิวรี่นี้คืนผลลัพธ์เหมือนคิวรี่แรก
กำหนด 2 aliases:
- "employees" → "e"
- "branches" → "b"
ทุกครั้งที่อ้างอิง e หรือ b ในคิวรี่ SQL จะถือว่าเป็น "employees" และ "branches" ตามลำดับ Table aliases ช่วยลดการซ้ำในคำสั่ง SQL
สรุป
SQL alias คือชื่อแทนสำหรับคอลัมน์หรือตาราง Aliases เฉพาะคิวรี่ (query-specific) หมายความว่า alias ในคิวรี่หนึ่งไม่สามารถใช้ในอีกคิวรี่ได้โดยไม่กำหนดใหม่ Alias ตั้งด้วยคีย์เวิร์ด AS
สนใจเรียน SQL เพิ่มเติม? ดูคู่มือ How to Learn SQL ของเรา คู่มือครอบคลุมทุกอย่างจากหลักสูตรที่ควรพิจารณาไปจนถึงแหล่งข้อมูล SQL ออนไลน์ที่มีประโยชน์