当前位置: 首页 > news >正文

【增删改查操作】

文章目录

  • 一、CRUD简介
  • 二、Create 新增
    • 1、语法
    • 2、⽰例
      • (1)单⾏数据全列插⼊
      • (2)单⾏数据指定列插⼊
      • (3)多⾏数据指定列插⼊
  • 三、Retrieve 检索
    • 1、语法
    • 2、⽰例
      • (1)构造数据
    • 3、Select
      • (1)全列查询
      • (2)指定列查询
      • (3)查询字段为表达式
      • (4)为查询结果指定别名
      • (5)结果去重查询
    • 4、Where 条件查询
      • (1)语法
      • (2)⽐较运算符
      • (3)逻辑运算符
      • (4)⽰例
    • 5、Order by 排序
      • (1)语法
      • (2)⽰例
    • 6、分⻚查询
      • (1)语法
      • (2)⽰例
  • 四、Update 修改
    • 1、语法
    • 2、⽰例
    • 3、Update 注意事项
  • 五、Delete 删除
    • 1、语法
    • 2、⽰例
    • 3、Delete注意事项
  • 六、截断表
    • 1、语法
    • 2、⽰例
    • 3、Truncate注意事项
  • 七、插⼊查询结果
    • 1、语法
    • 2、⽰例
  • 八、聚合函数
    • 1、常⽤函数
    • 2、⽰例
      • (1)COUTN
      • (2)SUM
      • (3)AVG
      • (4)MAX
      • (5)MIN
  • 九、Group by 分组查询
    • 1、语法
    • 2、⽰例
    • 3、having⼦句
    • 4、Having 与Where 的区别
  • 十、内置函数
    • 1、⽇期函数
      • (1)⽰例
    • 2、字符串处理函数
      • (1)⽰例
    • 3、数学函数
      • (1)⽰例
    • 4、其他常⽤函数
      • (1)⽰例


一、CRUD简介

CURD是对数据库中的记录进⾏基本的增删改查操作:

  • Create (创建)
  • Retrieve (读取)
  • Update (更新)
  • Delete (删除)

二、Create 新增

1、语法

在这里插入图片描述

2、⽰例

在这里插入图片描述

(1)单⾏数据全列插⼊

value_list 中值的数量必须和定义表的列的数量及顺序⼀致
在这里插入图片描述

(2)单⾏数据指定列插⼊

value_list 中值的数量必须和指定列数量及顺序⼀致
在这里插入图片描述
没有指定id这一列时,id这一列会用默认值去填充,默认值是NULL

(3)多⾏数据指定列插⼊

在⼀条INSERT语句中也可以指定多个value_list,实现⼀次插⼊多⾏数据
在这里插入图片描述
一次插入一条数据的效率高还是一次插入多条数据的效率高?

  • 执行所有的SQL都要有网络开销
  • MySql数据库在保存数据的时候都有磁盘开销
  • 每执行一条SQL语句都需要开启一个事务;事务的开启到关闭也需要消耗系统资源

一次提交多条数据(在一个可控的范围之内),比一次提交一次效率 能高那么一点

三、Retrieve 检索

1、语法

在这里插入图片描述

2、⽰例

提示:执行本机的SQL脚本:source F:\文档\Navicat\MySQL\Servers\MySQL\java114\exam.sql或\. F:\文档\Navicat\MySQL\Servers\MySQL\java114\exam.sql
在这里插入图片描述

(1)构造数据

在这里插入图片描述
在这里插入图片描述

3、Select

(1)全列查询

select(查询关键字) *(要查询字段的列表,*表示的是所有列) from 表名(从哪个表中查询数据);
查询所有记录
在这里插入图片描述

(2)指定列查询

查询所有⼈的编号、姓名和语⽂成绩
在这里插入图片描述
在select后⾯的查询列表中指定希望查询的列,可以是⼀个也可以是多个,中间⽤逗号隔开,指定列的顺序与表结构中的列的顺序⽆关

(3)查询字段为表达式

  • 常量表达式
    表达式本⾝就是⼀个常量
    在这里插入图片描述
    表达式在查询列表中,但是表中不存在
    返回的结果集是根据查询表列中的字段和表达式生成的一个临时表,专门用来保存查询结果的,当结果集返回给客户端时,临时就销毁了。
    也可以是常量的运算
    在这里插入图片描述
  • 把所有学⽣的语⽂成绩加10分
    在这里插入图片描述
  • 计算所有学⽣语⽂、数学和英语成绩的总分
    在这里插入图片描述

(4)为查询结果指定别名

语法:
在这里插入图片描述
AS可以省略,别名如果包含空格必须⽤单引号包裹
示例:

  • 为总分这⼀列指定别名:
    在这里插入图片描述
  • 如果别名有空格,必须用单引号包裹:
    在这里插入图片描述
    在这里插入图片描述
  • as可以省略
    在这里插入图片描述

(5)结果去重查询

  • 查询当前所的数学成绩:
    通过观察有两条98的记录
    在这里插入图片描述
  • 在结果集中去除重复记录,可以使⽤DISTINCT
    在这里插入图片描述
    使⽤DISCTINCT去重时,只有查询列表中所有列的值都相同才会判定为重复。
    在这里插入图片描述
    注意:
  • 查询时不加限制条件会返回表中所有结果,如果表中的数据量过⼤,会把服务器的资源消耗殆尽
  • 在⽣产环境不要使不加限制条件的查询

4、Where 条件查询

根据指定的一些条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户。

(1)语法

在这里插入图片描述

(2)⽐较运算符

在这里插入图片描述
注意:其他语言中的等于是==,赋值是=,MySql中判断等于和赋值都是=,在SQL编程中赋值也可以写成":="
在这里插入图片描述

(3)逻辑运算符

在这里插入图片描述

(4)⽰例

基本查询:

  • 查询英语不及格的同学及英语成绩 ( < 60)
    在这里插入图片描述
    注意:如果英语成绩有NULL的记录,结果集中没有NULL的记录,会自动过滤掉。
  • 查询语⽂成绩⾼于英语成绩的同学
    在这里插入图片描述
  • 总分在 200 分以下的同学
    在这里插入图片描述
    问题:where·子句为什么不能以别名当做过滤条件?
    1、先找到这个表–from
    2、定位符合条件的数据行 – where(所以在执行where子句时,select后边指定的别名还没有定义)
    3、在过滤后的结果集中抽取要显示的列、表达式

AND和OR:

  • 查询语⽂成绩⼤于80分且英语成绩⼤于80分的同学
    在这里插入图片描述
  • 查询语⽂成绩⼤于80分或英语成绩⼤于80分的同学
    在这里插入图片描述
  • 观察AND和OR的优先级
    在这里插入图片描述
    优先级比较:NOT>AND>OR

范围查询:

  • 语⽂成绩在 [80, 90] 分的同学及语⽂成绩
    使⽤BETWEEN AND 实现:
    在这里插入图片描述
    使⽤ AND 实现:
    在这里插入图片描述
  • 数学成绩是 78 或者 79 或者 98 或者 99 分的同学及数学成绩
    使⽤IN实现:
    在这里插入图片描述
    使⽤OR实现:
    在这里插入图片描述

模糊查询:%和_都是通配符
%表示任意多个(包含0个)字符:

  • %表示所有,等于没有指定条件
  • %xxx,表示以xxx结束,前面可以包含任意多个字符
  • xxx%,表示以xxx开头,后面可以包含任意多个字符
  • %xxx%,前面和后面可以包含任意多个字符,中间必须有xxx

_表示任意一个字符:(严格匹配,写多少个_就匹配多少字符 -)

  • 是一个占位符
  • _xxx,表示以xxx结束,前面可以包含一个字符
  • xxx_,表示以xxx开头,后面可以包含一个字符
  • _ xxx _,前面和后面可以包含一个字符,中间必须是xxx

  • 查询所有姓孙的同学
    在这里插入图片描述
  • 查询姓孙且姓名共有两个字同学
    在这里插入图片描述

NULL的查询:

  • 构造数据:写⼊⼀条数据,英语成绩为NULL
    在这里插入图片描述
  • 查询英语成绩为NULL的记录
    在这里插入图片描述
    在这里插入图片描述
  • 查询英语成绩不为NULL的记录
    在这里插入图片描述
  • NULL与其他值进⾏运算结果为NULL
    在这里插入图片描述

注意:

  • WHERE条件中可以使⽤表达式,但不能使⽤别名
  • AND的优先级⾼于OR,在同时使⽤时,建议使⽤⼩括号()包裹优先执⾏的部分
  • 过滤NULL时不要使⽤等于号(=)与不等于号(!= , <>)
  • NULL与任何值运算结果都为NULL

5、Order by 排序

(1)语法

在这里插入图片描述
{col_name (列)| expr(表达式) }结果集或者真实表中
注意:
查看表结构用到了 desc describe 描述
排序中的desc descend 下降

(2)⽰例

  • 按数学成绩从低到⾼排序(升序)
    在这里插入图片描述
  • 按语⽂成绩从⾼到低排序(降序)
    在这里插入图片描述
  • 按英语成绩从⾼到低排序
    在这里插入图片描述
    在排序时,NULL值被认定为比任何值都小
  • 查询同学各⻔成绩,依次按数学降序,英语升序,语⽂升序的⽅式显⽰
    可以分别为每个列指定排序顺序规则,在结果集中按从左向右的顺序进行排序。
    在这里插入图片描述
  • 查询同学及总分,由⾼到低排序
    在这里插入图片描述
  • 可以使⽤列的别名进⾏排序
    在这里插入图片描述
  • 所有英语成绩不为NULL的同学,按语⽂成绩从⾼到低排序
    在这里插入图片描述

注意:

  • 查询中没有ORDER BY ⼦句,返回的顺序是未定义的,永远不要依赖这个顺序
  • ORDER BY ⼦句中可以使⽤列的别名进⾏排序
  • NULL 进⾏排序时,视为⽐任何值都⼩,升序出现在最上⾯,降序出现在最下⾯

6、分⻚查询

分页查询可以有效的限制一次查询返回的记录条数。
通过分页查询可以有效控制一次查询出来的结果集中的记录条数,可以有效的减少数据库服务器的压力,同时对于用户也比较友好。

(1)语法

在这里插入图片描述

(2)⽰例

  • 从第0条开始,只取前面2条记录作为返回的结果
    在这里插入图片描述
  • 执行顺序在order by之后
    在这里插入图片描述
  • 查询第⼀⻚数据
    start = (当前页号-1)*每页显示的记录数
    在这里插入图片描述
  • 查询第⼆⻚数据
    在这里插入图片描述
  • 查询第三⻚数据,没有达到limit的条数限制,也不会有任何影响,有多少条就显⽰多少条
    在这里插入图片描述
  • 起始位置超过了表中记录的范围,执行没有问题,但是会返回一个空结果集
    在这里插入图片描述
  • 从位置为1的记录开始, 向后读取两条记录
    在这里插入图片描述

四、Update 修改

1、语法

在这里插入图片描述
1、确定要更新的表和列
2、要更新的目标值
3、更新条件
先按条件查找,之后再更新查找到的结果

2、⽰例

  • 将孙悟空同学的数学成绩变更为 80 分
    (1)查看原始数据
    在这里插入图片描述
    (2)更新操作
    在这里插入图片描述
    (3)查看结果,数学成绩更新成功
    在这里插入图片描述
  • 将曹孟德同学的数学成绩变更为 60 分,语⽂成绩变更为 70 分
    (1)查看原始数据
    在这里插入图片描述>(2)更新操作
    在这里插入图片描述
    (3)查看结果
    在这里插入图片描述
  • 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
    (1)查看原始数据
    在这里插入图片描述
    (2)更新操作
    在这里插入图片描述
    (3)查看结果
    在这里插入图片描述
    (4)修改后总成绩倒数前三的 3 位同学和数据成绩
    在这里插入图片描述
  • 将所有同学的语⽂成绩更新为原来的 2 倍
    (1)查看原始数据
    在这里插入图片描述
    (2)更新操作
    在这里插入图片描述
    (3)查看结果
    在这里插入图片描述

3、Update 注意事项

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

五、Delete 删除

1、语法

在这里插入图片描述

2、⽰例

  • 删除孙悟空同学的考试成绩
    (1)查看原始数据
    (2)删除操作
    (3)查看结果

在这里插入图片描述

  • 删除整张表数据
    (1)准备测试表
    (2)插⼊测试数据
    (3)查看测试表
    (4)删除整张表中的数据
    (5)查看结果

在这里插入图片描述

3、Delete注意事项

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、截断表

1、语法

在这里插入图片描述

2、⽰例

(1)准备测试表
在这里插入图片描述
(2)插⼊测试数据
在这里插入图片描述
(3)查看测试表
在这里插入图片描述
(4)查看建表结构,AUTO_INCREMENT=4
在这里插入图片描述
(5)截断表,注意受影响的⾏数是0
在这里插入图片描述
(6)查看表中的数据
在这里插入图片描述
(7)查看表结构,AUTO_INCREMENT已被重置为0
在这里插入图片描述
(8)继续写⼊数据
在这里插入图片描述
(9)⾃增主键从1开如计数
在这里插入图片描述
(10)再次查看表结构,AUTO_INCREMENT=2
在这里插入图片描述

3、Truncate注意事项

  • 只能对整表操作,不能像 DELETE ⼀样针对部分数据
  • 不对数据操作所以⽐DELETE更快,TRUNCATE在删除数据的时候,不经过真正的事务,所以⽆法回滚
  • 会重置 AUTO_INCREMENT 项

七、插⼊查询结果

1、语法

在这里插入图片描述

2、⽰例

  • 删除表中的重复记录,重复的数据只能有⼀份
    (1)创建测试表,并构造数据
    (2)插⼊测试数据
    (3)查看结果
    在这里插入图片描述

  • 实现思路:原始表中的数据⼀般不会主动删除,但是真正查询时不需要重复的数据,如果每次查询都使⽤DISTINCT进⾏去重操作,会严重降低效率。可以创建⼀张与 t_recored 表结构相同的表,把去重的记录写⼊到新表中,以后查询都从新表中查,这样真实的数据不丢失,同时⼜能保证查询效率
    (1)创建⼀张新表,表结构与t_recored相同
    在这里插入图片描述

(2)新表中没有记录
在这里插入图片描述
(3)原表中的记录去重后写⼊到新表
在这里插入图片描述
在这里插入图片描述
(4)查询新表中的记录,实现去重
在这里插入图片描述
(5)新表与原来重命名
在这里插入图片描述
(6)查询重命名后表中的记录,实现需求且原来中的记录不受影响
在这里插入图片描述

八、聚合函数

1、常⽤函数

在这里插入图片描述

2、⽰例

(1)COUTN

  • 统计exam表中有多少记录
    使⽤ * 做统计
    在这里插入图片描述
    在这里插入图片描述
    使⽤常量做统计
    在这里插入图片描述
    在这里插入图片描述

  • 统计有多少学⽣参加数学考试
    使⽤指定列做统计:建议主键列
    在这里插入图片描述

  • 统计有多少学⽣参加英语考试
    查看表中的记录,张⻜没有参加英语考试
    在这里插入图片描述
    NULL 的数据不会计⼊结果
    在这里插入图片描述

  • 统计语⽂成绩⼩于10分的学⽣个数
    加⼊where条件
    在这里插入图片描述

(2)SUM

  • 统计所有学⽣数学成绩总分
    在这里插入图片描述
  • 统计所有学⽣英语成绩总分
    值为NULL的列不参与统计
    在这里插入图片描述
  • 不能统计⾮数值的列
    警告信息,可以使⽤show warnings查看
    在这里插入图片描述

(3)AVG

  • 统计英语成绩的平均分
    NULL值不参与统计
    在这里插入图片描述
    在这里插入图片描述
  • 统计平均总分
    在这里插入图片描述

(4)MAX

  • 查询英语最⾼分
    在这里插入图片描述

(5)MIN

  • 查询 > 70 分以上的数学最低分
    在这里插入图片描述
  • 查询数据成绩的最⾼分与英语成绩的最低分
    可以使⽤多个聚合函数
    在这里插入图片描述

九、Group by 分组查询

GROUP BY ⼦句的作⽤是通过⼀定的规则将⼀个数据集划分成若⼲个⼩的分组,然后针对若⼲个分组进⾏数据处理,⽐如使⽤聚合函数对分组进⾏统计。

1、语法

在这里插入图片描述

  • col_name | expr:要查询的列或表达式,可以有多个,必须 GROUP BY ⼦句中作为分组的依据
  • aggregate_function:聚合函数,⽐如COUNT(), SUM(), AVG(), MAX(), MIN()
  • aggregate_expr:聚合函数传⼊的列或表达式,如果列或表达式不在 GOURP BY ⼦句中,必须包含中聚合函数中

2、⽰例

  • 准备测试表及数据职员表emp,列分别为:id(编号),name(姓名),role(⻆⾊),salary(薪⽔)
    在这里插入图片描述
  • 统计每个⻆⾊的⼈数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 统计每个⻆⾊的平均⼯资,最⾼⼯资,最低⼯资
    在这里插入图片描述

3、having⼦句

使⽤GROUP BY 对结果进⾏分组处理之后,对分组的结果进⾏过滤时,不能使⽤ WHERE ⼦句,⽽要使⽤ HAVING ⼦句

  • 显⽰平均⼯资低于1500的⻆⾊和它的平均⼯资
    在这里插入图片描述
    在这里插入图片描述

4、Having 与Where 的区别

  • Having ⽤于对分组结果的条件过滤
  • Where ⽤于对表中真实数据的条件过滤
    在这里插入图片描述

总结:
在这里插入图片描述


十、内置函数

1、⽇期函数

参考链接:
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals
14.7 Date and Time Functions
11.5 Expressions

(1)⽰例

  • 获取当前⽇期和时间
    在这里插入图片描述
  • 提取指定datatime的⽇期部分
    在这里插入图片描述
  • 在给定⽇期的基础上加31天
    在这里插入图片描述
  • 在给定⽇期的基础上减去1⽉
    在这里插入图片描述
  • 计算两个⽇期之间相差多少天
    在计算时只使⽤⽇期部分
    在这里插入图片描述
    表达式1表⽰的⽇期早于表达式2表⽰的⽇期时返回负数
    在这里插入图片描述

2、字符串处理函数

参考链接:
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
14.8 String Functions and Operators

(1)⽰例

  • 显⽰学⽣的考试成绩,格式为 “XXX的语⽂成绩:XXX分,数学成绩:XXX分,英语成绩:XXX分”
    在这里插入图片描述

3、数学函数

参考链接:
https://dev.mysql.com/doc/refman/8.0/en/numeric-functions.html
MySQL :: MySQL 8.0 Reference Manual :: 14.6 Numeric Functions and Operators

(1)⽰例

  • 返回不⼩于20.36的最⼩整数值
    在这里插入图片描述
  • 返回不⼤于11.32的最⼩整数值
    在这里插入图片描述
  • 字符串的循环冗余校验
    在这里插入图片描述
    在这里插入图片描述

4、其他常⽤函数

在这里插入图片描述

(1)⽰例

  • 对⼀个字符串进⾏md5加密
    在这里插入图片描述
  • ifnull函数
    第⼀个参数不为NULL, 返回第⼀个参数的值
    在这里插入图片描述
    第⼀个参数为NULL, 返回第⼆个参数的值
    在这里插入图片描述

以上是本篇文章的全部内容,如果文章有错误或者有看不懂的地方,多和喵博主交流。互相学习互相进步。如果这篇文章对你有帮助,可以给喵博主一个关注,你们的支持是我最大的动力。


文章转载自:

http://cWMCQ1G1.sjqpm.cn
http://7ZOleBfF.sjqpm.cn
http://FVzxJjUY.sjqpm.cn
http://r0OVXAya.sjqpm.cn
http://FvlGPQXX.sjqpm.cn
http://q1MNPxeE.sjqpm.cn
http://tWMljECa.sjqpm.cn
http://Yzs18jiR.sjqpm.cn
http://JnPfAGam.sjqpm.cn
http://zSo3MzYJ.sjqpm.cn
http://LGYUkEnR.sjqpm.cn
http://a1BBpv7U.sjqpm.cn
http://pkNaivHv.sjqpm.cn
http://LAmnKEea.sjqpm.cn
http://8ZhP6Twp.sjqpm.cn
http://vA4wvdcl.sjqpm.cn
http://2cHWoEt2.sjqpm.cn
http://gDtWmsQf.sjqpm.cn
http://1OYyuKXq.sjqpm.cn
http://m97l2BfK.sjqpm.cn
http://6xCexVhV.sjqpm.cn
http://DRgCUYO0.sjqpm.cn
http://Lm2vfYER.sjqpm.cn
http://pBpoCylh.sjqpm.cn
http://SWYhjK3o.sjqpm.cn
http://O1ds9GpX.sjqpm.cn
http://95gjgcKf.sjqpm.cn
http://S7U152BM.sjqpm.cn
http://qfth3USv.sjqpm.cn
http://PD9qKrIG.sjqpm.cn
http://www.dtcms.com/a/374982.html

相关文章:

  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路
  • Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
  • 【MySQL】从零开始了解数据库开发 --- 数据类型
  • ElasticSearch复习指南:从零搭建一个商品搜索案例
  • 宋红康 JVM 笔记 Day15|垃圾回收相关算法
  • 【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
  • 【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)
  • 前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南
  • 算法题(203):矩阵最小路径和
  • 强化学习在复杂调度问题中的常见陷阱与改进思路
  • AI基础设施——NVIDIA GB300 NVL72
  • 实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
  • 第一章 神经网络的复习
  • Spring Cloud 配置中心
  • Typescript入门-d.ts类型声明文件讲解
  • DBF Viewer 2000:专业的DBF文件查看与编辑工具
  • 【字符压缩存在整数32bit技术】
  • 【芯片设计-信号完整性 SI 学习 1.0 -- SI 介绍】
  • uniapp开源多商户小程序商城平台源码 支持二次开发+永久免费升级
  • map / unordered_map / set / unordered_set
  • 不同数据仓库模型有什么不同?企业如何选择适合的数据仓库模型?
  • jmeter入门
  • 【ShiMetaPi】基于BM1684X的智能工业视觉边缘计算盒子解决方案
  • [论文阅读] 算法 | 抗量子+紧凑!SM3-OTS:基于国产哈希算法的一次签名新方案