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

MySQL数据库的增删改查

MySQL数据库的增删改查

  • 创建
  • 查找
    • 单表查找
      • 筛选列(字段)
      • 子语句
        • 条件查询 where子语句
        • 限制查询 limit子语句
        • 排序子语句 order by 列名
      • 函数
        • 聚合函数
        • 分组函数 group by
    • 多表查询
      • 一对一的关系
      • 一对多的关系
      • 连表查询
      • 多对多的关系
  • 增删改
    • 添加
    • 删除
    • 修改

创建

首先先新建连接

在这里插入图片描述

其次创建数据库

在这里插入图片描述

其中字符集选择 utf8mb4、排序规则选择 utf8mb4_bin

然后创建 student 表

其中 id 不是空且设为主键自动递增
int 表示整形数据、varchar 表示字符串

在这里插入图片描述

数据添加

在这里插入图片描述

查找

单表查找

筛选列(字段)

我们在sql中输入:

-- 查找对应字段信息
select name,age from student
-- 查找全部信息
select * from student

结果为:

在这里插入图片描述

子语句

条件查询 where子语句

where子语句在查找、修改、删除等均适用

select * from student where sex='男'

在这里插入图片描述
算数运算符: >、<、>=、<=、!= 或 <>
逻辑运算符: and并且、or或者、not取非(主要用在 is in)

select * from student where age!=22

在这里插入图片描述

select * from student where age >= 22  and age <= 24  and sex="女"

在这里插入图片描述

select * from student where age < 22  or age > 24

在这里插入图片描述

between … and (相当于是闭区间[ ])

select * from student where age between 22 and 24

在这里插入图片描述
in() (相当于是备选池子)

select * from student where id in(2,5,6)

在这里插入图片描述

select * from student where age not in(22,25,20)

在这里插入图片描述

is (一般与 null 连用)

此时我们在student表中添加一个信息age为空的信息

在这里插入图片描述
再在sql中输入:

select * from student where age is null

那么会呈现:
在这里插入图片描述

限制查询 limit子语句

第一种写法: limit a,b
其中a表示起始索引值(索引值从0开始)、b表示查询个数

select * from student limit 0,3

在这里插入图片描述

即从索引为0(第1个位置)的位置往后查3条

另一种写法: limit b offset a
其中b表示查询个数、a表示起始索引值(索引值从0开始)

分页查询的实现

例如当我们实现每页显示两条数据,代码可以这样写

--第一页
select * from student limit 0,2
--第二页
select * from student limit 2,2
--第三页
select * from student limit 4,2
--第四页
select * from student limit 6,2

总结规律
对于页码 page、一页大小 pageSize
那么我们可以这样操作来实现:

select * from student limit (page-1)*pageSize,pageSize

对于既有where子语句又有limit子语句
where子语句在前

select * from student where age>=22  limit 0,2

在这里插入图片描述

排序子语句 order by 列名

desc降序|asc升序(asc可以省略)

select * from student order by age desc

在这里插入图片描述

既有where子语句又有limit子语句还有排序子语句:
where子语句在最前,其次是 order by,最后是 limit 语句

select * from student where age>=22 order by age desc limit 0,2

在这里插入图片描述

函数

聚合函数

sum()求和、avg()取平均、max()取最大值、min()取最小值、count()取得的记录数、count()取数量
其中 count(字段名称) count统计某一个字段的情况下不会统计值为null的记录

此时我们修改 student 表格的数据为:

在这里插入图片描述

select count(age) from student

在这里插入图片描述
结果为7,id为8的数据没有 age 信息所以不统计

select count(*) from student

统计表中记录的数量
在这里插入图片描述

分组函数 group by

group by 字段名字,表示要根据哪个字段进行分组

修改表中数据为:

在这里插入图片描述

对组内可进行求和求平均等

select sum(age),class from student group by class

在这里插入图片描述

筛选的实现:
分组之前加条件用的是where,对分组之后查询出来的结果再筛选用的是having

select sum(age),class from student where sex = "男" group by class

在这里插入图片描述

select sum(age),class from student where sex = "男" group by class having class = 1

在这里插入图片描述

多表查询

一对一的关系

例如丈夫与妻子的关系
在这里插入图片描述

最优解:合成一张表
在这里插入图片描述

一对多的关系

例如学生与班级的关系
在这里插入图片描述

最优解:在多的一方加外键
在这里插入图片描述

此时我们创建一个新表class

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

当使用 select * from student,class 时,结果是笛卡尔积

在这里插入图片描述
正确写法为:

select * from student,class where student.classid = class.id

在这里插入图片描述

补充重命名
字段名或表名 as 后面是新名字 (as可省)

select s1.id,name,sex,age,classname as 班级名称 from student as s1,class as c1 where s1.classid = c1.id

在这里插入图片描述

在 student 和 class 表中分别再添加一条信息

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

此时再输入

select s1.id,name,sex,age,classname as 班级名称 from student as s1,class
as c1 where s1.classid = c1.id

时,发现结果和上面是一样的,没有班级的学生或没有学生的班级都查不出来,即只能查班级与学生的公共部分

连表查询可以解决问题

连表查询

内连接:
inner join … on (其中inner可以省略)on 后面跟的是连接条件(找的是公共部分)

select * from student join class on student.classid = class.id

在这里插入图片描述

连表查询连接条件与筛选条件做区分,连接条件写在on里、筛选条件写在where里,而多表查询不做区分,在where中添加 and、or 等条件即可

select * from student join class on student.classid = class.id where sex='女'

在这里插入图片描述

外连接:
左外连接:left join…on
多查左表有而公共部分没有的部分

select * from student left join class on student.classid = class.id

在这里插入图片描述

右外连接:right join … on
多查右表有而公共部分没有的部分

select * from student right join class on student.classid = class.id

在这里插入图片描述

多对多的关系

例如学生与课程的关系
在这里插入图片描述
最优解:再创建一张关系表
在这里插入图片描述

操作:

此时添加一个表,表名为"学生表"

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

此时添加一个表,表名为"课程表"

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

此时添加一个表,表名为"选课表"

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

select * from 学生表,选课表,课程表 where 学生表.id = 选课表.sid and 选课表.cid = 课程表.id

在这里插入图片描述

select * from 学生表 join 选课表 join 课程表 on 学生表.id = 选课表.sid and 选课表.cid = 课程表.id

最终结果上面两个效果相同

此时我们进行如下操作:

select * from 学生表 left join 选课表 on  学生表.id = 选课表.sid  join 课程表 on 选课表.cid = 课程表.id

在这里插入图片描述
所以可以一路 join 后再 on,也可以 join 一个 on 一个

增删改

添加

insert into student(name,age,sex,classid) values("vivi",25,"男",3)

id一般不添加已经设置为自动递增了
在这里插入图片描述

删除

删除整个表

delete from student

删除表的某个信息,需要用到where子语句

delete from student where id = 9

在这里插入图片描述

修改

需要用到where子语句

update student set name = "pipi",age = 20 where id = 10

在这里插入图片描述

http://www.lryc.cn/news/576843.html

相关文章:

  • 茶叶根茎分割数据集介绍与应用
  • RNN人名分类器案例
  • Android大图加载优化:BitmapRegionDecoder深度解析与实战
  • Ubuntu20 编译安装 Redis7.2.4
  • SAP顾问职位汇总(第26周)
  • 大模型岗位面试常见问题及解答
  • python+uniapp基于微信小程序的多人协同办公系统
  • 人工智能之数学基础:如何判断正定矩阵和负定矩阵?
  • chapter02_AbstractBeanfactory与模板方法
  • python sklearn 机器学习(1)
  • Ragflow本地部署和基于知识库的智能问答测试
  • 【Typst】自定义彩色盒子
  • 医疗AI智能基础设施构建:向量数据库矩阵化建设流程分析
  • 如何搭建基于RK3588的边缘服务器集群?支持12个RK3588云手机
  • Qt QGraphics简述及例程 - QGraphicsView、QGraphicsScene和QGraphicsItem
  • 深入剖析Nacos服务发现与注册,及如何基于LoadBalancer实现负载均衡
  • #华为昇腾#华为计算#昇腾开发者计划2025#
  • Redis分布式锁核心原理源码
  • #华为鲲鹏#华为计算#鲲鹏开发者计划2025#
  • Transformer结构与代码实现详解
  • 【电路笔记 TMS320F28335DSP】TI SCI (增强型的UART) 点对点异步串行通信接口
  • 【OpenGL学习】(八)图形变换
  • Oauth2 自定义设置token过期时间
  • 状态机编程实战 | 如何更优雅地处理字符串
  • 全新大模型开源,腾讯(int4能打DeepSeek) Vs 谷歌(2GB运行多模态)
  • Gemini-CLI:谷歌开源的命令行AI工具,重新定义开发者工作流
  • Ubuntu22 安装 RTX 5070 Ti Nvidia Driver 驱动
  • 自学嵌入式 day27 进程
  • mac系统快捷键及命令安装
  • 状态模式 - Flutter中的状态变身术,让对象随“状态“自由切换行为!