首页 > 数据库 >【MySQL】MySQL基础知识复习(下)

【MySQL】MySQL基础知识复习(下)

时间:2024-11-11 21:44:12浏览次数:5  
标签:NULL 查询 复习 笛卡尔 约束 MySQL 基础知识 数据 连接

前言

上一篇博客介绍了MySQL的库操作,表操作以及CRUD。

【MySQL】MySQL基础知识复习(上)-CSDN博客

本篇将进一步介绍CRUD操作,尤其是查找操作

目录

一.数据库约束

1.约束类型

1.1NULL约束

1.2UNIQUE:唯一约束

1.3DEFAULT:默认值约束

1.4PRIMARY KEY:主键约束

1.5FOREIGN KEY:外键约束

二.进阶查询

1.聚合查询

1.1 COUNT

1.2 SUM

1.3 AVG

1.4 MAX与MIN

2.分组查询:GROUP BY

  2.1 having

3.联合查询(多表查询)

3.1内连接(笛卡尔积)

3.2外连接

3.3自连接

3.4合并查询



一.数据库约束

数据库的约束是对于数据库储存的数据,做出一些“限制”。

为什么会有对数据库的约束??

那是因为数据库中的数据非常重要,我们希望数据库中的数据不要存在一些“错误”的数据,为减少错误的可能性,减少因“人”而产生的失误,用程序进行限制会更为可靠。

数据库的约束就是对保存的数据进行合法性检查,一旦发现问题能够及时给出反馈。

1.约束类型

NOT NULL - 指示某列不能存储 NULL 值。

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

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

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

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

1.1NULL约束

创建表时,如没有在类型后添加null约束,默认该类型可以为空,若是用not null约束,则该类型不能为null

如图:当not null限制时,添加null会报错

1.2UNIQUE:唯一约束

unique能确保该类型的数据不会有重复

如图,给id设定unique,若是后面设置的id与前面的重合,则会报错。

1.3DEFAULT:默认值约束

默认值默认为null,若是插入时选择某列插入,其他未选择的列则按照默认值插入。

如图,将name默认值设为无名,若在插入时未指定name,则默认未无名。

1.4PRIMARY KEY:主键约束

约定了这个表里的某个列为身份标识,是not null和unique的结合,一个表中只允许存在一个主键

MySQL提供了一个自动分配主键值的方式—“自增主键(auto_increment)”

在插入数据时可以不指定id的值,id会自动自增分配

1.5FOREIGN KEY:外键约束

外键约束需要有两个或两个以上的表时使用,当两个表相关联时,用一个表来约束另一个表的数据。

语法:

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

这种约束是双向的,删除时,如图先删除父表,则会报错。

删除时需先删除子表,再删除父表

二.进阶查询

1.聚合查询

针对行与行之间进行聚合查询

进行聚合查询,需搭配聚合函数

1.1 COUNT

count可查询数据的行数

如果有一行数据都是空,行数也会被count算进去,但如果只针对某个列,空值不会计入。

1.2 SUM

使用sum可以针对某一类的数据进行求和。

sum中也可以是表达式。

1.3 AVG

求某一列的平均值,要求列里是数字。

1.4 MAX与MIN

max为求某一列的最大值,min为求某一列的最小值。

2.分组查询:GROUP BY

使用group by指定一个列,就会把该列相等的行,归到一组里。

分完组后还可以针对每个组分别进行聚合查询。

例1:现有一张员工表

现在按职位进行分组,查询每个职业的人数

 例2:求每个职业的平均工资

  2.1 having

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING

例如:统计平均工资低于10000的职业

3.联合查询(多表查询)

3.1内连接(笛卡尔积)

笛卡尔积是将多个集合/表的数据按照一定规律进行排列组合。

例如:假设有一张学生表和班级表

对这两张表进行笛卡尔积,会得到以下结果:

这就是两张表笛卡尔积后的结果。

通过观察,我们发现有些数据符合情况,有些数据不符合实际结果。

因此,笛卡尔积后的数据,我们还需进一步筛选。

我们发现,两张表中都存在着“班级编号”,当笛卡尔积后班级编号相同,则数据有意义,若不相同,则是无意义的数据。

例如:现有两张表student,class

对两张表进行笛卡尔积后得到:

未经过筛选,混杂着一些无意义的数据,通过where设置条件,进行判断后,排除无意义数据

此外,还可以通过join....on....来进行笛卡尔积

语法:

select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;

笛卡尔积多表联合查询时会产生大量的中间数据,对性能影响较大,数据量大时可能会把数据库搞挂,因此使用笛卡尔积时要慎重。

3.2外连接

当两张表数据为一一对应关系时,内连接和外连接查询的数据结果完全一致

可当上述数据不再一一对应时,内连接和外连接就会出现差别。

例如:

student表与score表不再一一对应,内连接查询结果为

外连接是使用join....on写法的(不支持from多个表)

给join面前加上left/right就是(左/右)外连接

左外连接:以左表为基准,确保左表中每个记录出现在最终结果里,如果左表中的记录在右表没有对应的记录,此时就会把右表相关字段填成NULL。

例:

右外连接:以右表为基准,确保左表中每个记录出现在最终结果里,如果右表中的记录在左表没有对应的记录,此时就会把左表相关字段填成NULL。

例:

3.3自连接

自己与自己进行笛卡尔积

自连接本质上是将行关系转化为列关系。

注意,不能直接自己与自己笛卡尔积,而是要使用别名进行笛卡尔积

3.4合并查询

 在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION 和UNION ALL时,前后查询的结果集中,字段需要一致。

例1:针对同一个表进行union

例2:针对不同表进行union

 

注:union自带有去重操作,若想查看去重前的数据,则使用union all。


以上便是全部内容,如有不对,欢迎指正。

标签:NULL,查询,复习,笛卡尔,约束,MySQL,基础知识,数据,连接
From: https://blog.csdn.net/yc_xym/article/details/143662366

相关文章

  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现三
    一、前言介绍:[免费获取]1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵活、便......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现四
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......
  • Java毕设项目案例实战II基于Java+Spring Boot+MySQL的狱内罪犯危险性评估系统设计与实
    目录一、前言二、技术介绍三、系统实现四、核心代码五、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。一、前言在司法体系中,狱内罪犯的危险性评估是确保监狱安全、提升管理效率的关键环节。传统......
  • java小课设:使用MySQL做一个聊天室
    bro是个懒狗,耗时一个晚上,只写了一些基础功能,其他的可以根据需要自己添加实现思路:在MySQL数据库中设置一个message表,用来存储聊天信息,聊天界面输入的内容写入message表,用户程序每秒从MySQL中获取一次聊天记录,并加载进入自己的页面,实现聊天室。食用方法:ChatServer类中的数据......
  • WEB 漏洞 - SQL 注入之 MySQL 注入深度解析
    目录WEB漏洞-SQL注入之MySQL注入深度解析一、从宇宙奇想到SQL注入二、SQL注入原理回顾(一)基本概念(二)以简单PHP代码示例说明三、MySQL注入步骤(一)确定注入点(二)判断注入类型(三)利用注入获取信息或执行恶意操作四、防御MySQL注入的方法(一)使用参数化查询(二)......
  • MySQL主从复制
    MySQL主从复制  概要  随着业务的增长,一台数据服务器已经满足不了需求了,负载过重。这个时候就需要减压了,实现负载均衡读写分离,一主一丛或一主多从。  主服务器只负责写,而从服务器只负责读,从而提高了效率减轻压力。  主从复制可以分为:  主从同步:当用户写数据......
  • MySQL数据库企业级开发技术
    一.事务1.事务的定义1.事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)2.一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成3.事务只和DML语句有关,或者说DML语句才有事务。这个......
  • 多商户中英双语电商系统设计与开发 PHP+mysql
    随着全球电商市场的扩展,多商户平台成为了越来越多商家参与全球贸易的重要方式。为了适应不同语言用户的需求,尤其是中英双语用户的需求,设计一个支持中英双语的电商系统显得尤为重要。本文将重点探讨如何设计一个多商户中英双语电商系统,涵盖多语言切换设计、商家管理、商品管理、......
  • Mysql高可用架构方案
    目录Mysql介绍高可用结构主从模式主从模式介绍主从复制技术主从模式注意事项MHA(MasterHighAvailability)MHA模式介绍MHA工作流程MMM(Multi-MasterReplicationManagerForMysql)MGR(MysqlGroupReplication)总结Mysql介绍Mysql是典型的开源关系型数据库,是许多网站、应用程序、企业软件......
  • MYSQL事务学习总结
    前言在数据库操作的复杂世界里,事务是保障数据一致性、完整性和可靠性的关键机制。无论是银行系统中的资金转账,还是电商平台的订单处理,事务都在默默地发挥着重要作用。MySQL作为广泛使用的数据库管理系统,其事务处理机制涉及到多个重要的概念和特性。从原子性确保操作的整体性......