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

news2024/12/24 10:20:48

查询 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.coloradmin.cn/o/340495.html

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

相关文章

线上服务质量的问题该如何去处理?你有什么思路?

线上服务质量的问题该如何去处理&#xff1f;你有什么思路&#xff1f; 目录&#xff1a;导读 发现线上故障 处理线上故障 修复线上故障 运营线上质量 就是前几天有个同学问了我一个问题&#xff1a;目前业内高可用部署主要采用方案&#xff1f; 看到这个问题&#xff0c…

5G网络架构与组网部署

文章目录5G网络架构与组网部署一、5G网络架构的演进趋势5G移动通信系统4G移动通信系统二、核心网架构的演进三、无线接入网的演进趋势5G网络架构与组网部署 一、5G网络架构的演进趋势 5G移动通信系统 5G移动通信系统包括5GC(5G Corn Network,5G核心网)和NG-RAN(Next Generat…

Zookeeper下载安装与集群搭建

Zookeeper下载安装与集群搭建1.下载安装1.1 下载安装1.2 配置启动2.集群搭建2.1 搭建要求2.2 准备工作2.3 配置集群2.4 启动集群2.5 模拟集群异常1.下载安装 1.1 下载安装 1、环境准备 ZooKeeper服务器是用Java创建的&#xff0c;它运行在JVM之上。需要安装JDK 7或更高版本。…

跟我一起写Makefile--个人总结

此篇笔记是根据陈皓大佬《跟我一起写Makefile》学习所得 文章目录换行符clean变量make的自动推导另类风格的Makefile清空目标文件的规则cleanMakefile总述显示规则隐晦规则变量的定义注释引用其它的Makefile环境变量MAKEFILESmake的工作方式书写规则规则举例规则的语法在规则中…

Flutter Windows端打包并生成可安装文件流程

Windows打包 1.首先安装visual Studio 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/ 下载成功后按照下图勾选桌面应用和移动应用下的使用C的桌面开发&#xff0c;勾选右侧安装详细信息中的windows 11/10 sdk 中的任意一个完成安装即可 2.打包Windows …

IC封装常见形式

参考&#xff1a;https://blog.csdn.net/dhs888888/article/details/127673300?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-127673300-blog-115610343.pc_relevant_multi_platform_whitelistv4&spm1001.2101.3001.4242…

truffle 创建测试合约并部署到测试网络

1、npm 安装truffle npm install -g truffle2、创建truffle项目 mkdir imooc-on-blockchain-truffle && cd imooc-on-blockchain-truffle3、初始化truffle目录&#xff0c;会生成如下几个目录 contracts 存放.sol合约文件migrations 部署脚本目录test 测试文件目录t…

20230210组会论文总结

目录 【Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method】 【ShuffleMixer: An Efficient ConvNet for Image Super-Resolution】 【A Close Look at Spatial Modeling: From Attention to Convolution 】 【DEA-Net: Single i…

自动机,即有限状态机

文章目录一、问题来源二、题目描述三、题解中的自动机四、自动机学习五、有限状态机的使用场景一、问题来源 今天做力克题目的时候看到了字符串转换整数的一道算法题&#xff0c;其中又看到了题解中有自动机的概念&#xff0c;所以在这里对自动机做个笔记。题目链接 二、题目描…

详解Python正则表达式中group与groups的用法

在Python中&#xff0c;正则表达式的group和groups方法是非常有用的函数&#xff0c;用于处理匹配结果的分组信息。 group方法是re.MatchObject类中的一个函数&#xff0c;用于返回匹配对象的整个匹配结果或特定的分组匹配结果。而groups方法同样是re.MatchObject类中的函数&am…

MySQL主从同步-(一)搭建主机服务器

准备工作&#xff1a;搭建mysql 数据库 主从复同步系统 centos 7.5 运行环境 docker mysql版本 8.0.3 准备主机服务器第一步&#xff1a;停止虚拟机中其他 docker &#xff0c;关闭防火墙&#xff0c;关闭系统的mysql&#xff08;防止端口冲突&#xff09;docker stop $(docker…

C++11实现计算机网络中的TCP/IP连接(Windows端)

目录引言1、TCP2、IP2.1 IP路由器3、TCP/IP4、TCP/IP协议C11实现参考文献引言 TCP/IP 指传输控制协议/网际协议&#xff08;Transmission Control Protocol / Internet Protocol&#xff09;。[1] 在TCP/IP协议簇中主要包含以下内容&#xff1a; TCP (传输控制协议) - 应用程序…

Bing引擎引入ChatGPT申请候补名单方式

Bing引入ChatGPT申请候补名单方式ChatGPT一、ChatGPT简介二、OpenAI和Google的"军备军赛"三、ChatGPT版本⭐Bing引擎引入ChatGPT申请候补名单方式1.下载chrome拓展程序2.配置拓展程序3.Bing 申请候补名单3.1旧版本Bing3.2新版本Bing4.等待获取结尾ChatGPT 一、ChatG…

Linux ALSA 之十:ALSA ASOC Machine Driver

ALSA ASOC Machine Driver一、Machine 简介二、ASoC Machine Driver2.1 Machine Driver 的 Platform Driver & Platform Device 驱动模型2.2 在 Probe() 中注册声卡三、snd_soc_register_card 函数3.1 bind DAIs3.2 New a sound card3.3 Create card new widgets3.4 Probe …

JointBERT代码复现详解【上】

BERT for Joint Intent Classification and Slot Filling代码复现【上】 源码链接&#xff1a;JointBERT源码复现&#xff08;含注释&#xff09; 一、准备工作 源码架构 data&#xff1a;存放两个基准数据集&#xff1b;model&#xff1a;JointBert模型的实现&#xff1b…

修改本地host文件加入可用ip使谷歌浏览器翻译插件重新生效

修改本地host文件加入可用ip使谷歌浏览器翻译插件重新生效 第一步&#xff1a;找到host文件&#xff1a; 可以使用这个工具进行对Hosts文件进行一个查找 鼠标放到对应路径上面 点击鼠标右键&#xff0c;选择打开路径就到对应 路径了 也可以复制到这个路径下面去找hosts文件 …

【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

Redis集群搭建(主从、哨兵、分片)

1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录&#xff1a; 例如&#xff0c;我放到了/tmp目录&#xff1a; 解压缩&#xff1a; tar -xzf redis-6.2.4.tar.gz解压后&#xff1…

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

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

AI推理计算框架中的内存优化

背景 内存管理是AI计算中非常重要的一部分。我们希望模型计算时占用内存尽可能小&#xff0c;这样我们训练或推理时就可以用更大的batch size使其尽快收敛&#xff0c;或者提高吞吐率。又或者让我们可以使用参数更多、或更复杂的模型从而达到更好的准确率。由于现代深度学习模…