【Oracle11g SQL详解】ORDER BY 子句的排序规则与应用

ORDER BY 子句的排序规则与应用

在 Oracle 11g 中,ORDER BY 子句用于对查询结果进行排序。通过使用 ORDER BY,可以使返回的数据按照指定的列或表达式以升序或降序排列,便于数据的分析和呈现。本文将详细讲解 ORDER BY 子句的规则及其常见应用。


一、ORDER BY 子句的基本语法
SELECT 列名1, 列名2, ...
FROM 表名
[WHERE 条件]
ORDER BY 列名 [ASC|DESC], 列名2 [ASC|DESC];

说明:

  • ORDER BY:指定排序列或表达式。
  • ASC(默认):升序排列,从小到大。
  • DESC:降序排列,从大到小。
  • 可以根据多个列进行排序,按列顺序依次排序。

二、ORDER BY 子句的排序规则
  1. 按单列排序
    • 默认情况下,ORDER BY 按升序排列。
    • 如果需要降序排列,必须显式指定 DESC

示例:

SELECT employee_id, salary 
FROM employees
ORDER BY salary ASC;  -- 按薪资升序排列
SELECT employee_id, salary 
FROM employees
ORDER BY salary DESC; -- 按薪资降序排列

  1. 按多列排序
    • 先按第一列排序,如果第一列值相同,则按第二列排序,以此类推。

示例:

SELECT employee_id, department_id, salary 
FROM employees
ORDER BY department_id ASC, salary DESC;

说明:

  • department_id 升序排列。
  • department_id 相同的情况下,按 salary 降序排列。

  1. 按表达式排序
    • ORDER BY 支持基于表达式的排序,如计算列或函数结果。

示例:

SELECT employee_id, first_name, last_name, salary * 12 AS annual_salary
FROM employees
ORDER BY annual_salary DESC;

说明: 按员工年薪(salary * 12)从高到低排序。


  1. 按列别名排序
    • 可以使用 SELECT 中定义的列别名进行排序。

示例:

SELECT employee_id, first_name || ' ' || last_name AS full_name, salary 
FROM employees
ORDER BY full_name ASC;

说明: 按员工全名(full_name)字母顺序升序排列。


  1. 按列位置排序
    • 直接使用列的位置编号排序,从 SELECT 子句中列的顺序开始。

示例:

SELECT employee_id, department_id, salary 
FROM employees
ORDER BY 2 ASC, 3 DESC;

说明:

  • 2 表示按 department_id 升序排列。
  • 3 表示按 salary 降序排列。

三、ORDER BY 与 NULL 值的排序

在 Oracle 中,NULL 值在排序时具有以下特点:

  • 默认情况下,升序排列时,NULL 值排在最后;
  • 降序排列时,NULL 值排在最前。

如果需要修改这一行为,可以使用 NULLS FIRSTNULLS LAST 明确指定。

示例:

SELECT employee_id, salary 
FROM employees
ORDER BY salary ASC NULLS FIRST; -- NULL 值排在最前
SELECT employee_id, salary 
FROM employees
ORDER BY salary DESC NULLS LAST; -- NULL 值排在最后

四、ORDER BY 子句的高级用法
  1. 按日期排序
SELECT employee_id, hire_date 
FROM employees
ORDER BY hire_date DESC;

说明: 按雇佣日期从最近到最早排序。

  1. 按条件排序
SELECT employee_id, salary, CASE WHEN salary >= 10000 THEN '高薪' WHEN salary >= 5000 THEN '中等薪资' ELSE '低薪' END AS salary_level
FROM employees
ORDER BY salary_level ASC, salary DESC;

说明:

  • 先按自定义薪资级别排序(高薪 > 中等薪资 > 低薪)。
  • 在相同薪资级别内,再按实际薪资降序排列。
  1. 限制查询结果的排序行数
    结合 ROWNUMFETCH 子句,按排序结果筛选出前 N 条记录。

示例:返回薪资最高的前 5 名员工:

SELECT employee_id, salary 
FROM employees
ORDER BY salary DESC
FETCH FIRST 5 ROWS ONLY;

五、性能优化建议
  1. 使用索引

    • 对排序列建立索引,尤其是对大表或排序操作频繁的列。
  2. 避免过多排序列

    • 排序列越多,排序计算量越大,尽量减少不必要的排序列。
  3. 减少复杂表达式

    • 如果排序基于复杂表达式,建议在查询之前先将表达式计算好的结果存储为列。

六、练习示例
  1. 查询所有员工信息,按部门编号升序排列:
SELECT * FROM employees
ORDER BY department_id ASC;
  1. 查询所有员工的姓名和薪资,按薪资降序排列,薪资相同的按姓名升序排列:
SELECT first_name, last_name, salary 
FROM employees
ORDER BY salary DESC, first_name ASC;
  1. 查询所有部门信息,按部门名称的字母倒序排列:
SELECT department_id, department_name 
FROM departments
ORDER BY department_name DESC;

七、小结

ORDER BY 子句是 SQL 查询中重要的工具,用于对数据进行排序以满足各种分析需求。掌握其语法、规则和优化方法,可以显著提升查询的实用性和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482340.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日,2024紫光展锐全球合作伙伴大会在上海举办,作为紫光展锐年度盛会,吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年,共同面向5G、AI和卫星通信为代表的前沿科技,聚焦技术…

本地学习axios源码-如何在本地打印axios里面的信息

1. 下载axios到本地 git clone https://github.com/axios/axios.git 2. 下载react项目, 用vite按照提示命令配置一下vite react ts项目 npm create vite my-vue-app --template react 3. 下载koa, 搭建一个axios请求地址的服务端 a.初始化package.json mkdir koa-server…

7、递归

一、概念/理解 递归:某个函数直接或者间接的调用自身。--->函数调用 函数调用:创建副本 递归函数:直接或者间接调用自身的函数叫 递归函数: 边界条件/递归出口:递归调用的终止条件。避免出现死循环或者爆栈的情况。//报错显…

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

【青牛科技】2K02 电动工具专用调速电路芯片描述

概述: 2K02 是电动工具专用调速电路。内置稳压电路,温度系数好,可以调节输出频率以及占空比的振荡输出,广泛的应用于小型电钻,割草机等工具。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 温度系数好 …

内网穿透步骤

步骤 第一次需要验证token window和linux的方法不同。 然后 启动 cpolar 服务: 在命令窗口中输入 cpolar.exe htttp 8080,启动内网穿透服务。确保命令窗口保持开启状态,以维持穿透效果。 cpolar.exe hhttp 8080 成功后 注意事项 命令窗口…

FreeRTOS之vTaskStartScheduler实现分析

FreeRTOS之vTaskStartScheduler实现分析 1 FreeRTOS源码下载地址2 函数接口2.1 函数接口2.2 函数参数简介3 vTaskDelete的调用关系3.1 调用关系3.2 调用关系示意图 4 函数源码分析4.1 vTaskStartScheduler4.2 prvCreateIdleTasks4.2.1 prvCreateIdleTasks4.2.2 xTaskCreate 4.3…

基于群晖搭建个人图书架-TaleBook based on Docker

前言 在群晖Container Manager中部署失败,转通过ssh部署。 一、准备工作 名称备注群晖SSH“终端机和SNMP”中启用SSH软件secureCRT等docker-compose.ymlGithub下载并修改 二、过程 2.1 创建本地文件夹 本地路径为: /docker/Calibre/data 2.2 下载d…

Ubuntu24.04初始化教程(包含基础优化、ros2)

将会不断更新。但是所有都是基础且必要的操作。 为重装系统之后的环境配置提供便捷信息来源。记录一些错误的解决方案。 目录 构建系统建立系统备份**Timeshift: 系统快照和备份工具****安装 Timeshift****使用 Timeshift 创建快照****还原快照****自动创建快照** 最基本配置换…

【论文笔记】A Token-level Contrastive Framework for Sign Language Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: A Token-level Contrastiv…

yolov5 解决:export GIT_PYTHON_REFRESH=quiet

当我们在第一次运行YOLOv5中的train.py程序时:可能会出现以下报错: This initial warning can be silenced or aggravated in the future by setting the $GIT_PYTHON_REFRESH environment variable. Use one of the following values: - quiet|q|silen…

基于springboot中小型制造企业质量管理系统源码和论文

信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的…

【实验13】使用预训练ResNet18进行CIFAR10分类

目录 1 数据处理 1.1 数据集介绍 1.2数据处理与划分 2 模型构建- Pytorch高层API中的Resnet18 3 模型训练 4 模型评价 5 比较“使用预训练模型”和“不使用预训练模型”的效果: 6 模型预测 7 完整代码 8 参考链接 1 数据处理 1.1 数据集介绍 数据规模&…

Java之链表1

文章目录 1. 链表1.11.2 链表的概念及其结构1.3 自己实现一个链表 1. 链表 1.1 之前我们学习了 顺序表ArrayList,并自己实现了 ArrayList ,发现它在删除元素和添加元素时很麻烦,最坏的情况时,需要将所有的元素移动,因…

二分搜索(三)x的平方根

69. x 的平方根 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2…

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…

使用docker-compose部署搜索引擎ElasticSearch6.8.10

背景 Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于实时数据搜索、日志分析、全文检索等应用场景。 Elasticsearch 支持高效的全文搜索,并提供了强大的聚合功能,可以处理大规模的数据集并进行快速…

LeetCode—74. 搜索二维矩阵(中等)

仅供个人学习使用 题目描述: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true…

Cento7 紧急模式无法正常启动,修复home挂载问题

Centos 7 开机失败进入紧急模式[emergency mode],解决方案。 通过journalctl -xb查看启动日志,定位发现/home目录无法正常挂载。 退出启动日志检查,进行修复。 进行问题修复 # 修复挂载问题 mkdir /home mount /dev/mapper/centos-home /ho…

Matlab mex- setup报错—错误使用 mex,未检测到支持的编译器...

错误日志: 在使用mex编译时报错提示:错误使用 mex,未检测到支持的编译器。您可以安装免费提供的 MinGW-w64 C/C 编译器;请参阅安装 MinGW-w64 编译器。有关更多选项,请访问https://www.mathworks.com/support/compile…