メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

Clause ORDER BY คืออะไร?

บทนี้กล่าวถึงการใช้ `ORDER BY` Clause ใน SQL เพื่อเรียงลำดับผลลัพธ์ของการ Query ข้อมูลจากตารางตามคอลัมน์ที่กำหนด โดยสามารถเรียงจากน้อยไปมาก (ASC) หรือจากมากไปน้...

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 ซึ่งใช้ในการจำกัดจำนวนแถวที่แสดงผล

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る