Heim >Datenbank >MySQL-Tutorial >SQL-Joins: Was sind die Leistungs- und Syntaxunterschiede zwischen USING, ON und WHERE?

SQL-Joins: Was sind die Leistungs- und Syntaxunterschiede zwischen USING, ON und WHERE?

DDD
DDDOriginal
2025-01-21 21:51:15617Durchsuche

SQL Joins: What are the Performance and Syntax Differences Between USING, ON, and WHERE?

SQL JOIN-Methoden: Leistungs- und Syntaxunterschiede von USING, ON und WHERE

SQL bietet mehrere Optionen zum Verknüpfen von Tabellen: USING, ON und WHERE. Obwohl die Funktionalität dieser Optionen ähnlich ist, kann es zu Missverständnissen hinsichtlich ihrer Leistung und syntaktischen Bedeutung kommen. In diesem Artikel werden die Unterschiede zwischen diesen Verbindungsmethoden untersucht.

Leistung

Entgegen der landläufigen Meinung gibt es keine signifikanten Leistungsunterschiede zwischen den drei Verbindungsmethoden. Alle drei Methoden erzeugen denselben optimierten Abfrageplan.

Syntax und Semantik

ANSI-Syntax:

  • JOIN (eingeführt in ANSI-92) ist die empfohlene Syntax für die Durchführung von Verknüpfungen. Es verwendet die ON-Klausel, um die Join-Bedingungen explizit zu definieren.
  • WHERE (ANSI-89) ermöglicht die Verwendung einer WHERE-Klausel zur Angabe von Join-Bedingungen, wurde jedoch aufgrund möglicher Lesbarkeits- und Mehrdeutigkeitsprobleme veraltet.

USING-Syntax:

  • USING (eingeführt in SQL:2003) ist eine Kurzsyntax, die das Schlüsselwort USING verwendet, um gemeinsame Spalten zwischen verbundenen Tabellen anzugeben. Es bietet eine prägnante und intuitive Syntax.

Mehrdeutigkeit von „dem Wo beitreten“ (implizites INNER JOIN)

Die Verwendung einer WHERE-Klausel zur Angabe von Join-Bedingungen kann zu Mehrdeutigkeiten führen, insbesondere bei Outer-Join-Typen. Das Problem ergibt sich aus der logischen Abfrageverarbeitungsreihenfolge in SQL Server, bei der FROM vor WHERE ausgewertet wird. „Join the where“ kann versehentlich ein kartesisches Produkt erstellen oder zu unerwarteten Ergebnissen führen.

Grammatische Mehrdeutigkeit:

Die folgenden beiden Abfragen veranschaulichen die Syntaxmehrdeutigkeiten, die auftreten können, wenn implizite innere Verknüpfungen in der WHERE-Klausel mit expliziten äußeren Verknüpfungen in der FROM-Klausel gemischt werden:

<code class="language-sql">FROM T1, T2, T3
WHERE T1.ID = T2.ID AND T1.foo = 'bar' AND T2.fish = 42

FROM T1 
INNER JOIN T2 ON T1.ID = T2.ID
INNER JOIN T3 ON T1.ID = T3.ID
WHERE T1.foo = 'bar' AND T2.fish = 42</code>

Die Mehrdeutigkeit entsteht durch die Unfähigkeit, klar zu bestimmen, welche Verbindungen äußerlich und welche innerlich sind.

Empfehlung:

Aus Gründen der Klarheit, Konsistenz und Kompatibilität mit modernen SQL-Standards wird Folgendes empfohlen:

  • Verwenden Sie für alle Joins explizite Joins (JOIN-Syntax mit ON-Klausel).
  • Vermeiden Sie die Verwendung von „join the where“ (impliziter INNER JOIN in der WHERE-Klausel).
  • Verwenden Sie ANSI-92-Syntax (JOIN mit ON-Klausel) für plattformübergreifende Kompatibilität.

Das obige ist der detaillierte Inhalt vonSQL-Joins: Was sind die Leistungs- und Syntaxunterschiede zwischen USING, ON und WHERE?. 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