- 内连(inner join)— 把匹配的关联数据显示出来;
- 左连接(left join)— 把左边的表全部显示出来,右边的表显示出符合条件的数据;
- 右连接(right join)— 把右边的表全部显示出来,左边的表显示出符合条件的数据;
在MySQL中,内连接(Inner Join)、左连接(Left Join)和右连接(Right Join)是用于连接多个表的查询操作,它们之间有以下区别:
内连接(Inner Join):内连接返回两个表中匹配的行,即只返回在连接条件下两个表中都存在的匹配行。如果一行在一个表中没有匹配行,则不会包含在结果中。
左连接(Left Join):左连接返回左表中的所有行以及与右表匹配的行。如果右表中没有匹配的行,则返回NULL值。
右连接(Right Join):右连接返回右表中的所有行以及与左表匹配的行。如果左表中没有匹配的行,则返回NULL值。
简单来说,内连接会返回两个表中匹配的行,左连接会返回左表中的所有行和与之匹配的右表行,右连接会返回右表中的所有行和与之匹配的左表行。区别在于返回的结果集中是否包含某个表中没有匹配行的情况。
需要注意的是,连接操作需要在两个表之间建立关联条件,通常使用ON关键字指定连接条件。连接操作可以基于任意列进行,不一定局限于主键和外键的关系。此外,除了上述三种连接方式,还有全连接(Full Join)和交叉连接(Cross Join)等其他连接方式,但在MySQL中的语法稍有不同。
假设我们有两个表:Customers和Orders。
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 |
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 |
内连接返回了两个表中匹配的行,并将它们组合在一起。
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值。
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值。
这个示例演示了内连接、左连接和右连接在表之间建立关联关系时的不同结果。具体使用哪种连接方式取决于查询的需求和预期的结果。