MySQL知识学习——第十五天:联结表

本文介绍了SQL中的联结概念,包括内部联结、外键的概念及其重要性,并详细讲解了如何在SELECT语句中联结表及如何使用WHERE子句来过滤结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

第十五天,目标过半了,加油

联结

SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。

关系表

关系表的设计就是要保证把信息分解成多个表,一类数据
一个表。各表通过某些常用的值(即关系设计中的关系( relational) )互相关联

外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

外键怎么理解呢?
比如说A表中有一列值跟B表中的主键值相等,那么我们就称A表中的这一列为A表的外键。

为什么要使用联结

简单地说,联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。

在这里插入图片描述

创建联结

联结的创建非常简单,规定要联结的所有表以及它们如何关联即可。
看下面的例子

表student
在这里插入图片描述
表teacher
在这里插入图片描述
这样我们就基于某种关系(班级相等)把两张表联结在一起了
在这里插入图片描述
用法和之前的没有太大的区别,主要是前面两列在表student中,后面一列在表teacher中,from语句也与前面的用法有细微的差别,之前都是取一张表,现在是取两张表。

还有就是这里我们使用的是完全限定的列名
在这里插入图片描述

WHERE子句的重要性

利用WHERE子句建立联结关系似乎有点奇怪,但实际上,有一个很充分的理由。请记住,**在一条SELECT语句中联结几个表时,相应的关系是在运行中构造的。**在数据库表的定义中不存在能指示MySQL如何对表进行联结的东西。你必须自己做这件事情。在联结两个表时,你实际上做的是将第一个表中的每一行与第二个表中的每一行配对。 WHERE子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行。没有WHERE子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配在一起。

笛卡儿积(cartesian product) 由没有联结条件的表关系返回的结果笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数

看下面的例子
在这里插入图片描述
因为没有联结条件,所以会将第一个表中的每一行与第二个表中的每一行进行联结,也就会返回6*3=18条记录

在这里插入图片描述

内部联结

目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。

比如
在这里插入图片描述
上面的语句可以实现之前的效果。此语句中的SELECT与前面的SELECT语句相同,但FROM子句不同。这里,两个表之间的关系是FROM子句的组成部分,以INNER JOIN指定。在使用这种语法时,联结条件用特定ON子句而不是WHERE子句给出。传递给ON的实际条件与传递WHERE的相同。
在这里插入图片描述

联结多个表

既然能联结两个表,那么能不能联结三个或者更多个表呢?当然是可以的。

SQL对一条SELECT语句中可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。

在这里插入图片描述

今天就到这里了,最近又开始下雨了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值