sql排序

SQL必知必会-03

怎甘沉沦 提交于 2019-11-28 14:44:10
排序检索数据 排序数据 在一般的select语句中,查询出来的结果,可能是排序的也可能是不排序的,它是根据数据库添加的顺序进行返回的,所以如果需要随数据进行排序,需要加上子句对其进行限制。 排序关键字: order by 排序字段 eg:select prod_name from Products order by prod_name; DBMS软件会对prod_name列以 字母的顺序 进行排序. ps:order by子句需要保证它是select语句的最后一个子句 按多个列排序 order by 列名1,列名2 DBSM先对列名1进行排序,在列名1如果又重复的,将对重复的以列名2进行排序。 按列位置排序(不推荐使用) order by 支持对列的相对位置进行排序。 eg:select prod_id, pro_price, prod_name from Products order by 2, 3; order by 会根据select中指定的列的相对位置进行排序,这样会出现列名排列出错时,排序也出现错误。 指定排序方向 order by子句的默认是升序(关键字ASC,可以省略),但是还可以降序。指定关键字desc。 eg:select prod_id, prod_price, prod_name from Products order by prod_price desc;

SQL排序包含数字、字母和中文处理

冷暖自知 提交于 2019-11-28 05:41:04
--模拟数据 SELECT * INTO #temp FROM (   SELECT 1 AS id, 'C101' AS sort   UNION ALL   SELECT 2 AS id, 'B101' AS sort   UNION ALL   SELECT 3 AS id, '101'   UNION ALL   SELECT 4 AS id, '1101'   UNION ALL   SELECT 5 AS id, '201'   UNION ALL   SELECT 6 AS id, '风'   UNION ALL   SELECT 7 AS id, '花'   UNION ALL   SELECT 8 AS id, '雪'   UNION ALL   SELECT 9 AS id, '月' ) S --查询排序 SELECT * FROM #temp ORDER BY RIGHT(REPLICATE('0',10)+CAST(sort AS VARCHAR(10)),10) ASC 来源: https://www.cnblogs.com/xy0710/p/11394759.html

数据的高级操作 - 查询数据

戏子无情 提交于 2019-11-28 03:56:40
数据的高级操作 - 查询数据 基本语法: select + 字段列表/* + from + 表名 + [where 条件]; 完整语法: select + [select 选项] + 字段列表[字段别名]/* + from + 数据源 + [where 条件] + [1] + [2] + [3]; [1] = [group by 子句] [2] = [order by 子句] [3] = [limit 子句] SELECT 选项 select 选项,即 select 对查出来的结果的处理方式。 all :默认,保留所有的查询结果; distinct :去重,将查出来的结果中所有字段都相同的记录去除。 执行如下 SQL 语句,进行测试: -- 查询表 my_copy 中的数据 select * from my_copy; select all * from my_copy; select distinct * from my_copy; 字段别名 字段别名,即当数据进行查询的时候,有时候字段的名字并不一定满足需求(特别地,在多表查询的时候,很可能会有同名字段),这时就需要对字段进行重命名、取别名。 基本语法: 字段名 + [as] + 别名; 执行如下 SQL 语句,进行测试: -- 使用别名 select id, name as 姓名, age as 年龄, grade as 年级

oracle 排序后分页查询

不羁岁月 提交于 2019-11-28 01:44:40
demo: select * from ( select * from DEV_REG_CFG_CAMERA where 1 = 1 order by unid asc) where rownum < 3001 minus select * from ( select * from DEV_REG_CFG_CAMERA where 1 = 1 order by unid asc) where rownum < 1 minus是差集的意思,、 以上sql的意思是,查询DEV_REG_CFG_CAMERA中以unid字段排序后,取前3000条。 来源: https://www.cnblogs.com/chenmz1995/p/11386390.html

oracle 反向排序

半腔热情 提交于 2019-11-27 17:34:00
oracle reverse函数 oracle 提供一个reverse函数,可以实现将一个对象反向转换. 比如: SQL> select reverse('123456') from dual; REVERSE('123456') ----------------- 654321 [@more@] 由于这个函数,是针对数据库内部存储的对象编码进行反转的, 因此,在比如:数字,中文等.因为实现存储的并不是直接编码后的结果,而是经过某种内部转换后实现的,因此,在转换完成后,并不一定是自己想要的结果.示例: SQL> select reverse(123456) ,reverse('中华人民共和国') from dual; REVERSE(123456) REVERSE('中华人民共和国') --------------- ------------------------- -668706000000 ?秃补衩巳?兄 在这个地方,一个整数,一个中文内容,就被转换为其它的内容了. 我们dump看看,就明白oracle是如何reverse了 SQL> select reverse(123456),dump(123456),dump(reverse(123456)) from dual; REVERSE(123456) DUMP(123456) DUMP(REVERSE(123456)) --

ORACLE VARCHAR 排序问题

孤街浪徒 提交于 2019-11-27 17:30:11
参考文献: http://chengjunflying.iteye.com/blog/698505 在oracle中,如果要对varchar类型的字段进行order by操作,那么首先必须得将他们转化成数字类型,比如int类型,这就需要用到 cast 关键字。 例子 SELECT procedure_no FROM (SELECT * FROM process_card_procedure where process_card_id=421 order by cast(procedure_no as int) desc) where rownum<=1 cast(procedure_no as int) 上述SQL语句中的就是将procedure_no转化成了int类型在进行order by操作。 来源: CSDN 作者: xw13106209 链接: https://blog.csdn.net/xw13106209/article/details/6654866

Oracle由于排序字段错误,导致分页数据错误,错误原因真的想不到!!!

倖福魔咒の 提交于 2019-11-27 17:29:57
由于数据过多,经常使用分页的方法减少数据,相同的数据,相同的SQL,相同的系统,只是排序字段不同,会导致分页数据错误? 不可能?确实不可能,我也是这么想想的! ! 同一个程序,同一张表,同样的SQL,只有排序字段不同,就导致了分页数据不同是正常的,但分页数据错误,可能吗? 而且最奇怪的是,第一页数据是正确的,第二页,第三页,第四页数据完全相同,第五页数据又是正确的!!!什么原因!!! 程序问题,但其他的表也是用的是同样的方法,是正确的。没有出现第二页,第三页,第四页数据完全相同的情况!!不是程序问题!! SQL错误,其他的表也是相同的方法,是正确的,不是SQL的问题!!! 把SQL排序字段修改为主键后,没有出现第二页,第三页,第四页数据完全相同的情况!好像也不是SQL 的问题。 基本的SQL如下: select fidfinreim40_0_,fsigndate40_0_ from ( select row_.*, rownum rownum_ from ( SELECT this_.fidfinreim as fidfinreim40_0_, this_.freferdate as freferdate40_0_ FROM EAS.V_QFinreim this_ WHERE 1=1 ORDER BY this_.freferdate desc ) row_ where

SQL优化总结(转)

本秂侑毒 提交于 2019-11-27 04:17:55
转载: http://www.cnblogs.com/ziyiFly/archive/2008/12/24/1361380.html 一、问题的提出  在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。   在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高性能的SQL语句。    二、SQL语句编写注意问题   下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描,这就造成了响应速度的极大降低

sql语句对中文排序

戏子无情 提交于 2019-11-27 03:17:30
1 使用criteria排序: 需要写一个GbkOrder类添加到当前项目中,继承Order,并重写,criteria.addOrder(GBKOrder.asc(“name”)); order源码: import java.io.Serializable; import java.sql.Types; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.engine.SessionFactoryImplementor; import org.hibernate.type.Type; /** * Represents an order imposed upon a <tt>Criteria</tt> result set * @author Gavin King */ public class Order implements Serializable { private boolean ascending; private boolean ignoreCase; private String propertyName; public String toString() { return propertyName + ' ' + (ascending

Hibernate 中 set 里的属性及定义

心已入冬 提交于 2019-11-26 21:50:13
name:映射类属性的名称; access:hibernate访问这个属性的策略 table:关联的目标数据库表 schema:目标数据库表的schema名字 catalog:目标数据库表的catalog名字 lazy:是否采用延迟加载 subselect:定义一个子查询 inverse:用于标识双相关联中被动的一方,一般标识一对多中一的一方设置为ture sort;设置排序的类型,这个属性可以选择的值有:unsorted,不排序;natural.自然排序,也就是利用 java对象来进行排序;comparatorClass,指定某个实现了java.util.Comparator接口的类作为排序算法,注意,这里的排序要避免有order-by同时使用 mutable:标识被关联的对象是否可以改变 cascode;设置操作中的级联策略,这个属性可以选择的值有:all,在所有的操作的情况下均进行级联,none,在所有操作的情况下均不进行级联操作,save-update,在执行更新操作时级联,delete,在执行删除操作时级联,all-delete-orphan,当被关联对象失去关联宿主时,将被删除 order-by:设置排序规则 where;增加筛选条件,这里设置的条件将被加载到所有的sql查询语句中 batch-size:采用延迟加载时,一次读取数据的数量 fetch:设置抓取数据的策略