gpt4 book ai didi

mysql - sql 连接为维恩图

转载 作者:行者123 更新时间:2023-12-03 07:03:29 28 4
gpt4 key购买 nike

我在理解 sql 中的连接时遇到了困难,并发现了这张图片,我认为它可能对我有帮助。问题是我不完全理解它。例如,图像右上角的连接,将整个 B 圆圈涂成红色,但仅将 A 的重叠部分涂成红色。该图像看起来圆圈 B 是 sql 语句的主要焦点,但 sql 语句本身,从A开始(从A中选择,连接B),给我传达了相反的印象,即A将是sql语句的焦点。

同样,下图只包含 B 圈的数据,那么为什么在 join 语句中包含 A 呢?

问题:从右上角顺时针方向开始,到中心结束,有人可以提供有关每个 sql 图像表示的更多信息,并进行解释

a) 为什么在每种情况下都需要连接(例如,特别是在没有从 A 或 B 获取数据的情况下,即只有 A 或 B 但不是两者都着色的情况下)

b) 以及任何其他可以阐明为什么该图像能够很好地表示 sql 的细节

sql join diagram

最佳答案

我同意凯德关于维恩图局限性的观点。更合适的视觉表示可能是这样的。

表格

Tables

从交叉连接 B SQL Fiddle 中选择 A.Colour、B.Colour

交叉联接(或笛卡尔积)会为两个表中的行的每个组合生成一个结果。每个表有 4 行,因此结果会产生 16 行。

Cross Join

从 A.Colour = B.Colour SQL Fiddle 上的内部连接 ​​B 中选择 A.Colour、B.Colour

内部联接逻辑上返回交叉联接中与联接条件匹配的所有行。在本例中是五个。

Inner Join

从 A.Colour NOT IN 上的内连接 B 选择 A.Colour、B.Colour('绿色'、'蓝色')SQL Fiddle

内连接条件不一定是相等条件,并且不需要引用两个表(甚至任一表)中的列。评估交叉连接的每一行上的 A.Colour NOT IN ('Green','Blue') 返回。

inner 2

内部联接条件 1=1 对于交叉联接中的每一行都会计算为 true,因此两者是等效的 ( SQL Fiddle )。

从 A.Colour = B.Colour SQL Fiddle 上的左外连接 B 选择 A.Colour、B.Colour

外连接在逻辑上的计算方式与内连接相同,除了如果左表中的一行(对于左连接)根本不与右表中的任何行连接,它将保留在结果中右侧列的 NULL 值。

LOJ

从 A.Colour = B.Colour 的左外连接 B 中选择 A.Colour、B.Colour,其中 B.Colour 为 NULL SQL Fiddle

这只是将先前的结果限制为仅返回 B.Colour IS NULL 的行。在这种特殊情况下,这些行将被保留,因为它们在右侧表中没有匹配项,并且查询返回在表 B 中不匹配的单个红色行。这称为反半连接。

IS NULL 测试选择一个列非常重要,该列要么不可为空,要么连接条件确保按顺序排除任何 NULL 值为了使此模式正常工作,并避免只返回除了不匹配的行之外该列恰好具有 NULL 值的行。

loj is null

从 A.Colour = B.Colour SQL Fiddle 上的右外连接 B 选择 A.Colour、B.Colour

右外连接的作用与左外连接类似,只是它们保留右表中的非匹配行,并且以 null 值扩展左手列。

ROJ

从 A.Colour = B.Colour SQL Fiddle 上的完整外部连接 B 中选择 A.Colour、B.Colour

完全外联接结合了左联接和右联接的行为,并保留左表和右表中的不匹配行。

FOJ

关于mysql - sql 连接为维恩图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997365/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com