广告
返回顶部
首页 > 资讯 > 数据库 >SQL查询结果数据排序(二)
  • 601
分享到

SQL查询结果数据排序(二)

SQL查询结果数据排序(二) 2019-11-07 20:11:19 601人浏览 才女
摘要

> 本节讲述 对查询结果进行排序 1 以指定的次序返回查询结果 查询 用户表中所有用户的 姓名 年龄 地区,并按照年龄的升序排列,可以使用 order by 子句 select user_name,user_age,user_pr

SQL查询结果数据排序(二)

> 本节讲述 对查询结果进行排序

1 以指定的次序返回查询结果

查询 用户表中所有用户的 姓名 年龄 地区,并按照年龄的升序排列,可以使用 order by 子句

select user_name,user_age,user_province 
	from t_user order by user_age asc 

使用 order by 子句,可以对结果集进行排序,默认情况下,order by 子句以升序方式排序,因此 asc 是可选的 ,desc 是表示降序的。 上述查询的结果,也可以这样写

select user_name,user_age,user_province 
	from t_user order by 2 asc 

这里使用了编号来实现排序的,那么在这里使用的2,是因为在我们的查询结果集中 user_name 占第1列,user_age 占第二列,这个编号是从1开始,依次从左到右依次对应查询结果集的每一列,如这里的2对应的就是 user_age。

2 按多个字段排序

查询 用户表中所有用户的 姓名 年龄 地区,并按照用户的编号升序排列,然后再按年龄的降序排列,我们可以如下写

select user_name,user_age,user_province ,user_id
	from t_user order by user_id asc ,user_age desc

在 order by 子句中列出不同的排列,可使用逗号分隔,在这里优先次序是从左到右。

3 按子串排序

查询用户表中所有的用户的姓名 年龄 地区详情,并且按照地区详情的前四个字符排序

在 DB2 Mysql oracle postgresql 中可以这样写

select user_name,user_age,user_address 
	from t_user order by substr(user_address,1,4)

substr()函数和hibernate的substr()参数都一样

> substr(string string,num start,num length); 参数一 string为字符串; 参数二 start为起始位置; 参数三 length为长度。

所以在这里,substr(user_address,1,4),例如查出来的地址是 "山西省太原市八堡" ,通过 substr(user_address,1,4) 取出的标准就是 "山西省太"。 在 SQL Server 中可以这样写

select user_name,user_age,user_address 
	from t_user order by substring(user_address,1,4)

需要注意的是,这里的角标是从 1 开始的,在hibernate中substr()的start是从0开始的。

4 对字母数字混合的数据排序

对现有字母和数字的混合数据,希望按照数字或字符部分来rd排序 例如 我们查询用户的 姓名 编号 ,并将 姓名编号连接在一起返回到结果 集中

select user_name,user_id ,CONCAT(user_name,"",user_id) as msg  from t_user 

在这里插入图片描述

在 Oracle 和 Postgresql 中可以使用 函数 replace 和 translate 函数来修正 要排序的字条串,例如我们这里把查询到的结果集 msg 中的所有数字替换掉然后进行排序

select user_name,user_id ,CONCAT(user_name,"",user_id) as msg  from t_user 
order by
	 replace(msg,
				replace(
				    translate(msg,"0123456789","#########"),
                   "#",
                   ""),
            "")

> 使用的函数为replace() 含义为:替换字符串 replace(原字段,“原字段旧内容“,“原字段新内容“,)

> translate 与replace类似是替换函数,但translate是一次替换多个单个的字符。

我们这里把查询到的结果集 msg 中的所有的数字删除掉然后进行排序

select user_name,user_id ,CONCAT(user_name,"",user_id) as msg  from t_user 
order by
 replact( translate(msg,"0123456789","#"),"#","")

mysql 和 SQL Server 中不支持 translate 函数。 replace 和 translate 函数从每一行中去掉数字或字符,这样就可以很容易的来进行排序。

5 处理排序中空值问题

例如我们在查询用户表的信息时,当根据用户的年龄来排序时,用户的年龄有空值,那么此时我们就需要处理这种情况,可以将空值的排列在最后,可以通过如下方式来处理

5.1 查询一
select user_name,user_age,user_id 
	from t_user

user_name user_age user_id
ceshi1 28 201
ceshi3 204
ceshi4 22 198
ceshi5 177
ceshi6 40 110
5. 2 查询二

DB2 MySQL PostgreSQL 和 SQL Server 使用 case 表达式来标记 一个值是否为 NULL ,这个标记有两个值,一个表示 NULL, 一个表示非 NULL 。这样只要在 order by 子句中增加标记列,便可以很容易的控制空值 是排列在前面还是最后面

select user_name,user_age,user_id 
	from ( select user_name,user_id,user_age,
	               case when user_age is null then 0
	               else 1
	               end
	               as is_null
          ) x
   order by is_null desc,user_age

user_name user_age user_id
ceshi3 22 198
ceshi3 28 201
ceshi3 40 110
ceshi3 177
ceshi5 204

在上述查询排序中,如果 user_age 为 null,那么标识列 is_null 的值为 0,否则为1,那么在 order by 中先 根据 is_null 倒序排列,所以 user_age 为null 是排列在最后的,然后再根据 user_age 进行二次排列

5. 3查询三
select user_name,user_age,user_id 
	from ( select user_name,user_id,user_age,
	               case when user_age is null then 0
	               else 1
	               end
	               as is_null
          ) x
   order by is_null desc,user_age desc

user_name user_age user_id
ceshi3 40 110
ceshi3 28 201
ceshi3 22 198
ceshi3 177
ceshi5 204

在这里与查询二 中的区别是 在 order by 中,user_age 又采用了倒序

5.4 查询四
select user_name,user_age,user_id 
	from ( select user_name,user_id,user_age,
	               case when user_age is null then 0
	               else 1
	               end
	               as is_null
          ) x
   order by is_null asc,user_age asc

user_name user_age user_id
ceshi3 177
ceshi5 204
ceshi3 22 198
ceshi3 28 201
ceshi3 40 110
6 根据数据项的键排序

在实际应用中,需要根据某些条件逻辑来排序,例如查询 用户表数据,user_province 如果是 北京 就用用户 user_age 来排序,否则根据 user_id 来排序 要实现这样的查询,我们可以在 order by 子句中使用 case 表达式

select user_name,user_age,user_id,user_province 
from t_user
order by case when user_province="北京" then user_age
         else user_id
         end

完结

您可能感兴趣的文档:

--结束END--

本文标题: SQL查询结果数据排序(二)

本文链接: https://www.lsjlt.com/news/4410.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL查询结果数据排序(二)
    > 本节讲述 对查询结果进行排序 1 以指定的次序返回查询结果 查询 用户表中所有用户的 姓名 年龄 地区,并按照年龄的升序排列,可以使用 order by 子句 select user_name,user_age,user_pr...
    99+
    2019-11-07
    SQL查询结果数据排序(二)
  • SQL 对查询结果进行排序(ORDER BY)
    目录一、ORDER BY 子句二、指定升序或降序三、指定多个排序键四、NULL 的顺序五、在排序键中使用显示用的别名六、ORDER BY 子句中可以使用的列七、不要使用列编号请参阅 学习重点 使用 ORDER BY 子句对查询结果进...
    99+
    2020-09-10
    SQL 对查询结果进行排序(ORDER BY)
  • sql查询结果按条件排序的方法是什么
    在SQL中,可以使用ORDER BY子句对查询结果进行排序。ORDER BY子句可以按照一个或多个列进行排序,可以根据升序或降序排序...
    99+
    2023-09-16
    sql
  • 使用索引来排序查询结果
    使用索引来排序查询结果在MongoDB中,排序操作可以通过从索引中按照索引顺序获取文档的方式来保证结果的有序性。如果查询计划器(planner)无法从索引中得到排序顺序,那么它将需要在内存中排序结果。相比于...
    99+
    2022-10-18
  • 怎么对MySQL查询结果进行排序
    怎么对MySQL查询结果进行排序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  MySQL查询结果如何排序  之前有一个功能...
    99+
    2022-10-18
  • 【数据结构】选择排序 & 堆排序(二)
    目录 一,选择排序 1,基本思想 2, 基本思路 3,思路实现 二,堆排序 1,直接选择排序的特性总结: 2,思路实现 3,源代码 最后祝大家国庆快乐! 一,选择排序 1,基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个...
    99+
    2023-10-18
    排序算法 算法 数据结构 c语言 开发语言
  • MongoDB之数据查询(数据排序)
    在MongoDB里面数据的排序操作使用“sort()”函数,在进行排序的时候可以有两个顺序:升序(1),降序(-1)。 范例:数据排序 > db.emp.find().sort({"sal":-1}...
    99+
    2022-10-18
  • mybatis相同的sql查询第二次查不出结果问题
    目录相同的sql查询第二次查不出结果问题问题分析问题探索MyBatis缓存介绍问题原因解决方案mybatis条件查询容易遇见的错误一不小心就容易出现这个错误两种解决方法相同的sql查...
    99+
    2022-11-13
  • MySQL自动为查询数据结果加序号
    目录数据表mysql给查询加序号解释说明相关知识点数据表 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL...
    99+
    2022-12-16
    MySQL查询添加序号 MySQL查询添加序号
  • mybatis相同的sql查询第二次查不出结果怎么办
    这篇文章主要讲解了“mybatis相同的sql查询第二次查不出结果怎么办”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mybatis相同的sql查询第二次查不出结果怎么办”吧!相同的sql查...
    99+
    2023-06-28
  • php怎么查询数据库输出查询结果
    PHP是一种流行的编程语言,常常被用于服务器端的开发。在PHP开发中,最常见的操作之一是查询数据库,因为多数网站都需要从数据库中读取数据并将其呈现给用户。在查询数据库时,开发人员通常需要输出查询语句,以便于调试和排错。本文将详细介绍PHP查...
    99+
    2023-05-14
    php 数据库
  • php如何查询数据库输出查询结果
    这篇文章主要讲解了“php如何查询数据库输出查询结果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何查询数据库输出查询结果”吧!连接数据库在开始查询数据库之前,需要先连接到数据库。在...
    99+
    2023-07-05
  • php根据传入数据查询数据后返回查询结果
    需求:根据传入的关键字,实现简单的查询效果 用户名:root密码:123456789数据库名:my_db_02数据表名:user使用编辑器 phpStorm ...
    99+
    2023-09-18
    php mysql 后端
  • MYSQL 查询数据排序数据和分组数据
    在mysql查询过程中,可以对数据进行过滤,也可以对数据进行排序,可以对数据分组,下面分别讲述排序数据和分组数据例子。 1,数据的排序 使用 ORDER BY select *...
    99+
    2022-10-18
  • MySQL查询数据之合并查询结果的案例
    小编给大家分享一下MySQL查询数据之合并查询结果的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!.利用union...
    99+
    2022-10-18
  • SQL 基础之使用子查询检索数据(二十二)
    多列子查询where (manager_id, department_id) in子查询100 90102 60124 50主查询的每行都与多行和多列的子查询进行比较列的比较多列的比较,包含子查询...
    99+
    2022-10-18
  • MySQL限制查询和数据排序介绍
    目录一、限制查询1.指定从第几行起,返回多少行2.取最大值3.取最小值4.分页二、数据排序1.年龄大于10的根据id进行降序排序2.年龄大于10的按照id进行升序排序一、限制查询 我...
    99+
    2022-11-13
  • C语言数据结构与算法之排序总结(二)
    目录一、前言二、选择类排序1.简单选择排序2.树形选择排序3.堆选择排序三、归并排序四、分配类排序1.多关键字排序2.链式基数排序五、总结归纳一、前言 之前的排序总结(一)对插入类和...
    99+
    2022-11-12
  • MySQL怎么实现自动为查询数据结果加序号
    这篇文章主要介绍“MySQL怎么实现自动为查询数据结果加序号”,在日常操作中,相信很多人在MySQL怎么实现自动为查询数据结果加序号问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2023-01-04
    mysql
  • Java数据结构之二叉排序树的实现
    目录1 二叉排序树的概述2 二叉排序树的构建2.1 类架构2.2 查找的方法2.3 插入的方法2.4 查找最大值和最小值2.5 删除的方法3 二叉排序树的总结1 二叉排序树的概述 本...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作