Heim >Datenbank >MySQL-Tutorial >Linker, rechter oder innerer Join: Welchen SQL-Join-Typ sollte ich verwenden?

Linker, rechter oder innerer Join: Welchen SQL-Join-Typ sollte ich verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-12-28 22:36:12962Durchsuche

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

Bestimmen des geeigneten Verbindungstyps: Links, rechts oder innen

Bei Datenmanipulationsvorgängen ist die Auswahl des richtigen Verbindungstyps zwischen Tabellen von entscheidender Bedeutung um die gewünschten Ergebnisse abzurufen. Linke, rechte und innere Verbindungen bieten unterschiedliche Verhaltensweisen, und die Auswahl des geeigneten für eine bestimmte Situation kann eine Herausforderung sein. Lassen Sie uns die Unterschiede klären und Ihnen helfen, zu bestimmen, welcher Join verwendet werden soll:

Inner Join

  • Gibt Zeilen zurück, die in beiden verbundenen Tabellen übereinstimmende Werte haben.
  • Schließt Zeilen aus, die in beiden Tabellen keine übereinstimmenden Werte haben.
  • Stellt sicher, dass jede Zeile in beiden Tabellen über übereinstimmende Werte verfügt im Ergebnis dargestellt.

Left Join

  • Gibt alle Zeilen aus der linken Tabelle zurück, unabhängig davon, ob in der rechten Tabelle übereinstimmende Werte vorhanden sind .
  • Schließt übereinstimmende Zeilen aus der rechten Tabelle ein, sofern vorhanden.
  • Wenn in der rechten Tabelle keine übereinstimmenden Werte vorhanden sind für eine linke Tabellenzeile gibt es NULL-Werte für die rechten Tabellenspalten zurück.

Rechter Join

  • Gibt alle Zeilen aus der rechten Tabelle zurück, unabhängig davon, ob in der linken Tabelle übereinstimmende Werte vorhanden sind.
  • Schließt übereinstimmende Zeilen aus der linken Tabelle ein, wenn dies der Fall ist existieren.
  • Wenn es in der linken Tabelle keine passenden Werte für eine rechte Tabellenzeile gibt, werden NULL-Werte für die linken Tabellenspalten zurückgegeben.

Beispiel

Betrachten Sie die bereitgestellte Beispielabfrage:

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

In dieser Abfrage wird ein Links-Join zwischen „batchDetails“ und verwendet FolderDetails, und ein Links-Join wird auch zwischen BatchDetails und ImageDetails verwendet. Dies zeigt an, dass wir alle Zeilen von „batchDetails“ zurückgeben möchten, auch wenn es in „folderDetails“ oder „imageDetails“ keine passenden Zeilen gibt. Übereinstimmende Zeilen aus „folderDetails“ und „imageDetails“ werden einbezogen, sofern verfügbar, andernfalls werden NULL-Werte zurückgegeben.

Das obige ist der detaillierte Inhalt vonLinker, rechter oder innerer Join: Welchen SQL-Join-Typ sollte ich verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn