mysql的基本知识点——JOIN联表查询

SQL 的 JOIN 操作用于根据两个或多个表之间的相关列之间的关系,从这些表中查询数据。通过使用 JOIN,您可以结合来自多个表的信息,并基于某些匹配条件返回结果。
以下是 SQL 中 JOIN 操作的详细说明和一些用例:

INNER JOIN (或 JOIN)

返回两个表中都有的记录。只有当左表(即 JOIN 关键字左边的表)中的某行在右表中有匹配时,结果集中才包含该行。
用例:
假设我们有两个表:Customers 和 Orders。我们想找出所有下过订单的客户信息。

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

LEFT JOIN (或 LEFT OUTER JOIN)

从左表返回所有的记录,即使右表中没有匹配。如果右表中没有匹配,则结果中右表的部分将包含 NULL。
用例:
我们想列出所有客户,以及他们的订单(如果有的话)。即使某些客户没有订单,我们也想看到他们的名字。

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

RIGHT JOIN (或 RIGHT OUTER JOIN)

与 LEFT JOIN 相反,从右表返回所有的记录,即使左表中没有匹配。

SELECT Customers.CustomerName, Orders.OrderId
From Customers
Right JOIN Orders ON Customers.CustomerID = Orders.CustomerID

注意:虽然 RIGHT JOIN 在理论上是有用的,但在实际应用中,LEFT JOIN 通常更受欢迎,因为它遵循从左到右的阅读习惯。你可以通过调换表的顺序和使用 LEFT JOIN 来达到 RIGHT JOIN 的效果。

FULL JOIN (或 FULL OUTER JOIN)

当左表或右表中有匹配时返回行。如果某一边没有匹配,则结果中相应的部分将包含 NULL。
用例:
我们既想列出所有客户,又想列出所有订单,即使某些客户没有订单或某些订单没有与之关联的客户。

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

CROSS JOIN

返回左表中的每一行与右表中的每一行的组合,也称为笛卡尔积。这通常不是您想要的,除非您明确需要这种组合。
用例:
假设我们有两个表:Colors 和 Sizes。我们想看到每种颜色与每种尺寸的所有可能组合。

SELECT Colors.ColorName, Sizes.SizeName  
FROM Colors  
CROSS JOIN Sizes;

JOIN 的其他注意事项

  • 当使用 JOIN 时,确保连接条件明确且有意义,以避免返回不相关的数据或产生大量的结果。
  • 使用别名可以简化查询,特别是当表名很长或查询涉及多个表时。例如,Customers AS C。
  • 在大型数据库上执行 JOIN 操作时,确保相关的列已经建立了索引,以提高查询性能。
  • 使用 DISTINCT 可以消除结果集中的重复行。
  • 在复杂的查询中,可以使用括号来明确指定 JOIN 的顺序。

相关推荐

  1. mysql基本知识——JOIN查询

    2024-03-22 09:46:02       46 阅读
  2. MYSQL-简单查询示例

    2024-03-22 09:46:02       49 阅读
  3. Mysql--基础知识--86--慢查询

    2024-03-22 09:46:02       41 阅读
  4. mysql基本知识

    2024-03-22 09:46:02       41 阅读
  5. MySQL 中,常见 JOIN 查询语句

    2024-03-22 09:46:02       34 阅读

最近更新

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

    2024-03-22 09:46:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 09:46:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 09:46:02       87 阅读
  4. Python语言-面向对象

    2024-03-22 09:46:02       96 阅读

热门阅读

  1. 数据结构万字总结(超级详细)第一章——绪论

    2024-03-22 09:46:02       33 阅读
  2. Android仿微信视频聊天本地与远程切换功能

    2024-03-22 09:46:02       33 阅读
  3. Android 设置相关页面

    2024-03-22 09:46:02       46 阅读
  4. Linux实战笔记(四) 后台运行

    2024-03-22 09:46:02       43 阅读
  5. 富格林:谨记可信计策安全做单

    2024-03-22 09:46:02       37 阅读
  6. 复试专业前沿问题问答合集2

    2024-03-22 09:46:02       40 阅读
  7. Springboot vue elementui 电影院售票系统

    2024-03-22 09:46:02       36 阅读
  8. 【无人机综合题】+题解

    2024-03-22 09:46:02       43 阅读