滚雪球学MySQL[2.3讲]:MySQL数据过滤与排序详解:WHERE条件、ORDER BY排序与LIMIT分页查询

embedded/2024/10/9 4:09:26/

全文目录:

    • 前言
    • 2.3 数据过滤与排序
      • 1. WHERE 条件语句
        • 基本语法
        • 示例1:筛选符合特定条件的数据
        • 示例2:使用`LIKE`进行模糊查询
        • 示例3:使用`IN`操作符
        • 示例4:使用`AND`与`OR`组合条件
        • 示例5:范围查询
      • 2. ORDER BY 排序
        • 基本语法
        • 示例1:按年龄升序排序
        • 示例2:按年龄降序排序
        • 示例3:按多列排序
      • 3. LIMIT 分页查询
        • 基本语法
        • 示例1:简单限制返回行数
        • 示例2:实现分页查询
        • 示例3:通过计算分页
      • 拓展内容:复杂查询中的过滤与排序优化
        • 示例:多条件过滤与排序
    • 结语与下期预告

前言

在上一期内容中,我们详细讨论了MySQL中的基本数据操作(2.2),包括插入(INSERT)、查询(SELECT)、更新(UPDATE)以及删除(DELETE)四种最常见的数据操作。通过这些操作,我们能够在数据库表中增删改查数据,完成基础的数据库管理任务。

然而,在实际应用中,面对大量的数据,我们往往需要更精确、更高效地从数据库中提取特定的信息。仅仅通过SELECT *查询所有数据显然是不够的,查询结果可能过多且不够直观。这就需要我们掌握更多高级的查询技巧,包括数据过滤排序以及分页。本期内容将详细讲解MySQL的数据过滤与排序(2.3),包括WHERE条件语句、ORDER BY排序语句以及LIMIT分页查询。这些知识将帮助你在面对大量数据时,能够灵活筛选出需要的数据,提升查询效率和用户体验。

在学习完本期内容后,下一期我们将进入多表查询(3.1)的领域,探索如何跨多个表进行复杂的数据查询,进一步扩展你的MySQL技能。

2.3 数据过滤与排序

在日常数据库操作中,用户通常只关心一部分数据,通过条件筛选、排序和分页等方式,可以帮助我们更高效地处理和呈现数据。以下将详细介绍三种常用的查询优化技巧:WHERE条件语句ORDER BY排序LIMIT分页查询

1. WHERE 条件语句

WHERE条件语句用于根据指定的条件从数据库表中筛选数据。在查询时,WHERE子句可以根据各种条件精确筛选出符合要求的数据行。常见的条件操作符包括=><>=<=!=LIKEIN等。

基本语法
SELECT1,2, ... FROM 表名 WHERE 条件;
示例1:筛选符合特定条件的数据

假设我们有一个名为students的表,包含学生的idnameagemajor等信息。我们可以通过WHERE语句筛选出所有年纪大于20的学生:

SELECT * FROM students WHERE age > 20;

这个查询将返回所有age大于20的学生记录。

示例2:使用LIKE进行模糊查询

如果我们希望查询名字中包含Ali的所有学生,可以使用LIKE操作符:

SELECT * FROM students WHERE name LIKE '%Ali%';

%是通配符,表示任意数量的字符。因此,上述查询将返回名字中包含Ali的所有学生,无论Ali出现在名字的前、中或后部分。

示例3:使用IN操作符

有时我们需要筛选多个符合特定值的数据,比如查找主修为Computer ScienceMathematics的学生:

SELECT * FROM students WHERE major IN ('Computer Science', 'Mathematics');

IN操作符允许我们指定多个可能的值,查询会返回major字段为Computer ScienceMathematics的记录。

示例4:使用ANDOR组合条件

我们还可以组合多个条件进行查询。例如,查询所有年纪大于18并且主修Computer Science的学生:

SELECT * FROM students WHERE age > 18 AND major = 'Computer Science';

如果希望查询年纪大于18或主修Computer Science的学生,则可以使用OR

SELECT * FROM students WHERE age > 18 OR major = 'Computer Science';
示例5:范围查询

假设你需要查询年龄在18到25之间的学生,可以使用BETWEEN操作符:

SELECT * FROM students WHERE age BETWEEN 18 AND 25;

BETWEEN操作符能够有效地处理范围查询,适用于日期、数值等字段。

2. ORDER BY 排序

ORDER BY子句用于对查询结果进行排序。默认情况下,MySQL按升序排序,若需要降序排列,则需要使用DESC关键字。通过ORDER BY,你可以按一列或多列对数据进行排序

基本语法
SELECT1,2, ... FROM 表名 WHERE 条件 ORDER BY1 [ASC|DESC],2 [ASC|DESC], ...;
示例1:按年龄升序排序

假设我们想按学生的年龄对students表的数据进行排序

SELECT * FROM students ORDER BY age ASC;

ASC是升序排列的缩写(默认),此查询将按学生年龄从小到大进行排序

示例2:按年龄降序排序

如果我们希望按年龄降序排序,可以使用DESC关键字:

SELECT * FROM students ORDER BY age DESC;
示例3:按多列排序

有时,我们需要先按一列排序,再按另一列排序。例如,先按major升序排序,再按age降序排序

SELECT * FROM students ORDER BY major ASC, age DESC;

此查询会先按照major列的字母顺序排序,然后在major相同的情况下,按age降序排列。

3. LIMIT 分页查询

当查询结果过多时,显示所有数据不仅效率低下,而且用户体验也不好。此时我们可以使用LIMIT来限制返回的数据行数,结合OFFSET可以实现分页查询。

基本语法
SELECT1,2, ... FROM 表名 WHERE 条件 ORDER BY 列名 LIMIT 起始位置, 行数;
  • 起始位置:指定从哪一行开始返回结果。注意,行数是从0开始计数。
  • 行数:指定返回的记录数。
示例1:简单限制返回行数

查询students表中前5名学生的记录:

SELECT * FROM students LIMIT 5;

此查询将返回表中的前5行数据。

示例2:实现分页查询

如果你想查询第2页的数据(假设每页显示5条记录),可以结合OFFSET

SELECT * FROM students LIMIT 5 OFFSET 5;

此查询将跳过前5行,返回接下来的5行数据。通过这种方式,可以实现分页功能。

示例3:通过计算分页

假设你希望动态获取第n页的数据,并且每页显示m条记录,可以计算OFFSET的值:

SELECT * FROM students LIMIT 5 OFFSET (n - 1) * 5;

这样可以灵活地根据页面的大小和页码来获取相应的数据,适合在Web应用的分页功能中使用。

拓展内容:复杂查询中的过滤与排序优化

在实际应用中,数据过滤和排序常常结合复杂的多表查询和聚合函数使用。通过精心设计的查询条件和索引,MySQL可以有效处理大规模数据集,并优化查询性能。例如,在多表联接查询中,WHERE条件的顺序和索引的设计直接影响查询速度。

示例:多条件过滤与排序

在一个包含数百万条记录的数据库中,我们可能需要对多个表的数据进行联合查询并进行排序与分页。例如,查询所有年纪大于20岁且主修Computer Science的学生,并按成绩降序排列:

SELECT students.name, grades.score
FROM students
JOIN grades ON students.id = grades.student_id
WHERE students.age > 20 AND students.major = 'Computer Science'
ORDER BY grades.score DESC
LIMIT 10 OFFSET 0;

此查询首先通过JOINstudents表和grades表联接,然后通过WHERE子句筛选出符合条件的学生,最后按成绩降序排列并限制返回前10条结果。

结语与下期预告

本期内容详细介绍了MySQL中的数据过滤与排序,包括WHERE条件语句、ORDER BY排序语句以及LIMIT分页查询。通过这些技巧,你可以更加灵活和高效地从数据库中提取所需数据,并控制查询结果的呈现方式。掌握这些内容后,你将能够根据业务需求实现复杂的数据筛选与排序操作,提升数据库的查询效率和用户体验。

在下一期的内容中,我们将进入多表查询的领域,探讨如何在多个表之间进行数据联接查询(3.1),如JOIN操作等。这将进一步提升你在复杂数据库结构中的数据处理能力。敬请期待!


http://www.ppmy.cn/embedded/124294.html

相关文章

基于GitLab 的持续集成环境

一.技术基础 Gitlab: 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务 GitRunner:用于运行您的作业并将结果发送回GitLab。它与GitLab CI一起使用&#xff0c;GitLab CI是GitLab随附的开源持续集成服务&…

陀螺仪LSM6DSV16X与AI集成(14)----上报匿名上位机

陀螺仪LSM6DSV16X与AI集成.14--上报匿名上位机 概述视频教学样品申请源码下载硬件准备上位机通讯陀螺仪工作方式欧拉角数据的转换数据帧填充校验和计算数据发送演示开启INT中断中断读取传感器数据主程序演示 概述 本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协…

(十八)、登陆 k8s 的 kubernetes-dashboard 更多可视化工具

文章目录 1、回顾 k8s 的安装2、确认 k8s 运行状态3、通过 token 登陆3.1、使用现有的用户登陆3.2、新加用户登陆 4、k8s 可视化工具 1、回顾 k8s 的安装 Mac 安装k8s 2、确认 k8s 运行状态 kubectl proxy kubectl cluster-info kubectl get pods -n kubernetes-dashboard3、…

Rspamd:开源垃圾邮件过滤系统

Rspamd 是一个开源垃圾邮件过滤和电子邮件处理框架&#xff0c;旨在根据各种规则评估消息&#xff0c;包括正则表达式、统计分析以及与 URL 黑名单等自定义服务的集成。 系统会分析每封邮件并做出判定&#xff0c;MTA可据此采取进一步行动&#xff0c;例如拒绝邮件或添加垃圾邮…

Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) (A-E3)

写在前面 阳间比赛时间总出不太能做的阴间题 印尼的场&#xff0c;final round质量也还ok&#xff0c;算是学了两个经典trick吧 题目 A. Meaning Mean 排个降序后从小的开始合就好了&#xff0c;直觉上是哈夫曼树的合并方式&#xff0c; 但是只固定了第一个&#xff0c;后…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…

Linux的基本指令(1)

前提&#xff1a; a&#xff1a;博主是在云服务器上进行操作的 b&#xff1a;windows上普通文件在Linux中也叫作普通文件&#xff0c;但是windows上的文件夹&#xff0c;在Linux中叫作目录 c&#xff1a;文件 文件内容 文件属性(创建时间&#xff0c;修改时间&#xff0c;…

java判断ip是否为指定网段

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一、IP地址介绍 1.1 IP&#xff08;IPv4&#xff09; IP是Internet Protocol的缩写&#xff0c;即网际协议&#xff0c;它是计算机…