《MySQL:MySQL表的基本查询操作CRUD》

news2025/4/22 14:04:18

CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)。

Create

into 可以省略。

插入否则更新

由于主键或唯一键冲突而导致插入失败。

可以选择性的进行同步更新操作语法:

INSERT ... ON DUPLICATE KEY UPDATE

column = value [, column = value] ...

2 rows affected (0.01 sec):表示表中有数据冲突,并且数据已经被更新。

1 row affected (0.00 sec):表示表中没有数据冲突,数据被插入。

0 rows affected (0.00 sec):表示表中有数据冲突,但是冲突的值跟update的值相等。

替换

主键或唯一键没有冲突,则直接插入;如果有冲突,则删除后再插入。

2 rows affected (0.00 sec):表示表中有冲突数据,删除后重新插入。

1 row affected (0.00 sec):表示表中没有冲突数据,直接插入。

可以看到,如果表中有数据冲突,是删除后再插入的。

Retrieve

  • 建立一张表结构。

  • 插入以下数据。

SELECT列

全列查询

通常情况下使用*进行全列查询。

  1. 查询的列越多,意味着数据量越大
  2. 可能影响索引的使用

指定列查询

查询字段为表达式

  • 表达式不包含字段。

  • 表达式包含一个字段。

  • 表达式包含多个字段。

为查询结果指定别名

SELECT column [AS] alias_name [...] FROM table_name;

结果去重

where条件

一列有多行,实际我们可能需要查询符合某些条件的记录。

比较运算符

逻辑运算符

基本比较

  • 英语不及格的同学及英语成绩

  • 语文成绩在 [80, 90] 分的同学及语文成绩

使用and进行条件连接。

使用between and进行条件连接。

  • 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

使用or条件进行连接。

使用in条件。

  • 姓孙的同学 及 孙某同学

模糊匹配 like:

  • like % 匹配任意(包含0个)多个字符
  • like _ 严格匹配任意一个字符

姓孙的同学。

孙某同学。

  • 语文成绩好于英语成绩的同学
  • 总分在 200 分以上的同学

注意:别名不能在where条件中使用。因为select的查询顺序是先查询表再看限制条件再筛选字段。

  • 语文成绩 > 80 并且不姓孙的同学
  • 孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

有如下表结构。

  • 查询名字为空的同学。

  • 查询名字不为空的同学。

  • 查询名字等于空串的同学。

结果排序

  • ASC:升序,从小到大
  • DESC:降序,从大到小
  • 默认为ASC

SELECT ... FROM table_name [WHERE ...]

ORDER BY column [ASC|DESC], [...];

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

  • 同学及数学成绩,按数学成绩升序显示

order by默认为升序。

  • 同学及数学成绩,按数学成绩降序显示

  • 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

意思就是,如果数学成绩相同,则英语成绩按升序排序;如果数学、英语成绩都相同,则语文成绩按升序排列。

  • 查询同学及总分,由高到低

order by中可以有表达式。

order by中可以使用别名。

这里order by为什么能用别名呢?因为排序一定是先有数据,再排序,所以,select的执行顺序是先要有表结构,再筛选数据,再对数据做排序。

  • 查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
  • 查询姓孙的同学或者姓宋的同学的总分,结果按总分由高到低显示

select执行顺序。

筛选分页结果

起始下标为0

从0开始,筛选n条结果

  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;

从s开始,筛选n条结果

  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT  s,n;

从s开始,筛选n条结果

  • SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT  n,offset s;
建议:对未知表进行查询时,最好加一条 LIMIT 1 ,避免因为表中数据过大,查询全表数据导致数据库卡死。
  • id 进行分页,每页 3 条记录,分别显示 第 123

  • 查询姓孙的同学或者姓宋的同学的总分,结果按总分由高到低显示,并只显示两条记录

limit的本质是“显示”,只有筛选数据的工作全都准备好了,最后才显示。此时,select的执行顺序为:

Update

UPDATE table_name SET column = expr [, column = expr ...]

[WHERE ...] [ORDER BY ...] [LIMIT ...]

将查询到的结果进行列值更新。
  • 将孙悟空同学的数学成绩变更为 80

  • 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70
  • 将总成绩倒数前三的 3 位同学的数学成绩加上 30

  • 将所有同学的语文成绩更新为原来的 2

更新全表的语句慎用!

Delete

删除数据

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
  • ​​​​​​删除孙悟空同学的考试成绩

删除整表数据

注意:删除整表操作要慎用!

  • 建立如下表结构。

  • 删除整张表中的数据。

注意:只是删除了整张表中的数据,表还存在。

  • 再插入一条数据。发现自增id在原值上增长。

delete 删除整表中的数据,并没有删除auto_increment项。

截断表

TRUNCATE [TABLE] table_name
  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事物,所以无法回滚
  3. 重置 AUTO_INCREMENT 项
  • 建立如下表结构并插入数据。
  • 截断表。

可以看到影响行数是0,实际并没有对数据进行操作。

截断表,会删除auto_increment项。

  • 再插入一条数据。自增id重新在增长。

插入查询结果

INSERT INTO table_name [(column [, column ...])] SELECT ...

例:删除表中的的重复复记录,重复的数据只能有一份。

  • 创建表结构并插入数据。

如何去掉重复的数据?

查询的时候使用distinct确实可以查到去重之后的结果,但是原表数据没有更改。也不能使用delete 加where限制,会把相同的数据全部删除完。可以这样做:

  • 创建一张空表no_duplicate_table,结构和duplicate_table一样。

  • 将duplicate_table去重之后的数据插入到no_duplicate_table
  • 通过重命名表,实现原子的去重操作。将no_duplicate_table重命名为duplicate_tabe,将duplicate_table重命名为其他名字

聚合函数

  • 统计班级共有多少同学

使用*做统计,不受null的影响。

使用表达式做统计。

  • 统计数学成绩分数个数

统计的是全部数学成绩的个数。不符合题意。

统计的是去重之后的数学成绩的个数。符合题意。

  • 统计数学成绩的总分。

  • 统计数学成绩小于100分的分数总分。

  • 统计平均总分。

  • 统计数学成绩的平均分。

  • 返回英语最高分。

  • 返回 > 70 分以上的数学最低分。

一定要可聚合,也就是有多个数据才能聚合。

group by子句的使用

select column1, column2, .. from table group by column;
  • 如何显示每个部门的平均工资和最高工资

select deptno,avg(sal),max(sal) from EMP group by deptno;

  • 显示每个部门的每种岗位的平均工资和最低工资

select avg(sal),min(sal),job, deptno from EMP group by deptno, job;

  • 显示平均工资低于2000的部门和它的平均工资
  • 统计各个部门的平均工资

select avg(sal) from EMP group by deptno;

  • havinggroup by配合使用,对group by结果进行过滤
select avg(sal) as myavg from EMP group by deptno having myavg<2000;

having经常和group by搭配使用,作用是对分组进行筛选,作用有些像where。区别是什么?条件筛选的阶段不同。

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

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

相关文章

多维度信息捕捉:利用向量、稀疏向量、全文搜索及张量实现RAG的极致性能

开源 AI 原生数据库 Infinity 0.2 release 正式发布&#xff0c;提供了 2 种新数据类型&#xff1a;稀疏向量Sparse Vector 和 张量Tensor&#xff0c;在此前的全文搜索和向量搜索之外&#xff0c; Infinity 提供了更多的召回手段&#xff0c;如下图所示&#xff0c;用户可以采…

vscode使用remote ssh插件连接服务器的问题

本人今天发现自己的vscode使用remote ssh连接不上服务器了&#xff0c;表现是&#xff1a;始终在初始化 解决方法&#xff1a; 参考链接&#xff1a;vscode remote-ssh 连接失败的基本原理和优雅的解决方案 原因 vscode 的 SSH 之所以能够拥有比传统 SSH 更加强大的功能&a…

神经网络优化 - 小批量梯度下降之批量大小的选择

上一博文学习了小批量梯度下降在神经网络优化中的应用&#xff1a; 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中&#xff0c;批量大小(Batch Size)对网络优化的影响也非常大&#xff0c;本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…

Novartis诺华制药社招入职综合能力测评真题SHL题库考什么?

一、综合能力测试 诺华制药的入职测评中&#xff0c;综合能力测试是重要的一部分&#xff0c;主要考察应聘者的问题解决能力、数值计算能力和逻辑推理能力。测试总时长为46分钟&#xff0c;实际作答时间为36分钟&#xff0c;共24题。题型丰富多样&#xff0c;包括图形变换题、分…

C语言学习记录(16)文件操作7

前面学的东西感觉都跟写代码有关系&#xff0c;怎么突然就开始说文件了&#xff0c;有什么用呢&#xff1f; 其实&#xff0c;文件是另一种数据存储的方式&#xff0c;学会使用文件就可以让我们的数据持久的保存。 一、文件是什么 就算没有学过相关的知识&#xff0c;在这么…

《作用域大冒险:从闭包到内存泄漏的终极探索》

“爱自有天意&#xff0c;天有道自不会让有情人分离” 大家好&#xff0c;关于闭包问题其实实际上是js作用域的问题&#xff0c;那么js有几种作用域呢&#xff1f; 作用域类型关键字/场景作用域范围示例全局作用域var&#xff08;无声明&#xff09;整个程序var x 10;函数作用…

让数据应用更简单:Streamlit与Gradio的比较与联系

在数据科学与机器学习的快速发展中&#xff0c;如何快速构建可视化应用成为了许多工程师和数据科学家的一个重要需求。Streamlit和Gradio是两款备受欢迎的开源库&#xff0c;它们各自提供了便捷的方式来构建基于Web的应用。虽然二者在功能上有许多相似之处&#xff0c;但它们的…

LlamaIndex 生成的本地索引文件和文件夹详解

LlamaIndex 生成的本地索引文件和文件夹详解 LlamaIndex 在生成本地索引时会创建一个 storage 文件夹&#xff0c;并在其中生成多个 JSON 文件。以下是每个文件的详细解释&#xff1a; 1. storage 文件夹结构 1.1 docstore.json 功能&#xff1a;存储文档内容及其相关信息。…

AndroidRom定制删除Settings某些菜单选项

AndroidRom定制删除Settings某些菜单选项 1.前言. 最近在Rom开发中需要隐藏设置中的某些菜单&#xff0c;launcher3中的定制开发&#xff0c;这个属于很基本的定制需求&#xff0c;和隐藏google搜素栏一样简单&#xff0c;这里我就不展开了&#xff0c;直接上代码. 2.隐藏网络…

【数据结构和算法】3. 排序算法

本文根据 数据结构和算法入门 视频记录 文章目录 1. 排序算法2. 插入排序 Insertion Sort2.1 概念2.2 具体步骤2.3 Java 实现2.4 复杂度分析 3. 快排 QuickSort3.1 概念3.2 具体步骤3.3 Java实现3.4 复杂度分析 4. 归并排序 MergeSort4.1 概念4.2 递归具体步骤4.3 Java实现4.4…

FreeRTos学习记录--2.内存管理

后续的章节涉及这些内核对象&#xff1a;task、queue、semaphores和event group等。为了让FreeRTOS更容易使用&#xff0c;这些内核对象一般都是动态分配&#xff1a;用到时分配&#xff0c;不使用时释放。使用内存的动态管理功能&#xff0c;简化了程序设计&#xff1a;不再需…

HAL库(STM32CubeMX)——高级ADC学习、HRTIM(STM32G474RBT6)

系列文章目录 文章目录 系列文章目录前言存在的问题HRTIMcubemx配置前言 对cubemx的ADC的设置进行补充 ADCs_Common_Settings Mode:ADC 模式 Independent mod 独立 ADC 模式,当使用一个 ADC 时是独立模式,使用两个 ADC 时是双模式,在双模式下还有很多细分模式可选 ADC_Se…

单例模式(线程安全)

1.什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单…

FreeRTos学习记录--1.工程创建与源码概述

1.工程创建与源码概述 1.1 工程创建 使用STM32CubeMX&#xff0c;可以手工添加任务、队列、信号量、互斥锁、定时器等等。但是本课程不想严重依赖STM32CubeMX&#xff0c;所以不会使用STM32CubeMX来添加这些对象&#xff0c;而是手写代码来使用这些对象。 使用STM32CubeMX时&…

进程控制(linux+C/C++)

目录 进程创建 写时拷贝 fork 进程终止 退出码 进程退出三种情况对应退出信号 &#xff1a;退出码&#xff1a; 进程退出方法 进程等待 两种方式 阻塞等待和非阻塞等待 小知识 进程创建 1.在未创建子进程时&#xff0c;父进程页表对于数据权限为读写&#xff0c;对于…

TensorBoard如何在同一图表中绘制多个线条

1. 使用不同的日志目录 TensorBoard 会根据日志文件所在的目录来区分不同的运行。可以为每次运行指定一个独立的日志目录&#xff0c;TensorBoard 会自动将这些目录中的数据加载并显示为不同的运行。 示例&#xff08;TensorFlow&#xff09;&#xff1a; import tensorflow…

微软Entra新安全功能引发大规模账户锁定事件

误报触发大规模锁定 多家机构的Windows管理员报告称&#xff0c;微软Entra ID新推出的"MACE"&#xff08;泄露凭证检测应用&#xff09;功能在部署过程中产生大量误报&#xff0c;导致用户账户被大规模锁定。这些警报和锁定始于昨夜&#xff0c;部分管理员认为属于误…

基于FPGA的一维时间序列idct变换verilog实现,包含testbench和matlab辅助验证程序

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 DCT离散余弦变换 4.2 IDCT逆离散余弦变换 4.3 树结构实现1024点IDCT的原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) matlab仿真结果 FPGA仿真结果 由于FP…

Linux进程5-进程通信常见的几种方式、信号概述及分类、kill函数及命令、语法介绍

目录 1.进程间通信概述 1.1进程通信的主要方式 1.2进程通信的核心对比 2.信号 2.1 信号的概述 2.1.1 信号的概念 2.2信号的核心特性 2.3信号的产生来源 2.4信号的处理流程 2.5关键系统调用与函数 2.6常见信号的分类及说明 2.6.1. 标准信号&#xff08;Standard Sig…

[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析

[架构之美]一键服务管理大师&#xff1a;Ubuntu智能服务停止与清理脚本深度解析 服务展示&#xff1a; 运行脚本&#xff1a; 剩余服务&#xff1a; 一、脚本设计背景与核心价值 在Linux服务器运维中&#xff0c;服务管理是日常操作的重要环节。本文介绍的智能服务管理脚本&a…