Mysql 增删改查(一) —— 查询(条件查询where、分页limits、排序order by、分组 group by)

news/2024/4/20 22:21:59/文章来源:https://blog.csdn.net/challenglistic/article/details/128939717

查询 select 可以认为是四个基本操作中使用最为频繁的操作,然而数据量比较大的时候,我们不可能查询所有内容,我们一般会搭配其他语句进行查询:

  • 假如要查询某一个字段的内容,可以使用 where
  • 假如要查询前几条记录,可以使用 limit
  • 假如要让查询结果,按照某种顺序显示,可以使用 order by

但是值得注意的是,当select 和上述三者的任意一个或者多个同时出现时,select 并非优先执行,不同语句之间的执行顺序存在优先级

优先级的问题可以参考:select 与 where、order by、limit 子句执行优先级比较


          目录

1、select

(1) 全列查询

(2) 指定列查询

(3) 查询字段为表达式

(4) 为查询结果起别名(as)

(4) 查询结果去重(distinct)

2、条件语句(where)

(1) 比较运算符

(2) 逻辑运算符

3、结果排序(order by)

(1) 一个字段的排序

(2) 多个字段的排序

4、分页(limit)

5、分组(group by)

(1) 无条件分组

(2) 有条件分组(having)

(3) where 与 having 的区别


1、select

select 是最基本的查询,可以搭配 where、limit、order by 等语句使用,除此之外,查询时支持表达式的运算,select基本语法格式如下:

select [distinct] {* | 字段名1,字段名2, ...} from 表名[where ...][order by ...][limit ...]

(1) 全列查询

全列查询:查询结果会展示所有字段的内容,可以通过附带条件语句来查询符合条件的记录。

-- 展示exam_result表中的 “ 全部记录 ” 的全部字段内容
select * from exam_result;            -- 展示exam_result表中 “ id=1所在记录 ” 的全部字段内容
select * from exam_result where id=1;

(2) 指定列查询

指定列查询:仅显示指定字段的内容

-- 展示exam_result表中的 “ 全部记录 ” 的全部字段内容
select * from exam_result;            -- 展示exam_result表中 “ id=1所在记录 ” 的全部字段内容
select * from exam_result where id=1;

(3) 查询字段为表达式

查询时,字段支持四则运算,而且允许给表达式起别名

也可以对原本的字段作四则运算

(4) 为查询结果起别名(as)

可以为一个字段起别名,来增强字段的辨识性。语法格式如下:

select 字段名 as 别名 ...

 也可以为表达式起别名,详见上面第三点 “ 查询字段为表达式 ” 

(4) 查询结果去重(distinct)

语法格式如下:

select distinct 字段名 ...    -- 对xx字段的结果进行去重

 注意:适合对单一字段查询时的去重,存在多个字段时,去重会失效。

2、条件语句(where)

当记录较多的时候,仅使用 select 无法满足满足需求,因为很多记录是不需要的,比如我们要查看xx班级的学生成绩,我只想知道总分大于90分的同学有哪些,此时就需要滤除一些记录。

使用where 语句时,可以搭配比较运算符(>、<、=)、逻辑运算符(and、or、not)和通配符(%、_)一起使用。

语法格式如下:

select ... where 条件表达式

(1) 比较运算符

常用比较运算符如下:

运算符说明
>、>=、<、<=大于,大于等于,小于,小于等于
=、is null等于(非NULL字段的比较)
<=>等于(用于判断字段是否等于NULL
!=不等于(非NULL字段的比较)
<>、is not null不等于(判断字段是否不等于NULL
between A1 and A2判断某个字段的值是否在A1和A2之间(注意是闭区间)
in (option1, option2 ...)判断某个字段的值是否为列表中的某一个
like模糊匹配。搭配通配符使用,% 表示多个字符,_ 表示一个字符

在使用上述运算符时,有几点需要注意:

第一,NULL代表字段为空,不可以直接使用等号运算符比较,因为一个空字段和其他值比较没有意义。比如下面这种写法是错误的。

select * from exam_result where name=null    -- 等号运算符不能参与null的比较

第二,通配符理解为占位,比如:

-- 查询所有姓张的学生(“张后面可以有多个字符”)
select * from exam_result where name like "张%"   -- 查询所有的张某(“张”后面只能有一个字符)
select * from exam_result where name like "张_" 
  • “张%”可以理解为保留“张”后面多个字符的字段,“张_”可以理解为保留“张”后面只有一个字符的字段
  • “%张”可以理解为保留“张”前面多个字符的字段,“_张”可以理解为保留“张”前面只有一个字符的字段

(2) 逻辑运算符

常用逻辑运算符如下:

运算符说明
and等价于C语言中的逻辑与(&&)
or等价于C语言中的逻辑或(||)
not等价于C语言中的逻辑取反(!)
-- 查询所有id为1 / 3 / 5,而且姓张的学生
select * from exam_result where id in (1,3,5) and name like '张%'    

3、结果排序(order by)

order by 可以对某一个字段或者多个字段进行排序,默认是升序排序。其实就是根据某一个字段来对整个查询结果进行排序。

  • order by asc:升序排序(asc代表ascend)
  • order by desc:降序排序(desc代表descend)

语法格式如下:

select ... order by 字段名 [asc | desc]

(1) 一个字段的排序

暂时不考虑条件判断,对所有学生的数学成绩进行排序

(2) 多个字段的排序

order by 可以根据多个字段来对查询结果排序。多个字段排序时,遵循的规则是:

  • 先根据字段1比较,如果能比较出大小,那就只使用字段1
  • 如果字段1中的比较结果为相等,再根据字段2比较

多个字段排序的语法格式如下:

​select ... order by 字段名1, 字段名2, ... [asc | desc]

比如要根据语文成绩和数学成绩来对查询结果进行降序排序。我们会发现当字段 chinese 中不存在两个值相等的情况时,会一直根据chinese比较。

4、分页(limit)

所谓分页其实也可以理解为截取,从某个位置开始,截取 N 条记录。实现方式有两种,语法格式如下:

-- start: 表示起始位置,即要从第几行开始截
-- step:  表示步长,即要截多少条记录-- 方式一: 
select ... limit start, step-- 方式二:
select ... limit step offset start

比如我们要截取前三条记录,第一种方式的查询结果:

第二种方式的查询结果:

5、分组(group by)

(1) 无条件分组

group by 表示根据某一个字段的内容进行分组,以下面这个表为例:

  • 假设根据 department 字段分组,分组的结果:技术部、行政部
  • 假设根据 department_id 字段分组,分组的结果:1001、1002

需要注意的是,group by 、where、select的执行顺序依次是:where > group by > select

where针对的是整个表数据的筛选,筛选完以后再分组,可以减少要分组的记录;然后才是 group by 分组;最后是在每一个分组中做查询或者表达式计算处理。

-- 先根据字段1分组,然后在字段1分组的基础上,根据字段2分组
select ... group by 字段1, 字段2 ...

假设我们要计算每个部门的人数,基本思路是根据部门分组,然后使用select在每一个分组中统计人数,统计记录数量使用聚合函数count。

(2) 有条件分组(having)

where只适用于筛选整表记录,并不适合筛选分组记录,如果希望对每一个分组进行筛选,我们可以使用 having。having的优先级在group by 之后,因为针对的是分组以后的记录筛选。所以我们可以得到最终的优先级顺序:where > group by > select > having

group by 与 having 搭配使用的格式如下:

select ... group by 字段1, ... having 每一个分组的筛选条件

(3) where 与 having 的区别

where筛选的是表数据,而having 筛选的是每个的分组数据,两者并不冲突,因为他们的执行优先级不同

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

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

相关文章

【LeetCode】每日一题(2)

目录 题目&#xff1a;1138. 字母板上的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;1138. 字母板上的路径 - 力扣&am…

C# Lambda表达式含义及各种写法

Lambda表达式在各个语言中的表达方式都不太相同&#xff0c;本文重点介绍C#的Lambda表达式。 首先&#xff0c;Lambda表达式就是一个匿名的方法/函数。 以下面的一个完整版作为例子&#xff0c;前面是参数&#xff0c;后面是返回值&#xff1a; 由于 Lambda表达式和委托常常一起…

Windows11 安装Apache24全过程

Windows11 安装Apache24全过程 一、准备工作 1、apache-httpd-2.4.55-win64-VS17.zip - 蓝奏云 2、Visual Studio Code-x64-1.45.1.exe - 蓝奏云 二、实际操作 1、将下载好的zip文件解压放到指定好的文件夹。我的是D:\App\PHP下 个人习惯把版本号带上。方便检测错误。 2…

GhostNet v2(NeurIPS 2022 Spotlight)原理与代码解析

paper&#xff1a;GhostNetV2: Enhance Cheap Operation with Long-Range Attentioncode&#xff1a;https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch背景在智能手机和可穿戴设备上部署神经网络时&#xff0c;不仅要考虑模型的性能&…

发生异常: AttributeError ‘xxx’ object has no attribute ‘ooo’

python 发生异常: AttributeError ‘xxx’ object has no attribute ‘ooo’ 原因&#xff1a; 函数调用发生在变量定义之前 示例分析&#xff1a; 在apple.py文件中代码如下&#xff1a; class Apple():def __init__(self):self.eat()self.pricedef eat(self):print("吃…

基于javaee的电影碟片租赁管理系统的设计

技术&#xff1a;Java、JSP、框架等摘要&#xff1a;随着信息技术在管理中的广泛应用&#xff0c;管理信息系统(MIS)的实施在技术上逐渐成熟。为了适应时代的发展&#xff0c;降低管理成本&#xff0c;提高工作效率&#xff0c;企业需要加强对内部资源(人、钱、物)的有效管理&a…

AI_News周刊:第一期

2023.02.06—2023.02.12 关于ChatGPT的前言&#xff1a; 在去年年末&#xff0c;OpenAI的ChatGPT在技术圈已经火了一次&#xff0c;随着上周它的二次出圈&#xff0c;ChatGPT算得上是人工智能领域的一颗明星&#xff0c;它在聊天机器人领域有着不可忽视的影响力。其准确、快速…

【前端vue2面试题】2023前端最新版vue模块,高频17问(上)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的关于vue2面试题(上) 目录 vue2面试题 1、$route 和 $router的区别 2、一个…

七大设计原则之单一职责原则应用

目录1 单一职责原则介绍2 单一职责原则应用1 单一职责原则介绍 单一职责&#xff08;Simple Responsibility Pinciple&#xff0c;SRP&#xff09;是指不要存在多于一个导致类变更的原因。假设我们有一个 Class 负责两个职责&#xff0c;一旦发生需求变更&#xff0c;修改其中…

有什么免费好用的全球天气api?

简单介绍几个&#xff0c;选你觉得合适的就行。&#xff08;下面推荐的国内外的都有&#xff0c;访问速度会有些差别&#xff09; 高德天气 API -天气查询-API文档-开发指南-Web服务 API | 高德地图API知心天气 API -HyperData 数据产品简介 心知天气和风天气 API -和风天气开…

Java、JSP动漫网站的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;随着科技的迅速发展&#xff0c;计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展&#xff0c;网络的规模也逐渐增大&#xff0c;网络的元素也随之不断增加&#xff0c;有的利用其通信&#xff0c;有的利用其…

架构方法论

0.缘起最近在和同事以及相关领域的人沟通时&#xff0c;大家都在强调架构、架构图&#xff0c;于是兴起了一片关于架构的方法论介绍。本文对内容的组织按照顶层设计思路&#xff0c;先对架构本身进行剖析&#xff1a;什么是架构&#xff1f;为什么架构很重要&#xff1f;这些是…

SNI生效条件 - 补充nginx-host绕过实例复现中SNI绕过的先决条件

文章目录1.前置环境搭建2.测试SNI生效条件(时间)3. 证书对SNI的影响3.1 双方使用同一个证书&#xff1a;3.2 双方使用不同的证书与私钥4. 端口号区分测试4.1 端口号区分&#xff0c;证书区分&#xff1a;4.2 端口号区分,证书不区分&#xff1a;5.总结SNI运行机制6. SNI机制绕过…

SpringBoot+Vue实现智能物流管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

线程和QObjects

QObject的可重入性&#xff1a; QThread继承了QObject&#xff0c;它发出信号以指示线程开始或完成执行&#xff0c;并提供一些插槽。 QObjects可以在多个线程中使用发出调用其他线程中槽的信号&#xff0c;并将事件发布到在其他线程中“活动”的对象。这是可能的&#xff0…

一个测试人员,在现阶段的环境下如何在测试行业发展和自我价值。

前言周末和几个测试圈子里的大佬饭局上聊了一些职场和测试职业发展相关的话题&#xff0c;我将聊天的内容做了整理和阐述。。朋友圈有测试同学对这篇文章提了比较深刻的建议&#xff0c;下面是他的评价和建议&#xff1a;评价&#xff1a;据说是大佬饭桌总结&#xff0c;有两点…

ThingsBoard-实现定时任务调度器批量RPC

1、概述 ThingsBoard-CE版是不支持调度器的,只有PE版才支持,但是系统中很多时候需要使用调度器来实现功能,例如:定时给设备下发rpc查询数据,我们如何来实现呢?下面我将教你使用巧妙的方法来实现。 2、使用什么实现 我们可以使用规则链提供的一个节点来实现,这个节点可…

【手写 Vuex 源码】第七篇 - Vuex 的模块安装

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 模块收集的实现&#xff0c;主要涉及以下几个点&#xff1a; Vuex 模块的概念&#xff1b;Vuex 模块和命名空间的使用&#xff1b;Vuex 模块收集的实现-构建“模块树”&#xff1b; 本篇&#xff0c;继续介绍 Vuex 模…

Elasticsearch7.8.0版本进阶——分布式集群(应对故障)

目录一、Elasticsearch集群的安装1.1、Elasticsearch集群的安装&#xff08;win10环境&#xff09;1.2、Elasticsearch集群的安装&#xff08;linux环境&#xff09;二、应对故障&#xff08;win10环境集群演示&#xff09;2.1、启动集群&#xff08;三个节点&#xff09;2.2、…

利用git reflog 命令来查看历史提交记录,并使用提交记录恢复已经被删除掉的分支

一.问题描述 当我们在操作中手误删除了某个分支&#xff0c;那该分支中提交的内容也没有了&#xff0c;我们可以利用git reflog这个命令来查看历史提交的记录从而恢复被删除的分支和提交的内容 二.模拟问题 1.创建git仓库&#xff0c;并提交一个文件 [rootcentos7-temp /da…