【MySQL】MySQL 表的增删改查(进阶)

2024-08-26 17:36

本文主要是介绍【MySQL】MySQL 表的增删改查(进阶),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

约束类型 

not null 非空

unique 唯一

default 指定默认值

primary key 主键

foreign key 外键

check字句  检查

表设计

确定实体  

实体之间的关系

聚合查询

聚合函数

count  计算列的行数

sum  计算列的和

group by 分组查询

搭配条件使用group by

分组之前的条件  用where

分组之后的条件  用having

同时包含 

联合查询(多表查询)

内连接  外连接 和 自连接

内连接

外连接 

左外连接

右外连接

​编辑

自连接

练习 

多表查询的步骤

多表查询 使用join

自连接 练习 

子查询

合并查询

union

union all 


约束类型 

not null 非空

指示某列不能存储 NULL 值。

unique 唯一

保证某列的每行必须有唯一的值。

default 指定默认值

规定没有给列赋值时的默认值。

primary key 主键

not null 和 unique 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。 大部分情况下,都是用数字作为主键(当然有时候会使用是字符串).

 但是数据库 允许把多个列共同作为一个主键(联合主键)

mysql 提供" 自增主键" 自动分配(auto_increment) 主键,自增主键只针对 int/ bigint 整数.

foreign key 外键

保证一个表中的数据匹配另一个表中的值的参照完整性。

 父表约束子表,子表也会对父表反向约束~

若要删除父子表,  确保先删除 子表,在删除 父表 

check字句  检查

保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。(MySQL不支持check,但是写了check 不会报错 ,检测条件不会生效)

表设计

根据实际需求, 创建几个表, 每个表有哪些列,以及多个表之间有哪些联系 (即确定 需求中的"实体" 和"联系")

确定实体  

针对"实体" 抽象出其 特点,提取出需要用到的关键信息,

有几个实体,一般就会有几个表,每个实体用一个表来表示 

实体之间的关系

  1. 一对一关系, 如:一个学生对应一个学号,一个学号只能属于一个学生
  2. 一对多关系, 如:一个学生只能属于一个班级,但一个班级可以包含多个学生
  3. 多对多关系, 如:一个学生可以选多个课程,一门课程也可以被多个学生选择
  4. 没关系

聚合查询

聚合函数

count  计算列的行数

下图myql语句是 先执行select * from exam_result , 根据第一句的结果再执行count

结果中包含null ,可能会对上面的结果 产生影响(会把null也算在结果中) 但select 列名,遇到空值 不会进行计数.

sum  计算列的和

需要确保该列是数字用于计算

null和其他数值进行各种运算,结果都为null,  但sum会跳过null,不参与计算.

若是字符串,会出问题

avg() ,max() ,min() 等函数同理~

group by 分组查询

使用group by 指定一个列,会把列的值相同行归到一组

在上图的基础上排个序

搭配条件使用group by

分组之前的条件  用where

查询每个岗位的平均薪资,但是除去张三

分组之后的条件  用having

查询每个岗位的平均薪资,排除平均薪资超过5w的记录

同时包含 

查询每个岗位的平均薪资,排除张三,也排除平均薪资超过5w的记录

联合查询(多表查询)

笛卡尔积:将两个表按照一定的规律 排列组合

如图先创建两个表,一个学生表,一个班级表,它们通过classId联系在一起

内连接  外连接 和 自连接

 mysql支持内连接和 外连接,下面用两个表举例

内连接

内连接查询结果 只包含两个表 同时具备的数据

也可以使用 inner join 来写 内连接,其中inner 可以省略 

外连接 

左外连接

以左表为基准,确保左表的每个记录都出现在最终结果中,若左表的记录在右表中 没有对应的记录,就会把右表相关字段填成 null

右外连接

 mysql不支持 全外连接~

自连接

自己和自己进行 笛卡尔积,本质上是 把 行关系转换成 列 关系 

如果发现 要查询的条件 是针对两行 而不是两列时 就可以考虑使用 自连接

但是自连接的时候 ,表非常大, 此时的连接开销会非常大,容易把数据库 搞挂

练习 

多表查询的步骤

  1. 明确要查询的信息 来自那些表
  2. 对这些表进行笛卡尔积(前提是可以进行 笛卡尔积)
  3. 指定连接条件,将有意义的数据筛选出来
  4. 根据需要进一步指定条件,对数据进行筛选(新加的条件 往往通过and 方式连接)
  5. 进一步针对查询的列 进行精简 

1. 查询“许仙”同学的 成绩

多表查询 使用join

使用join on和使用 where 本质上都是一样的,where是全部写在了一起,也是两两连接,join on 更突出筛选的过程

2. 查询所有同学的总成绩,及同学的个人信息:

select student.id,student.name,sum(score.score) from student join score

on student.id = score .student_id group by student.name;使用join实现上面功能

查询所有同学的成绩,及同学的个人信息:

使用join 实现上图效果 

自连接 练习 

显示所有“计算机原理”成绩比“Java”成绩高的成绩信息

子查询

实际上就是 两个简单查询的套娃,也叫 嵌套查询, 不建议 使用

练习:  查询与“不想毕业” 同学的同班同学:

若将其拆成 两个 查询, 显然是更方便 程序员思考

 多子行查询

此时不能使用 = > < 这样的运算符 直接比较了,但可以使用 in

例如 查询“语文”或“英文”课程的成绩信息

若分成3个sql语句

合并查询

union

该操作符用于取得两个结果集的并集。会 自动去掉结果集中的重复行。

使用or达到相同效果,但是适用范围没有union 广泛

  select * from course where id <3 or name = '英文';

union all 

该操作符用于取得两个结果集的并集。不会去掉结果集中的重复行。

这篇关于【MySQL】MySQL 表的增删改查(进阶)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109230

相关文章

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二: