图解SQL的inner join、left /right join、 outer join区别

这个SQL JOIN就类似于我们生活中朋友之间的关系。
有的很近,有的很远。

INNERJOIN就像老同学的聚会。
只有互相认识的人才会出现并交叉,因此您只会在两个表中看到匹配的记录。

例如,我有一个销售表和一个客户表。
INNERJOIN 的目的是寻找购买过商品并留下客户信息的人。

创建一个如下示例:SELECTFROM 销售表 INNERJOIN 客户表 ON 销售表客户 ID = 客户表 ID。
这样您就可以在两个表中找到具有相同客户 ID 的记录。

我们来谈谈 LEFTOUTERJOIN。
这就像一场聚会。
站在左边的人必须来。
无论谁在右边,他都在那里。
因此,您将在左侧的表中看到所有记录。
如果右侧表中有匹配项,则显示 NULL。

例如,有一个促销活动。
左边是参加活动的全体员工,右边是购买产品的员工。
如果您没有购买该产品,您的姓名后面的空格将为空白。

RIGHTOUTERJOIN 与 LEFTOUTERJOIN 类似,但作用不同。
左边的人就是右边的人。
无论左边有人与否,他都在那里。

最后,FULLOUTERJOIN,这就像一个每个人都可以参加的大型聚会。
无论你认识谁是左派或右派,每个人都会来。
对于不匹配的记录,将显示 NULL。

例如,如果有一个贸易展览会,FULLOUTERJOIN将列出所有产品,无论是否有买家。

一般情况下,INNERJOIN 用于查找匹配项,LEFTOUTERJOIN 用于查找左侧匹配项,RIGHTOUTERJOIN 用于查找右侧匹配项,FULLOUTERJOIN 用于查找右侧匹配项。
如果不匹配,则使用NULL进行补偿。

一张图看懂 SQL 的各种 join 用法

INNER JOIN:返回两个表中满足连接条件的行。
例如,假设您有一个Employees表和一个Departments表,您可以使用INNER JOIN来获取所有员工及其对应的部门信息,只要他们的ID匹配即可。

LEFT JOIN:返回左表和右表中满足连接条件的所有行。
例如,如果使用LEFT JOIN连接Employees和Departments表,您将获得所有员工的信息,即使有些员工没有分配到某个部门,也会显示出来,并且没有分配到部门的员工在部门信息列中会有NULL。

RIGHT JOIN:与 LEFT JOIN 相反,RIGHT JOIN 返回右表中的所有行,以及左表中满足连接条件的行。
例如,使用RIGHT JOIN连接Employees和Departments表,就会得到所有部门的信息,即使有的部门没有员工也会显示出来,没有员工的部门会在员工信息列中显示NULL。

FULL OUTER JOIN:返回两个表中的所有行,无论是否满足连接条件。
例如,使用FULL OUTER JOIN连接Employees和Departments表,您将获得所有员工和部门的信息,无论它们之间是否存在匹配关系。
不匹配的行将在相应的列中显示为 NULL。

LEFT JOIN EXCLUDING INNER JOIN:返回左表中不满足连接条件的行。
例如,使用 LEFT JOIN 连接员工表和部门表并通过 WHERE 子句指定 B.Key IS NULL,您将获得有关未分配到部门的所有员工的信息。

RIGHT JOIN EXCLUDING INNER JOIN:与LEFT JOIN EXCLUDING INNER JOIN类似,但返回右表中不满足连接条件的行。
例如,使用 RIGHT JOIN 连接员工表和部门表并通过 WHERE 子句指定 A.Key IS NULL,您将获得所有没有员工的部门的信息。

OUTER JOIN EXCLUDING INNER JOIN:返回两个表中不满足连接条件的行。
例如,如果使用 FULL OUTER JOIN 连接“Employees”和“Departments”表,并通过 WHERE 子句指定 A.Key IS NULL OR B.Key IS NULL,则将获得所有不具有匹配关系的员工和部门信息。

实用提醒:使用JOIN时,请确保您了解每种连接类型的行为,并根据您的需求选择合适的连接类型。

一文讲懂SQL外连接OUTER JOIN

结论:SQL外连接(LEFTJOIN、RIGHTJOIN、FULLJOIN)用于获取左表或右表的所有记录。
左连接显示左表的所有记录;右连接显示右表的所有记录;完全连接显示两个表的并集。
MySQL 不支持全连接,但了解其原理很重要。
多表外连接和自外连接在处理复杂的数据关联时非常有用。
课后作业:计算第二天的用户留存数。

一文讲懂SQL外连接OUTER JOIN

是的,这是关于对外关系的。
左对齐是指显示左侧的所有表格,即使右侧没有对应的表格。
右连接,依次将右边的所有表都留出。
全连接,两边都来,但是MySQL不支持。
对于多表连接,左连接更为明显。
连接外部和内部,例如查看用户保留率。
对于家庭作业,您需要使用 LEFTJOIN 和日期函数来计算保留用户的数量。