【mysql】—— 表的增删改查

news2024/11/15 21:42:44

SQL

 

目录

序言 

(一)Create操作

1、单行数据 + 全列插入

2、多行数据 + 指定列插入

3、插入否则更新

4、直接替换

(二)Retrieve操作

 1、SELECT 列

1️⃣全列查询

2️⃣指定列查询

3️⃣查询字段为表达式

4️⃣为查询结果指定别名

5️⃣结果去重

2、WHERE 条件

3、结果排序

4、筛选分页结果

(三)Update操作

(四)Delete操作

1、删除数据

2、截断表

(五)插入查询结果

(六)聚合函数

(七)group by子句的使用

总结


序言 

CRUD 是指对于数据存储系统的常见操作,包括 Create(创建)、Retrieve(读取)、Update(更新)和Delete(删除)。它是一种通用的数据操作模式,广泛应用于数据库和其他数据管理系统中。

下面对每个操作进行简要说明:

  1. Create(创建):用于向数据存储系统中创建新的记录或实体。这可以是插入一条新的数据记录、创建一个新的文件、或在数据库中添加一条新的记录等。

  2. Retrieve(读取):用于从数据存储系统中读取已有的记录或实体。这可以是根据特定条件查询数据库中的数据、读取文件的内容、或获取特定对象的属性值等。

  3. Update(更新):用于修改数据存储系统中已有的记录或实体。这可以是更新数据库中的信息、修改文件的内容、或更改对象的属性值等。

  4. Delete(删除):用于从数据存储系统中移除现有的记录或实体。这可以是从数据库中删除数据、删除文件、或销毁对象等。

这些操作可以进一步扩展和组合,以满足更复杂的需求。通过上述操作,可以实现对表的数据进行增加、删除、修改和查询操作。


(一)Create操作

MySQL 中的 CREATE 操作用于创建新的数据库、表、视图、索引或存储过程等对象。下面对 MySQL 中 CREATE 操作的几个常见用法进行详解:

语法:

INSERT [INTO] table_name
    [(column [, column] ...)]
    VALUES (value_list) [, (value_list)] ...

value_list: value, [, value] ...

案例:

  • 接下来,我简单的创建一张名为 - students 的表。具体如下:
 CREATE TABLE students (
    -> id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    -> sn INT NOT NULL UNIQUE COMMENT '学号',
    -> name VARCHAR(20) NOT NULL,
    -> qq VARCHAR(20) unique key
    -> );

  • 具体如下图所示:


1、单行数据 + 全列插入

 【说明】

  1. 首先,因为 values 左边没有括号指明插入的情况,因此这里默认的是全插入的情况;
  2. 这里在插入的时候,也可以不用指定id(当然,那时候就需要明确插入数据到那些列了),那么mysql会使用默认的值进行自增;
  3. 插入语句中列和值的顺序应与表定义的列的顺序相匹配,并且在 VALUES 关键字后面的括号中提供对应的值。如果某些列允许为空,可以使用 NULL 来表示。

2、多行数据 + 指定列插入

直接进行代码展示。具体如下:

  •  插入两条记录,value_list 数量必须和指定列数量及顺序一致

3、插入否则更新

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

遇到上述这样的情况我们可以选择性的进行同步更新操作 语法:
 

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

代码样例: 

  • 当我们插入数据后,后面往往会显示一行:x row affected 


4、直接替换

它的作用很简单,具体如下:

  1. -- 主键 或者 唯一键 没有冲突,则直接插入;
  2. -- 主键 或者 唯一键 如果冲突,则删除后再插入
     

代码展示:


(二)Retrieve操作

Retrieve操作用于从数据库中检索数据。在MySQL中,常用的Retrieve操作是使用 select 语句进行查询。

语法:

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

案例:

  •  接下来,我们进行插入操作:


 1、SELECT 列


1️⃣全列查询

要对 MySQL 中的表进行全列查询,可以使用 SELECT * 语句。这将返回表中的所有列和所有行的数据。

  • 接下来对上述表中进行查询操作:

 【说明】

通常情况下不建议使用 * 进行全列查询:

  • 1. 查询的列越多,意味着需要传输的数据量越大;
  • 2. 可能会影响到索引的使用。(索引待后面课程讲解)
     

2️⃣指定列查询
 

因此,基于全列查询的缺点,最好明确指定需要的列来减少数据传输和查询时间。

  • 如果只需要查询表中的特定列,可以将 * 替换为所需列的名称,如 SELECT 列1, 列2, ... FROM 表名;
  • 这样可以提高查询效率并减少不必要的数据传输。

3️⃣查询字段为表达式

在 MySQL 中,您可以使用表达式来查询字段。表达式可以是数学运算、字符串操作、逻辑运算或函数调用等。

  • ①表达式不包含字段

  • ②表达式包含一个字段

  •  ③表达式包含多个字段

4️⃣为查询结果指定别名

在 MySQL 中,您可以使用 as(可写可不写)关键字为查询结果指定别名。

语法:

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

  • 以下是一个示例(对上述三科成绩去别名):

  •  又或者如下这样:

5️⃣结果去重


2、WHERE 条件

在 MySQL 中,使用 WHERE 关键字可以添加条件来过滤查询结果。WHERE 子句允许您指定一个或多个条件,只返回满足这些条件的行。

比较运算符:
 

逻辑运算符:
 

C语言自学笔记———运算符号(六) - 知乎

案例

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


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

 其次,除了上述用 and 之外,还可以使用【between and】表达式:


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

除了上述方式之外,还可以使用 IN 条件:


  • ④ 姓孙的同学 及 孙某同学
     

 除此之外,_ 匹配严格的一个任意字符:


  • ⑤ 语文成绩好于英语成绩的同学


  • ⑥ 总分在 200 分以下的同学


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


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


  • ⑨ NULL 的查询


3、结果排序

在 MySQL 中,您可以使用 ORDER BY 子句对查询结果进行排序。ORDER BY 子句允许您指定一个或多个列作为排序的依据。

语法:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC

    SELECT ... FROM table_name [WHERE ...]
        ORDER BY column [ASC|DESC], [...];
  • 注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
     

【案例】

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


  • ② 同学及 qq 号,按 qq 号排序显示


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


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

  •  除了上述的方法之外,ORDER BY 子句中也可以使用列别名


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


4、筛选分页结果

在 MySQL 中,您可以使用 LIMIT OFFSET 关键字来实现对分页结果的筛选。

  1. LIMIT 用于限制查询结果的返回行数;
  2. OFFSET 则用于指定从哪一行开始返回结果。

语法:

-- 起始下标为 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 页


(三)Update操作

在 MySQL 中,您可以使用 UPDATE 语句来修改数据库表中的数据。UPDATE 语句用于对表中的一行或多行进行更新操作。

语法:

UPDATE table_name SET column = expr [, column = expr ...]
    [WHERE ...] [ORDER BY ...] [LIMIT ...]
  • 对查询到的结果进行列值更新
     

案例:

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


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


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


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

  • 注意:更新全表的语句慎用!!!
     

(四)Delete操作

1、删除数据

语法:

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


案例:

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

 


  • ② 删除整张表数据

 紧接着,我们在插入数据:

 


2、截断表

在 MySQL 中,您可以使用 TRUNCATE TABLE 语句来截断(清空)数据库表中的数据。该操作会从表中删除所有的行,并释放相关的存储空间。

语法:

TRUNCATE [TABLE] table_name

注意:这个操作慎用

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

准备测试数据:

 

 

 


(五)插入查询结果

在 MySQL 中,您可以使用 INSERT INTO ... SELECT 语句将查询结果插入到表中。这样可以方便地将一个表的查询结果作为数据,插入到另一个表中。

语法:

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

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

  • 1、实现数据准备 

 思路:

  • ① 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
     

 

  • ② 将 duplicate_table 的去重数据插入到 no_duplicate_table

 

  • ③ 通过重命名表,实现原子的去重操作

 


(六)聚合函数

聚合函数是用于对数据进行计算和统计的函数,它们可以根据一组值返回一个单一的结果。在 MySQL 中,常见的聚合函数包括以下几个:

学习SQL大概要多久?有没有好的资料或者视频推荐呢? - 知乎

 

案例:

  • ① 统计班级共有多少同学
     

 

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


 

 

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

 


  • ④ 统计数学成绩总分

 


  • ⑤ 统计平均总分

 


  • ⑥ 返回英语最高分

 


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

 


(七)group by子句的使用

GROUP BY 子句是用于对结果集进行分组的一种 SQL 语句。通过 GROUP BY 子句,您可以将查询结果按照指定的列进行分组,并对每个分组应用聚合函数进行计算。

以下是 GROUP BY 子句的使用示例:

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
  • 在上述示例中,column1 是需要分组的列名,aggregate_function(column2) 是要应用的聚合函数,table_name 是表名。

例如,假设有一个名为 "orders" 的表,包含列 "customer_id"、"product_id" 和 "quantity",我们想要按照 "product_id" 对订单进行分组,并计算每个产品的总销量:

SELECT product_id, SUM(quantity)
FROM orders
GROUP BY product_id;
  • 上述示例中,使用了 SELECT product_id, SUM(quantity) FROM orders GROUP BY product_id 语句,按照 "product_id" 列对 "orders" 表进行分组,并对每个分组中的 "quantity" 列应用 SUM 聚合函数,计算每个产品的总销量。

除了单个列之外,GROUP BY 子句还可以指定多个列进行分组,例如:

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;

总结

以上便是关于 mysql 中常见的数据查询操作。接下来,简单的总结一下本文内容!!!

MySQL 数据的基本查询可以通过使用 SELECT 语句和其他相关子句来实现。

  • 查询所有列:
SELECT * FROM table_name;

这将返回指定表中的所有列。

  • 查询特定列:
SELECT column1, column2, ... FROM table_name;

您可以指定要查询的列名,以逗号分隔,从而只返回这些列的数据。

  • 带条件的查询:
SELECT * FROM table_name WHERE condition;

使用 WHERE 子句可以添加条件,过滤满足条件的行。例如,WHERE age > 18 将会返回年龄大于 18 岁的行。

  • 使用聚合函数:
SELECT aggregate_function(column) FROM table_name;

常见的聚合函数包括 COUNT、SUM、AVG、MAX 和 MIN。您可以对列应用聚合函数,返回计算结果。

  • 排序查询结果:
SELECT * FROM table_name ORDER BY column ASC|DESC;

使用 ORDER BY 子句可以按照指定列进行升序(ASC)或降序(DESC)排序。

  • 去重查询结果:
SELECT DISTINCT column FROM table_name;

使用 DISTINCT 关键字可以去除查询结果中的重复行,只返回唯一的值。

  • 分组查询:
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;

使用 GROUP BY 子句可以对结果进行分组,并对每个分组应用聚合函数。

到此,关于本篇数据查询的讲解便到此结束了。感谢大家的观看与支持!!!

 

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

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

相关文章

无涯教程-Perl - sprintf函数

描述 此函数使用FORMAT基于LIST中的值返回格式化的字符串。本质上与printf相同,但是返回格式化的字符串而不是将其打印。 语法 以下是此函数的简单语法- sprintf FORMAT, LIST返回值 此函数返回SCALAR(格式化的文本字符串)。 例 以下是显示其基本用法的示例代码- #!/us…

SQL Injection

SQL Injection 就是通过把恶意的sql命令插入web表单递交给服务器&#xff0c;或者输入域名或页面请求的查询字符串递交到服务器&#xff0c;达到欺骗服务器&#xff0c;让服务器执行这些恶意的sql命令&#xff0c;从而让攻击者&#xff0c;可以绕过一些机制&#xff0c;达到直…

【Android Studio】 win11 安装配置 jdk17 超详细

概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载JDK JDK官网 这里下载 JDK17 windows x64 installer 二、安装JDK 双击打开下载的 j…

计算机毕设项目之基于django+mysql的疫情实时监控大屏系统(前后全分离)

系统阐述的是一款新冠肺炎疫情实时监控系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体…

AutoSAR配置与实践(基础篇)3.1 BSW架构和主要功能概要

传送门 点击返回 ->AUTOSAR配置与实践总目录 AutoSAR配置与实践(基础篇)3.1 BSW架构和主要功能概要 一、什么叫BSW二、分层介绍BSW主要功能2.1 微处理器抽象层MCAL2.2 ECU抽象层2.3 服务层2.4 复杂驱动CDD三、总结BSW各层主要功能一、什么叫BSW BSW是Basic Software的缩…

LeetCode150道面试经典题-- 合并两个有序链表(简单)

1.题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 2.示例 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输…

使用Kaptcha生成验证码

说明&#xff1a;验证码&#xff0c;是登录流程中必不可少的一环&#xff0c;一般企业级的系统&#xff0c;使用都是专门制作验证码、审核校验的第三方SDK&#xff08;如极验&#xff09;。本文介绍&#xff0c;使用谷歌提供的Kaptcha技术&#xff0c;制作一个简单的验证码。 …

关系代数运算中的集合运算符和关系运算符

关系代数是一种抽象的查询语言&#xff0c;是研究关系模型的数学工具。关系代数的运算对象是关系&#xff0c;运算结果也是关系。关系代数运算符主要分为集合运算符和关系运算符两大类。 集合运算符有笛卡尔积、并、交、差&#xff0c;关系运算符有除、选择、投影、连接&#x…

ABAP内表与XML格式互转

1需求说明 在系统交互中需要将SAP内表转换为XML文件&#xff0c;发送给其他系统&#xff0c;并且将其他系统返回的XML文件转换为SAP内表。 2创建转换编辑器 事务代码&#xff1a;STRANS 选择简单转换 以图形方式编辑 右键插入新行 选择参考的类型。此处的TYPE类型是SE11中创…

基于STM32的指纹门禁系统

基于STM32的指纹门禁系统 系统简介 指纹系统&#xff0c;可以存指纹&#xff1b;指纹对了之后开门&#xff1b; 材料 STM32F103C8T6芯片OLED液晶显示屏杜邦线AS608模块用keil5进行开发 开始制作 制作过程 AS608模块调试 模块原理 模块是通过串口通信,采用回复式通信。 这…

基于Python编写个语法解析器

这篇文章主要为大家详细介绍了如何基于Python编写个语法解析器&#xff0c;文中的示例代码讲解详细&#xff0c;具有一定的学习价值&#xff0c;感兴趣的小伙伴可以了解一下 − 目录 前言选型效果实现 字符指针错误类型语法解析交互 前言 目的纯粹&#xff0c;基于Python做…

26、springboot的自动配置03--核心功能--自定义条件注解及使用

开发自己的自动配置------开发自己的条件注解 ★ 自定义条件注解 好处有两个&#xff1a; 1. 真正掌握Spring boot条件注解的本质。 2. 项目遇到一些特殊的需求时&#xff0c;也可以开发自己的自定义条件注解来解决问题。自定义条件注解&#xff1a; ▲ 所有自定义注解其实都…

香港服务器三网直连内地线路什么意思?好用吗?

​  三网直连内地是指香港服务器可以直接连接中国内地的电信、联通和移动三大运营商网络&#xff0c;避免了中间网络干线的支持。这样可以实现直接、快速、稳定的网络访问&#xff0c;提高用户对网络访问的效率&#xff0c;减少网络访问问题和拥堵的现象。 香港服务器直连内地…

开源项目AJ-Captcha使用小结

在网上看到开源项目AJ-Captcha&#xff0c;想把它加入到自己的项目中&#xff0c;遇到了一些问题&#xff0c;记录一下。 AJ-Captcha: 行为验证码(滑动拼图、点选文字)&#xff0c;前后端(java)交互&#xff0c;包含vue/h5/Android/IOS/flutter/uni-app/react/php/go/微信小程…

C# 读取pcd点云文件数据

pcd文件有ascii 和二进制格式&#xff0c;ascii可以直接记事本打开&#xff0c;C#可以一行行读。但二进制格式的打开是乱码&#xff0c;如果尝试程序中读取&#xff0c;对比下看了数据也对不上。 这里可以使用pcl里的函数来读取pcd&#xff0c;无论二进制或ascii都可以正确读取…

Fortinet数据中心防火墙及服务ROI超300%,Forrester TEI研究发布

近日&#xff0c;专注网络与安全融合的全球网络安全领导者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;联合全球知名分析机构Forrester发布总体经济影响独立分析报告&#xff0c;详细阐述了在企业数据中心部署 FortiGate 下一代防火墙&#xff08;NGFW&#xff09…

web集群学习:搭建 LNMP应用环境

目录 LNMP的介绍&#xff1a; LNMP组合工作流程&#xff1a; FastCGI介绍&#xff1a; 1、什么是 CGI 2、什么是 FastCGI 配置LNMP 1、部署LNMP环境 2、配置LNMP环境 LNMP的介绍&#xff1a; 随着 Nginx Web 服务的逐渐流行&#xff0c;又岀现了新的 Web 服务环境组合—…

Ae 效果:CC WarpoMatic

过渡/CC WarpoMatic Transition/CC WarpoMatic CC WarpoMatic&#xff08;CC 自动扭曲&#xff09;主要用于创建动态的扭曲和弯曲过渡效果&#xff0c;可以在两个图层之间生成独特的过渡动画。 ‍ 这个效果允许用户根据特定的图层特性&#xff08;如亮度、对比度差异、亮度差异…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)九:自定义组件封装下

一、本章内容 续上一张,本章实现一些自定义组件的封装,包括文件上传组件封装、级联选择组件封装、富文本组件封装等。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管

什么是大数据测试?有哪些类型?应该怎么测?

随着目前世界上各个国家使用大数据应用程序或应用大数据技术场景的数量呈指数增长&#xff0c;相应的&#xff0c;对于测试大数据应用时所需的知识与大数据测试工程师的需求也在同步增加。 针对大数据测试的相关技术已慢慢成为当下软件测试人员需要了解和掌握的一门通用技术。…