从入门到精通【MySQL】 CRUD

文章目录

    • 📕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.mzph.cn/news/898771.shtml

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

相关文章

C++学习之云盘上传文件列表下载

1.上传打开文件操作 1. 注册 客户端 成功 {"code":"002"} 该用户已存在 {"code":"003"} 失败 {"code":"004"} 服务器 2. 登录 客户端 服务器 // url http: //127.0.0.1:80/reg // post 数据格式 …

OpenCV图像拼接(5)用于计算一组图像的特征点和描述符的函数computeImageFeatures()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::detail::computeImageFeatures 是 OpenCV 中用于计算一组图像的特征点和描述符的函数&#xff0c;通常在图像拼接或类似的任务中使用。这个函…

详细解析格式化消息框的代码

书籍&#xff1a;《windows程序设计(第五版)》的开始 环境&#xff1a;visual studio 2022 内容&#xff1a;格式化消息框 说明&#xff1a;以下内容大部分来自腾讯元宝。 封装MessageBoxPrintf 在MessageBoxPrintf()中处理可变参数&#xff0c;通过va_list机制&#xff0c…

【SpringSecurity】详细核心类与过滤器流程讲解和封装通用组件实战

Spring Security 全面介绍 1. 什么是 Spring Security&#xff1f; Spring Security 是一个功能强大且高度可定制的认证和访问控制框架&#xff0c;是保护基于 Spring 的应用程序的标准工具。它是一个专注于为 Java 应用程序提供认证和授权的框架&#xff0c;实际上它是 Spri…

浅谈Qt事件子系统——以可拖动的通用Widget为例子

浅谈Qt事件子系统——以可拖动的通用Widget为例子 这一篇文章是一个通过实现可拖动的通用Widget为引子简单介绍一下我们的事件对象子系统的事情 代码和所有的文档 1&#xff1a;Qt侧的API介绍和说明 ​ 这个是每一个小项目的惯例&#xff0c;我会介绍大部分Qt程序中使用到的…

[入门]NUC13配置Ubuntu20.04详细步骤

文章目录 1. 安装Ubuntu20.041.1 制作系统启动盘1.1.1 下载镜像文件1.1.2 配置启动盘 1.2 安装内存条、硬盘1.3 安装系统 2. 网卡驱动配置2.1 关闭安全启动2.2 安装intel官方网卡驱动backport2.2.1 第四步可能会出现问题 2.3 ubuntu官方的驱动2.4 重启 3. 软件安装3.1 录屏软件…

(七)Reactor响应式编程框架

一、简介 Reactor 是运行在 JVM 上的编程框架&#xff0c;最大特点是完全非阻塞&#xff0c;能高效控制 “背压”&#xff0c;简单来说就是处理数据传输时速度不匹配的问题 。它能和 Java 8 里的一些功能直接搭配使用&#xff0c;像处理异步结果的 CompletableFuture、处理数据…

从边缘到核心:群联云防护如何重新定义安全加速边界?

一、安全能力的全方位碾压 1. 协议层深度防护 四层防御&#xff1a; 动态过滤畸形TCP/UDP包&#xff08;如SYN Flood&#xff09;&#xff0c;传统CDN仅限速率控制。技术示例&#xff1a;基于AI的协议指纹分析&#xff0c;拦截异常连接模式。 七层防御&#xff1a; 精准识别业…

【Linux】Ubuntu 24.04 LTS 安装 OpenJDK 8

目录 通过 apt-get 直接安装 JDK 1. 更新 apt 软件源 2. 检查 JDK 是否已安装 3. 安装OpenJDK 4. 检查 JDK 是否成功安装 5. 设置 JAVA_HOME 环境变量 找到需要设置的 Java 路径 使用文本编辑器打开/etc/environment文件 添加 Java 安装路径 应用更改和验证配置 通过…

Java 方法执行原理底层解析

java 文件经过javac编译后&#xff0c;变成了存储了一系列指令的.class文件。本文从指令层面分析Java 方法从解析、调用到执行的过程。 1 指令 一般格式&#xff1a;操作码 [操作数1] [操作数2] ... 操作码 1个字节的无符号整数&#xff08;范围&#xff1a;0x00 ~ 0xFF&…

【数学建模】最大最小值模型详解

数学建模中的最大最小值模型详解 文章目录 数学建模中的最大最小值模型详解引言最大最小值模型的基本概念最大化问题最小化问题 常见的求解方法1. 微积分法2. 线性规划3. 非线性规划4. 动态规划 实际应用案例案例1&#xff1a;生产规划问题案例2&#xff1a;投资组合优化 最大最…

C#的List和DIctionary实现原理(手搓泛型类以及增删查改等功能)

这里写自定义目录标题 ListDIctionary List MyList类&#xff1a;这是一个泛型类&#xff0c;能够存储任意类型的元素。 _items数组&#xff1a;用于实际存储元素。 _size变量&#xff1a;记录当前列表中的元素数量。 构造函数&#xff1a;初始化数组容量为 4。 Count属性&…

Linux系统管理与编程08:任务驱动综合应用

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 [环境] windows11、centos9.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境&#xff1a;Lamp&#xff08;linux httpd mysql8.0 php&#xff09; [步骤] 3 …

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素

数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(frontrear)-出队-入队-队尾满了&#xff0c;调整队列-获取队头元素——完整可运行代码 #include <stdio.h>#define MAXSIZE 100 typedef int ElemType;typedef struct {ElemType data[MAXSIZE];int front;int…

基于LabVIEW的Windows平台高速闭环控制

在Windows系统下&#xff0c;通过LabVIEW实现高速闭环控制面临两大核心挑战&#xff1a;非实时操作系统的调度延迟与硬件接口的传输速度限制。以USB-6351&#xff08;NI USB-6351 DAQ卡&#xff09;为例&#xff0c;其理论采样率可达1.25 MS/s&#xff08;单通道&#xff09;&a…

Java面试黄金宝典8

1. 什么是 Spring MVC 定义 Spring MVC 是 Spring 框架里用于构建 Web 应用程序的模块&#xff0c;它严格遵循 MVC&#xff08;Model - View - Controller&#xff09;设计模式。这种设计模式把应用程序清晰地划分成三个主要部分&#xff1a; Model&#xff08;模型&#xff0…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整活…

分享最近前端面试遇到的一些问题

前情提要&#xff08;分享个人情况&#xff0c;可以直接跳过&#xff09; 先说一下我的个人情况&#xff0c;我是2026届的&#xff0c;目前是在找前端实习。 3月初&#xff0c;从3月3日开始在Boss上投简历。 分享我的个人故事&#xff0c;不想看可以直接滑到下面&#xff0c;…

rip 协议详细介绍

以下是关于 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09; 的详细介绍&#xff0c;涵盖其工作原理、版本演进、配置方法、优缺点及实际应用场景。 1. RIP 协议概述 类型&#xff1a;动态路由协议&#xff0c;基于距离矢量算法&#xff08…

scrapy入门(深入)

Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架&#xff0c;用于抓取web站点并从页面中提取结构化的数据&#xff0c;只需要实现少量的代码&#xff0c;就能够快速的抓取。 新建项目 (scrapy startproject xxx)&#xff1a;新建一个新的…