海南网站建设推荐,网站开发成本分析,ip动态地址做网站,网站优化就是每天更新内容吗文章目录 什么是连接测试表内连接外连接左外连接右外连接全外连接 自然连接交叉连接参考资料 什么是连接
数据库的连接是指在数据库系统中#xff0c;两个或多个数据表之间建立的关联关系#xff0c;使它们可以进行数据的交互和操作。连接通常基于某种共同的字段或条件… 文章目录 什么是连接测试表内连接外连接左外连接右外连接全外连接 自然连接交叉连接参考资料 什么是连接
数据库的连接是指在数据库系统中两个或多个数据表之间建立的关联关系使它们可以进行数据的交互和操作。连接通常基于某种共同的字段或条件用于将相关数据组合在一起。
连接操作的对象是表可以认为是对若干表的笛卡尔积的筛选操作。
连接操作通常分为以下几种
内连接Inner Join内连接返回两个数据表中满足连接条件的交集部分。只有当连接条件在两个表中都存在匹配时才会返回结果。外连接Outer Join外连接返回连接条件满足的结果以及其中一个表中未匹配到的行。外连接分为左外连接Left Outer Join、右外连接Right Outer Join和全外连接Full Outer Join具体取决于哪个表的所有行都包括在结果中。自然连接Natural Join自然连接是根据两个表中相同的列名自动进行连接的一种方式。它省略了连接条件直接使用相同列名进行连接。交叉连接Cross Join交叉连接返回两个表的笛卡尔积即其中一个表的每一行都与另一个表的每一行组合不需要连接条件。
这么分的原因是不同类型的连接操作适用于不同的场景和需求。内连接用于获取两个表中匹配的数据外连接用于获取匹配以及未匹配的数据自然连接适用于列名相同的表而交叉连接则用于获取两个表的所有组合。通过不同类型的连接操作可以灵活地处理数据表之间的关联关系满足不同的查询需求。
这四种连接不要死记硬背试着通过图示理解下文引用自数据库表连接的简单解释
**所谓连接就是两张表根据关联字段组合成一个数据集。**问题是两张表的关联字段的值往往是不一致的如果关联字段不匹配怎么处理比如表 A 包含张三和李四表 B 包含李四和王五匹配的只有李四这一条记录。
很容易看出一共有四种处理方法。 只返回两张表匹配的记录这叫内连接inner join。返回匹配的记录以及表 A 多余的记录这叫左连接left join。返回匹配的记录以及表 B 多余的记录这叫右连接right join。返回匹配的记录以及表 A 和表 B 各自的多余记录这叫全连接full join。 上图中表 A 的记录是 123表 B 的记录是 ABC颜色表示匹配关系。返回结果中如果另一张表没有匹配的记录则用 null 填充。
这四种连接又可以分成两大类内连接inner join表示只包含匹配的记录外连接outer join表示还包含不匹配的记录。所以左连接、右连接、全连接都属于外连接。
此外还存在一种特殊的连接叫做交叉连接cross join指的是表 A 和表 B 不存在关联字段这时表 A共有 n 条记录与表 B 共有 m 条记录连接后会产生一张包含 n x m 条记录的新表见下图。 测试表 内连接
内连接Inner Join内连接返回两个数据表中满足连接条件的交集部分。只有当连接条件在两个表中都存在匹配时才会返回结果。
SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件注意内连接的条件通过连接条件指明用户的其他筛选条件通过其他条件指明。
对上表做内连接。 SQL 的构造顺序是
确定要连接的表A INNER JOIN B确定连接表的条件ON…确定其他筛选条件AND…
注意 SQL 关键字执行的顺序SELECT 操作的对象是两表的笛卡尔积所以查询 ID 时要指定任意一个表的 ID因为笛卡尔积中有两列。
由于 id2name香蕉这条记录在 table2 中没有相同的属性因此它不会被作为内连接的返回值。
外连接
外连接Outer Join外连接返回连接条件满足的结果以及其中一个表中未匹配到的行。外连接分为左外连接Left Outer Join、右外连接Right Outer Join和全外连接Full Outer Join具体取决于哪个表的所有行都包括在结果中。
左外连接
SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件对上表做左外连接。 这意味着即使香蕉没有价格也会将它的所有信息显示因为香蕉存在于左表中的记录。其中左表不存在的属性将会以 NULL 值填充。
右外连接
SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件在右表中插入一条 ID 不存在于左表的记录 对上表进行右外连接。 和左外连接类似地右外连接会将右表存在而左表不存在的记录添加到返回值中不存在的字段依然用 NULL 值填充。 注意一个细节在左外连接和右外连接查询 ID 时指定的表是和连接方向对应的这也说明了 SELECT 关键字在查找时是按照连接方向进行的。 使用 SELECT * 来获取返回值结果也是一样的。 全外连接
SELECT ... FROM t1 FULL JOIN t2全外连接相当于对两个集合做加法得到的是所有情况。 自然连接
自然连接是一种特殊的连接它省略了连接条件直接使用两个表中相同列名进行连接。
SELECT ... FROM t1 NATURAL JOIN t2;这条 SQL 语句将会自动根据两个表中相同列名进行连接返回结果中将包含这些相同列名的数据并且自动过滤掉重复的列。
注意笛卡尔积是两个表所有可能的行对组合不考虑任何连接条件。例如如果表 A 有 M 行表 B 有 N 行它们的笛卡尔积将会有 M * N 行。
自然连接避免了笛卡尔积中的大量无关组合只返回在连接列上值匹配的行因此结果集通常比笛卡尔积小得多。如果两个表没有列名相同的列自然连接的结果将是一个空集而不是笛卡尔积。
交叉连接
交叉连接返回两个表的笛卡尔积即其中一个表的每一行都与另一个表的每一行组合。
SELECT ... FROM t1 CROSS JOIN t2;返回 table1 和 table2 的所有可能组合即 table1 中每一行与 table2 中每一行的组合。
参考资料
数据库表连接的简单解释