龙空技术网

MySQL 联合查询

开心人开发世界 390

前言:

此时看官们对“mysql三表联合查询 加求和”大概比较注重,同学们都想要知道一些“mysql三表联合查询 加求和”的相关知识。那么小编同时在网摘上网罗了一些有关“mysql三表联合查询 加求和””的相关内容,希望朋友们能喜欢,朋友们快快来了解一下吧!

Venn Diagrams - 4种基本的JOIN类型

Venn Diagrams主要用于描述JOINs,但有些人认为它实际上是令人困惑甚至误导的表示(在解释JOINs时对Venn Diagrams说不)。对于替代表示,请考虑Join Diagram,如下面的CROSS JOIN所示:

Cross Join交叉连接名称来自交叉产品(记住线性代数和矩阵) - 您基本上采用左侧的每个项目,并将其与右侧的每个项目组合。当你CROSS JOIN一个包含5行表的4行表时,结果将是一个4×5 = 20行的新表。

请注意,交叉连接与内连接基本相同,但没有任何条件。换句话说,内连接必须指定子句“using(t1.key)”,但此子句不能与交叉连接一起使用。另请注意,所有其他类型的JOIN都可以从交叉连接派生。

让我们再看看这个行表示的四个JOIN类型:

JOIN Diagram

我们将使用以下两个表 - Customers和Orders - 来说明四种基本连接类型的语法和用例:

客户表(Customers Table):

订单表(Orders Table):

内部联接:

如果我们希望获得订购某些产品的所有客户的名称以及有关其订单的所有详细信息,则内部联接是完美的解决方案。

Left Join(也称为左外连接):

将左连接视为从第二个表到第一个表(即左侧)的附加信息。在此示例中,我们可以看到来自客户的每个客户,以及来自订单的任何匹配记录。如果Orders中没有匹配的记录,它将只显示为Null。如果我们想要一个没有订购任何产品的客户列表,这个结果很有用。我们可以使用查询轻松完成:“order_date is NULL”

Right Join(也称为右外连接):

顾名思义,它与Left join相反,因此将其视为获取所有订单的列表,并附加客户信息。这一次,我们得到名字的Null值,如果我们想要获得已购买的那些产品的列表,但是由于某种原因客户名称没有输入系统(“first_name is NULL”,这可能很有用“)。

由于它是左连接的镜像,我们可以通过查询得到完全相同的结果:“订单离开加入客户。”

Full Join:

我们使用此连接来获取两个表中所有记录的完整列表,但要谨慎 - 它与CROSS Join不同。另请注意,这次我们得到的行的Null值出现在Left和Right连接中(而在内连接中我们没有得到任何Null。

可视化这四种基本类型的其他好资源是Socratica视频,其中说明了具有行表示和最少使用Venn Diagrams的示例。

三种额外的加入类型:左外连接排除正确的外部加入与排除完全外部加入与排除

基本上,Left Outer Join with Exclusion将与Left Join一样,查询“WHERE t2.key is Null”(正如我们在上面看到的Customers和Orders表)。但是,由于我们可能希望在第二个表中执行子查询,因此它可以像下面的库/书籍集合示例中一样方便:

左外连接除外的示例:

请考虑以下库和集合表:

我们希望显示不在用户集合中的所有书籍。此查询显示不在任何用户集合中的所有书籍:

我们怎样才能找到那些不属于特定用户集合的书籍?

让我们和Yish一起试试吧:

让我们分解一下:

最后,加入三个表:两个INNER加入两个LEFT OUTER连接INNER join和LEFT OUTER join

两个INNER连接:它类似于常规连接,但有三个表,并且查询将仅产生所有三个中存在的元素(没有字段将具有Null值)。

两个LEFT OUTER连接:

让我们来说明一下

Table A = Customers, Table B = Orders, and Table C = Payments.

此加入将导致所有客户,如果他们尚未进行购买或尚未付款,则会显示一些Null值。因此,如果我们想要所有未购买或未付款的客户,我们将指定“WHERE t2.key is Null”和“t3.key is Null”。如果我们只想要提前付款或存款但实际上尚未订购的客户,我们会查询“WHERE t2.key is Null”和“t3.key is Null”。对于订购但尚未付款的客户,我们会反之亦然。

INNER join and LEFT OUTER join:

让我们来看看Flatiron School吧。

Let Table A = Data Science cohort 1, Table 2 = Data Science cohort 2, and Table 3 = Software Engineering cohort.

此加入将返回从DS1延迟到DS2的学生,以及更改课程类型(DS到SW,反之亦然)的SW学生,并从DS1延迟到DS2。如果我们只想获得延迟的那些,我们可以从这个列表中减去两个INNER连接(通过查询“t3.key = Null”的元素)。

翻译自:

标签: #mysql三表联合查询 加求和