Maison >base de données >tutoriel mysql >Jointure gauche, droite ou interne : quel type de jointure SQL dois-je utiliser ?

Jointure gauche, droite ou interne : quel type de jointure SQL dois-je utiliser ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 22:36:12972parcourir

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

Détermination du type de jointure approprié : gauche, droite ou interne

Dans les opérations de manipulation de données, la sélection du type de jointure correct entre les tables est cruciale pour récupérer les résultats souhaités. Les jointures gauche, droite et interne offrent des comportements distincts, et sélectionner celle qui convient à une situation spécifique peut s'avérer difficile. Clarifions les différences et vous aidons à déterminer quelle jointure utiliser :

Jointure interne

  • Renvoie les lignes qui ont des valeurs correspondantes dans les deux tables jointes.
  • Exclut les lignes qui n'ont pas de valeurs correspondantes dans les deux tableaux.
  • Garantit que chaque ligne des deux tableaux est représenté dans le résultat.

Jointure gauche

  • Renvoie toutes les lignes du tableau de gauche, qu'il y ait ou non des valeurs correspondantes dans le tableau de droite .
  • Inclut les lignes correspondantes du tableau de droite si elles existent.
  • S'il n'y a aucune valeur correspondante dans le table de droite pour une ligne de table de gauche, il renvoie des valeurs NULL pour les colonnes de table de droite.

Jointure à droite

  • Renvoie toutes les lignes à partir de la droite table, qu'il y ait ou non des valeurs correspondantes dans le tableau de gauche.
  • Inclut les lignes correspondantes du tableau de gauche si elles existe.
  • S'il n'y a aucune valeur correspondante dans le tableau de gauche pour une ligne du tableau de droite, il renvoie des valeurs NULL pour les colonnes du tableau de gauche.

Exemple

Considérez l'exemple de requête fourni :

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

Dans cette requête, une jointure gauche est utilisée entre batchDetails et FolderDetails, et une jointure gauche est également utilisée entre batchDetails et imageDetails. Cela indique que nous souhaitons renvoyer toutes les lignes de batchDetails, même s'il n'y a aucune ligne correspondante dans FolderDetails ou imageDetails. Les lignes correspondantes de dossierDetails et imageDetails seront incluses si disponibles, sinon les valeurs NULL seront renvoyées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn