首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL ORDER BY 語法全解析:排序、多列與實戰示例

     編輯:MySQL 資料庫相關知識

基本語法

SELECT column_list
FROM table_name
ORDER BY column_name [ASC | DESC];
  • ASC:升序(默認),1→9,a→z。
  • DESC:降序,9→1,z→a。
  • SQL 關鍵字不區分大小寫。

單列排序示例

-- 年齡升序
SELECT * FROM person ORDER BY age;

-- 年齡降序
SELECT * FROM person ORDER BY age DESC;

多列排序規則

SELECT * FROM person ORDER BY last_name, first_name;

排序邏輯:先按第一列排序,值相同的行再按第二列排序,以此類推。

PHP + MySQL 完整示例

<?php
$conn = mysqli_connect("localhost", "user", "pass", "dbname");
if (!$conn) die("連接失敗: " . mysqli_connect_error());

$sql = "SELECT FirstName, LastName, Age FROM person ORDER BY Age";
$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo $row["FirstName"] . " " . $row["LastName"] . " " . $row["Age"] . "<br>";
    }
} else {
    echo "無數據";
}
mysqli_close($conn);
?>
現代化建議:使用 mysqli 或 PDO 替代已棄用的 mysql_* 函數;採用預處理語句防止 SQL 注入。

進階用法

1. 表達式排序

SELECT *, (price * quantity) AS total FROM orders ORDER BY total DESC;

2. 自定義排序順序

SELECT * FROM tasks
ORDER BY FIELD(status, 'urgent', 'high', 'normal', 'low');

3. NULL 值排序控制

-- NULL 排最後(默認 ASC 時 NULL 在前)
ORDER BY col IS NULL, col ASC;

-- NULL 排最前
ORDER BY col IS NULL DESC, col ASC;

4. 配合 LIMIT 分頁

SELECT * FROM articles ORDER BY created_at DESC LIMIT 10 OFFSET 20;  -- 第 3 頁

效能優化提示

  • 排序列上建立索引可避免 Filesort。
  • ORDER BY indexed_col LIMIT N 可利用索引直接取前 N 行。
  • 避免 ORDER BY RAND()、ORDER BY non_indexed_col 導致全表掃描+臨時表排序。
  • 複合索引列順序應匹配 ORDER BY 列順序(或反序)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved