MySQL 表的增删查改(CRUD)

MySQL 表的增删查改(CRUD)

文章目录

  • MySQL 表的增删查改(CRUD)
    • 1. 新增(Create)
    • 2. 查询(Retrieve)
      • 2.1 全列查询
      • 2.2 指定列查询
      • 2.3 查询字段为表达式
      • 2.4 别名
      • 2.5 去重:DISTINCT
      • 2.6 排序:ORDER BY
      • 2.7 条件查询
      • 2.8 分页查询: LIMIT
    • 3. 修改(Update)
    • 4. 删除(Delete)

在这篇文章中我们将对MySQL表的CRUD进行讲解

CRUD 即增加(create)、查询(Retrieve)、更新(Update)、删除(Delete)

1. 新增(Create)

语法:

INSERT INTO table_name [指定列名] VALUES (value_list, value_list1...);

在这里我们先创建一张学生表:

 create table student_test (
     id int,
     sn int comment '学号',
     name varchar(20) comment '姓名',
     qq_mail varchar(20) comment 'QQ邮箱');

在这里插入图片描述

操作:

  • 单行数据 + 全列插入

     -- 插入两条记录, value_list 数量必须和定义表的列的数量及顺序一致
     insert into student_test values (100, 10000, '唐三藏', NULL);
     insert into student_test values (101, 10001, '孙悟空', '11111');
    

    在这里插入图片描述

  • 多行数据 + 指定列插入

    -- 插入两条记录, value_list数量必须和指定列数量及顺序一致
     insert into student_test (id, sn, name) values
         (102, 20001, '曹孟德'),
         (103, 20002, '孙仲谋');
    

    在这里插入图片描述

2. 查询(Retrieve)

注:查询的所有操作都不会对数据库硬盘上存储的数据进行修改,都是针对临时表展开的操作

语法:

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

这里我们先创建一张考试成绩表并填入数据:

mysql> create table exam_result (
     id int,
     name varchar(30),
     chinese decimal(4, 1),
     math decimal (4, 1),
     english decimal (4, 1));

mysql> insert into exam_result (id, name ,chinese, math, english) values
     (1, '唐三藏', 67, 98, 56),
     (2, '孙悟空', 87.5, 99, 77),
     (3, '猪悟能', 80, 78.5, 90),
     (4, '曹孟德', 97, 80, 75),
     (5, '刘玄德', 85, 87, 88),
     (6, '孙仲谋', 75, 80, 95),
     (7, '诸葛孔明', 99, 100, 98);

在这里插入图片描述

2.1 全列查询

-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响导索引的使用
SELECT * FROM exam_result;

在这里插入图片描述

2.2 指定列查询

-- 指定列的顺序不需要按定义表的顺序来
SELECT id, name , english FROM exam_result;

在这里插入图片描述

2.3 查询字段为表达式

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4 别名

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称

语法:

SELECT column [AS] alias_name [...] FROM table_name;
-- 结果集中,表头的列名 = 别名 (as建议加上)
SELECT id, name, chinese + math + english as total FROM exam_result;

在这里插入图片描述

2.5 去重:DISTINCT

使用DISTINCT关键字对某列数据进行去重:

SELECT DISTINCT math from exam_result;

在这里插入图片描述

2.6 排序:ORDER BY

语法:

-- ASC 为升序 (从小到大) -- 默认为ASC
-- DESC 为降序 (从大到小)
SELECT ... FROM table_name ORDER BY column [ASC|DESC], [...];
  1. 没有ORDER BY 子句的查询,返回的顺序是未定义的,不要依赖这个顺序

  2. NULL 数据排序视为比任何值都小,升序出现在最上面,降序出现在最下面

    -- 查询同学姓名 和qq_mail,按qq_mail 排序显示
    SELECT name, qq_mail FROM student_test ORDER BY qq_mail;
    SELECT name, qq_mail FROM student_test ORDER BY qq_mail DESC;
    

    在这里插入图片描述

  3. 使用表达式及别名排序

    -- 查询同学及总分,由高到低
    SELECT name, chinese + math + english as total FROM exam_result ORDER BY CHINESE + math + english DESC;
    
    SELECT name, chinese + math + english as total FROM exam_result ORDER BY total DESC;
    

    在这里插入图片描述

  4. 可以对多个字段进行排序,排序优先级随书写顺序

    -- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
    SELECT name, math, english, chinese FROM exam_result ORDER BY math DESC, english, chinese;
    

    在这里插入图片描述

2.7 条件查询

比较运算符:

算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,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)

注:

  1. WHERE条件可以使用表达式,但不能是用别名
  2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

操作:

  • 基本查询

    -- 查询英语不及格的同学及英语成绩 (< 60)
    SELECT name, english FROM exam_result WHERE english < 60;
    
    -- 查询语文成绩好于英语成绩的同学
    SELECT name, chinese, english FROM exam_result where chinese > english;
    
    -- 查询总分在250分以下的同学
    SELECT name, chinese, math, english as total FROM exam_result where chinese + math + english < 250;
    

    在这里插入图片描述

    注:这里如果使用别名来进行判断会报错:

    在这里插入图片描述

  • AND与OR

    -- 查询语文成绩大于80分,并且英语成绩大于80分的同学
    SELECT * FROM exam_result WHERE chinese > 80 and english > 80;
    
    -- 查询语文成绩大于80分,或英语成绩大于80分的同学
    SELECT * FROM exam_result WHERE chinese > 80 or english > 80;
    
    -- 观察AND 和 OR 的优先级
    SELECT * FROM exam_result WHERE chinese > 80 or math > 70 and english > 70;
    SELECT * FROM exam_result WHEARE (chinese > 80 or math > 70) and english > 70;
    

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    and的优先级高于or

  • 范围查询

    1. BETWEEN … AND …

      -- 查询语文成绩在 [80,90] 分的同学及语文成绩
      SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
      

      在这里插入图片描述

      :此时的范围为闭区间

    2. IN

      -- 查询数学成绩是 58 或 59 或 98 或 99分的同学及数学成绩
      SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
      

      在这里插入图片描述

  • 模糊查询: LIKE

    这里需要使用到两个符号:通配符%_

    • % :匹配任意个字符

    • _ :只能匹配一个字符

    在这里先插入一些数据:

    在这里插入图片描述

    % 操作:

    -- 匹配名字中以孙开头的同学
    SELECT * FROM exam_result WHERE name like '孙%';
    
    -- 匹配名字中以孙结尾的同学
    SELECT * FROM exam_result WHERE name like '%孙';
    
    -- 匹配名字中包含孙的同学
    SELECT * FROM exam_result WHERE name like '%孙%';
    

    在这里插入图片描述

    注: %也可以表示匹配到0个字符

    _ 操作:

    -- 匹配名字中以孙开头的同学
    SELECT * FROM exam_result WHERE name like '孙_'; // 此处为空
    SELECT * FROM exam_result WHERE name like '孙__';
    

    在这里插入图片描述

  • NULL的查询: IS [NOT] NULL

    -- 查询 qq_mail已知 的同学姓名
    SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL;
    
    -- 查询qq_mail未知 的同学姓名
    SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;
    

    在这里插入图片描述

2.8 分页查询: LIMIT

limit: 限制这次请求返回多少个记录(一页里有几条数据)

offset: 描述当前结果从第几条开始获取,不写offse 为默认情况 (从第 0 条开始)

语法:

-- 起始下标为0
-- 从 0 开始,筛选 n 条结果 (返回n条数据)
SELECT ... FROM table_name [WHERE ...][ORDER BY] LIMIT n;
-- 从 s 开始, 筛选 n 条结果
SELECT ... FROM table_name [WHERE ...][ORDER BY] LIMIT n OFFSET s;

案例:按id进行分页,每页3条记录, 分别显示第 1、2、3 页

-- 第 1 页
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 0;

-- 第 2 页
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 3;

-- 第 3 页
SELECT id, name, math, english, chinese FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;

在这里插入图片描述

3. 修改(Update)

语法:

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

update 表名 set 列名 (此处可以修改多个列)= 值 where 条件 (如果条件不写,就是针对所有的行进行修改)

注:进行修改时,要定位到行和列,再修改值

案例:

-- 将孙悟空的数学成绩变更为 85 分
UPDATE exam_result SET math = 85 WHERE name = '孙悟空';

-- 将曹孟德 的数学变成90分,语文变成85分
UPDATE exam_result SET math = 90, chinese = 85 where name = '曹孟德';

-- 将总成绩前三的 3 位同学的数学成绩减 10 分
UPDATE exam_result set math = math - 10 ORDER BY chinese + math + english DESC LIMIT 3;

-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE exam_result SET chinese = chinese * 2;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. 删除(Delete)

语法:

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

案例:

-- 删除孙行者的考试成绩
DELETE FROM exam_result WHERE name = '孙行者';

在这里插入图片描述

在这里插入图片描述

-- 删除整张表
-- 准备测试表
CREATE TABLE for_delete (id INT, name VARCHAR(20));
-- 插入测试数据
INSERT INTO for_delete (name) values ('A'), ('B'), ('C');
--删除整表数据
DELETE FROM for_delete;

在这里插入图片描述

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

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

相关文章

vuepress使用及拓展(骚操作)

官网 文章目录 背景问题思考方案思索实现方案实现结果存在问题 背景 当前开放平台文件静态保存在前端项目&#xff0c;每次修改都需要通过修改文件发版的方式&#xff0c;很不便利。 1、需要前端手动维护 2、每次小的修改都要发版 随着对接业务的增多&#xff0c;对接文档的变…

第8章_聚合函数

文章目录 1 聚合函数介绍1.1 AVG和SUM函数1.2 MIN和Max函数1.3 COUNT函数演示代码 2 GROUP BY2.1 基本使用2.2 使用多个列分组2.3 演示代码 3 HAVING3.1 基本使用3.2 WHERE和HAVING的对比3.3 演示代码 4 SELECT的执行过程4.1 查询的结构4.2 SELECT执行顺序4.3 SQL的执行原理演示…

4 Tensorflow图像识别模型——数据预处理

上一篇&#xff1a;3 tensorflow构建模型详解-CSDN博客 本篇开始介绍识别猫狗图片的模型&#xff0c;内容较多&#xff0c;会分为多个章节介绍。模型构建还是和之前一样的流程&#xff1a; 数据集准备数据预处理创建模型设置损失函数和优化器训练模型 本篇先介绍数据集准备&am…

newstarctf2022week2

Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲 连接 MySQL 失败: Access denied for user rootlocalhost 这句话印在了背景&#xff0c;后来再进就没了&#xff0c;我猜测是报错注入 想办法传参 可以看到一个name2,试着传参 发现有回显三个字段…

【CMU15445】Fall 2019, Project 3: Query Execution 实验记录

目录 实验准备实验测试Task 1: CREATING A CATALOG TABLE SQL 执行是由数据库解析器转化为一个由多个 executor 组成的 Query Plan 来完成的&#xff0c;本实验选择了火山模型来完成 query execution&#xff0c;这一次的 project 就是实现各种 exeutor&#xff0c;从而可以通过…

MyBatis实现多表映射、分页显示、逆向工程

目录 一、MyBatis实现多表映射 1.1 实体类设计 1.2 一对一关系实现案例 1.3 对多配置实现案例 1.4 设置自动映射与n张表关联映射 二、MyBatis实现分页功能 2.1 mybatis插件工作原理 2.2 引入插件与插件的使用 三、逆向工程插件 3.1 什么是逆向工程 3.2 MyBat…

项目构建工具maven的基本配置

&#x1f451; 博主简介&#xff1a;知名开发工程师 &#x1f463; 出没地点&#xff1a;北京 &#x1f48a; 2023年目标&#xff1a;成为一个大佬 ——————————————————————————————————————————— 版权声明&#xff1a;本文为原创文…

Technology Strategy Pattern 学习笔记2-Creating the Strategy-World Context

Creating the Strategy-World Context 1 PESTEL 1.1 从6个方案看外部 PoliticalEconomicSocialTechnologicalEnvironmentalLegal 1.2 参考URL https://zhuanlan.zhihu.com/p/192522082https://www.docin.com/p-449396129.htmlhttps://blog.csdn.net/xiaoyw71/article/deta…

学习GTEx数据库

每个个体的不同的器官组织的基因&#xff08;Gene&#xff09;都是相同的&#xff0c;但为什么有的表型为肝脏组织&#xff0c;帮助人类代谢&#xff1f;有的是肌肉组织&#xff0c;帮助人类运动&#xff1f;其原因是&#xff0c;不同的人体组织表达的基因并不相同。 &#xff…

Java 正则表达式分组匹配

前几篇文章都是简单判断是否满足匹配规则&#xff0c;当需要提取匹配结果时就用到分组匹配。 分组匹配 可以判断是否满足正则表达式&#xff0c;然后提取出子串。 有些时候电话号码是以 123-4567-8899 这样显示的&#xff0c;我们要判断某个字符串是这种形式的并分别提起三段…

【鸿蒙软件开发】ArkUI之容器组件Counter(计数器组件)、Flex(弹性布局)

文章目录 前言一、Counter1.1 子组件1.2 接口1.3 属性1.4 事件 1.5 示例代码二、Flex弹性布局到底是什么意思&#xff1f; 2.1 权限列表2.2 子组件2.3 接口参数 2.4 示例代码示例代码1示例代码2 总结 前言 Counter容器组件&#xff1a;计数器组件&#xff0c;提供相应的增加或…

Zinx框架-游戏服务器开发003:架构搭建-需求分析及TCP通信方式的实现

文章目录 1 项目总体架构2 项目需求2.1 服务器职责2.2 消息的格式和定义 3 基于Tcp连接的通信方式3.1 通道层实现GameChannel类3.1.1 TcpChannel类3.1.2 Tcp工厂类3.1.3 创建主函数&#xff0c;添加Tcp的监听套接字3.1.4 代码测试 3.2 消息类的结构设计和实现3.2.1 消息的定义3…

Pycharm的安装与基本使用

Pycharm的安装与基本使用 一、Pycharm介绍1.1 Pycharm简介1.2 Pycharm特点 二、Pycharm软件下载2.1 Pycharm官网2.2 下载Pycharm 三、安装Pycharm3.1 指定安装目录3.2 勾选安装选项3.3 选择菜单目录3.4 安装成功 四、Pycharm的初始配置4.1 新建工程4.2 选择Python解释器4.3 打开…

【自动化测试教程】Java+Selenium自动化测试环境搭建

本主要介绍以Java为基础&#xff0c;搭建Selenium自动化测试环境&#xff0c;并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分&#xff0c;selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化&#xff08;OOPP&#xff09…

ZZ038 物联网应用与服务赛题第J套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;J卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用…

教你烧录Jetson Orin Nano的ubuntu20.04镜像

Jetson Orin Nano烧录镜像 视频讲解 教你烧录Jetson Orin Nano的ubuntu20.04镜像 1. 下载sdk manager https://developer.nvidia.com/sdk-manager sudo dpkg -i xxxx.deb2. 进入recovery 插上typeC后&#xff0c;短接J14的FORCE_RECOVERY和GND&#xff0c;上电 如下图&#…

J2EE项目部署与发布(Linux版本)->jdktomcat安装,MySQL安装,后端接口部署,linux单体项目前端部署

jdk&tomcat安装MySQL安装后端接口部署linux单体项目前端部署 1.jdk&tomcat安装 上传jdk、tomcat安装包 解压两个工具包 #解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz #解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置并且测试jdk安装 #配置环境变量 vim /e…

MySQL Binlog实战应用之一

一、前言 开发业务系统尤其是与财务相关的系统&#xff0c;需要记录每一笔变更操作的日志&#xff0c;这一般有两种实现方案。 1、代码中通过AOP实现&#xff0c;提供注解跟踪记录日志&#xff0c;这种方案能够比较清晰地以业务角度记录操作日志&#xff0c;但记录变更前的旧…

SpringCloud Alibaba Demo(Nacos,OpenFeign,Gatway,Sentinel)

开源地址&#xff1a; ma/springcloud-alibaba-demo 简介 参考&#xff1a;https://www.cnblogs.com/zys2019/p/12682628.html SpringBoot、SpringCloud 、SpringCloud Alibaba 以及各种组件存在版本对应关系。可参考下面 版本对应 项目前期准备 启动nacos. ./startup.c…

Spring Data Redis + RabbitMQ - 基于 string + hash 实现缓存,计数(高内聚)

目录 一、Spring Data Redis 1.1、缓存功能(分析) 1.2、案例实现 一、Spring Data Redis 1.1、缓存功能(分析) hash 类型存储缓存相比于 string 类型就有更多的更合适的使用场景. 例如,我有以下这样一个 UserInfo 信息 假设这样一个场景就是:万一只想获取其中某一个…