AS Clause ใน SQL คืออะไร? มาตั้งชื่อเล่นให้ตารางและคอลัมน์ด้วย Alias เพื่อให้คิวรีอ่านง่ายขึ้นกันเถอะ!
"ชื่อคอลัมน์ที่เป็นผลจากการคำนวณมันดูไม่สวยเลย อย่างเช่น `price * 1.1`..."
"พอ JOIN แล้วชื่อตารางยาวเกินไป ทำให้คิวรีดูรกและอ่านยาก!"
พอเริ่มเขียน SQL คุณเคยรู้สึก "หงุดหงิดเล็กๆ" แบบนี้บ้างไหมครับ? คิวรีทำงานได้ แต่กลับอ่านไม่ค่อยรู้เรื่อง พอจะกลับมาดูทีหลัง ก็ต้องใช้เวลาถอดรหัสว่าตัวเองกำลังทำอะไรอยู่...
คีย์เวิร์ดวิเศษที่จะมาช่วยแก้ปัญหาเหล่านี้ในพริบตาเดียวก็คือ "AS" clause ที่เราจะมาแนะนำกันในวันนี้ครับ การใช้ AS จะทำให้เราสามารถตั้ง "Alias (ชื่อเล่น)" ให้กับตารางและคอลัมน์ได้ เหมือนกับการเรียกเพื่อนด้วยชื่อเล่นแทนชื่อจริงยาวๆ ถ้าคุณใช้ AS ได้อย่างคล่องแคล่วแล้วล่ะก็ คิวรี SQL ของคุณจะอ่านง่ายและเขียนง่ายขึ้นอย่างมากเลยทีเดียว!
ในบทความนี้ เราจะอธิบายตั้งแต่พื้นฐานการใช้ AS clause ที่จะช่วยเพิ่มความสามารถในการอ่านโค้ด ไปจนถึงเทคนิคขั้นสูงอย่างการใช้ร่วมกับ JOIN และ Self-join พร้อมโค้ดตัวอย่างที่สามารถคัดลอกไปใช้ได้ทันที
การเตรียมตัว: ตารางสำหรับฝึกฝน
ก่อนอื่น เรามาเตรียมตารางเพื่อสัมผัสกับความสะดวกสบายของ Alias กันครับ ครั้งนี้เราจะใช้ตารางสินค้าแบบง่ายๆ
-- ลบตารางหากมีอยู่แล้ว
DROP TABLE IF EXISTS products;
-- สร้างตารางสินค้า
CREATE TABLE products (
id INT PRIMARY KEY,
product_name VARCHAR(100),
price INT,
category VARCHAR(50)
);
-- เพิ่มข้อมูล
INSERT INTO products (id, product_name, price, category) VALUES
(1, '高機能オフィスチェア', 35000, '家具'),
(2, '静音ワイヤレスキーボード', 8000, '周辺機器'),
(3, '4K対応27インチモニター', 42000, '周辺機器'),
(4, '電動昇降式デスク', 65000, '家具'),
(5, 'ノイズキャンセリングヘッドホン', 28000, 'オーディオ');
เรามาดูวิธีการใช้ AS clause ในรูปแบบต่างๆ ผ่านตารางนี้กันเลยครับ!
1. Alias ของคอลัมน์: จัดระเบียบผลลัพธ์ให้ดูสวยงาม
Alias ของคอลัมน์คือฟังก์ชันที่เปลี่ยนชื่อคอลัมน์ (หัวตาราง) ของผลลัพธ์คิวรีให้เป็นชื่อที่เข้าใจง่ายขึ้น ไม่ต้องกังวลนะครับ เพราะมันไม่ได้เปลี่ยนชื่อคอลัมน์ในตารางต้นฉบับจริงๆ ส่วนใหญ่จะมีประโยชน์ตอนสร้างรายงานหรือนำไปแสดงผลในแอปพลิเคชัน
ตัวอย่างที่ 1: เปลี่ยนชื่อคอลัมน์เป็นภาษาไทยที่เข้าใจง่าย
มีประโยชน์มากเมื่อเราต้องการแสดงผลชื่อคอลัมน์ภาษาอังกฤษอย่าง `product_name` หรือ `price` ให้เป็นภาษาไทยที่เข้าใจง่ายอย่าง "ชื่อสินค้า" หรือ "ราคา"
SELECT
product_name AS "ชื่อสินค้า",
price AS "ราคา"
FROM
products;
เพียงแค่ระบุชื่อใหม่หลัง AS แค่นี้หัวตารางของผลลัพธ์ก็เปลี่ยนไปแล้วครับ ทำให้เราสามารถสร้างรายงานที่คนไม่รู้ SQL ก็เข้าใจได้ง่าย
ตัวอย่างที่ 2: การตั้งชื่อให้คอลัมน์ที่เป็นผลจากการคำนวณ
การตั้งชื่อที่เข้าใจง่ายให้กับคอลัมน์ที่เกิดจากการคำนวณหรือฟังก์ชัน เป็นหนึ่งในวิธีใช้ AS ที่พบบ่อยที่สุด ตัวอย่างเช่น ลองคำนวณราคารวมภาษี (ราคา × 1.1) กันดูครับ
-- ถ้าไม่มี AS ชื่อคอลัมน์จะกลายเป็นสูตรคำนวณไปเลย
SELECT
product_name,
price * 1.1
FROM
products;
ถ้าเป็นแบบนี้ ชื่อคอลัมน์จะกลายเป็น `price * 1.1` ซึ่งดูไม่สวยงามเลยใช่ไหมครับ นี่แหละครับคือเวลาที่ AS จะได้แสดงฝีมือ
-- ใช้ AS เพื่อตั้งชื่อที่เข้าใจง่าย
SELECT
product_name AS "ชื่อสินค้า",
price * 1.1 AS "ราคารวมภาษี"
FROM
products;
เป็นอย่างไรบ้างครับ? แค่เพิ่ม `AS "ราคารวมภาษี"` เข้าไป ผลลัพธ์ก็ดูดีขึ้นมากเลย การใช้ฟังก์ชันสรุปผล (Aggregate Functions) อย่าง `COUNT`, `SUM`, `AVG` ก็เช่นกัน การใช้ AS ตั้งชื่อให้ผลลัพธ์ถือเป็นพื้นฐานเลยครับ
※ อีกอย่างคือ ในหลายๆ ระบบ SQL เราสามารถละเว้นคำว่า AS สำหรับ Alias ของคอลัมน์ได้ (เช่น `price "ราคา"`) แต่เพื่อให้อ่านโค้ดได้ง่ายขึ้น ขอแนะนำให้เขียน AS กำกับไว้เสมอครับ
2. Alias ของตาราง: ทำให้คิวรีที่ซับซ้อนดูง่ายขึ้น
Alias ของตารางคือฟังก์ชันที่ใช้ตั้ง "ชื่อเล่นสั้นๆ ชั่วคราว" ให้กับตารางภายในคิวรีนั้นๆ ซึ่งจะแสดงประสิทธิภาพสูงสุดโดยเฉพาะเมื่อต้อง JOIN หลายๆ ตารางเข้าด้วยกัน มันทำให้คิวรีสั้นลง เรียบง่ายขึ้น และทำให้เห็นได้ชัดเจนว่ากำลังอ้างอิงถึงคอลัมน์ของตารางไหน
ตัวอย่างที่ 1: ทำให้คำสั่ง JOIN ดูสะอาดตา
เรามาดูตัวอย่างจากตาราง "พนักงาน (employees)" และ "แผนก (departments)" กันครับ
-- เตรียมตารางสำหรับตัวอย่างนี้
DROP TABLE IF EXISTS employees;
DROP TABLE IF EXISTS departments;
CREATE TABLE departments (id INT, department_name STRING);
INSERT INTO departments VALUES (1, '営業部'), (2, '開発部');
CREATE TABLE employees (id INT, name STRING, department_id INT);
INSERT INTO employees VALUES (1, '山田 太郎', 1), (2, '鈴木 花子', 2);
หากไม่ใช้ Alias เราจำเป็นต้องเขียนในรูปแบบ `ชื่อตาราง.ชื่อคอลัมน์` ทุกครั้ง ซึ่งทำให้โค้ดยาวและซ้ำซ้อนมาก
-- แบบไม่มี Alias (ตัวอย่างที่ยาวเกินไป)
SELECT
employees.name,
departments.department_name
FROM
employees
INNER JOIN
departments ON employees.department_id = departments.id;
เรามาลองเขียนใหม่โดยใช้ Alias ของตารางกันครับ เราจะตั้งชื่อให้ employees เป็น e และ departments เป็น d
-- แบบมี Alias (วิธีที่แนะนำ)
SELECT
e.name,
d.department_name
FROM
employees AS e
INNER JOIN
departments AS d ON e.department_id = d.id;
โค้ดดูสะอาดตาขึ้นอย่างไม่น่าเชื่อเลยใช่ไหมครับ! แค่ e.name ก็สื่อความหมายได้ชัดเจนว่าเป็น "คอลัมน์ name จากตาราง employees" ทำให้ภาพรวมของคิวรีดูง่ายขึ้นมาก
ลงมือทำจริง! มาลองใช้ Alias บนเบราว์เซอร์กัน
รอมานานแล้วใช่ไหมครับ! นี่คือสภาพแวดล้อมที่คุณสามารถลงมือทดลองใช้วิธีการใช้ Alias ที่เรียนมาได้ด้วยตัวเอง
ลองคัดลอกโค้ดทั้งหมดด้านล่าง แล้วบันทึกเป็นไฟล์ชื่อ alias_practice.html จากนั้นเปิดไฟล์ด้วยเบราว์เซอร์ของคุณ ลองใช้ Alias กับคิวรี `INNER JOIN` เพื่อสัมผัสด้วยตัวเองว่าคิวรีจะอ่านง่ายขึ้นขนาดไหน!
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<title>สนามฝึก SQL Alias</title>
<script src="https://cdn.jsdelivr.net/npm/alasql@4"></script>
<style>
body { font-family: sans-serif; padding: 2rem; background-color: #f9f9f9; }
.container { max-width: 800px; margin: auto; background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); }
h1 { color: #333; }
textarea { width: 100%; height: 180px; font-family: monospace; font-size: 16px; padding: 10px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; margin-bottom: 1rem; }
button { background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; }
button:hover { background-color: #0056b3; }
#result-area { margin-top: 2rem; }
table { width: 100%; border-collapse: collapse; margin-top: 1rem; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f2f2f2; }
.error { color: red; font-weight: bold; }
</style>
</head>
<body>
<div class="container">
<h1>มาลองใช้ Alias กันเถอะ!</h1>
<p>ป้อนคำสั่ง SQL ในกล่องข้อความด้านล่างแล้วกดปุ่ม "รัน SQL"</p>
<textarea id="sql-input">-- เขียนโค้ด SQL ของคุณที่นี่
SELECT
e.name AS "ชื่อพนักงาน",
d.department_name AS "ชื่อแผนก"
FROM
employees AS e
INNER JOIN
departments AS d ON e.department_id = d.id;</textarea>
<button onclick="executeSQL()">รัน SQL</button>
<div id="result-area"></div>
</div>
<script>
// การเริ่มต้นฐานข้อมูลและเตรียมข้อมูลสำหรับ JOIN
const db = new alasql.Database();
db.exec(`
CREATE TABLE departments (id INT, department_name STRING);
INSERT INTO departments VALUES (1, '営業部'), (2, '開発部');
CREATE TABLE employees (id INT, name STRING, department_id INT);
INSERT INTO employees VALUES (1, '山田 太郎', 1), (2, '鈴木 花子', 2);
`);
function executeSQL() {
const sql = document.getElementById('sql-input').value;
const resultArea = document.getElementById('result-area');
resultArea.innerHTML = '';
try {
const result = db.exec(sql);
if (result.length > 0) {
resultArea.appendChild(createTable(result));
} else {
resultArea.innerHTML = '<p>ไม่พบผลลัพธ์ (0 แถว)</p>';
}
} catch (e) {
resultArea.innerHTML = `<p class="error">เกิดข้อผิดพลาด: ${e.message}</p>`;
}
}
function createTable(data) {
const table = document.createElement('table');
const thead = table.createTHead();
const tbody = table.createTBody();
const headerRow = thead.insertRow();
for (const key in data[0]) {
const th = document.createElement('th');
th.textContent = key;
headerRow.appendChild(th);
}
data.forEach(rowData => {
const row = tbody.insertRow();
for (const key in rowData) {
const cell = row.insertCell();
cell.textContent = rowData[key];
}
});
return table;
}
// แสดงผลครั้งแรก
executeSQL();
</script>
</body>
</html>
ข้อควรระวัง: ขอบเขตและลำดับของ Alias
Alias นั้นสะดวกมาก แต่ก็มีกฎสำคัญข้อหนึ่งที่ต้องรู้ ซึ่งเกี่ยวข้องกับ "ลำดับการทำงานของ SQL" ครับ
ไม่สามารถใช้ Alias ของคอลัมน์ใน `WHERE` หรือ `GROUP BY` clause ได้
ลำดับการทำงานภายในของ SQL นั้นแตกต่างจากลำดับที่เราเขียนเล็กน้อย (SELECT → FROM → WHERE) โดยภาพรวมจะเป็นดังนี้:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
สังเกตไหมครับ? SELECT clause จะถูกประมวลผลหลัง WHERE clause และ GROUP BY clause ดังนั้น เราจึงไม่สามารถใช้ Alias ของคอลัมน์ที่กำหนดใน SELECT clause ในส่วนที่ถูกประมวลผลก่อนหน้าอย่าง WHERE clause ได้
-- ตัวอย่างนี้จะเกิดข้อผิดพลาด
-- ตัวอย่างนี้ใช้ตาราง 'products' เพื่ออธิบาย
SELECT
product_name AS "ชื่อสินค้า"
FROM
products
WHERE
"ชื่อสินค้า" = '高機能オフィスチェア';
คิวรีข้างต้นจะเกิดข้อผิดพลาด เพราะในขณะที่ WHERE clause ทำงานนั้น Alias ที่ชื่อว่า "ชื่อสินค้า" ยังไม่มีตัวตนอยู่ครับ ในกรณีนี้ เราจำเป็นต้องใช้ชื่อคอลัมน์ดั้งเดิม (ในการทดลองข้อผิดพลาดนี้ คุณจะต้องเปลี่ยนข้อมูลในส่วนปฏิบัติการด้านบนกลับไปเป็นตาราง 'products')
-- นี่คือวิธีเขียนที่ถูกต้อง
SELECT
product_name AS "ชื่อสินค้า"
FROM
products
WHERE
product_name = '高機能オフィスチェア';
ในทางกลับกัน ORDER BY clause ซึ่งถูกประมวลผลหลัง SELECT clause นั้นสามารถใช้ Alias ของคอลัมน์ได้ ซึ่งสะดวกมากและควรจำไว้ครับ
สรุป
お疲れ様でした!今回は、SQLのクエリを劇的に読みやすく、書きやすくするAS句(エイリアス)について解説しました。
- Alias ของคอลัมน์: เขียน
AS "ชื่อเล่น"ต่อท้ายชื่อคอลัมน์ในSELECTclause ใช้เพื่อจัดระเบียบผลลัพธ์ให้ดูดี หรือตั้งชื่อที่เข้าใจง่ายให้กับผลการคำนวณ - Alias ของตาราง: เขียน
AS ชื่อเล่นต่อท้ายชื่อตารางในFROMหรือJOINclause ช่วยให้คิวรีสั้นลงและเพิ่มความสามารถในการอ่านอย่างมาก โดยเฉพาะเมื่อต้องจัดการกับหลายตารางในJOIN - ข้อควรระวัง: Alias ของคอลัมน์ที่ตั้งใน
SELECTclause ไม่สามารถนำไปใช้ในส่วนที่ประมวลผลก่อนหน้าอย่างWHEREหรือGROUP BYclause ได้
AS เป็นคีย์เวิร์ดที่จำเป็นและทุกคนควรใช้ ตั้งแต่ผู้เริ่มต้นเขียน SQL ไปจนถึงมืออาชีพที่จัดการกับข้อมูลที่ซับซ้อน ตั้งแต่วันนี้ ลองตั้ง "ชื่อเล่น" ให้กับคิวรีของคุณดูสิครับ รับรองว่าตัวคุณในอนาคตและเพื่อนร่วมทีมจะต้องขอบคุณคุณอย่างแน่นอน!