SQL的多表联查

这里我先附上两张表的数据:

Orders 表:

OrderID CustomerID
1 3
2 1
3 2
4 NULL

Customers 表:

CustomerID CustomerName
1 Alice
2 Bob
3 Charlie
4 David

INNER JOIN 🤝

概念: INNER JOIN(内连接)返回两个表中匹配的记录。如果某条记录在其中一个表中没有匹配项,那么它就不会出现在结果集中。

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

结果:

OrderID CustomerName
1 Charlie
2 Alice
3 Bob

解释: 只显示了在两个表中都存在的匹配记录。订单4因为CustomerID为NULL,在Customers表中没有匹配,所以不显示。

LEFT JOIN 👈

概念: LEFT JOIN(左连接)返回左表(LEFT JOIN关键字左边的表)的所有记录,即使在右表中没有匹配。如果右表中没有匹配,则结果为NULL。

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

结果:

OrderID CustomerName
1 Charlie
2 Alice
3 Bob
4 NULL

 解释: 显示了Orders表中的所有记录,对于CustomerID为NULL的订单4,CustomerName为NULL,因为没有匹配的顾客信息。

RIGHT JOIN 示例 👉

概念: RIGHT JOIN(右连接)与LEFT JOIN相反,它返回右表(RIGHT JOIN关键字右边的表)的所有记录,即使左表中没有匹配。如果左表中没有匹配,则结果为NULL。

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

结果:

OrderID CustomerName
1 Charlie
2 Alice
3 Bob
NULL David

 解释: 显示了Customers表中的所有记录,对于顾客David,因为没有对应的订单(OrderID为NULL),依然会被列出

FULL JOIN 示例 ↔️ (以支持的数据库为例)

由于不是所有数据库都直接支持FULL JOIN,这里提供一个概念上的说明和一个可能的解决方案(比如在MySQL中使用UNION)。

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

概念上的结果:

OrderID CustomerName
1 Charlie
2 Alice
3 Bob
4 NULL
NULL David

解释: 显示了OrdersCustomers表中的所有记录,两边没有匹配的部分用NULL填充。

总结:

  • INNER JOIN:匹配两边的记录,无匹配则不显示。
  • LEFT JOIN:以左表为主,左表所有记录均显示,右表无匹配则NULL。
  • RIGHT JOIN:以右表为主,右表所有记录均显示,左表无匹配则NULL。
  • FULL JOIN:展示两边所有记录,任一边无匹配则对应侧为NULL。

相关推荐

  1. SQL联查

    2024-05-25 23:36:29       38 阅读
  2. SQL Server 联合更新方法

    2024-05-25 23:36:29       36 阅读
  3. Sql查询

    2024-05-25 23:36:29       37 阅读
  4. SQL查询

    2024-05-25 23:36:29       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-25 23:36:29       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-25 23:36:29       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-25 23:36:29       82 阅读
  4. Python语言-面向对象

    2024-05-25 23:36:29       91 阅读

热门阅读

  1. ZJGSU 2199 图论1

    2024-05-25 23:36:29       37 阅读
  2. C++11-独占指针unique_ptr原理实现

    2024-05-25 23:36:29       37 阅读
  3. Spring Boot :从上传的二维码图片中读取信息

    2024-05-25 23:36:29       36 阅读
  4. 解决“unknown shorthand flag: ‘d‘ in -d‘”错误

    2024-05-25 23:36:29       40 阅读
  5. Vue3按顺序调用新增和查询接口

    2024-05-25 23:36:29       34 阅读