ใน MySQL สามารถเพิ่ม Derived Column (คอลัมน์คำนวณ/ค่าคงที่) ในคำสั่ง SELECT ได้โดยตรง โดยไม่ต้อง ALTER TABLE จริงๆ
รูปแบบคำสั่ง
SELECT column1, column2, ..., 'constant_value' AS alias_name
FROM yourTableName;
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE TemporaryColumnWithValueDemo (
-> StudentId INT,
-> StudentName VARCHAR(100)
-> );
Query OK, 0 rows affected (0.59 sec)
mysql> INSERT INTO TemporaryColumnWithValueDemo VALUES
-> (101, 'John'), (102, 'Johnson'), (103, 'Carol'), (104, 'Sam');
2. ดูข้อมูลเดิม
mysql> SELECT * FROM TemporaryColumnWithValueDemo;
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 101 | John |
| 102 | Johnson |
| 103 | Carol |
| 104 | Sam |
+-----------+-------------+
4 rows in set (0.00 sec)
3. เพิ่มคอลัมน์ชั่วคราว TempCollegeName = 'M.I.T.'
mysql> SELECT StudentId, StudentName, 'M.I.T.' AS TempCollegeName
-> FROM TemporaryColumnWithValueDemo;
+-----------+-------------+-----------------+
| StudentId | StudentName | TempCollegeName |
+-----------+-------------+-----------------+
| 101 | John | M.I.T. |
| 102 | Johnson | M.I.T. |
| 103 | Carol | M.I.T. |
| 104 | Sam | M.I.T. |
+-----------+-------------+-----------------+
4 rows in set (0.00 sec)
กรณีใช้งานจริง
เพิ่มคอลัมน์คำนวณ (Computed Column)
SELECT
product_id,
price,
quantity,
price * quantity AS total_amount,
CASE
WHEN price * quantity > 1000 THEN 'High'
WHEN price * quantity > 500 THEN 'Medium'
ELSE 'Low'
END AS order_tier
FROM order_items;
เพิ่ม Metadata สำหรับ Export/Report
SELECT
*,
'2024-Q1' AS report_period,
CURRENT_USER() AS exported_by,
NOW() AS exported_at
FROM sales_data;
ใช้ใน UNION
SELECT id, name, 'employee' AS type FROM employees
UNION ALL
SELECT id, name, 'customer' AS type FROM customers;
ข้อดีของวิธีนี้
- ไม่เปลี่ยนโครงสร้างตาราง (No DDL, No Lock)
- ยืดหยุ่น เปลี่ยนค่าได้ทุก Query
- ประหยัดพื้นที่เก็บข้อมูล
- เหมาะสำหรับ Reporting, Export, API Response
ข้อจำกัด: ไม่สามารถใช้ใน WHERE / GROUP BY / ORDER BY ได้โดยตรง ต้องห่อด้วย Subquery หรือ CTE
-- ❌ ไม่ได้
SELECT * FROM t WHERE 'M.I.T.' = 'M.I.T.';
-- ✅ ได้ (ใช้ Alias)
SELECT *, 'M.I.T.' AS college FROM t WHERE college = 'M.I.T.'; -- MySQL อนุญาตในบางเวอร์ชัน
-- ✅ มั่นใจ (ใช้ Subquery)
SELECT * FROM (SELECT *, 'M.I.T.' AS college FROM t) AS sub WHERE college = 'M.I.T.';