SQL学习之使用order by 依照指定顺序排序或自己定义顺序排序
我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常sql须要实现方式都有哪些,參考很多其它资料总结例如以下(不完好的和错误望大家指出):
一、假设我们仅仅是对于在某个程序中的应用是须要依照例如以下的方式排序,我们仅仅需在SQL语句级别设置排序方式:
1、依照oracled的默认方式排序:select * from table_name order by col_name (desc|asc);(默觉得升序或无序对于升降仅仅有在数字字段);
2、依照自己定义的顺序排序: select * from table_name order by decode(col_name,'value1',1,value2',2,value3',3,value4',4,...valueN',N);
二、假设我们仅仅是对于在某个程序中的应用是须要依照例如以下设置的方式排序,我们仅仅需在SQL语句级别设置排序方式(一般没有设置之前我们系统的中文默认排序方式是依照拼音排序 ):
1、依照拼音排序: select * fromtable_name order by nlssort(col_name,'NLS_SORT=SCHINESE_PINYIN_M');
2、依照笔划排序: select * from table_name order by nlssort(col_name,'NLS_SORT=SCHINESE_STROKE_M');
3、依照部首排序: select * from table_name order by nlssort(col_name,'NLS_SORT=SCHINESE_RADICAL_M');
注意:可是在数据量比較大情况下查询速度会非常慢,须要进行进一步优化。按oracle官方文档的解释,oracle在对中文列建立索引时,是依照2进制编码进行排序的,所以假设NLS_SORT被设置为BINARY时。排序则能够利用索引.假设不是2进制排序,而是使用上面介绍的3种针对中文的特殊排序,则oracle无法使用索引。会进行全表扫描.解决方法是,在此列上建立linguistic index.比如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));
引用原文:Note:
Setting NLS_SORT to anything other than BINARY causes a sort to use a full table scan, regardless of the path chosen by the optimizer. BINARY is the exception because indexes are built according to a binary order of keys. Thus the optimizer can use an index to satisfy the ORDER BY clause when NLS_SORT is set to BINARY. If NLS_SORT is set to any linguistic sort, the optimizer must include a full table scan and a full sort in the execution plan.
三、假设我们在整个会话中都要使用特定的方式排序的话,我们须要在Session级别的设置字段的默认排序方式:
1.按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;
2.按笔画:alter session set nls_sort = SCHINESE_STROKE_M;
3.按偏旁:alter session set nls_sort = NLS_SORT=SCHINESE_RADICAL_M;
四、假设我们须要对整个数据做指定的排序方式,就须要改动oracle server系统參数(一般这样的方式我们使用的比較少):
1. win系统改动注冊表 HKLC\SOFTWARE\ORACLE\home0\NLS_SORT
2.其它改动配置set NLS_SORT=SCHINESE_RADICAL_M export NLS_SORT
SQL学习之使用order by 依照指定顺序排序或自己定义顺序排序相关推荐
- SQL学习之使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用 ...
- SQL学习笔记——Select查询语句
使用数据库和表的主要目的是存储数据以便在需要时进行检索.统计或组织输出. SELECT 语句,它是 T-SQL 的核心.从数据库中检索行,并允许从一个或多个表中选择一个 或多个行或列. 虽然 SELE ...
- 【SQL学习】-初学01
什么是 SQL ? SQL, 全称为Structured Query Language(结构化查询语言). 要讲SQL就绕不开database(数据库), 平时所说的数据库,一般就是指的 Relati ...
- SQL数据分析:sqlzoo官网学习select,where,order by,limit,聚合函数,having,常用函数,窗口函数,表链接,子查询
SQL数据分析: 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其sql要学,当然,像很多金 ...
- SQL学习笔记 where子句用法,like关键字 嵌套查询
where子句 比较运算符: < , <= , > , >= , = , != , !< , !> . text , ntext , image .型数据不可用. ...
- sql学习练习题_学习SQL:练习SQL查询
sql学习练习题 Today is the day for SQL practice #1. In this series, so far, we've covered most important ...
- sql学习指南_SQL格式功能的全面指南
sql学习指南 This article explains the usage of SQL Format function and performance comparison with SQL C ...
- python与SQL学习比较
目录:python与SQL比较学习 数据字段包含:自增id,订单时间ts,用户id,订单id,订单金额 1.limit 查看全部数据或前n行数据 1.查看全部数据或前n行数据 查看全部数据,panda ...
- SQL学习(2):大厂真题实例-视频平均播放进度
SQL学习(2):大厂真题实例-视频平均播放进度 题目来源:<牛客题霸:SQL大厂真题>: 01 某音短视频 SQL2 平均播放进度大于60%的视频类别 文章目录 SQL学习(2):大厂真 ...
最新文章
- 科大讯飞的2018:深陷同传造假及炒房风波,市值遭腰斩蒸发600亿
- java基础练习题目
- c#.net常用的小函数和方法集
- 循序渐进看Java web日志跟踪(1)-Tomcat 日志追踪与配置
- Node.js webpack中导入vue的三种方法
- java 右键卡死_为什么右键单击不适用于Java应用程序?
- java 将光标移至行首_Java:将条件移至消息文件
- 数据库学习--wildfly配置postgreSQL数据源
- vue + element-ui tab切换
- 如何在打开谷歌的时候强制跳转google.com
- php源码 辅助发卡_【程序源码】PHP自动化售货发卡网源码
- SNS源码大集合--转载ITPUB
- 面向接口编程与面向实现编程
- DNS劫持使用DNS加速有哪些作用
- 2021年氧化工艺找解析及氧化工艺考试总结
- 递归算法向非递归算法转换
- 【读书笔记】《全域营销:付费增长与流量变现实战讲义》——我的公域私域运营教科书
- 等保三级核心-主机安全
- R语言 tidyverse 之数据处理:dplyr (中)
- zookeeper C API 完整运行实例