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

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

查询 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 筛选的是每个的分组数据,两者并不冲突,因为他们的执行优先级不同

相关文章:

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

查询 select 可以认为是四个基本操作中使用最为频繁的操作&#xff0c;然而数据量比较大的时候&#xff0c;我们不可能查询所有内容&#xff0c;我们一般会搭配其他语句进行查询&#xff1a; 假如要查询某一个字段的内容&#xff0c;可以使用 where假如要查询前几条记录&#…...

VScode 结合clangd 构建linux源代码阅读环境

1、背景介绍上一篇文章&#xff1a;VScode 结合Global构建linux源代码阅读环境 &#xff0c;介绍了在VS Code工具中通过remote-ssh远程登陆到Linux远程服务器&#xff0c;使用Global构建linux源代码阅读环境&#xff0c;对linux kernel代码进行解析&#xff0c;实现全局搜索、自…...

web应用 —— JavaScript

Web应用(acwing) 三、JavaScript 1.JS的调用方式与执行顺序 ①使用方法 HTML页面中任意位置加上<script type"module"></script>标签即可 常见使用方式&#xff1a; 直接在<script type"module"></script>标签内写JS代码。直…...

SSM整合SpringSecurity简单使用

一、SpringSecurity 1.1 什么是SpringSecurity Spring Security 的前身是 Acegi Security &#xff0c;是 Spring 项目组中用来提供安全认证服务的框架。(官网地址) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发…...

Java零基础教程——数据类型

目录数据类型数据类型的分类运算符算术运算符符号做连接符的识别自增、自减运算符赋值运算符关系运算符逻辑运算符短路逻辑运算符三元运算符运算符优先级数据类型 数据类型的分类 引用数据类型&#xff08;除基本数据类型之外的&#xff0c;如String &#xff09; 基本数据类…...

【Linux 信号】信号的产生方式、信号的捕捉的全过程

信号的处理方式是远远比信号的产生当闹钟响了就知道时间到了&#xff0c;说明对应信号处理方法比信号产生更早操作系统的信号处理方法在编写操作系统的时候就已经编写好了signal函数1.1所有的信号1.2 signal函数的概念和简单使用捕捉信号就是自定义对应的信号的处理方法9号信号…...

代码随想录第58天(动态规划):● 392.判断子序列 ● 115.不同的子序列

一、判断子序列 题目描述&#xff1a; 思路和想法&#xff1a; 这道题目还是最长公共子序列的拓展&#xff0c;只是这里进行删除的一定是t字符串&#xff0c;当不相等时&#xff0c;dp[i][j] dp[i][j - 1]&#xff1b;其余基本一致。当最长公共子序列个数等s.size()时&#x…...

代码随想录第55天(动态规划):● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

一、最佳买卖股票时机含冷冻期 题目描述: 思路和想法&#xff1a; 这道题相较于之前的题目&#xff0c;注重对状态的分析&#xff0c;这里分为四个状态。 &#xff08;1&#xff09;状态一&#xff0c;买入状态 dp[i][0] 操作一&#xff1a;前一天就是持有状态&#xff08;状…...

字符串装换整数(atoi)-力扣8-java

一、题目描述请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。函数 myAtoi(string s) 的算法如下&#xff1a;读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还未…...

毕业5年,从月薪3000到年薪40w,我掌握了那些核心技能?(建议收藏)

大家好&#xff0c;我是静静~~是一枚一线大厂的测试开发工程师很多读者私信问我&#xff0c;自己时间不短了&#xff0c;随着工作年限的不断增长&#xff0c;感觉自己的技术水平与自己的工作年限严重不符。想跳槽出去换个新环境吧&#xff0c;又感觉自己的能力达不到心仪公司的…...

C++中的并行与并发

1.1 并行基础std::thread 用于创建一个执行的线程实例&#xff0c;所以它是一切并发编程的基础&#xff0c;使用时需要包含 <thread> 头文件&#xff0c; 它提供了很多基本的线程操作&#xff0c;例如 get_id() 来获取所创建线程的线程 ID&#xff0c;使用 join() 来加入…...

h2database源码解析-如何更新一条行记录

这里的更新包括两种操作&#xff1a;删、改。更新操作涉及的内容在其他文章里面已经做过介绍了&#xff0c;本文主要是介绍更新的代码流程&#xff0c;以了解更新操作都做了哪些事情。如果有未介绍过的知识点会详细介绍。 目录改(update)如何判读是否加了行锁删(delete)改(upda…...

FyListen——生命周期监听器(设计原理之理解生命周期)

FyListen——生命周期监听器&#xff08;设计原理之理解生命周期&#xff09; FyListen 的核心原理有两个&#xff1a; 通过子Fragment对Activity、Fragment进行生命周期监听Java8 接口特性 default 1. 什么是上下文Context 这是一个装饰器模式&#xff0c; ContextImpl 是 …...

Element UI框架学习篇(六)

Element UI框架学习篇(六) 1 删除数据 1.1 前台核心函数 1.1.1 elementUI中的消息提示框语法 //①其中type类型和el-button中的type类型是一致的,有info灰色,success绿色,danger红色,warning黄色,primary蓝色 //②message是你所要填写的提示信息 //③建议都用,因为比双引号…...

Python如何安装模块,python模块安装失败的原因以及解决办法

前言 今天来给刚开始学习python的朋友讲解一下 如何安装python模块, python模块安装失败的原因以及解决办法 很多朋友拿到代码之后&#xff0c;就开始复制粘贴 --> 然后右键进行运行 结果就是报错说 没有这个模块 得安装啥的 Python模块安装 一. 打开命令提示符 win …...

《NFL橄榄球》:洛杉矶闪电·橄榄1号位

洛杉矶闪电&#xff08;英语&#xff1a;Los Angeles Chargers&#xff09;&#xff0c;又译“洛杉磯衝鋒者”。是一支位于加利福尼亚州洛杉矶郡英格尔伍德的职业美式橄榄球球队&#xff0c;现为美国橄榄球联合会西区成员之一。该队曾于1961年搬迁到圣地亚哥而改叫圣地亚哥电光…...

4.7 Python设置代码格式

随着你编写的程序越来越长&#xff0c;有必要了解一些代码格式设置约定。请花时让你的代码尽可能易于阅读&#xff1b;让代码易于阅读有助于你掌握程序是做什么的,也可以帮助他人理解你编写的代码。为确保所有人编写的代码的结构都大致一致&#xff0c;Python程序员都遵循一些格…...

Zabbix 构建监控告警平台(五)

Zabbix 自动发现Zabbix 自动注册1.Zabbix 自动发现 1.1前言 为了满足监控企业成千上万台服务器&#xff0c;因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。 1.2zabbix-server &#xff08;一&#xff09;1、创建自动发现规则 在“配置”->“自动发现”->“…...

2023关键词:挑战

未失踪人口回归… 好久不见&#xff0c;不经意间拖更2个多月。今天周末&#xff0c;外面淅淅沥沥下着小雨&#xff0c;这种窝在床上的时刻最适合写点东西了。 但是建议大家在办公或者写博客的时候尽量还是端正坐姿&#xff0c;我就是因为喜欢这样靠在床背上&#xff0c;长时间…...

Wifi wpa_supplicant 到驱动的联系

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 从framework到wpa_supplicant的适配层,其中framework部分需要了注意的是wifiservic…...

【状态估计】基于二进制粒子群优化 (BPSO) 求解最佳 PMU优化配置研究【IEEE30、39、57、118节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

python 将 .pdf 文件转为 .md

环境准备 pip install aspose-words 代码 doc aw.Document(r"pdf 文件路径\xxx.pdf") doc.save("Output.md") 来源&#xff1a;https://products.aspose.com/words/zh/python-net/conversion/...

【C语言】操作符详解

每天一篇博客&#xff0c;卷死各位。 文章目录前言1. 算术操作符2. 移位进制位的表示移位操作符1. 》--左移操作符2. 《--右移操作符3.位操作符4.赋值操作符5.单目操作符6.关系操作符7. 逻辑操作符8.条件操作符9.逗号操作符总结前言 在c语言学习中操作符尤为重要&#xff0c;而…...

微信小程序 学生选课系统--nodejs+vue

系统分为学生和管理员&#xff0c;教师三个角色 学生小程序端的主要功能有&#xff1a; 1.用户注册和登陆系统 2.查看选课介绍信息 3.查看查看课程分类 4.查看课程详情&#xff0c;在线选课&#xff0c;提交选课信息 5.在线搜索课程信息 6.用户个人中心修改个人资料 7.用户查看…...

leaflet 加载geojson文件并显示图形(示例代码051)

第051个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载geojson文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(…...

【Kafka】ZK和Kafka集群的安装和配置

一、集群环境说明1. 虚拟机&#xff1a;192.168.223.101/103/1052. 系统版本&#xff1a;CentOS 7.93. JDK版本&#xff1a;11.0.18.0.14. Zookeeper版本&#xff1a;3.7.15. Kafka版本&#xff1a;2.13-2.8.2备注&#xff1a;无论是ZK&#xff0c;还是Kafka&#xff0c;都需要…...

并发编程出现的问题以及解决方式

解决并发编程出现的问题基于java内存模式的设计出现的问题基于java内存模式的设计&#xff0c;多线程操作一些共享的数据时&#xff0c;出现以下三个问题&#xff1a;1.不可见性问题&#xff1a;多个线程同时在各自的工作内存对共享数据进行操作&#xff0c;彼此之间不可见。操…...

[ linux ] linux 命令英文全称及解释

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】&#x1f389;点赞➕评论➕收藏 养成习…...

C++11新特性

文章目录说在前面花括号{}初始化new的列表初始化STL相关容器的列表初始化相关语法格式容器列表初始化的底层原理forward_list和array与类型相关的新特性decltype左值引用和右值引用什么是左值&#xff0c;什么是右值左值和右值的本质区别右值引用如何理解右值引用std::move移动…...

【宝塔部署SpringBoot前后端不分离项目】含域名访问部署、数据库、反向代理、Nginx等配置

一定要弄懂项目部署的方方面面。当服务器上部署的项目过多时&#xff0c;端口号什么时候该放行、什么时候才会发生冲突&#xff1f;多个项目使用redis怎么防止覆盖&#xff1f;Nginx的配置会不会产生站点冲突&#xff1f;二级域名如何合理配置&#xff1f;空闲的时候要自己用服…...

网站制作的软件/seo岗位工资

官方示例&#xff1a; 使用allow-create属性即可通过在输入框中输入文字来创建新的条目。注意此时filterable必须为真。本例还使用了default-first-option属性&#xff0c;在该属性打开的情况下&#xff0c;按下回车就可以选中当前选项列表中的第一个选项&#xff0c;无需使用鼠…...

河南做网站找谁/微信营销的方法和技巧

CUDNN7在cuda8.0中安装 在matconvnet-1.0-beta25新建一个文件local&#xff0c;然后 然后把需要把cuDNN文件拷贝到matconvnet-1.0-beta25中 同时把cudnn中bin,lib,include三个文件内容分别复制到C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v7.5对应的include、lib、bi…...

成都网站建设 四川冠辰科技/农产品网络营销推广方案

一、网络地址规划表 源IP地址 目的IP地址 网址域名 网址名称 172.31.148.79 183.232.231.174 www.baidu.com 百度搜索 172.31.148.79 121.51.142.21 www.qq.com 腾讯网 二、配置 步骤&#xff1a;控制面板—网络和Internet—网络和共享中心—连接—属性—Internet协…...

wordpress 上传github/百度电脑版下载官网

文章目录测试用例的基本要素基于需求设计的测试用例接下来就是针对一个功能的不同输入,对应着不同的输出功能之间的交互性异常信息的处理等价类边界值错误猜测法美团面试题:水杯测试用例场景法因果图法复习因为这篇博客是关于如何写测试用例,尽可能多的涵盖测试用例,所以我们要…...

网页设计网站方案/合肥seo软件

甲方&#xff1a;乙方&#xff1a;应甲方技能需求&#xff0c;于年月日将组织一批人员到乙方进行电脑技能培训&#xff0c;为保证本次培训质量&#xff0c;甲、乙双方特订立本协议&#xff0c;期内容如下&#xff1a;一、本次培训为单位团体培训&#xff0c;故人员的组织和管理…...

确定目标是指/合肥seo推广培训班

http://xiaoyaojones.blog.163.com/blog/static/28370125201351501113581/ 6、npm作为一个NodeJS的模块管理&#xff0c;之前我由于没有系统地看资料所以导致安装配置模块的时候走了一大段弯路&#xff0c;所以现在很有必要列出来记录下。①、我们要先配置npm的全局模块的存放…...