首页 > 数据库 > 数据库开发技术 > 五种主流数据库:从无序到有序
| ORDER BY | MySQL | Oracle | SQL Server | PostgreSQL | SQLite |
|---|---|---|---|---|---|
| 单个字段排序 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 多个字段排序 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 表达式排序 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| 空值排序 | 默认最小 | 默认最大 | 默认最小 | 默认最大 | 默认最小 |
| 中文排序 | 偏旁部首、拼音 | 偏旁部首、拼音、笔画 | 偏旁部首、拼音、笔画 | 偏旁部首、拼音 | 偏旁部首 |
SELECT col1, col2, ...
FROM t
[WHERE ...]
ORDER BY col1 [ASC | DESC];
SELECT emp_name, salary
FROM employee
WHERE sex = '女'
ORDER BY salary DESC;
emp_name|salary
--------|--------
孙尚香 |12000.00
赵氏 | 6600.00
孙丫鬟 | 6000.00
SELECT col1, col2, ...
FROM t
[WHERE ...]
ORDER BY col1 [ASC | DESC], col2 [ASC | DESC], ...;
SELECT emp_name, salary, hire_date
FROM employee
WHERE dept_id = 5
ORDER BY salary DESC, hire_date;
emp_name|salary |hire_date
--------|--------|----------
法正 |10000.00|2017-04-09
简雍 | 4800.00|2019-05-11
...
蒋琬 | 4000.00|2018-01-28
邓芝 | 4000.00|2018-11-11
SELECT emp_name, salary * 12 + bonus
FROM employee
WHERE dept_id = 1
ORDER BY salary * 12 + bonus;
emp_name|salary * 12 + bonus
--------|-------------------
张飞 | 298000.00
关羽 | 322000.00
刘备 | 370000.00
SELECT emp_name, salary * 12 + bonus
FROM employee
WHERE dept_id = 1
ORDER BY 2;
SELECT emp_name, bonus
FROM employee
WHERE dept_id = 2
ORDER by bonus;
-- MySQL、Microsoft SQL Server 以及 SQLite
emp_name|bonus
--------|-------
黄忠 |
魏延 |
诸葛亮 |8000.00
-- Oracle 以及 PostgreSQL
emp_name|bonus
--------|-------
诸葛亮 |8000.00
黄忠 |
魏延 |
-- Oracle、PostgreSQL 以及 SQLite
SELECT emp_name, bonus
FROM employee
WHERE dept_id = 2
ORDER by bonus NULLS FIRST;
MySQL、Microsoft SQL Server 以及 SQLite 认为排序时空值最小,升序排序时空值排在最前,降序排序时空值排在最后。
Oracle 和 PostgreSQL 认为排序时空值最大,升序排序时空值排在最后,降序排序时空值排在最前。
Oracle、PostgreSQL 以及 SQLite 支持使用 NULLS FIRST 和 NULLS LAST 指定空值的排序位置。
-- Oracle 实现中文拼音排序
SELECT emp_name
FROM employee
WHERE dept_id = 4
ORDER BY NLSSORT(emp_name,'NLS_SORT = SCHINESE_PINYIN_M');
EMP_NAME
--------
关平
关兴
廖化
马岱
张苞
赵氏
赵统
赵云
周仓
-- MySQL 实现中文拼音排序
SELECT emp_name
FROM employee
WHERE dept_id = 4
ORDER BY CONVERT(emp_name USING GBK);
-- SQL Server 实现中文拼音排序
SELECT emp_name
FROM employee
WHERE dept_id = 4
ORDER BY emp_name COLLATE Chinese_PRC_CI_AI_KS_WS;
-- PostgreSQL 实现中文拼音排序
SELECT emp_name
FROM employee
WHERE dept_id = 4
ORDER BY emp_name COLLATE "zh_CN";
原文作者:SQL编程思想;如有侵权,请联系管理员删除。