【MySQL表的增删查改】

news2025/1/23 17:46:46

文章目录

  • 前言
  • 1 Create
    • 1.1 单行数据 + 全列插入
    • 1.2 多行数据 + 指定列插入
    • 1.3 插入否则更新
    • 1.4 替换
  • 2 Retrieve
    • 2.1 SELECT 列
      • 2.1.1 全列查询
      • 2.1.2 指定列查询
      • 2.1.3 查询字段为表达式
      • 2.1.4 为查询结果指定别名
      • 2.1.5 结果去重
    • 2.2 WHERE 条件
      • 2.2.1 英语不及格的同学及英语成绩 ( < 60 )
      • 2.2.2 语文成绩在 [80, 90] 分的同学及语文成绩
      • 2.2.3 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
      • 2.2.4 姓孙的同学 及 孙某同学
      • 2.2.5 语文成绩好于英语成绩的同学
      • 2.2.6 总分在 200 分以上的同学
      • 2.2.7 语文成绩 > 80 并且不姓孙的同学
      • 2.2.8 孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80
      • 2.2.9 NULL 的查询
    • 2.3 结果排序
      • 2.3.1 同学及数学成绩,按数学成绩升序显示
      • 2.3.2 同学及 qq 号,按 qq 号排序显示
      • 2.3.3 查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
      • 2.3.4 查询同学及总分,由高到低
      • 2.3.5 查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
    • 2.4 筛选分页结果
  • 3 Update
    • 3.1 将孙悟空同学的数学成绩变更为 80 分
    • 3.2 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
    • 3.3 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
    • 3.4 将所有同学的语文成绩更新为原来的 2 倍
  • 4 Delete
    • 4.1 删除数据
      • 4.1.1 删除孙悟空同学的考试成绩
      • 4.1.2 删除整张表数据
    • 4.2 截断表
  • 5 插入查询结果
  • 6 聚合函数
    • 6.1 统计班级共有多少同学
    • 6.2 统计班级收集的 qq 号有多少
    • 6.3 统计本次考试的数学成绩分数个数
    • 6.4 统计数学成绩总分
    • 6.4 统计平均总分
    • 6.5 返回英语最高分
    • 6.6 返回 > 70 分以上的数学最低分
  • 7 group by子句的使用

前言

MySQL表的增删查改实际是CURD操作。CURD是Create(增加)、Update(修改)、Retrieve(查询)、Delete(删除)的缩写,是对数据库中数据进行基本操作的简称。在MySQL中,通过使用SQL语句,可以对表中的数据进行CURD操作。例如,使用INSERT语句可以向表中插入新的记录,使用UPDATE语句可以修改已存在的记录,使用DELETE语句可以删除记录,而使用SELECT语句可以查询记录。因此,可以说MySQL表的增删查改实际是CURD操作。
其实增删查改在之前我们接触表的约束时就接触到了,知识点的归类,归类为增删查改这里

1 Create

语法:

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
  • 案例:
    – 创建一张学生表
    在这里插入图片描述

1.1 单行数据 + 全列插入

– 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
– 注意,这里在插入的时候,也可以不用指定id(当然,那时候就需要明确插入数据到那些列了),那么mysql会使用默认的值进行自增

mysql> insert into student values (100,10000,'唐三藏','11111');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student (sn,name,qq) 
values(12465,'孙悟空','1433456');
Query OK, 1 row affected (0.01 sec)
mysql> insert into student (sn,name,qq) values(45624,'猪八戒',null);
Query OK, 1 row affected (0.01 sec)

在这里插入图片描述

1.2 多行数据 + 指定列插入

– 插入两条记录,value_list 数量必须和指定列数量及顺序一致。
在这里插入图片描述
在这里插入图片描述

1.3 插入否则更新

由于 主键 或者 唯一键 对应的值已经存在而导致插入失败。

-- 主键冲突
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师');
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'
-- 唯一键冲突
INSERT INTO students (sn, name) VALUES (20001, '曹阿瞒');
ERROR 1062 (23000): Duplicate entry '20001' for key 'sn'

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

INSERT ... ON DUPLICATE KEY UPDATE
column = value [, column = value] ...

在这里插入图片描述

-- 0 row affected:
表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected:
表中没有冲突数据,数据被插入
-- 2 row affected:
表中有冲突数据,并且数据已经被更新

– 通过 MySQL 函数获取受到影响的数据行数
在这里插入图片描述
ON DUPLICATE KEY 当发生重复key的时候

1.4 替换

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

REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');
Query OK, 2 rows affected (0.00 sec)
-- 1 row affected:
表中没有冲突数据,数据被插入
-- 2 row affected:
表中有冲突数据,删除后重新插入

2 Retrieve

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

案例:

mysql> create table exam_result ( id int unsigned primary 
key auto_increment, name varchar(20) not null comment '同学姓名',  
chinese float default 0.0 comment '语文成绩',  math float 
default 0.0 comment '数学成绩',  english float default 0.0 
comment '英语成绩'  );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into exam_result (name,chinese,math,english) 
values('唐三藏',95,56,59),('孙悟空',82,75,64),('马可尼',45,100,100),
('孙尚香',79,45,35),('曹阿蛮',97,25,56),('宋江',86,58,15),
('李广',25,45,7),('张无忌',76,19,27);
Query OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0

2.1 SELECT 列

2.1.1 全列查询

– 通常情况下不建议使用 * 进行全列查询
– 1. 查询的列越多,意味着需要传输的数据量越大;
– 2. 可能会影响到索引的使用。(索引后面博客讲解)
在这里插入图片描述

2.1.2 指定列查询

– 指定列的顺序不需要按定义表的顺序来。
在这里插入图片描述

2.1.3 查询字段为表达式

  • 表达式不包含字段
    在这里插入图片描述
  • 表达式包含一个字段
    在这里插入图片描述
  • 表达式包含多个字段
    在这里插入图片描述

2.1.4 为查询结果指定别名

语法:

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

在这里插入图片描述

2.1.5 结果去重

添加几个和其他同学数学成绩有重复的同学。
在这里插入图片描述
去重前:
在这里插入图片描述
去重后:
在这里插入图片描述

2.2 WHERE 条件

比较运算符:

运算符说明
(>, >=, <, <=)大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于
BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

案例:

2.2.1 英语不及格的同学及英语成绩 ( < 60 )

  • 基本比较
    在这里插入图片描述

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

  • 使用 AND 进行条件连接
    在这里插入图片描述
  • 使用 BETWEEN … AND … 条件
    在这里插入图片描述

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

  • 使用 OR 进行条件连接
    在这里插入图片描述
  • 使用 IN 条件
    在这里插入图片描述

2.2.4 姓孙的同学 及 孙某同学

  • % 匹配任意多个(包括 0 个)任意字符
    在这里插入图片描述
  • _ 匹配严格的一个任意字符
    在这里插入图片描述

2.2.5 语文成绩好于英语成绩的同学

在这里插入图片描述

2.2.6 总分在 200 分以上的同学

– WHERE 条件中使用表达式
别名不能用在 WHERE 条件中
在这里插入图片描述

2.2.7 语文成绩 > 80 并且不姓孙的同学

– AND 与 NOT 的使用
在这里插入图片描述

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

mysql> select name,chinese,math,english,chinese+english+math 总分
 from exam_result where name like '孙_' or (english+chinese+math>200 
 and chinese < math or english >80);

在这里插入图片描述

2.2.9 NULL 的查询

  • 查询 students 表
    NULL 和 NULL 的比较,= 和 <=> 的区别
SELECT NULL = NULL, NULL = 1, NULL = 0;

在这里插入图片描述
在这里插入图片描述

2.3 结果排序

语法:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

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

案例:

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

在这里插入图片描述
在这里插入图片描述

2.3.2 同学及 qq 号,按 qq 号排序显示

– NULL 视为比任何值都小,升序出现在最上面。
在这里插入图片描述

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

  • 多字段排序,排序优先级随书写顺序
SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;

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

在这里插入图片描述
注意:ORDER BY 子句中可以使用列别名

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

– 结合 WHERE 子句 和 ORDER BY 子句。
在这里插入图片描述

2.4 筛选分页结果

语法:

-- 起始下标为 0
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死,按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页。
– 第 1 页
在这里插入图片描述
– 第 2 页
在这里插入图片描述
– 第四页
在这里插入图片描述

3 Update

语法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

对查询到的结果进行列值更新:
案例:

3.1 将孙悟空同学的数学成绩变更为 80 分

在这里插入图片描述在这里插入图片描述

3.2 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

– 一次更新多个列
– 查看原数据
在这里插入图片描述
– 数据更新
在这里插入图片描述
– 查看更新后数据
在这里插入图片描述

3.3 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

– 更新值为原值基础上变更
– 查看原数据
– 别名可以在ORDER BY中使用

在这里插入图片描述
– 数据更新,不支持 math += 30 这种语法
在这里插入图片描述

在这里插入图片描述
– 按总成绩排序后查询结果
在这里插入图片描述

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

注意:更新全表的语句慎用
– 没有 WHERE 子句,则更新全表
– 查看原数据
在这里插入图片描述
– 数据更新
在这里插入图片描述

4 Delete

4.1 删除数据

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:

4.1.1 删除孙悟空同学的考试成绩

– 查看原数据
在这里插入图片描述
– 删除数据
在这里插入图片描述

4.1.2 删除整张表数据

注意:删除整表操作要慎用
– 准备测试表
在这里插入图片描述
在这里插入图片描述
– 删除整表数据
在这里插入图片描述
– 再插入一条数据,自增 id 在原值上增长
在这里插入图片描述
– 查看表结构,会有 AUTO_INCREMENT=n 项
在这里插入图片描述

4.2 截断表

语法:

TRUNCATE [TABLE] table_name

注意:这个操作慎用

  1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
  2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事
    物,所以无法回滚
  3. 会重置 AUTO_INCREMENT 项

– 准备测试表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 插入查询结果

语法:

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

案例:删除表中的的重复复记录,重复的数据只能有一份。
在这里插入图片描述
思路:
在这里插入图片描述

6 聚合函数

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义

案例:

6.1 统计班级共有多少同学

– 使用 * 做统计,不受 NULL 影响。
在这里插入图片描述
– 使用表达式做统计。
在这里插入图片描述

6.2 统计班级收集的 qq 号有多少

在这里插入图片描述

6.3 统计本次考试的数学成绩分数个数

在这里插入图片描述
在这里插入图片描述

6.4 统计数学成绩总分

在这里插入图片描述
在这里插入图片描述

6.4 统计平均总分

在这里插入图片描述

6.5 返回英语最高分

在这里插入图片描述

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

在这里插入图片描述

7 group by子句的使用

在select中使用group by 子句可以对指定列进行分组查询

select column1, column2, .. from table group by column;

案例:
准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)

  • EMP员工表
  • DEPT部门表
  • SALGRADE工资等级表
  • 如何显示每个部门的平均工资和最高工资。
    在这里插入图片描述
  • 显示每个部门的每种岗位的平均工资和最低工资
    在这里插入图片描述
  • 显示平均工资低于2000的部门和它的平均工资

统计各个部门的平均工资
在这里插入图片描述

having和group by配合使用,对group by结果进行过滤
在这里插入图片描述

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

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

相关文章

vue 基础学习 一

1. vue 使用快速入门三步走 (1) 新建 HTML 页面&#xff0c;引入 Vue.js文件 1 2 3 4 5 6 7 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Vue.js 入门示例</title> <script src"https://cdn.j…

设计模式:抽象工厂模式(讲故事易懂)

抽象工厂模式 定义&#xff1a;将有关联关系的系列产品放到一个工厂里&#xff0c;通过该工厂生产一系列产品。 设计模式有三大分类&#xff1a;创建型模式、结构型模式、行为型模式 抽象工厂模式属于创建型模式 上篇 工厂方法模式 提到工厂方法模式中每个工厂只生产一种特定…

12.29_黑马数据结构与算法笔记Java

目录 305 旅行商问题 动态规划 实现2 306 旅行商问题 动态规划 实现3 307 分治 概述 308 快速选择算法 分治 309 快速选择算法 数组第k大数 Leetcode215 310 快速选择算法 数组中位数 311 快速幂 分治 312 快速幂 Leetcode50 313 平方根整数部分 Leetcode69-1 314 平方…

从实际工作情况,介绍嵌入式(MCU)软件开发常用(通用)工具

目录 前言 1、代码阅读及编辑工具&#xff08;VSCode、Understand&#xff09; 2、代码对比工具&#xff08;Beyond Compare&#xff09; 3、代码仓库相关工具&#xff08;Git、SVN、Tortoise&#xff09; 4、文本编辑器&#xff08;Notepad&#xff09; 5、电脑文件搜索工…

arkts状态管理使用(@State、@Prop、@Link、@Provide、@Consume、@objectLink和@observed)

一、状态管理 1.在声明式UI中&#xff0c;是以状态驱动视图更新&#xff1a; ①状态&#xff08;State&#xff09;:指驱动视图更新的数据&#xff08;被装饰器标记的变量&#xff09; ②视图&#xff08;View&#xff09;:基于UI描述渲染得到用户界面 注意&#xff1a; ①…

Radar System Pro - Plug Play Solution

Radar System Pro是一款功能多样且可定制的资源,旨在通过功能齐全且易于使用的雷达系统增强您的Unity项目。无论您是在开发第一人称射击游戏、策略游戏还是太空探索模拟器,我们的雷达系统都将为您提供所需的工具,以创建引人入胜且身临其境的体验。 雷达系统是一个模块化资产…

mysql间隙锁demo分析

概述 通常用的mysql都是innodb引擎&#xff1b; 一般在update的时候用id都会认为是给行记录加锁&#xff1b; 在使用非唯一索引更新时&#xff0c;会遇到临键锁&#xff08;范围锁&#xff09;&#xff1b; 临键锁和表中的数据有关&#xff1b; mysq版本:8 隔离级别&#xf…

雨课堂作业整理

第一次作业 1.下列序列是图序列的是&#xff08; &#xff09; A.1&#xff0c;2&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;4&#xff0c;5 B.1&#xff0c;1&#xff0c;2&#xff0c;2&#xff0c;4&#xff0c;6&#xff0c;6 C.0&#xff0c;0&#xff0c;2&am…

解决基于VectorGrid的矢量瓦片Y轴偏移的问题

目录 前言 一、GeoServer的瓦片 1、GeoWebcache缓存配置 2、矢量瓦片本地缓存 3、瓦片访问 二、VectorGrid加载本地瓦片 1、加载关键代码 2、默认模式的问题 3、问题分析 4、tms参数修改 总结 前言 在前面的博文介绍中&#xff0c;在线连接如下&#xff1a;浅谈前端自定义…

AI与数字化映像:颜值开端,功能至上_光点科技

在人工智能的浪潮中&#xff0c;AI数字人的兴起正成为一个不可忽视的现象。随着ChatGPT等生成式AI算法的进步&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;的应用呈现出爆发性增长&#xff0c;不仅在技术圈引起广泛关注&#xff0c;也为元宇宙及其相关产业链带来了…

C++每日一练(8):图像相似度

题目描述 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。…

非科班,培训出身,怎么进大厂?

今天分享一下我是怎么进大厂的经历&#xff0c;希望能给大家带来一点点启发&#xff01; 阿七毕业于上海一所大学的管理学院&#xff0c;在读期间没写过一行 Java 代码。毕业之后二战考研失利。 回过头来看&#xff0c;也很庆幸这次考研失利&#xff0c;因为这个时候对社会一…

精品Nodejs实现的在线菜谱食谱美食学习系统的设计与实现

《[含文档PPT源码等]精品Nodejs实现的在线菜谱学习系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows…

2023第三届中国高校大数据挑战赛B题代码

任务已完成&#xff0c;聚类效果很好&#xff08;主要在于数据的处理以及特征工程&#xff09;, 需代码si&#xff0c;yuer有限先到先得。

模型 KANO卡诺模型

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。需求分析。 1 卡诺模型的应用 1.1 餐厅需求分析故事 假设你经营一家餐厅&#xff0c;你想了解客户对你的服务质量的满意度。你可以使用卡诺模型来收集客户的反馈&#xff0c;并分析客户的…

Android Matrix画布Canvas旋转Rotate,Kotlin

Android Matrix画布Canvas旋转Rotate&#xff0c;Kotlin private fun f1() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.…

基于价值认同的需求侧电能共享分布式交易策略(matlab完全复现)

目录 1 主要内容 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序完全复现《基于价值认同的需求侧电能共享分布式交易策略》&#xff0c;针对电能共享市场的交易机制进行研究&#xff0c;提出了基于价值认同的需求侧电能共享分布式交易策略&#xff0c;旨在降低电力市…

学习笔记15——前端和http协议

学习笔记系列开头惯例发布一些寻亲消息&#xff0c;感谢关注&#xff01; 链接&#xff1a;https://baobeihuijia.com/bbhj/ 关系 客户端&#xff1a;对连接访问到的前端代码进行解析和渲染&#xff0c;就是浏览器的内核服务器端&#xff1a;按照规则编写前端界面代码 解析标准…

数组(定义,静态初始化,地址值,元素访问,索引,遍历,动态初始化,两种初始化的区别,练习)

文章目录 1.数组概念&#xff1a; 2.数组的定义格式一&#xff1a;格式二&#xff1a;详解&#xff1a;注意点&#xff1a; 3.数组的静态初始化完整格式&#xff1a;格式详解&#xff1a;注意点&#xff1a;简化格式:练习1&#xff1a;练习2&#xff1a;练习3&#xff1a; 4.地…

【网络面试(2)】DNS原理-域名和IP地址的查询转换

从上一篇博客我们得知浏览器是如何生成了HTTP消息了&#xff0c;但是浏览器作为应用程序&#xff0c;是不具备向网络中发送请求的能力&#xff0c;而是需要委托给操作系统的内核协议栈来发送请求。在委托协议栈之前&#xff0c;浏览器还要做的一件事情就是将域名转换为IP地址。…