MySQL对表操作(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL对表操作(下)

修改(Update)


在我们添加数据的过程中总会出现添加错误的情况,在这种情况下先删除,再添加显然不是最好的方法,于是就有了修改。


基本语法如下:

UPDATE table_name SET column = expr [, column = expr ...]

[WHERE ...] [ORDER BY ...] [LIMIT ...]

比如:

将张三的语数英都改为100 分:


043bcb6ce9f6408b924296c30133634d.png

等等,我就不一一举例了。


删除(Delete)


对于过时的数据,我们就需要执行删除操作:

基本语法如下:


DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]


比如我们需要删除 jerry 的成绩:


0cda1a164c74431a99207dc9a65daaca.png

上述都是对表中数据的简单操作,现在进入进阶部分,难度要大于以上内容。


数据库约束


约束的作用:


一般在创建表的时候需要给数据添加各种约束以保证添加到表中的数据是正确的,保证数据的有效性、完整性和正确性;若违反了约束,则无法添加进入表中;若是先添加数据再加约束,若其中有数据违反了约束则约束添加失败。

约束类型:


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

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

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

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

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

CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句


NULL约束


我们重新创建一个学生表 设置id不为空:

cc0e4c3e365749d0a591ca8111554ce7.png


UNIQUE:唯一约束


sn列为唯一的、不重复的


cc0e4c3e365749d0a591ca8111554ce7.png


DEFAULT:默认值约束

指定插入数据时,name列为空,默认值unkown:

f8c20fd516c940abb32773611dea450b.png

PRIMARY KEY:主键约束

指定id列为主键:

ba2c0a0d2fba4ce89509957313785208.png


对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。

例如:


a5d669ac10864d318c7de123330567e6.png


FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键 , 基本语法如下:

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

举例:

dbe2b3153a184dbba904627319aab84d.png


这就把两个表链接起来了。

check约束

了解即可:

MySQL使用时不报错,但忽略该约束:


9d4b5a2c9c794b95a5a997d6c02a584f.png


表的设计

本章不涉及表的设计,对于刚刚入职的而言,在这方面压根不会让我们上,这玩意需要一段时间的累积,初学者其实没必要去掌握。等以后技术起来了再来了解。

查询

单表查询

顾名思义,单表查询就是对一个表进行查询。

聚合函数

聚合查询类似于Java中的API,系统给我们写好的函数,我们直接拿来用即可,常用的聚合函数如下:


函数 说明
COUNT([DISTINCT] expr) 返回查询到的数据的 数量
SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字没有意义

我们拿几个举例:

看看我之前写好的员工表:


55aac278b5574a93ae97ec01ac8b808f.png

假设我们要计算有多少个员工,就可以用count() 这个函数:


67268a3b0b5f49d4ad09810f5fe49511.png

一个count(*)解决问题;

count()里面也可以是其他列名。

再比如,我想知道其中工资最高的男员工:


38aec3d62f8b411da99d09f3eb2c59ba.png

其他的用法类似,我就不一一举例了,可以自己一个个去试。


GROUP BY子句


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


select column1, sum(column2), .. from table group by column1,column3;


就拿上面的例子:


找出每个部门中工资最高的的一个:


61bd820f07c048c2ae465d528e613491.png


找出每个部门的最高工资,平均工资,最低工资:

8f281a251cc54443ab2d02b0d80bc2de.png


HAVING


having 作用于group by 语句之后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用having。

例如:

找出每个部门的最高工资,平均工资,最低工资;并且平均工资高于11000 的部门情况:


1135c47e8d7a4654a51793d02e87f913.png

多表查询

在了解多表查询之前我们得了解以下:笛卡尔积

笛卡尔积

简单的说就是两个集合相乘的结果;

我们可以百度查一下,下面是我搜索的:

现在,我们有两个集合A和B。

A = {0,1} B = {2,3,4}

集合 A×B 和 B×A的结果集就可以分别表示为以下这种形式:

A×B = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)};

B×A = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)};

可以得出A×B和B×A的笛卡尔积,但总体思路为用

以上A×B和B×A的结果就可以叫做两个集合相乘的‘笛卡尔积’。

从以上的数据分析我们可以得出以下两点结论:

1,两个集合相乘,不满足交换率,既 A×B ≠ B×A;

2,A集合和B集合相乘,包含了集合A中元素和集合B中元素相结合的所有的可能性。既两个集合相乘得到的新集合的元素个数是 A集合的元素个数 × B集合的元素个数;

我们举个例子,来看看结果如何?

创建一个学生表和课程表:结果如下:

4a70dc873ed949d891b44bf6bcdb209f.png


笛卡尔积就是将我们选中的两个表进行一个排列组合;


因此,需要注意的是:我们在进行多表查询的时候(计算笛卡尔积的过程),如果两个表数据很大,就会非常低效,甚至成为危险操作。

所以对其操作要小心!!!

Tip(多表情况):如果是三个表的话,那么就是先将两个表进行笛卡尔积运算,再用这个表与另外一个表进行笛卡尔积操作(以此类推)。


消除笛卡尔积


我们可以通过连接查询来消除笛卡尔积、连接查询分为:


内连接:


语法:

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

select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;

比如我想查询每个人的课程:

52b2f2f24e7b4cd4a2d9093dd65d79b9.png


或者


3536ac3322dd4b789022389de37b8e7b.png

注意:这里都有相同的记录名(classId),所以这里通过 表名.列名 的方法实现,如果不用则会报错:


fa5f7adb46e24aaeb275539de70a9a5b.png


外连接


左连接:左连接显示的结果为tb1中所有的内容,及tb2中满足条件的内容,若tb1中有的内容而tb2中没有,则显示tb2对应的内容时显示为null

select * from tb1 Left Join tb2 where tb1.ID = tb2.ID


右连接:右连接显示的结果为tb2中所有的内容,及tb1中满足条件的内容,若tb2中有的内容而tb1中没有,则显示tb1对应的内容时显示为null


select * from tb2 Right Join tb1 where tb2.ID = tb1.ID


我们再添加一个数据看看结果:


b581e4ea9c174dc7a7d2237fff604f74.png


任然 查询每个人的课程


7f78173362504541b48c7875edbc6414.png


左连接就是以左边的表为准,即使右边的表中不存在某个数据,就为空。


右链接:

5bddc0b898c24351be3749d20b3eb1d8.png



以右边的表为准右边表不存在的数据不出现。


全链接


全连接::MySQL现在不支持全连接,但可以通过union和union all实现,但是两个表的列数必须相同


-- union 可以过滤重复数据

select * from world.city union select * from world.country;

-- union all 不会过滤重复数据

select * from world.city union all select * from world.country;


这章节就到这,其他还有一些不是那么频繁的查询可以在查查资料!!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之用CTAS从mysql同步数据到hologres,改了字段长度,报错提示需要全部重新同步如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
45 8
|
3天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之程序初始化mysql没有完成就报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
14 4
|
3天前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之sqlserver mysql都用的胖包,sqlserver的成功了,mysql报这个错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
20 6
|
3天前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错合集之连接器换成2.4.2之后,mysql作业一直报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
16 3
|
5天前
|
SQL 关系型数据库 MySQL
Mysql忘记密码操作
Mysql忘记密码操作
28 1
|
6天前
|
SQL 关系型数据库 MySQL
DQL操作MySql
DQL操作MySql
13 0
|
6天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
6天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
6天前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
36 0
|
6天前
|
关系型数据库 MySQL Java
使用shardingjdbc执行MySQL游标操作时报错
使用shardingjdbc执行MySQL游标操作时报错