首页 >数据库 >mysql教程 >左连接、右连接或内连接:我应该使用哪种 SQL 连接类型?

左连接、右连接或内连接:我应该使用哪种 SQL 连接类型?

Susan Sarandon
Susan Sarandon原创
2024-12-28 22:36:12972浏览

Left, Right, or Inner Join: Which SQL Join Type Should I Use?

确定适当的联接类型:左、右或内

在数据操作操作中,在表之间选择正确的联接类型至关重要检索所需的结果。左连接、右连接和内连接提供不同的行为,为特定情况选择合适的连接可能具有挑战性。让我们澄清差异并帮助您确定要使用哪个联接:

内部联接

  • 返回在两个联接表中具有匹配值的行。
  • 排除两个表中没有匹配值的行。
  • 确保每一行

Left Join

  • 返回左表中的所有行,无论是否有匹配值在右表中。
  • 包含右表中的匹配行(如果它们)
  • 如果右表中左表行没有匹配值,则右表列返回 NULL 值。

Right Join

  • 返回右表中的所有行,无论左表中是否有匹配的值表。
  • 包含左表中的匹配行(如果存在)。
  • 如果左表中没有右表行的匹配值,则为左表列返回 NULL 值.

示例

考虑示例查询提供:

SELECT  count(ImageId) as [IndividualRemaining],
        userMaster.empName AS ID#,
        CONVERT(DATETIME, folderDetails.folderName, 101) AS FolderDate,
        batchDetails.batchName AS Batch#,
        Client=@ClientName,
        TotalInloaded = IsNull(@TotalInloaded,0),
        PendingUnassigned = @PendingUnassigned,
        InloadedAssigned =     IsNull(@TotalAssigned,0),
        TotalProcessed = @TotalProcessed,
        Remaining = @Remaining
FROM
        batchDetails
            Left JOIN  folderDetails ON batchDetails.folderId = folderDetails.folderId
            Left JOIN  imageDetails ON batchDetails.batchId = imageDetails.batchId
            Left JOIN  userMaster ON imageDetails.assignedToUser = userMaster.userId
WHERE   folderDetails.ClientId =@ClientID and verifyflag='n'
        and folderDetails.FolderName IN (SELECT convert(VARCHAR,Value) FROM dbo.Split(@Output,','))
        and userMaster.empName <> 'unused'
GROUP BY userMaster.empName, folderDetails.folderName, batchDetails.batchName
Order BY folderDetails.Foldername asc

在此查询中,batchDetails 和folderDetails 之间使用左联接,batchDetails 和imageDetails 之间也使用左联接。这表明我们想要返回batchDetails 中的所有行,即使folderDetails 或imageDetails 中没有匹配的行。如果可用,将包含来自folderDetails和imageDetails的匹配行,否则将返回NULL值。

以上是左连接、右连接或内连接:我应该使用哪种 SQL 连接类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn