【MySQL】数据库的基本操作三:增删改查进阶

news2024/12/28 20:21:29

目录

🌟一、数据库约束

🌈1、Null约束:创建表时,可以指定某列不能为空。

🌈2、Unique约束:唯一约束

🌈3、Default约束:默认值约束

🌈4、Primary Key:主键约束(不能为空且要唯一)

🌈5、foreign key:外键约束(主外键关系是两个表之间的。)

🌈6、Check约束(了解):MySQL使用时不报错,但忽略该约束。

🌟二、表的设计

🌟三、新增

🌈1、插入查询结果:将一个表的查询结果直接插入到另一个表中。

🌟四、查询

聚合查询

🌈1、聚合函数

🌈2、Group By子句​

🌈3、Having:如果要对group by后分组的结果做过滤,必须要用having做过滤。

联合查询 (关键)

🌈1、内连接

🌈2、外连接

🌈3、自连接

🌈4、子查询

🌈5、合并查询


🌟一、数据库约束

类型描述
Not Null表示某列值不能为Null
Unique保证某行的值在改列中是唯一的
Default在没有赋值时使用的是默认值
Primary Key是Not Null与Unique的结合。也就是既不能为空,且该值在列中是唯一的。保证某列或者多个列有唯一标识,有利于快速找到表中的唯一记录。
Foreign Key保证一个表中的数据匹配另一个表中的参照完整性。
Check保证列中的值符合指定的条件。

        我们来具体演示一下~

🌈1、Null约束:创建表时,可以指定某列不能为空。

设计一个学生表,指定id不能为空。

 🌈2、Unique约束:唯一约束

指定sn学号列为唯一的,不重复的。

  🌈3、Default约束:默认值约束

创建student表的时候,默认name名为'无名氏'。

   🌈4、Primary Key:主键约束(不能为空且要唯一)

创建student表,指定id是主键约束。

字段名id设置为主键为空报错:

 字段名id设置为重复的值报错:

        注意:如果字段名为整数类型,设置主键的时候一般搭配auto_increment自增长来使用。当插入数据对应字段不给值的时候,会使用最大值+1。

 🌈5、foreign key:外键约束(主外键关系是两个表之间的。)

外键约束用于关联其他表的主键或者唯一键。其中负责约束的一方,称为父表。被约束的一方,称为子表。其中foreign key(字段名)  填写的是本表(子表)的外键, references 主表列)  填写的是父表的主键

foreign key (字段名) references 主表(列);

🌰创建班级表classes,id为主键。创建学生表student,学生表中除了有自身的id之外,还关联着班级表classes_id。一个学生对应一个班级,一个班级对应多个学生。

(1)创建班级表和学生表

(2)父表对子表的约束:往学生表中插入数据

 (3)子表对父表的限制:如果要删除classes表中的一条编号是id的数据,那就要先删除student表中对应classes_id的记录。原因就是:如果classes表中现在的id一共有3个,表示1班2班和3班,然后你直接删除classes班级表中id=3的记录,那么此时班级只剩下2个了,但是学生表中还有之前classes_id班级编号为3的学生存在呀,你这让他们一下子“无处可归”了😅。

错误操作:

 正确演示:

  🌈6、Check约束(了解):MySQL使用时不报错,但忽略该约束。

在一些情况下,我们需要字段在指定范围的输入,例如:性别只能输入 '男'或者'女'。我们除了在程序上控制以外,我们还能使用 CHECK 约束 来规范数据。 


🌟二、表的设计

        根据需求文档或者现实世界中的实体或类转化为具体的一张张表。表对应到Java中的类,表中的字段名对应Java类中的属性。

        在设计数据库的时候主要有以下四种关系:(1)没有关系;(2)一对一关系;(3)一对多关系;(4)多对多关系。后三者又称为表设计的三大范式。

        1、一对一:每个人只有一个身份证号。

         2、一对多:一个学生只能有一个班级,一个班级可以有很多学生。

        3、多对多:一个学生可以选多门课程,一门课程可以有很多学生选择。


🌟三、新增

🌈1、插入查询结果:将一个表的查询结果直接插入到另一个表中。

指定的列名必须要和查询的列名顺序保持一致。

insert into 表名 (指定的列名) select ...


🌟四、查询

聚合查询

🌈1、聚合函数

(1)统计班级共有多少学生

 (2)统计英语成绩总分

 (3)求语数英的平均分

 (4)返回语文的最高分和数学的最低分

🌈2、Group By子句

       select 中使用 Group By 子句可以对指定列进行分组查询。需要满足:使用 Group By进行分组查询时,select  指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。        

select 要分组的字段, sum(分组后要做的操作,以sum为例) from 表名 (where) group by 要分组的字段 having (对group by后的结果做过滤);

测试表emp信息如下:

 (1)求不同角色下的平均工资 

(2)求不同角色下的平均工资但是不包含董事长这个角色

 🌈3、Having:如果要对group by后分组的结果做过滤,必须要用having做过滤。

注意区分:

SQL执行的顺序是From —> where ——> select  —— > group by

where是对表中的数据整体做过滤,跟在from表名后面。

having是对分组后的结果做过滤,要跟在group by子句后面。

(1)过滤掉平均工资小于800的角色,且角色不为董事长。 


联合查询 (关键)

        为什么要用联合查询?在实际生活中,数据通常来自于不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积。什么是笛卡尔积?就是对表中的所有记录做一个全排列。在联合查询的过程中可以为表起别名。

🌈1、内连接

select 字段 from 表1 别名1 (inner) join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1, 表2 别名2 where 连接条件 and 其他条件;

(1) 查询许仙同学的成绩

 (2)查询所有同学的总成绩以及同学们的姓名。

(3)查询所有同学每门课的成绩以及姓名。 

🌈2、外连接

        外连接分为左外连接和右外连接。左外连接就是左表完全显示,右边如果没有匹配到数据,就以NULL来填充当前行。右外连接就是右表信息完全显示。

-- 左外连接:表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件:

-- 右外连接:表2完全显示
select 字段名 from 表名1 right join 表名2 on 连接条件:

🌈3、自连接

        自连接连接的是同一张表。实质是将列转化为行,从而实现行与行之间的计算。在同一张表自连接两次,会显示不能重复使用表名,因此要起别名。

(1)找出所有“计算机原理”比“Java”成绩高的成绩信息。

 

🌈4、子查询

        子查询指的是嵌入在其他sql语句中的select语句,也叫作嵌套查询。简而言之,就是一条查询的条件依赖另一个的查询结果。

(1)查询“不想毕业”同学的同班同学。

之前的做法:

 使用子查询:

 (2)使用多行子查询的例子

 🌈5、合并查询

        union和union all。两者都是用于取得两个结果集的并集,在使用的时候,前后查询的结果集中,要求字段必须保持一致。区别是 union去重,union all不去重。当使用union 时,会自动去除掉结果集中的重复集。这里的重复行指的是必须所有的行都是重复的。

 (1)union将两个表中不同的数据合并到一个查询结果集中。

 (2)union和union all的区别


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

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

相关文章

@RefreshScope 动态刷新机制

前言 一般在项目中,我们集成Nacos做统一配置管理,同时配置支持动态刷新,项目中都会用到RefreshScope注解,这里和大家一起看看RefreshScope实现动态刷新的原理。 Scope注解 RefreshScope 能实现动态刷新全仰仗着Scope 这个注解&…

Matlab进阶绘图第19期—三角气泡热图

三角气泡热图,顾名思义,就是仅保留气泡热图数据矩阵的上三角或下三角部分。 三角气泡热图简单明了,通过不同颜色、不同大小的圆形表示数据的大小,可以更加直观地对矩阵数据进行可视化表达。 本文使用自制的tribubbleheatmap小工…

LSF/MM/BPF Summit 2023

5月8号,今年度的Linux Storage, Filesystem, Memory Management & BPF Summit已经拉开帷幕,Linux存储、文件系统、内存管理以及BPF领域的年度峰会又一次到来。此次峰会聚集了Linux最重要的开发专家以及内核子系统维护者,以规划和探索改进…

Arcgis Server/GeoServer服务启动后内存使用高,系统卡

说明 ArcGIS Server和geoserver本质上都是Tomcat服务,所以只需要设置Tomcat最大堆大小和最大内存大小就可以。此方法通用与Tomcat自身配置。 配置文件位置 一.Tomcat 安装目录/bin 二.ArcGIS Server .\ArcGIS\Server\framework\runtime\tomcat\bin 三.Geoserver …

【代码随想录】刷题Day22

1.二叉搜索树的公共祖先 235. 二叉搜索树的最近公共祖先 不同于普通二叉树,二叉搜索树得益于其顺序结构,其公共祖先的查找也有迹可循。自顶向下递归遍历,只要一个节点的val夹在p和q之间,那么该节点就是最近公共祖先。 1.首先公共…

HTML 中的常用标签用法

目录 1.基本结构 2.注释标签 3.标题标签 4.换行标签 5.格式化标签 6.图片标签 7.超链接标签 8.表格标签 合并单元格 9.列表标签 10.表单标签 form标签 input标签 补充 无语义标签 总 HTML是一种超文本标记语言,在网站上看到的信息都是它实现的.(是由标签所构…

RK3588平台开发系列讲解(内存篇)Linux 伙伴系统数据结构

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、 页二、区三、内存节点沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 系统中,用来管理物理内存页面的伙伴系统,以及负责分配比页更小的内存对象的 SLAB 分配器了。 本篇将介绍伙伴系统相关数据结…

M304A_S905L3-B_5621无线蓝牙_当贝纯净桌面-线刷固件包

M304A_S905L3-B_5621无线蓝牙_当贝纯净桌面-线刷固件包 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件,运…

springboot第19集:权限

article 文章表sys_permission 后台权限表sys_role 后台角色表sys_role_permission 角色-权限关联表sys_user 用户表sys_user_role 用户-角色关联表 image.png image.png sys_user_role id user_id(用户id) role_id(角色id) sys_role id role_name(角色名) create_time(创建时间…

决策树生成剪枝算法原理

决策树生成算法 首先明确信息熵 信息增益的概念 信息增益表示得知特征X信息是的类Y的信息不确定性减少的程度 H(D) 经验熵表示对数据D进行分类的不确定性 H(D|A)经验条件熵表示对特征A给定条件下对数据集D进行分类的不确定性(显然这个值越小越好 那么g(D,A)信息…

基于粒子群优化的中文文本分类

基本思路: 方法:使用优化算法(如粒子群)优化支持向量机SVM; 本文所使用的应用背景:中文文本分类(同时可以应用到其他背景领域,如) 应用背景(元启发式算法优…

(学习日记)2023.5.9

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

QTableview常用几种代理总结

QTableview常用几种代理总结 [1] QTableview常用几种代理总结1、QCheckBox和QRadioButton的嵌入2、QHeadView中嵌入QCheckBox类3、QCombobox的嵌入4、 QCombox QCheckBox类5、SpinBox的嵌入类6、QProcess的嵌入类7、QProcess绘制版本的嵌入类8、QPushButton/QLabel/QImage的嵌…

鸿蒙Hi3861学习八-Huawei LiteOS-M(事件标记)

一、简介 事件是一种实现任务间通信的机制,可用于实现任务间的同步。但事件通信只能是事件类型的通信,无数据传输。一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒…

mongodb副本集搭建

1.本次搭建使用三台centos7主机搭建集群,关闭防火墙和selinux服务 2.主机信息如下图所示 主机名称IPPortServiceA10.1.60.11427017mongodbB10.1.60.11527017mongodbC10.1.60.11827017mongodb 3.从官网下载mongodb安装包(我这里下载的是6.0.5版本的tgz包) Instal…

小家电LED显示驱动多功能语音芯片IC方案 WT2003H4 B002

随着时代的进步,智能家电的普及已经成为了一个趋势。而在智能家电中,LED显示屏也成为了不可或缺的一部分。因此,在小家电的设计中,LED显示驱动芯片的应用也越来越广泛。比如:电饭煲、电磁炉、数字时钟、咖啡机、电磁炉…

【Vue3】如何创建Vue3项目及组合式API

文章目录 前言 一、如何创建vue3项目? ①使用 vue-cli 创建 ②使用可视化ui创建 ③npm init vite-app ④npm init vuelatest 二、 API 风格 2.1 选项式 API (Options API) 2.2 组合式 API (Composition API) 总结 前言 例如:随着前端领域的不断发展&am…

【SSM框架】SpringMVC 中常见的注解和用法

SSM框架 SpringMVC 中常见的注解和用法基础注解介绍RequestMapping 注解介绍PostMapping 和 GetMapping 注解介绍 获取参数相关注解的介绍只通过 RequestMapping 来获取参数只传递一个参数传递对象参数传递多个参数(非对象) RequestParam 后端参数重命名required 必传参数的设置…

SpringBoot+Redis+自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数)

场景 SpringBoot搭建的项目需要对开放的接口进行防刷限制,不同接口指定多少秒内可以请求指定次数。 比如下方限制接口一秒内最多请求一次。 注: 博客:霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主 实现 1、实现思路 首…

flink学习37:DataStream/DataSet与Table的互相转换

DataStream/DataSet转换成视图 DataStream/DataSet转换成表 表转换成DataStream/DataSet 表转换为DataStream/DataSet时,需要指定字段数据类型,最方便的就是把数据类型定为row,即行数据。 两种模式: 把表转为dataStream 把表转为d…