• 内连(inner join)— 把匹配的关联数据显示出来;
  • 左连接(left join)— 把左边的表全部显示出来,右边的表显示出符合条件的数据;
  • 右连接(right join)— 把右边的表全部显示出来,左边的表显示出符合条件的数据;

在MySQL中,内连接(Inner Join)、左连接(Left Join)和右连接(Right Join)是用于连接多个表的查询操作,它们之间有以下区别:

  1. 内连接(Inner Join):内连接返回两个表中匹配的行,即只返回在连接条件下两个表中都存在的匹配行。如果一行在一个表中没有匹配行,则不会包含在结果中。
  2. 左连接(Left Join):左连接返回左表中的所有行以及与右表匹配的行。如果右表中没有匹配的行,则返回NULL值。
  3. 右连接(Right Join):右连接返回右表中的所有行以及与左表匹配的行。如果左表中没有匹配的行,则返回NULL值。

简单来说,内连接会返回两个表中匹配的行,左连接会返回左表中的所有行和与之匹配的右表行,右连接会返回右表中的所有行和与之匹配的左表行。区别在于返回的结果集中是否包含某个表中没有匹配行的情况。

需要注意的是,连接操作需要在两个表之间建立关联条件,通常使用ON关键字指定连接条件。连接操作可以基于任意列进行,不一定局限于主键和外键的关系。此外,除了上述三种连接方式,还有全连接(Full Join)和交叉连接(Cross Join)等其他连接方式,但在MySQL中的语法稍有不同。

SQL示例

假设我们有两个表:CustomersOrders

Customers 表:

CustomerID

CustomerName

1

John

2

Lisa

3

David

Orders 表:

OrderID

CustomerID

OrderDate

1

1

2021-01-01

2

2

2021-02-01

3

2

2021-03-01

4

3

2021-04-01

  1. 内连接(Inner Join):
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

结果:

CustomerID

CustomerName

OrderID

OrderDate

1

John

1

2021-01-01

2

Lisa

2

2021-02-01

2

Lisa

3

2021-03-01

3

David

4

2021-04-01

内连接返回了两个表中匹配的行,并将它们组合在一起。

  1. 左连接(Left Join):
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

结果:

CustomerID

CustomerName

OrderID

OrderDate

1

John

1

2021-01-01

2

Lisa

2

2021-02-01

2

Lisa

3

2021-03-01

3

David

4

2021-04-01

NULL

NULL

NULL

NULL

左连接返回了左表(Customers)中的所有行,并与右表(Orders)中匹配的行组合在一起。如果右表中没有匹配的行,则返回NULL值。

  1. 右连接(Right Join):
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderDate
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

结果:

CustomerID

CustomerName

OrderID

OrderDate

1

John

1

2021-01-01

2

Lisa

2

2021-02-01

2

Lisa

3

2021-03-01

3

David

4

2021-04-01

NULL

NULL

NULL

NULL

右连接返回了右表(Orders)中的所有行,并与左表(Customers)中匹配的行组合在一起。如果左表中没有匹配的行,则返回NULL值。

这个示例演示了内连接、左连接和右连接在表之间建立关联关系时的不同结果。具体使用哪种连接方式取决于查询的需求和预期的结果。