🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

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 นั้นแตกต่างจากลำดับที่เราเขียนเล็กน้อย (SELECTFROMWHERE) โดยภาพรวมจะเป็นดังนี้:

FROMWHEREGROUP BYHAVINGSELECTORDER 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句(エイリアス)について解説しました。

AS เป็นคีย์เวิร์ดที่จำเป็นและทุกคนควรใช้ ตั้งแต่ผู้เริ่มต้นเขียน SQL ไปจนถึงมืออาชีพที่จัดการกับข้อมูลที่ซับซ้อน ตั้งแต่วันนี้ ลองตั้ง "ชื่อเล่น" ให้กับคิวรีของคุณดูสิครับ รับรองว่าตัวคุณในอนาคตและเพื่อนร่วมทีมจะต้องขอบคุณคุณอย่างแน่นอน!