[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

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

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

相关文章

【与C++的邂逅】--- C++的IO流

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 与C的邂逅 本篇博客我们来了解C中io流的相关知识。 &#x1f3e0; C语言输入输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 sc…

论文解读《LaMP: When Large Language Models Meet Personalization》

引言&#xff1a;因为导师喊我围绕 “大语言模型的个性化、风格化生成” 展开研究&#xff0c;所以我就找相关论文&#xff0c;最后通过 ACL 官网找到这篇&#xff0c;感觉还不错&#xff0c;就开始解读吧&#xff01; “说是解读&#xff0c;其实大部分都是翻译哈哈哈&#x…

系统安全设计规范(Word完整版)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完整性检查 1.…

Cpp类和对象(上)(3)

文章目录 前言一、面向过程与面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及类的封装类的访问限定符类的封装 五、类的作用域(类域)六、类的实例化七、类对象模型如何计算类对象的大小类对象的存储方式猜测 八、this指针this指针的引出this指针的特性 九、C语言…

1×1卷积核【super star 卷积核】

一、11卷积的作用 我们先来给出11卷积的一般作用&#xff0c;如下所示&#xff1a; • 跨通道的特征整合 • 特征通道的升维与降维 • 减少权重参数&#xff08;卷积核参数&#xff09; 【 简化模型 】 1.1 特征通道的升维与降维/跨通道的特征整合/简化模型 输入数据&…

Node.js 多版本安装与切换指南

一.使用nvm的方法 1. 卸载nodejs 如果你的电脑有安装nodejs&#xff0c;需要先卸载掉&#xff1b;若没有请直接下一步。 2. 前往官网下载nvm nvm&#xff1a;一个nodejs版本管理工具&#xff01; 官网地址&#xff1a;nvm文档手册 - nvm是一个nodejs版本管理工具 - nvm中文…

Oracle数据恢复—Oracle数据库误删除表数据如何恢复数据?

删除Oracle数据库数据一般有以下2种方式&#xff1a;delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法&#xff08;不考虑全库备份和利用归档日志&#xff09;。 1、delete误删除的数据恢复方法。 利用oracle提供的闪回方法…

简单题21 - 合并两个有序链表(Java)20240917

问题描述&#xff1a; java代码&#xff1a; /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val…

【DAY20240918】03教你轻松配置 Git 远程仓库并高效推送代码!

文章目录 前言 git diff一、远程仓库&#xff1f;1、在 Gitee 上新建仓库&#xff1a;2、Git 全局设置&#xff1a;3、添加远程仓库&#xff1a;4、推送本地代码到远程仓库&#xff1a;5、输入用户名和密码&#xff1a;6、后续推送&#xff1a; 二、全情回顾三、参考 前言 git …

二十种编程语言庆祝中秋节

二十种编程语言庆祝中秋节 文章目录 二十种编程语言庆祝中秋节中秋快乐&#xff01;家人们 &#x1f973;一 Python二 C三 C四 Java五 C#六 Perl七 Go八 Asp九 PHP十 JavaScript十一 JavaScript HTML十二 Visual Basic十三 早期 VB十四 Visual C十五 Delphi十六 Shell十七 Cobo…

场外个股期权通道商是什么业务?个人投资者可以参与场外期权吗?

今天带你了解场外个股期权通道商是什么业务&#xff1f;个人投资者可以参与场外期权吗?场外个股期权通道商在个股期权市场中起着重要的中介作用&#xff0c;提供定制化的交易服务和风险管理解决方案。 场外个股期权通道商 场外个股期权通道商是一种金融机构&#xff0c;主要…

15.10 在k8s部署grafana-deployment并导入k8s大盘

本节重点介绍 : grafana deployment部署k8s大盘导入 准备yaml 部署工作 1. 修改yaml中的节点选择器标签 k8s-node01改为你自己的节点 2. 在节点上创建数据目录 mkdir -pv /data/grafana3. 部署grafana # 部署 kubectl apply -f deployment.yaml # 检查 [rootprome-mast…

OpenCV高阶操作

在图像处理与计算机视觉领域&#xff0c;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下&#xff0c;采样 下采样&#xff08;Downsampling&#xff09; 下采样通常用于减小图像的…

1. 运动控制指令概要(omron 机器自动化控制器)

机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…

python画图|中秋到了,尝试画个月亮(球体画法)

学习了一段时间的画图&#xff0c;已经掌握了一些3D图的画法&#xff0c;部分链接如下&#xff1a; python画图|极坐标下的3D surface-CSDN博客 python画图|3D参数化图形输出-CSDN博客 我们今天尝试一下月亮的画法。 【1】官网教程 首先还是到达官网教程学习&#xff1a; …

Mina protocol - 体验教程

Mina protocol - 体验教程 一、零知识证明( Zero Knowledge Proof )1、零知识证明&#xff08;ZKP&#xff09;的基本流程工作流程&#xff1a; 2、zkApp 的优势&#xff1a;3、zkApp 每个方法的编译过程&#xff1a; 二、搭建第一个zkapp先决条件1、下载或者更新 zkApp CLI​2…

黑神话悟空+云技术,游戏新体验!

近期&#xff0c;一款名为黑神话悟空的游戏因其独特的艺术风格和创新的技术实现在玩家中产生了不小的影响。 而云桌面技术作为一种新兴的解决方案&#xff0c;正在改变人们的游戏体验方式&#xff0c;使得高性能游戏可以在更多设备上流畅运行。 那么&#xff0c;黑神话悟空如…

Hazel 2024

不喜欢游戏的人也可以做引擎&#xff0c;比如 cherno 引擎的作用主要是有两点&#xff1a; 将数据可视化交互 当然有些引擎的功能也包含有制作数据文件&#xff0c;称之为资产 assets 不做窗口类的应用栈&#xff0c;可能要花一年才能做一个能实际使用的应用&#xff0c;只需…

VSCode扩展连接虚拟机MySQL数据库

在虚拟机安装MySQL vscode通过ssh远程登录Ubuntu 在vscode终端运行以下命令。 sudo apt-get install mysql-server-5.7 用以下命令确认MySQL是否安装完成。 sudo mysql MySQL安装成功。 在VSCode安装SQL扩展 扩展名&#xff1a;MySQL Shell for VS Code。 安装完成后&am…

JavaScript高级——闭包的作用

1、使用函数内部的变量在函数执行完后&#xff0c;仍然存活在内存中&#xff08;延长了局部变量的生命周期&#xff09; 2、让函数外部可以操作&#xff08;读写&#xff09;到函数内部的数据&#xff08;变量/函数&#xff09; 3、函数执行完后&#xff0c;函数内部声明的局…