如何区分左外连接,右外连接和全外连接?

哎呀,说到这个左外连接,就好像学生表里的每个学生都在这里一样。
即使他的成绩不在成绩表中,他仍然要占据一个位置,并且成绩栏为空,显示NULL。
这就好比2 02 2 年某个城市的运动会,不管你参加与否,名单上一定有你的名字。

我们来谈谈右外连接。
就好像成绩表里的每个年级都来了一样。
即使学生表中没有该学生的信息,也必须显示成绩。
学生信息列为空且为 NULL。
这就好比2 02 2 年某个城市的销量统计,无论产品卖与不卖,它的销量都要纳入统计。
如果没有卖出,则以零表示。

完全外部连接甚至更好。
它会移出两个表的所有记录,无论是否匹配。
这就好比2 02 2 年某个城市的旅游统计,无论游客是否购物,他们的旅游信息都会被记录下来。

综上所述,这三个连接就像不同的镜头。
左边看左表,右边看右表,整体看两边。
用得好,数据就能完整的呈现在你的面前。
在实际应用中,您必须根据要查询的信息来选择合适的镜头。
我当时很困惑,后来才知道这三个连接各有各的用处。
关键是你如何使用它们。
也许我有点极端,但这就是我对左外连接、右外连接和全外连接的理解。

内连接、左外连接、右外连接、全外连接、交叉连接

哎,上次帮朋友公司开发数据库,​​差点把内部链接搞乱了,把外部链接洗了。
这是一个大洞。
他的公司有一个客户数据库和一个订单数据库。
他想检查哪些客户购买了哪些订单。
结果我一开始就用内部链接,差点错过了那些不买单的客户。

当时,customers表中有5 000多条记录,orders表有2 000多条记录。
我使用了这个SQL语句:
sql SELECT FROM [Client] AS c, [Order] AS o WHERE c.ClientId = o.ClientId;
结果,那些没有下订单的顾客就消失了。
后来我很快就转向了左外连接:
sql SELECT FROM [客户] AS c LEFT JOIN [订单] AS o ON c.ClientId = o.ClientId;
这才找到那些没有下单的顾客。

有一天,他们想检查哪些订单尚未发货。
起初我使用了直外连接,但又出了问题。
在订单表的订单状态字段中,那些尚未发货的订单的状态为NULL,导致相应的外部链接显示所有订单,包括已发货的订单。

那时,我意识到链接问题可能真的是一个陷阱。
正确的外部链接应该使用这个:
sql SELECT FROM [Order] AS o RIGHT JOIN [Client] AS c ON o.ClientId = c.ClientId;
我不得不说,我以前从未遇到过完整的外部链接和交叉链接。
我不敢乱说,但是我听别人说全外连接是左外连接和右外连接的组合,交叉连接是两个表的笛卡尔积,都是可能的组合。
但我需要多练习才能谈论这些。