📜  “内连接”和“外连接”的区别(1)

📅  最后修改于: 2023-12-03 15:21:25.590000             🧑  作者: Mango

内连接和外连接

关系型数据库中的连接是在两个或多个表之间建立关联的过程。 内连接和外连接是两种不同类型的连接方式。

内连接(Inner Join)

内连接是将两个表中一致的数据进行连接,即只连接“内部匹配”的数据。 内连接的语法如下:

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

示例:

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

以上语句将返回包含订单ID和客户名称的记录,其中只包含存在于订单表和客户表中同时存在的订单。

左外连接(Left Outer Join)

左外连接是将两个表中的所有行都连接起来,同时只保留符合条件的结果集合,右边表中无匹配数据的地方,也用NULL表达。 左外连接的语法如下:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

示例:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

以上语句将返回所有客户名称和对应订单ID,对于没有订单的客户用NULL表示。

右外连接(Right Outer Join)

右外连接是左外连接的反向操作,在保留右边表中的所有行的同时只显示符合条件的结果集合,左边表中无匹配数据的地方,也用NULL表达。 右外连接的语法如下:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

示例:

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
ORDER BY Orders.OrderID;

以上语句将返回所有订单ID以及对应的员工姓和名字,对于没有员工对应的订单用NULL表示。

完整外连接(Full Outer Join)

完整外连接是将左表和右表的所有行都连接起来并使NULL作为没有符合条件的地方的表示。 完整外连接的语法如下:

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

示例:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

以上语句将返回所有客户名称和订单ID,包括没有相互匹配的行,没有相互匹配的地方用NULL表示。