【MySQL】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。


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

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

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

相关文章

新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)

常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了,我基本上都是通过docker去管理一些容器如:mysql、redis、mongoDB等之类的镜像,还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…

第12课 二维数组(1)

string类型不知道各位童鞋们都掌握了没,没掌握的话,嘿嘿嘿(抱拳)我稍微练过一点散打哦。 好了,开玩笑的,今天的课程难度较高,所以我决定分三课讲,就是想让大家把二维数组彻底吃透&a…

什么是C/C++,有什么特点

C/C 简介 C 和 C 是两种广泛使用的编程语言,它们在计算机科学和软件开发中具有重要的地位。C 语言由 Dennis Ritchie 于 1972 年在贝尔实验室开发,主要用于编写操作系统(如 Unix)。C 语言由 Bjarne Stroustrup 于 1979 年在贝尔实…

性能测试|JMeter接口与性能测试项目

前言 在软件开发和运维过程中,接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用,被广泛用于进行各种性能测试,包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

linux物理内存管理:node,zone,page

一、总览 对于物理内存内存,linux对内存的组织逻辑从上到下依次是:node,zone,page,这些page是根据buddy分配算法组织的,看下面两张图: 上面的概念做下简单的介绍: Node&#xff1a…

npm i忽略依赖冲突

在使用npm安装依赖时,如果遇到依赖冲突,通常npm会提示错误并阻止安装。但是,如果你想要忽略这些依赖冲突,可以使用以下几种方法: 1.使用--force或-f参数:这个参数会强制npm忽略某些错误,包括依…

Pr:视频过渡快速参考(合集 · 2025版)

Adobe Premiere Pro 自带七组约四十多个视频过渡 Video Transitions效果,包含不同风格和用途,可在两个剪辑之间创造平滑、自然的转场,用来丰富时间、地点或情绪的变化。恰当地应用过渡可让观众更好地理解故事或人物。 提示: 点击下…

使用vscode 连接linux进行开发

1. 在Vscode中安装扩展功能remote ssh 2. 打开命令窗口 3. 在弹出的命令窗口输入ssh,并从弹出的提示中选择 Add New SSH Host 4. 在弹出的输入窗口中输入类似下面形式的 连接地址: 5. 输入回车后出现下面的对话框,这个对话框是说你要用哪个…

面试击穿mysql

Mysql三大范式: 第一范式(1NF): 不符合第一范式的典型情况是在一个字段中存放多种不同类型的详细信息。例如,在商品表中,若将商品名称、价格和类型都存储在同一个字段中,会带来诸多弊端。首先,在…

WRF-LES与PALM模型:风能资源评估、风力发电、大涡模拟、大尺度湍流涡旋、大雾预报、局地环流模拟、城市热岛效应、流场模拟

专题一、背景 1、流体力学简介 2、计算流体力学简介 3、应用场景举例 专题二、计算机基础与编程入门 1、计算机基础与编程入门 2、计算机基本概念和操作系统讲解 3、Linux基础命令与操作 专题三、科学计算与数据处理基础 1、NumPy基础:数组操作与科学计算 …

excel功能

统计excel中每个名字出现的次数 在Excel中统计每个名字出现的次数,您可以使用COUNTIF函数或数据透视表。以下是两种方法的详细步骤: 方法一:使用COUNTIF函数 准备数据:确保您的姓名列表位于一个连续的单元格区域,例如…

单体架构 IM 系统之长轮询方案设计

在上一篇技术短文(单体架构 IM 系统之核心业务功能实现)中,我们讨论了 “信箱模型” 在单体架构 IM 系统中的应用,“信箱模型” 见下图。 客户端 A 将 “信件” 投入到客户端 B 的 “信箱” 中,然后客户端 B 去自己的 …

量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取行情数…

【网络安全 | 漏洞挖掘】我如何通过路径遍历实现账户接管

未经许可,不得转载。 文章目录 不久前,我发现了一个我在高中时非常常用的知名应用程序,它在Intigriti上是一个私有程序,本文称之为REDACTED。 我开始参与REDACTED的漏洞赏金计划,这个应用程序在我开始进行黑客攻击之前我已经非常熟悉了。最初我并没有抱太高的期望。 我首…

webpack loader全解析,从入门到精通(10)

webpack 的核心功能是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。更多复杂的功能需要借助 webpack loaders 和 plugins 来完成。 1. 什么是 Loader Loader 本质上是一个函数,它的作用是将某个源码字符串转换成…

数据库基础(12) . 自定义函数

在 MySQL 中,你可以创建自定义函数来扩展其内置功能。自定义函数可以通过编写存储过程或函数来实现。这里我们将重点介绍如何创建自定义函数,并给出一些示例。 创建自定义函数的基本语法 创建自定义函数的基本语法如下: CREATE FUNCTION f…

web——sqliabs靶场——第一关

今天开始搞这个靶场,从小白开始一点点学习,加油!!!! 1.搭建靶场 注意点:1.php的版本问题,要用老版本 2.小p要先改数据库的密码,否则一直显示链接不上数据库 2.第一道题&#xff0…

Linux基础—网络设置

linux系统的网络设置 1、网络的基本设置 2、dhcp和ftp 3、nfs共享文件共享系统和ssh远程连接 4、dns解析 5、pxe自动装机(centos) 网络的基本设置 查看网络接口信息: ipaddr/ip a 简略的查看网络接口信息 ifconfig 表示只显示当前活跃的设备 ifc…

Vue 3 中,ref 和 reactive的区别

在 Vue 3 中,ref 和 reactive 是两种用于创建响应式数据的方法。它们有一些关键的区别和适用场景。以下是它们的主要区别: ref 用途: ref 主要用于处理基本数据类型(如字符串、数字、布尔值等)以及需要单独响应的复杂…

thinkphp自定义命令行+宝塔面板Shell脚本实现定时任务

参考 ThinkPHP宝塔运营环境实现定时任务_宝塔linux面板 thinkphp 定时任务怎么配置-CSDN博客 thinkphp自定义命令行宝塔Shell脚本实现定时任务_宝塔定时执行shell脚本命令-CSDN博客 未实操,如果实操结合上面两个案例