【MySQL表的增删查改】

文章目录

  • 前言
  • 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结果进行过滤
在这里插入图片描述

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

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

相关文章

CocoaPods安装及‘__rvm_make -j8‘处理

CocoaPods是一个用Ruby写的、负责管理iOS项目中第三方开源库的工具&#xff0c;CocoaPods能让我们集中的、统一管理第三方开源库&#xff0c;为我们节省设置和更新第三方开源库的时间。 安装步骤 1.查看ruby版本 ruby -v 2.通过rvm来安装或升级Ruby&#xff0c;依次执行 cu…

Apache OFBiz RCE漏洞复现(CVE-2023-51467)

0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。 0x02 漏洞概述 漏洞成因 该系统的身份验证机制存在缺陷,可能允许未授权用户通过绕过标准登录流程来获取后台访问权限。此外,在…

【PTA-C语言】实验七-函数与指针I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离&#xff08;分数 10&#xff09;6-2 使用函数输出一个整数的逆序数&#xff08;分数 10&#xff09;6-3 使用函数求最大公约数&#xff08;分数 10&#xff09;6-4…

使用Pycharm给html文件添加浏览器

1、选择菜单栏的File---->选择setting设置 2、选择Tools(工具)---> Web Browser(web 浏览器) 勾选 自己想要添加的浏览器前面 的勾选框即可 注意点击ok进行保存

《数据结构、算法与应用C++语言描述》- 平衡搜索树 -全网唯一完整详细实现插入和删除操作的模板类

平衡搜索树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_34Balanced search tree 概述 本章会讲AVL、红-黑树、分裂树、B-树。 平衡搜索树的应用&#xff1f; AVL 和红-黑树和分裂树适合内部存储的应用。 B-树适合外部存储的…

github使用技巧(经验篇)

相关经验 指定代码范围并高亮显示 例如&#xff0c;指定nn_ops.py文件2612-L2686行的代码&#xff1a;https://github.com/tensorflow/tensorflow/blob/v2.14.0/tensorflow/python/ops/nn_ops.py#L2612-L2686 FAQ Q&#xff1a;github网页打不开&#xff1f; 【github加载不…

Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题

Java项目调试实战&#xff1a;如何高效调试Spring Boot项目中的GET请求&#xff0c;并通过equalsIgnoreCase解决大小写不一致问题 写在最前面全部过程Java equalsIgnoreCase() 方法idea中如何调试SpringBoot项目在IntelliJ IDEA中使用内置HTTP客户端设置断点和调试 补充&#x…

PiflowX组件-WriteToUpsertKafka

WriteToUpsertKafka组件 组件说明 以upsert方式往Kafka topic中写数据。 计算引擎 flink 有界性 Streaming Upsert Mode 组件分组 kafka 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子kafka_h…

Unity坦克大战开发全流程——结束场景——通关界面

结束场景——通关界面 就照着这样来拼 写代码 hideme不要忘了 修改上一节课中的代码

旅游网站Xtrip 前端模板html推荐

一、需求分析 旅游网站的功能可以根据具体的业务需求和目标进行不同的设计和实现&#xff0c;但是以下是一些常见的旅游网站功能&#xff0c;供参考&#xff1a; 酒店预订功能&#xff1a;用户可以搜索并预订酒店&#xff0c;查看酒店的详细信息、价格、评价和照片&#xff0c…

MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之General Tablespaces&#xff08;通用表空间/一般表空间&#xff09;General tablespaces&#xff08;通用表空间/一般表空间&#xff09;通用表空间的功能通用表空间的限制 创建通用表空间&#xff08;一般表空间&#xff09;创建语法…

Linux磁盘与文件管理

目录 一、磁盘介绍 1. 磁盘数据结构 2. 磁盘的接口类型 3. 磁盘在Linux上的表现形式 二、磁盘分区与MBR 1. 分区优缺点 2. 分区方式 3. MBR分区 4. GPT分区 三、文件系统 1. 文件系统的组成 2. 默认的文件系统 3. 文件系统的作用 4. 模拟破坏文件与修复文件 4…

项目总结报告

《项目总结报告》 1.项目概要&#xff08;项目基本信息&#xff0c;项目期间&#xff0c;项目成果&#xff0c;项目开发工具环境&#xff09; 2.项目工作分析&#xff08;需求变更&#xff0c;计划与进度实施&#xff0c;投入情况&#xff0c;收益情况&#xff0c;质量情况&…

【Linux】Linux 下基本指令 -- 详解

无论是什么命令&#xff0c;用于什么用途&#xff0c;在 Linux 中&#xff0c;命令有其通用的格式&#xff1a; command [-options] [parameter] command&#xff1a;命令本身。-options&#xff1a;[可选&#xff0c;非必填]命令的一些选项&#xff0c;可以通过选项控制命令的…

navicat premium历史版本下载及更新navicat premium15 永久(使用)有效期

1、navicat premium介绍 Navicat Premium 是一套可创建多个连接的数据库开发工具&#xff0c;让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 GaussDB 、OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amaz…

windows和linux操作Git(序章2)

Git 分布式版本控制系统(序章1) ## Linux 下安装 Git&#x1f53a; ​ ## Git命令大全&#x1f53a; windows和linux通用 安装完 Git 后&#xff0c;需要进行配置&#xff0c;如姓名、Email 等 git config --global user.name "你的名字"git config --global us…

解算人生--写于2023跨年之夜

最近买了一本书&#xff0c;书名叫《计算》 读了部分内容&#xff0c;虽然理解上还需要再下下功夫&#xff0c;但是直观的感觉冲击还是挺大的&#xff0c;最明显的就是表面与本质的把握。大家可能都有这样一种感觉&#xff0c;初步涉足某一领域时&#xff0c;开始我们都会被大量…

vmware部署docker+springboot+MySQL(超详细)

一、前期准备 (一)安装jdk #docker search openjdk #docker pull openjdk:8 (二)确认网络 如果局域网其他终端(如手机访问),虚拟机网络连接需要选择《桥接》模式,而且,需要使用有线连接,不能使用Wi-Fi,切忌切忌! 并且要选择实际的那个有线连接。比如我这里是“R…

Leetcode 剑指 Offer II 059. 数据流中的第 K 大元素

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 设计一个找到数据流中第 k 大元素的类&#xff08;class&#xf…

文心一言 VS 讯飞星火 VS chatgpt (169)-- 算法导论13.2 2题

二、用go语言&#xff0c;证明&#xff1a;在任何一棵有 n 个结点的二叉搜索树中&#xff0c;恰有 n-1种可能的旋转。 文心一言&#xff1a; 要证明在任何一棵有 n 个结点的二叉搜索树中&#xff0c;恰有 n-1 种可能的旋转&#xff0c;我们可以按照以下步骤逐步推导&#xff…