Clause ORDER BY คืออะไร?
ในบทที่แล้ว เราได้เรียนรู้วิธีการลบข้อมูลออกจากตารางด้วยคำสั่ง DELETE ในบทนี้ เราจะมาเรียนรู้วิธีการเรียงลำดับข้อมูลที่ดึงออกมาจากฐานข้อมูลด้วย ORDER BY Clause ซึ่งจะช่วยให้เราสามารถแสดงผลข้อมูลในรูปแบบที่เราต้องการได้
ORDER BY Clause คืออะไร?
ORDER BY Clause เป็นส่วนหนึ่งของคำสั่ง SELECT ที่ใช้ในการเรียงลำดับผลลัพธ์ (result set) ตามคอลัมน์ที่เรากำหนด การเรียงลำดับสามารถทำได้ทั้งจากน้อยไปมาก (ascending) หรือจากมากไปน้อย (descending)
รูปแบบการใช้งานพื้นฐานของ ORDER BY Clause คือ:
SELECT column1, column2, ...
FROM table_name
ORDER BY column_name [ASC | DESC];
SELECT column1, column2, ...: ระบุคอลัมน์ที่เราต้องการดึงข้อมูลFROM table_name: ระบุตารางที่เราต้องการดึงข้อมูลORDER BY column_name: ระบุคอลัมน์ที่เราต้องการใช้ในการเรียงลำดับASC: (Optional) ระบุให้เรียงลำดับจากน้อยไปมาก (ascending) ซึ่งเป็นค่าเริ่มต้น ถ้าไม่ระบุASCจะถือว่าเป็นการเรียงลำดับจากน้อยไปมากDESC: (Optional) ระบุให้เรียงลำดับจากมากไปน้อย (descending)
ตัวอย่างการใช้งาน ORDER BY
สมมติว่าเรามีตารางชื่อ customers ที่เก็บข้อมูลลูกค้าดังนี้:
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
city VARCHAR(50),
points INT
);
INSERT INTO customers (customer_id, first_name, last_name, city, points) VALUES
(1, 'John', 'Doe', 'New York', 100),
(2, 'Jane', 'Smith', 'Los Angeles', 250),
(3, 'David', 'Lee', 'Chicago', 150),
(4, 'Emily', 'Brown', 'Houston', 50),
(5, 'Michael', 'Davis', 'New York', 300);
การเรียงลำดับตามชื่อ (first_name) จากน้อยไปมาก
เราสามารถเรียงลำดับลูกค้าตามชื่อจากน้อยไปมาก (A-Z) ได้ดังนี้:
SELECT *
FROM customers
ORDER BY first_name ASC;
ผลลัพธ์ที่ได้:
+-------------+------------+-----------+-------------+--------+
| customer_id | first_name | last_name | city | points |
+-------------+------------+-----------+-------------+--------+
| 3 | David | Lee | Chicago | 150 |
| 4 | Emily | Brown | Houston | 50 |
| 2 | Jane | Smith | Los Angeles | 250 |
| 1 | John | Doe | New York | 100 |
| 5 | Michael | Davis | New York | 300 |
+-------------+------------+-----------+-------------+--------+
สังเกตว่าข้อมูลลูกค้าถูกเรียงลำดับตามชื่อ (first_name) จาก A ถึง Z
การเรียงลำดับตามคะแนน (points) จากมากไปน้อย
เราสามารถเรียงลำดับลูกค้าตามคะแนนจากมากไปน้อย (จากคะแนนสูงสุดไปต่ำสุด) ได้ดังนี้:
SELECT *
FROM customers
ORDER BY points DESC;
ผลลัพธ์ที่ได้:
+-------------+------------+-----------+-------------+--------+
| customer_id | first_name | last_name | city | points |
+-------------+------------+-----------+-------------+--------+
| 5 | Michael | Davis | New York | 300 |
| 2 | Jane | Smith | Los Angeles | 250 |
| 3 | David | Lee | Chicago | 150 |
| 1 | John | Doe | New York | 100 |
| 4 | Emily | Brown | Houston | 50 |
+-------------+------------+-----------+-------------+--------+
สังเกตว่าข้อมูลลูกค้าถูกเรียงลำดับตามคะแนน (points) จากมากไปน้อย
การเรียงลำดับตามหลายคอลัมน์
เราสามารถเรียงลำดับข้อมูลตามหลายคอลัมน์ได้ โดยระบุชื่อคอลัมน์ที่ต้องการเรียงลำดับตามลำดับความสำคัญ เช่น เราต้องการเรียงลำดับลูกค้าตามเมือง (city) จากน้อยไปมาก และถ้ามีลูกค้าที่อยู่ในเมืองเดียวกัน ให้เรียงลำดับตามนามสกุล (last_name) จากน้อยไปมาก
SELECT *
FROM customers
ORDER BY city ASC, last_name ASC;
ผลลัพธ์ที่ได้:
+-------------+------------+-----------+-------------+--------+
| customer_id | first_name | last_name | city | points |
+-------------+------------+-----------+-------------+--------+
| 3 | David | Lee | Chicago | 150 |
| 4 | Emily | Brown | Houston | 50 |
| 2 | Jane | Smith | Los Angeles | 250 |
| 1 | John | Doe | New York | 100 |
| 5 | Michael | Davis | New York | 300 |
+-------------+------------+-----------+-------------+--------+
สังเกตว่าข้อมูลลูกค้าถูกเรียงลำดับตามเมือง (city) ก่อน และถ้ามีลูกค้าที่อยู่ในเมืองเดียวกัน จะถูกเรียงลำดับตามนามสกุล (last_name)
กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย
กรณีใช้งานจริง: การแสดงผลสินค้าตามราคา
สมมติว่าเรามีตาราง products ที่เก็บข้อมูลสินค้า เราสามารถใช้ ORDER BY เพื่อแสดงผลสินค้าตามราคาจากน้อยไปมาก หรือจากมากไปน้อย เพื่อให้ผู้ใช้สามารถเลือกดูสินค้าที่ต้องการได้ง่ายขึ้น
SELECT product_name, price
FROM products
ORDER BY price ASC; -- เรียงจากราคาถูกสุดไปแพงสุด
ข้อผิดพลาดที่พบบ่อย: การลืมระบุ ASC หรือ DESC
ถ้าเราไม่ระบุ ASC หรือ DESC MySQL จะถือว่าเป็นการเรียงลำดับจากน้อยไปมาก (ASC) โดยอัตโนมัติ ดังนั้นถ้าเราต้องการเรียงลำดับจากมากไปน้อย อย่าลืมระบุ DESC
SELECT *
FROM customers
ORDER BY points; -- เทียบเท่ากับ ORDER BY points ASC
ข้อผิดพลาดที่พบบ่อย: การใช้ชื่อคอลัมน์ผิด
ถ้าเราใช้ชื่อคอลัมน์ที่ไม่ถูกต้องใน ORDER BY Clause MySQL จะแสดงข้อผิดพลาด
SELECT *
FROM customers
ORDER BY point; -- คอลัมน์ "point" ไม่มีในตาราง customers
ข้อความผิดพลาดที่อาจเกิดขึ้น: Unknown column 'point' in 'order clause'
สรุป
ORDER BY Clause เป็นเครื่องมือที่มีประโยชน์ในการเรียงลำดับข้อมูลที่ดึงออกมาจากฐานข้อมูล ช่วยให้เราสามารถแสดงผลข้อมูลในรูปแบบที่ต้องการได้ การใช้งาน ORDER BY ร่วมกับ ASC หรือ DESC ช่วยให้เราสามารถควบคุมทิศทางการเรียงลำดับได้ นอกจากนี้ เรายังสามารถเรียงลำดับตามหลายคอลัมน์ได้ เพื่อให้ได้ผลลัพธ์ที่ละเอียดและตรงกับความต้องการมากยิ่งขึ้น ในบทต่อไป เราจะเรียนรู้เกี่ยวกับ LIMIT Clause ซึ่งใช้ในการจำกัดจำนวนแถวที่แสดงผล