从入门到精通【MySQL】 CRUD

news2025/3/25 12:07:07

文章目录

    • 📕1. Create 新增
        • ✏️1.1 单行数据全列插入
        • ✏️1.2 单行数据指定列插入
        • ✏️1.3 多行数据指定列插入
    • 📕2. Retrieve 检索
        • ✏️2.1 全列查询
        • ✏️2.2 指定列查询
        • ✏️2.3 查询字段为表达式
        • ✏️2.4 为查询结果指定别名
        • ✏️2.5 结果去重查询
    • 📕3. WHERE条件查询
        • ✏️3.1 基本查询
        • ✏️3.2 AND和OR
        • ✏️3.3 AND和OR的优先级
        • ✏️3.4 范围查询
        • ✏️3.5 模糊查询
        • ✏️3.6 NULL的查询
        • ✏️3.7 ORDER BY 排序
        • ✏️3.8 分页查询
    • 📕4. Update 修改
    • 📕5. Delete 删除
        • ✏️5.1 普通Delete删除
        • ✏️5.2 截断表
        • ✏️5.3 插入查询结果
    • 📕6. 聚合函数
    • 📕7. Group by 分组查询
        • ✏️7.1 HAVING子句
    • 📕8. 内置函数
        • ✏️8.1 日期函数
        • ✏️8.2 字符串处理函数
        • ✏️8.3 数学函数
        • ✏️8.4 其他常用函数

📕1. Create 新增

INSERT INTO name(filed1,filed2……) VALUE(value1,value2……);
  • INSERT INTO 是插入关键字
  • INTO 一般都要写,也可以省略
  • name为表名字
  • filed是要插入的列
  • value是要插入的值
✏️1.1 单行数据全列插入

值的数量必须和定义表的列的数量及顺序一致

-- 创建一个用于演示的表
CREATE TABLE IF NOT EXISTS users(
    id BIGINT,
    `name` VARCHAR(20) COMMENT'用户名称' 
);

-- 全列插入
INSERT INTO users VALUE(1,'张三');
INSERT INTO users VALUE(2,'李四');
✏️1.2 单行数据指定列插入
-- 指定了要插入的列
INSERT INTO users(id,`name`) VALUE(3,'艾米');
✏️1.3 多行数据指定列插入
INSERT INTO users(id,`name`) VALUE(5,'孙悟空'),(6,'猪八戒'),(7,  '唐僧');

📕2. Retrieve 检索

SELECT 列名1,列名2 FROM 表名;
  • SELECT 为查询关键字
  • 列名处是 * 的时候是查询所有列(一般不建议,数据过多时会很慢)
✏️2.1 全列查询
SELECT * FROM 表名;
✏️2.2 指定列查询
SELECT 指定列名称 FROM 表名;
✏️2.3 查询字段为表达式
  1. 常量表达式
SELECT 10 FROM 表名;
  1. 把所有学生的语文成绩加10分
SELECT Chinese+10 FROM 表名;
  1. 计算所有学生语文、数学和英语成绩的总分
SELECT chinese+nath+english FROM  表名;
✏️2.4 为查询结果指定别名
SELECT 列名1+列名2AS】 别名 FROM 表名;

AS可以省略,别名如果包含空格必须用单引号包裹

✏️2.5 结果去重查询
SELECT DISTINCT 列名1,列名2 FROM 表名;

使用DISCTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复

📕3. WHERE条件查询

SELECT 列名1,列名2 FROM 表名 WHERE 条件……;

比较运算符
在这里插入图片描述
逻辑运算符
在这里插入图片描述

✏️3.1 基本查询
  1. 查询英语不及格的同学及英语成绩 ( < 60 )
SELECT id,name,english FROM exam WHERE english < 60;
  1. 查询语文成绩高于英语成绩的同学
SELECT id,name,chinese,math FROM exam WHERE chinese > math;
  1. 总分在 200 分以下的同学
SELECT id,name,chinese+math+english FROM exam WHERE chinese+math+english < 200;
✏️3.2 AND和OR
  1. 查询语文成绩大于80分且英语成绩大于80分的同学
SELECT id,name FROM exam WHERE chinese > 80 AND english > 80;
  1. 查询语文成绩大于80分或英语成绩大于80分的同学
SELECT * FROM exam WHERE  chinese > 80 OR english > 80;
✏️3.3 AND和OR的优先级
select * from exam where chinese > 80 or math > 70 and english > 70;
select * from exam where (chinese > 80 or math > 70) and english > 70;

注意:AND的优先级高于OR,括号的优先级高于AND和OR。

✏️3.4 范围查询
  1. 语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name,chinese FROM exam WHERE chinese >= 80 AND chinese <= 90;
SELECT name,chinese FROM exam WHERE BETWEEN chinese 80 AND 90;
  1. 数学成绩是 78 或者 79 或者 98 或者 99 分的同学及数学成绩
SELECT name,math FROM exam WHERE math = 78 OR math = 79 OR math = 98 OR math = 99;
SELECT name,math FROM exam WHERE IN (78,79,98,99);
✏️3.5 模糊查询
  1. 查询所有姓孙的同学
SELECT * FROM exam WHERE name LIKE '孙%';
  1. 查询姓孙且姓名共有两个字同学
SELECT * FROM exam WHERE name LIKE '孙_';
✏️3.6 NULL的查询
  1. 查询英语成绩为NULL的记录
SELECT * FROM exam WHERE english IS NULL;
  1. 查询英语成绩不为NULL的记录
SELECT * FROM exam WHERE english IS NOT NULL;

💡💡💡💡💡💡💡💡💡💡💡💡注意事项💡💡💡💡💡💡💡💡💡💡💡

  1. WHERE条件中可以使用表达式,但不能使用别名
  2. AND的优先级高于OR,在同时使用时,建议使用小括号()包裹优先执行的部分
  3. 过滤NULL时不要使⽤等于号(=)与不等于号(!= , <>)
  4. NULL与任何值运算结果都为NULL
✏️3.7 ORDER BY 排序
-- ASC 为升序(从⼩到⼤
-- DESC 为降序(从⼤到⼩)
-- 默认为ASC
SELECT 列名1,列名2 FROM 表名 WHERE 条件 ORDER BY 列名 DESC/ASC;
  1. 按数学成绩从低到高排序(升序)
SELECT * FROM exam ORDER BY math ASC;
  1. 查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
SELECT * FROM exam ORDER BY math DESC,english ASC,chinese ASC;
  1. 查询同学及总分,由高到低排序,可以使用列的别名进行排序
SELECT math+english+chinese AS 总分 FROM exam ORDER BY 总分 DESC;  
  1. 所有英语成绩不为NULL的同学,按语文成绩从高到低排序
SELECT * FROM exam WHERE english IS NOT NULL ORDER BY chinese DESC;

💡💡💡💡💡💡💡💡💡💡💡💡注意事项💡💡💡💡💡💡💡💡💡💡💡

  1. 查询中没有ORDER BY子句,返回的顺序是未定义的,永远不要依赖这个顺序
  2. ORDER BY 子句中可以使用列的别名进行排序
  3. NULL 进行排序时,视为比任何值都小,升序出现在最上面,降序出现在最下面
✏️3.8 分页查询
-- 起始下标为 0
-- 从 0 开始,筛选 num 条结果
SELECT 列名 FROM 表名 ((WHERE 条件)(ORDER BY 列名 ASC/DESC)LIMIT num;   
-- 从 start 开始,筛选 num 条结果
SELECT 列名 FROM 表名 (WHERE 条件)(ORDER BY 列名 ASC/DESC)LIMIT start,num;   
-- 从 start 开始,筛选 num 条结果,⽐第⼆种⽤法更明确,建议使⽤
SELECT 列名 FROM 表名 (WHERE 条件)(ORDER BY 列名 ASC/DESC)LIMIT num OFFSET start;   

Tips:

  1. 总页数 = 数据的总条数 / 每页要展示的数量,如果有余数则 + 1.
  2. start = (当前页号 - 1)* 每页要展示的数量

📕4. Update 修改

UPDATE 表名 SET 修改值 (WHERE 条件)(ORDER BY 列名 ASC/DESC)(LIMIT num);

对符合条件的结果进行列值更新

  1. 将孙悟空同学的数学成绩变更为 80 分
UPDATE exam SET math = 80 WHERE name = '孙悟空';
  1. 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam SET math = 60,chinese = 70 WHERE name = '曹孟德';
  1. 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE exam SET math = math + 30 WHERE chinese+math+english IS NOT NULL ORDER  BY chinese+math+english ASC LIMIT 0,3
  1. 将所有同学的语文成绩更新为原来的 2 倍
UPDATE exam SET Chinese= Chinese * 2;

💡💡💡💡💡💡💡💡💡💡💡💡注意事项💡💡💡💡💡💡💡💡💡💡💡

  1. 以原值的基础上做变更时,不能使用math += 30这样的语法
  2. 不加where条件时,会导致全表数据被列新,谨慎操作

📕5. Delete 删除

✏️5.1 普通Delete删除
DELETE FROM 表名 [WHERE 条件] [ORDER BY ...] [LIMIT count];
  • 删除孙悟空同学的考试成绩
DELETE FROM exam WHERE name = '孙悟空';

💡💡💡💡💡💡💡💡💡💡💡💡注意事项💡💡💡💡💡💡💡💡💡💡💡

执行Delete时不加条件会删除整张表的数据,谨慎操作

✏️5.2 截断表
TRUNCATE TABLE 表名;

🌰例如:

-- 准备测试表
CREATE TABLE t_truncate (
	 id INT PRIMARY KEY AUTO_INCREMENT,
	 name VARCHAR(20)
);

-- 插入新数据
INSERT INTO t_truncate (name) VALUES ('A'), ('B'), ('C');

-- 此时查看建表结构,注意AUTO_INCREMENT=4

-- 截断表
TRUNCATE TABLE t_truncate;

--继续查看表结构,注意AUTO_INCREMENT已被重置为0

💡TRUNCATE 的注意事项:

  1. 只能对整表操作,不能像 DELETE ⼀样针对部分数据
  2. 不对数据操作所以比DELETE更快,TRUNCATE在删除数据的时候,不经过真正的事物
  3. 会重置 AUTO_INCREMENT 项,而DELETE不会
✏️5.3 插入查询结果
INSERT INTO 表名 SELECT ...

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

实现思路:原始表中的数据一般不会主动删除,但是真正查询时不需要重复的数据,如果每次查询
都使用DISTINCT进行去重操作,会严重效率。可以创建一张与 t_recored 表结构相同的表,把去重的记录写入到新表中,以后查询都从新表中查,这样真实的数据不丢失,同时又能保证查询效率

-- 创建测试表,并构造数据
CREATE TABLE t_recored (id int, name varchar(20));

INSERT INTO t_recored VALUES
(100, 'aaa'),
(100, 'aaa'),
(200, 'bbb'),
(200, 'bbb'),
(200, 'bbb'),
(300, 'ccc');

--创建⼀张新表,表结构与t_recored相同
create table t_recored_new like t_recored;

-- 原表中的记录去重后写⼊到新表
insert into t_recored_new select distinct * from t_recored;

📕6. 聚合函数

常用聚合函数
在这里插入图片描述

📕7. Group by 分组查询

GROUP BY 子句的作用是通过一定的规则将一个数据集划分成若干个小的分组,然后针对若干个
分组进行数据处理,比如使用聚合函数对分组进行统计。

SELECT 列名 FROM 表名 GROUP BY 列名 HAVING 条件; 
  1. 统计每个角色的人数
SELECT role,count(*) FROM emp GROUP BY role;
✏️7.1 HAVING子句

使用GROUP BY 对结果进行分组处理之后,对分组的结果进行过滤时,不能使用 WHERE 子句,而要使用 HAVING 子句

  1. 显⽰平均工资低于1500的角色和它的平均工资
SELECT role,AVG(salary) FROM emp GROUP BY role HAVING AVG(salary) < 1500;

Having 与Where 的区别

•Having 用于对分组结果的条件过滤

• Where 用于对表中真实数据的条件过滤

📕8. 内置函数

✏️8.1 日期函数

u

✏️8.2 字符串处理函数

在这里插入图片描述

✏️8.3 数学函数

在这里插入图片描述

✏️8.4 其他常用函数

在这里插入图片描述

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

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

相关文章

08_双向循环神经网络

双向网络 概念 双向循环神经网络&#xff08;Bidirectional Recurrent Neural Network, BiRNN&#xff09;通过同时捕捉序列的正向和反向依赖关系&#xff0c;增强模型对上下文的理解能力。与传统的单向网络不同,BIRNN 能够同时从过去和未来的上下文信息中学习,从而提升模型的…

2025年Postman的五大替代工具

虽然Postman是一个广泛使用的API测试工具&#xff0c;但许多用户在使用过程中会遇到各种限制和不便。因此&#xff0c;可能需要探索替代解决方案。本文介绍了10款强大的替代工具&#xff0c;它们能够有效替代Postman&#xff0c;成为你API测试工具箱的一部分。 什么是Postman&…

(四)---四元数的基础知识-(定义)-(乘法)-(逆)-(退化到二维复平面)-(四元数乘法的导数)

使用四元数的原因 最重要的原因是因为传感器的角速度计得到的是三个轴的角速度, 这三个轴的角速度合成一个角速度矢量, 结果就是在微小时间内绕着这个角速度矢量方向为轴旋转一定角度. 截图来源网址四元数 | Crazepony开源四轴飞行器

汇能感知高品质的多光谱相机VSC02UA

VSC02UA概要 VSC02UA是一款高品质的200万像素的光谱相机&#xff0c;适用于工业检测、农业、医疗等领域。VSC02UA 包含 1600 行1200 列有源像素阵列、片上 10 位 ADC 和图像信号处理器。它带有 USB2.0 接口&#xff0c;配合专门的电脑上位机软件使用&#xff0c;可进行图像采集…

Blazor+PWA技术打造全平台音乐播放器-从音频缓存到离线播放的实践之路

开局三张图… 0.起源 主要是自己现在用的是苹果手机&#xff0c;虽然手机很高级&#xff0c;但是想听自己喜欢的歌曲确是不容易&#xff0c;在线app都要付费&#xff0c;免费的本地播放器都不太好用&#xff08;收费的也不太行&#xff09;&#xff0c;基础功能都不满足。此外…

使用LangChain开发智能问答系统

代码地址见文末 1. 项目配置 1.1 Neo4j 数据库配置 1. 安装与环境变量 解压路径:将neo4j-community-5.x.x.zip解压至D:\neo4j-community-5.x.x环境变量: NEO4J_HOME: D:\neo4j-community-5.x.xJAVA_HOME: D:\neo4j-community-5.x.x\jdk(注意:需指向 JDK 目录)Path 变量…

Centos操作系统安装及优化

Centos操作系统安装及优化 零、环境概述 主机名 centos版本 cpu 内存 Vmware版本 ip地址 test CentOS Linux release 7.6.1810 (Core) 2C 2G 15.5.1 10.0.0.10 一、介质下载 1、7.6版本下载 CentOS7.6标准版下载链接: https://archive.kernel.org/centos-vault/7.6.1810/i…

游戏引擎学习第177天

仓库:https://gitee.com/mrxiao_com/2d_game_4 今日计划 调试代码有时可能会非常困难&#xff0c;尤其是在面对那些难以发现的 bug 时。显然&#xff0c;调试工具是其中一个非常重要的工具&#xff0c;但在游戏开发中&#xff0c;另一个非常常见的工具就是自定义的调试工具&a…

数据结构知识点1

目录 一、时间复杂度和空间复杂度 1.1时间复杂度&#xff1a; 1.2空间复杂度&#xff1a; 二、装箱和拆箱 三、泛型 3.1泛型类的使用&#xff1a; 3.2泛型的上界&#xff1a; 3.3泛型方法&#xff1a; 一、时间复杂度和空间复杂度 1.1时间复杂度&#xff1a; 时间复杂…

自由学习记录(45)

顶点片元着色器&#xff08;important&#xff09; 1.需要在Pass渲染通道中编写着色器逻辑 2.可以使用cG或HLSL两种shader语言去编写Shader逻辑 3.代码量较多&#xff0c;灵活性较强&#xff0c;性能消耗更可控&#xff0c;可以实现更多渲染细节 4.适用于光照处理较少&#xf…

数据源支持远程Excel/CSV,数据集支持分组字段功能,DataEase开源BI工具v2.10.6 LTS版本发布

2025年3月17日&#xff0c;人人可用的开源BI工具DataEase正式发布v2.10.6 LTS版本。 这一版本的功能变动包括&#xff1a;数据源方面&#xff0c;新增支持远程Excel/CSV数据源&#xff0c;支持以HTTP、HTTPS、FTP协议获取远程服务器上的Excel和CSV数据文件&#xff0c;并且可以…

SpringBoot3使用CompletableFuture时java.util.ConcurrentModificationException异常解决方案

问题描述 在Spring Boot 3项目中&#xff0c;使用CompletableFuture进行异步编程时&#xff0c;偶发{"code":500,"msg":"java.util.ConcurrentModificationException"}异常&#xff0c;但代码中并未直接操作List或CopyOnWriteArrayList等集合类…

STM32__红外避障模块的使用

目录 一、红外避障模块 概述 二、直接读取OUT引脚电平 三、使用中断方式触发 一、红外避障模块 概述 引脚解释&#xff1a; VCC接3.3V 或 5.0VGND接开发板的GNDOUT数字量输出(0或1&#xff09;; 低电平时表示前方有障碍 ; 通过可调电阻调整检测距离 产品特点&#xff1a; …

Redis JSON 用id读取content总结(sendCommand())

Redis JSON 读取总结&#xff08;方法 2 - sendCommand()&#xff09; &#x1f4a1; 背景 在 Redis 中&#xff0c;我们存储了 JSON 数据&#xff0c;并希望通过 Jedis sendCommand() 方式读取 JSON 里的 "content" 字段。由于 jedis.jsonGet() 可能在旧版本不支持…

基于3DMax与Vray引擎的轻量级室内场景渲染实践

欢迎踏入3DMAX室内渲染的沉浸式学习之旅!在这个精心设计的实战教程中,我们将携手揭开3DMAX与Vray这对黄金搭档在打造现实室内场景时的核心奥秘。无论您是渴望入门的3D新手,还是追求极致效果的专业设计师,这里都将为您呈现从场景蓝图构建到光影魔法施加的完整技术图谱。我们…

QT Quick(C++)跨平台应用程序项目实战教程 2 — 环境搭建和项目创建

目录 引言 1. 安装Qt开发环境 1.1 下载Qt安装包 1.2 安装Qt 1.3 安装MSVC编译器 2. 创建Qt Quick项目 2.1 创建新项目 2.2 项目结构 2.3 运行项目 3. 理解项目代码 3.1 main.cpp文件 3.2 Main.qml文件 引言 在上一篇文章中&#xff0c;我们介绍了本教程的目标和结…

登山第二十梯:无人机实时自主探索——我是一只小小小鸟

文章目录 一 摘要 二 资源 三 内容 一 摘要 自主探索是无人机 &#xff08;UAV&#xff09; 各种应用的基本问题。最近&#xff0c;基于 LiDAR 的探索因其能够生成大规模环境的高精度点云地图而受到广泛关注。虽然点云本身就为导航提供了信息&#xff0c;但许多现有的勘探方…

word插入Mathtype公式居中和自动更新

word插入公式自动更新 前提&#xff1a;安装Mathtype 1.word中查看页的宽度 出现如下 2.设置样式 出现这个窗口 给样式随便起个名字 3.修改样式 3.1 设置两个制表位 第二个 3.2 修改公式字体 如下所示 4. 修改公式格式 4.1在word中打开 Mathtype 4.2 修改公式的格式 变成…

网络层之IP协议

在讨论传输层时, 我们都只讨论了发送方和接收方的问题, 而没有讨论中间的网络形态的问题. 也就是数据包如何从主机传送到主机的? 如图, 主机B发送数据到主机C, 发送报文需要进行路径选择, 主机B-> F-> G-> H-> C-> D -> 主机C 这条路径是如何被选择出来的?…

基于springboot的旅游网站(013)

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然也不能排除在外&#xff0c;随着旅游网站的不断成熟&#xff0c;它彻底改变了过去传统的旅游网站方式&#xff0c;不仅使旅游管理…