SQL 之 排列数据
来源:互联网 发布:日本 常任理事国知乎 编辑:程序博客网 时间:2024/05/18 18:15
关键字:ORDER, ASC, DESC
1. ORDER BY子句
SELECT columnlist
FROM tablelist
ORDER BY columnlist
强调:ORDER BY子句总在FROM子句后面, FROM子句总在关键字SELECT后面。
columnlist可以是任意多的列,包括单个的列,或者复杂的表达式。SELECT后面和ORDER BY后面的列可以完全不同。
示例:表Customers
CustomerID FirstName LastName
------------------------------------------------------------
1 William Smith
2 Janet Smith
3 Natalie Lopez
4 Brenda Harper
a. 升序排序:
SELECT
FirstName,LastName
FROM Customers
ORDER BY LastName
结果
FirstName LastName
------------------------------------------
Brenda Harper
Natalie Lopez
William Smith
Janet Smith
有两个人的LastName相同,所以这种情况下结果谁先谁后是无法预料的。
ASC关键字:ascending,表示升序,其实默认升序所以多数没必要
SELECT
FirstName,LastName
FROM Customers
ORDER BY LastName ASC
b. 降序排序
使用关键字DESC(descending)
SELECT
FirstName,LastName
FROM Customers
ORDER BY LastName DESC
结果
FirstName LastName
------------------------------------------
Janet Smith
William Smith
Natalie Lopez
Brenda Harper
c. 根据多列来排序
如示例,有两个人的LastName都是Smith,可以添加一个列来排序:
SELECT
FirstName,LastName
FROM Customers
ORDER BY LastName, FirstName
ORDER BY子句的列名先后顺序很重要:先按照LastName排序,遇到LastName相同的,再按照FirstName排序,以此类推。
结果:
FirstName LastName
------------------------------------------
Brenda Harper
Natalie Lopez
Janet Smith
William Smith
d. 根据计算字段来排序
SELECT
LastName +’,’ + FirstName AS‘Name’
FROM Customers
ORDER BY Name
结果:
Name
--------------------------
Harper, Brenda
Lopez, Natalie
Smith,Janet
Smith, William
连接后 ’Smith,Janet’ 的字典序是比‘Smith, William’ 要小的。
计算字段也可以放在ORDER BY子句中:
SELECT
FirstName,LastName
FROM Customers
ORDER BY LastName + FirstName
结果:
FirstName LastName
-------------------------------------------
Harper Brenda
Lopez Natalie
Smith Janet
Smith William
强调:这些升降序排序都没有考虑大小写,也就是dog可能排在DOG前面,也可能在后面。
e. 排列序列的更多内容
数据库允许用户指定或定制排序规则设置,设置一般遵循3个原则:
(1)升序排序时,NULL值的数据最先出现。NULL ->数字-> 字符;降序时,字符->数字->NULL值
(2)字符数据:大小写不区分
(3)字符数据:字典序
与SQL Server和MySQL不同,Oracle中NULL值在最后。可以添加关键字NULLS FIRST让NULL在升序中最先出现。用在降序排序中NULL值和通常一样,还是在最后。此外,Oracle不同的是会区分大小写。升序中,大写先于小写。
示例:表Customers
TableID CharacterData NumericData
------------------------------------------------------------
1 23 23
2 5 5
3 Dog NULL
4 NULL -6
CharacterData定义为字符列(比如VARCHAR型,可变长度数据类型)NumericData定义为数值列(如INT型,整数),没有数据:NULL
SELECT
NumericData
FROM tablename
ORDER BYNumericData
结果:
NumericData
-------------------
NULL
-6
5
23
如果用户希望把代表没有数据的NULL表示为0,那么
SELECT
ISNULL (NumericData, 0)
FROM tablename
ORDER BY ISNULL (NumericData, 0)
注意如果没有用别名,在ORDER BY子句也要用同样的ISNULL转换类型
或者
SELECT
ISNULL (NumericData, 0) AS‘Numeric’
FROM tablename
ORDER BYISNULL Numeric
结果:
NumericData
-------------------
-6
0
5
23
如果使用CharacterData排序:
SELECT
CharacterData
FROM tablename
ORDER BY CharacterData DESC
结果
NumericData
-------------------
Dog
5
23
NULL
PS 5排在23前面是因为它们是字符列,按照字典序(按照单个字符从左到右比较),5比23“大”,故降序排列在前。
- SQL 之 排列数据
- Oracle SQL排列组合之排列问题
- 黑马程序员之SQL学习笔记: SQL排列函数
- 数据排列
- 按指定排列顺序获取数据的sql语句
- SQL之数据检索
- SQL之数据检索
- sql之编辑数据
- SQL之编辑数据
- SQL 之 汇总数据
- SQL 之 修改数据
- 数据排列,最小排列数
- oracle学习笔记之二限制和排列数据
- sql 查询排列第几
- 经典SQL之数据统计
- SQL之数据分页管理器
- T-SQL 之插入数据
- SQL之数据定义语言
- 黑科技 - 扩栈
- leetcode---Linked List Cycle
- leetcode-- 130. Surrounded Regions
- 仿照ZEDboard设计板子调试
- HTTP中GET与POST的区别
- SQL 之 排列数据
- k_means++算法与效果展示
- 如何配置linux虚拟机的IP?
- fixed固定导航,并左右滑动
- My SQL 汇总和分组数据
- Android即时通讯和sns开源项目汇总
- 二叉树练习题
- 剑指Offer面试题24(Java版):二叉搜索树后序遍历序列
- android事件监听回调机制