当前位置: 首页 > news >正文

[mysql]mysql排序和分页

#排序和分页本身是两块内容,因为都比较简单,我们就把它分到通一个内容里.


#1排序:


SELECT * FROM employees
#我们会发现,我们没有做排序操作,但是最后出来的107条结果还是会按顺序发出,而且是每次都一样.这我们就有一个疑惑了,现在我们的数据库是根据什么来排序的,在我们没有进行排序操作之前,是按工资还是部门id.默认的顺序总得有一个储存的顺序把,在这里面的顺序其实默认的顺序就是我们先后添加的顺序,这个我们做个了解

这里我们会发现,我们买东西之类开发的软件都会有一个排序多个功能.对应京东淘宝默认的显示顺序,我们可以理解成添加顺序,用户如果想按照效率,价格等顺序排序,这些排序的诉求是很正常的.我们的述求现在是按照salary从高到第的顺序去显示员工信息

基本排序

#使用ORDER BY对查询到达数据进行排序操作,order代表的就是排序,by代表的急速那个字段
SELECT * FROM employees ORDER BY salary;

我们发现,诶不对,不是按从高到低的顺序排序,反而是按照从低到高的顺序排序,那怎么办呢,不对怎么去表达从高到低呢,所以我们要指明升序操作还是降序操作.这里升序代表的是ASC和DESC,代表的是ascend和descent升序和降序的缩写

那么我们就在salary的后面加是desc

升序降序

SELECT * FROM employees ORDER BY salary DESC;

如果我们没有写ASC或者DESC的话我们默认就是升序排序排列,也就是ASC.这里我们就明白了,我们在升序的时候可以写ASC也可以不写,但是降序就必须写DESC了

别名和ORDER BY的使用

我们可以使用列的别名,进行排序.什么意思呢,就如下图

SELECT employee_id.salary*12 annual_salary FROM employees ORDER BY annual_salary DESC;

,大家可能会疑惑,这个不是挺简单的吗,没有必要将,但是因为我们是先将的列的别名讲完在讲的过滤WHERE,那么我问你们,能不能直接使用过滤别名这个操作呢,我们试一试

我们发现报错了,我们的别名只能在ORDER BY里使用,但是不能在WHERE里使用,这里我们透露一个天机,我们的SELECT语句,还没有既把WHERE和ORDER BY要求使用,一定要记住,WHERE是和FROM一起使用的.

SELECT employee_id,salary*12 annual_salary FROM employees 
WHERE employee_id>10
ORDER BY annual_salary DESC;

强调格式

这里我提醒一下大家如果使用的不是这个字段进行排序,那么也不会报错,我们强调的点是我们的SQL的语句不是从前往后走的,如果是从前往后的话,那么我们的别名肯定就被发现了,但是我们实际是使用的是先对FROM进行查看有什么表和什么条件WHERE然后我们看看你想查什么字段,SELECT 然后我们再对ORDER BY进行排序.

也就是说先创建一个总表和条件的临时表,然后再挑选字段修改别名,然后再对这个表进行排序.

WHERE我们必须声明在FROM后面.再次提醒.

多级排序

我们实际的需求中,实际上我们看一下我们的字段,我们是按照部门的降序排列的,我们有很多员工他们的部门id是一样的.这种情况下他们是那个优先显示呢

.

这个时候我们就要对它进行二级排序,我们要显示员工信息,安装department_id降序排序然后再按salary升序排序,.这样怎么写呢

这时我们就发现是先按降序然后如果序号相同就按工资排序,如果我们把salary的顺序去掉,我们要记得NULL代表的最小的值,降序在第一个升序在最后一个,如果要进行三级排序的话,就是再加一个,

字段和排序规则.我们就统一叫多列排序,,

LIMIT分页,

我们刚才说了我们希望他们有排序的功能的,我们排序的综合排序里可能就涉及很多个规则,广告费之类的,我们查询数据的时候,我们希望数据库给我们发几万条数据吗,其实是不希望,我们也看不过来,我们就只需要几页就可以了.我们知道吃饭的时候我们点外卖的时候,我们把方圆2公里的饭店都反馈给你,我们是不是看不过来,没有必要返回那么多数据,如果网速一样,我们返回的数据的时间也会不一样,我们希望快一点,我们也看不了这么多.我们需要我们再下一页看是不是就可以了.如果我们看下一页是不是会对网络有要求.

分页的必要性还是有,我们只需要一页一页的去查看.

如果前面有你想要的结果了那你就不会查看后面的结果了.在mysql里面我们是怎么处理分页的功能.

分页的关键字是LIMIT实现数据的分页显示

SELECT employee_id,last_name FROM employees LIMIT 这里我们运行之后会发现,全部都出现了

SELECT employee_id,last_name FROM employees LIMIT 0,20 这里的0代表的偏移量,他会指最开始的第一条数据,如果是1就是第二条记录,所以我们叫他偏移量,后面的20代表的就是需要多少条记录.

我们现在显示的就是第一页的数据.这是我们的需求1,我们现在想显示第二页的数据,我们就应该从120id开始

这个时候我们的偏移量应该写多少呢,SELECT employee_id,last_name FROM employees LIMIT 20,20,

如果这样往下走的话,我们是不是就可以写成一个公司,我要显示pageSize条记录,此时显示第pageNumber

SELECT employee_id,last_name FROM employees LIMIT (page-1*pagesize),pagesize.

因为第一页是不是偏移量是0阿,我们就要减一,如果我想显示,第某页的数据,这个就是我们要的pageno,我们点击页面的时候这个值就会发给我们后台,后台的程序就会把写好的程序交给数据库,就会出现我们需要的数据.

这个limit我们现在用的比较纯粹.

我们现在要考虑ORDER BY WHERE LIMIT 的声明顺序

SELECT employee_id,last_name,salary 

FROM employees

WHERE salary>6000

ORDER BY salary desc

LIMIT 0,10;

这里LIMIT 有两个参数偏移量和条目数,严格上来说是这样,但是如果你只输入一个参数,,LIMIT 0,条目数和LIMIT 条目数是相同的.也就是只输入一个参数,那它就会把偏移量看成0,参数看成条目数

我们要记住声明顺序,LIMIT 和ORDER BY是要放在最后的.

使用的几个场景

如果表里有4条记录我们只想看23条记录.

类似的函数 

如果我们不想看那么多数据,只想要一部分数据.

LIMIT 有个新场景MYSQL8.0 LIMIT...OFFSET

比如我们想显示107条数据的里面的32条和33条数据.

SELECT * FROM employees LIMIT 31 OFFSET 2.我们这个跑出来的结果会是,第2条之后的31条记录,也是比较简单.就是把参数换一个,然后把逗号换成limit.

来个小练习查询员工表中的工资最高的员工

SELECT  employee_id,last_name,salary FROM employees ORDER BY DESC LIMIT 1

拓展:

这个分页在mysql PGSQL mariaDB SQLite使用的是LIMIT,但是其他的数据库不一定

如果用的是SQL server 使用速TOP关键词,要写在SELECT后面 直接跟正在SELECT top 5这样就是取5个数字

DB2就要用FECTCH FIRST 5 ROWS ONLY这样

Oracle就是要用ROWNUM的条件来统计行数.WHERE rownum<5,这个rownum是Oracle对每个表提供的一个隐藏的索引字段,代表的急速前5个数据库.

课后练习题

第05章_排序与分页

#1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示

#2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据

( 一定要注意结果看起来对不对因为我们经常会出现SQL语句并没有报错,但是其实结果是不满足要求的情况.我这边是建议大家每写一个条件就跑一下,看看对不对,到时候子查询这种情况会更多,因为那是我们难度的巅峰)

S#3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序

( 还记得我们当时的比较规则也是在my.ini里对比的规则,类似我们现在排序,如果我们用的字符集就是utf那么比较规则也是utf-8的规则.那么我们要如何使用字节数来排序呢,那么我们就要用函数LENTH,这个是有点超纲的,不能直接用email排序.)

答案: 1. 查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序显示

SELECT last_name,department_id,salary * 12 annual_sal FROM employees ORDER BY annual_sal DESC,last_name ASC;

2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第 21到40位置的数据 SELECT last_name,salary FROM employees WHERE salary NOT BETWEEN 8000 AND 17000 ORDER BY salary DESC LIMIT 20,20;

3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号 升序

SELECT last_name,email,department_id FROM employees #where email like '%e%' WHERE email REGEXP '[e]' ORDER BY LENGTH(email) DESC,department_id ASC

相关文章:

[mysql]mysql排序和分页

#排序和分页本身是两块内容,因为都比较简单,我们就把它分到通一个内容里. #1排序: SELECT * FROM employees #我们会发现,我们没有做排序操作,但是最后出来的107条结果还是会按顺序发出,而且是每次都一样.这我们就有一个疑惑了,现在我们的数据库是根据什么来排序的,在我们没有进…...

开源 AI 智能名片 S2B2C 商城小程序中的全渠道供应策略

摘要&#xff1a;本文深入探讨在开源 AI 智能名片 S2B2C 商城小程序的情境下&#xff0c;全渠道供应的运行机制。阐述各环节企业相互配合的重要性&#xff0c;重点分析零售企业在其中的关键作用&#xff0c;包括协调工作、信息传递、需求把握等方面&#xff0c;旨在实现高效的全…...

一次渲染十万条数据:前端技术优化(上)

今天看了一篇文章&#xff0c;写的是一次性渲染十万条数据的方法&#xff0c;本文内容是对这篇文章的学习总结&#xff0c;以及知识点补充。 在现代Web应用中&#xff0c;前端经常需要处理大量的数据展示&#xff0c;例如用户评论、商品列表等。直接渲染大量数据会导致浏览器性…...

springboot实训学习笔记(5)(用户登录接口的主逻辑)

接着上篇博客学习。上篇博客是已经基本完成用户模块的注册接口的开发以及注册时的参数合法性校验。具体往回看了解的链接如下。 springboot实训学习笔记&#xff08;4&#xff09;(Spring Validation参数校验框架、全局异常处理器)-CSDN博客文章浏览阅读576次&#xff0c;点赞7…...

python中网络爬虫框架

Python 中有许多强大的网络爬虫框架&#xff0c;它们帮助开发者轻松地抓取和处理网页数据。最常用的 Python 网络爬虫框架有以下几个&#xff1a; 1. Scrapy Scrapy 是 Python 中最受欢迎的网络爬虫框架之一&#xff0c;专为大规模网络爬取和数据提取任务而设计。它功能强大、…...

GEC6818初次连接使用

目录 1.开发板资源接口​编辑​编辑 2.安装 SecureCRT工具 2.1SecureCRT相关问题 3.连接开发板 4.开发板文件传输 4.1串口传输 rx 从电脑下载文件到开发板 sz 从开发板把文件发送到电脑 4.2U盘/SD卡传输 4.3网络传输[重点] 5.运行传到开发板的可执行文件 6.开发板网络…...

解释下不同Gan模型之间的异同点

生成对抗网络&#xff08;GAN, Generative Adversarial Network&#xff09;是一类强大的生成模型。随着时间的推移&#xff0c;研究人员提出了许多不同的 GAN 变体来改善原始模型的性能或针对特定任务进行优化。下面将解释一些常见的 GAN 变体&#xff0c;并讨论它们的异同点。…...

Hadoop的一些高频面试题 --- hdfs、mapreduce以及yarn的面试题

文章目录 一、HDFS1、Hadoop的三大组成部分2、本地模式和伪分布模式的区别是什么3、什么是HDFS4、如何单独启动namenode5、hdfs的写入流程6、hdfs的读取流程7、hdfs为什么不能存储小文件8、secondaryNameNode的运行原理9、hadoop集群启动后离开安全模式的条件10、hdfs集群的开机…...

Day99 代码随想录打卡|动态规划篇--- 01背包问题

题目&#xff08;卡玛网T46&#xff09;&#xff1a; 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&am…...

往证是什么意思

“往证”通常是在数学证明中使用的一种方法&#xff0c;尤其是在证明某个结论的相反&#xff08;即否定&#xff09;是错误的情况下。具体来说&#xff0c;就是假设结论不成立&#xff0c;然后通过逻辑推理展示出这种假设导致矛盾&#xff0c;从而得出原结论必然成立。 举例说…...

Camunda流程引擎并发性能优化

文章目录 Camunda流程引擎一、JobExecutor1、工作流程2、主要作用 二、性能问题1、实际场景&#xff1a;2、性能问题描述3、总结 三、优化方案方案一&#xff1a;修改 Camunda JobExecutor 源码以实现租户 ID 隔离方案二&#xff1a;使用 max-jobs-per-acquisition 参数控制上锁…...

spring springboot 日志框架

一、常见的日志框架 JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 注意&#xff1a;SLF4j 类似于接口 Log4j &#xff0c;Logback 都是出自同一作者之手 JUL 为apache 公司产品 Spring&#xff08;commons-logging&#xff09;、Hibernate&#xff08;jboss…...

【D3.js in Action 3 精译_022】3.2 使用 D3 完成数据准备工作

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本章小结 第二章…...

电脑怎么禁用软件?5个方法速成,小白必入!

电脑禁用软件的方法多种多样&#xff0c;以下是五种简单易行的方法. 适合不同需求的用户&#xff0c;特别是电脑小白。 1. 使用任务管理器禁用启动项 操作步骤&#xff1a;按下“Ctrl Shift Esc”组合键&#xff0c;打开任务管理器。 切换到“启动”选项卡&#xff0c;找到…...

力扣之181.超过经理收入的员工

文章目录 1. 181.超过经理收入的员工1.1 题干1.2 准备数据1.3 题解1.4 结果截图 1. 181.超过经理收入的员工 1.1 题干 表&#xff1a;Employee -------------------- | Column Name | Type | -------------------- | id | int | | name | varchar | | salary | int | | mana…...

C++语法应用:从return机制看返回指针,返回引用

前言 编程是极其注重实践的工作,学习的同时要伴随代码 引入 此前对返回指针和引用有一些纠结&#xff0c;从return角度来观察发生了什么。 return机制 函数中return表示代码结束&#xff0c;如果return后面有其他代码将不被执行。 return发生了值转移&#xff0c;return后面的…...

Linux5-echo,>,tail

1.echo命令 echo是输出命令&#xff0c;类似printf 例如&#xff1a;echo "hello world"&#xff0c;输出hello world echo pwd&#xff0c;输出pwd的位置。是键盘上~ 2.重定向符> >> >指把左边内容覆盖到右边 echo hello world>test.txt >…...

sqlgun靶场训练

1.看到php&#xff1f;id &#xff0c;然后刚好有个框&#xff0c;直接测试sql注入 2.发现输入1 union select 1,2,3#的时候在2处有回显 3.查看表名 -1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()# 4.查看列名…...

简化登录流程,助力应用建立用户体系

随着智能手机和移动应用的普及&#xff0c;用户需要在不同的应用中注册和登录账号&#xff0c;传统的账号注册和登录流程需要用户输入用户名和密码&#xff0c;这不仅繁琐而且容易造成用户流失。 华为账号服务(Account Kit)提供简单、快速、安全的登录功能&#xff0c;让用户快…...

【研发日记】嵌入式处理器技能解锁(六)——ARM的Cortex-M4内核

文章目录 前言 背景介绍 指令集架构 ARM起源 ARM分类 Cortex-M4 内核框架 指令流水线 实践应用 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...