当前位置: 首页 > 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

在这里插入图片描述

相关文章:

  • SpringCloud系列(41)--SpringCloud Config分布式配置中心简介
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model
  • 在线之家官网入口 - 免费高清海外影视在线观看平台
  • STM32之28BYJ-48步进电机驱动
  • 思二勋:算法稳定币的发展在于生态场景、用户和资产的丰富性
  • 打造地基: App拉起基础小程序容器
  • 大事件项目记录12-文章管理接口开发-总
  • 现代 JavaScript (ES6+) 入门到实战(一):告别 var!拥抱 let 与 const,彻底搞懂作用域
  • Spark Web UI从0到1详解
  • SpringSecurity6-授权-动态权限
  • (NIPS-2024)CogVLM:预训练语言模型的视觉专家
  • 大事件项目记录13-接口开发-补充
  • 深入剖析 Linux 内核网络核心:sock.c 源码解析
  • 现代 JavaScript (ES6+) 入门到实战(四):数组的革命 map/filter/reduce - 告别 for 循环
  • 数据挖掘、机器学习与人工智能:概念辨析与应用边界
  • 设计模式精讲 Day 18:备忘录模式(Memento Pattern)
  • FastAPI路由管理APIRouter实战指南
  • 广度优先搜索BFS(广搜)复习(c++)
  • 【智能协同云图库】智能协同云图库第三弹:基于腾讯云 COS 对象存储—开发图片模块