Warum verwenden Sie in MySQL-Abfragen Join anstelle von wo?
Wie es scheint, kombinieren Sie zwei oder mehr Tabellen, können wir entweder join oder where. Was sind die Vorteile des einen über den anderen?
InformationsquelleAutor der Frage extraeee | 2010-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jede Abfrage, die mehr als eine Tabelle benötigt irgendeine form der Assoziation, Verknüpfung der Ergebnisse aus Tabelle "A" in Tabelle "B". Die traditionelle (ANSI-89) bedeutet, dies zu tun ist, um:
Schreiben Sie die Assoziation zwischen den Tabellen in der WHERE-Klausel
Hier ist die Abfrage re-geschrieben, mit ANSI-92-JOIN-syntax:
Aus Performance-Perspektive:
Wo unterstützt (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), es gibt keine performance-Vorteil durch die Verwendung von entweder-syntax über den anderen. Der Optimierer sieht Sie als die gleiche Abfrage. Aber auch komplexere Abfragen können, profitieren von der Verwendung des ANSI-92-syntax:
Aus einem Pflege Perspektive:
Gibt es zahlreiche Gründe für die Verwendung von ANSI-92-JOIN-syntax über ANSI-89:
Aus einer Design-Perspektive:
ANSI-92-JOIN-syntax ist Muster, nicht-anti-Muster:
Abschluss
Kurz von Vertrautheit und/oder Komfort, ich sehe keine Vorteile für die Fortsetzung für die Verwendung von ANSI-89-JOIN-syntax anstelle von ANSI-92-syntax. Einige mögen beklagen, dass die ANSI-92-syntax ist Ausführlicher, aber das ist, was macht es explizit. Die deutlicher, desto leichter ist es, zu verstehen und zu pflegen.
InformationsquelleAutor der Antwort OMG Ponies
Diese sind die Probleme bei der Verwendung der where-syntax (andere weisen, bekannt als die implizite join):
Ersten, es ist alles zu leicht zu bekommen zufälligen cross-joins, da die join-Bedingungen sind nicht rechts neben dem Tabellennamen. Wenn Sie 6 Tabellen, die verbunden werden, zusammen, ist es leicht zu übersehen man in der where-Klausel. Sie werden sehen, diese Feste zu oft durch die Verwendung des distinct-Schlüsselworts. Dies ist einriesige Leistung Treffer für die Datenbank. Sie nicht bekommen kann eine versehentliche cross join verwenden die explizite join-syntax, da wird es scheitern, die syntax zu überprüfen.
Rechts und Links schließt sich problematisch sind (In der SQl server-Sie sind nicht garantiert, um die richtigen Ergebnisse) in der alten syntax in einigen Datenbanken. Weiter sind Sie veraltet in SQL Server, die ich kenne.
Wenn Sie beabsichtigen, verwenden Sie einen cross join, das ist nicht klar, aus der alten syntax. Es ist klar, mit der aktuellen ANSII-standard.
Ist es viel schwieriger für die Betreuer, genau zu sehen, welche Felder sind Teil der Verknüpfung oder auch die Tabellen gemeinsam, in welcher Reihenfolge über die implizite syntax. Das bedeutet, dass es möglicherweise mehr Zeit zur überarbeitung der Abfragen. Ich kenne sehr wenige Menschen, wenn Sie sich die Zeit nahmen, um sich wohl fühlen mit dem expliziten join-syntax, ging immer wieder auf die alte Art und Weise.
Ich habe auch bemerkt, dass einige Leute, die verwenden diese implizite joins verstehe eigentlich nicht, wie joins funktionieren und somit immer falsche Ergebnisse, in Ihren Fragen.
Ehrlich, würden Sie eine andere Art von code, der wurde ersetzt durch eine bessere Methode vor 18 Jahren?
InformationsquelleAutor der Antwort HLGEM
Meisten Menschen neigen dazu zu finden, die JOIN-syntax ein wenig klarer, was wird verbunden, was. Darüber hinaus hat es den Vorteil, dass ein standard.
Persönlich, ich "wuchs" auf WHEREs, aber je mehr ich die Verwendung der JOIN-syntax mehr und ich fange an zu sehen, wie es klarer.
InformationsquelleAutor der Antwort James Cronen
Explizite joins vermitteln Absicht, dem verlassen der where-Klausel für die Filterung. Es ist sauberer und es ist standard, und Sie können Dinge tun, wie das linke äußere oder Rechte äußere, die härter ist zu tun, nur mit denen.
InformationsquelleAutor der Antwort Otávio Décio
Können Sie nicht verwenden, WO zum kombinieren von zwei Tabellen. Was Sie allerdings tun können, ist zu schreiben:
Das Komma hier ist äquivalent zu schreiben:
Würden Sie schreiben? Nein, denn es ist nicht das, was du meinst, bei allen. Sie wollen nicht einen cross join, Sie wollen einen INNER JOIN. Aber wenn Sie schreiben, Komma, du sagst, CROSS JOIN und das ist verwirrend.
InformationsquelleAutor der Antwort Mark Byers
Eigentlich müssen Sie Häufig sowohl das "WO" und "JOIN".
"JOIN" dient zum abrufen von Daten aus zwei Tabellen - AUF Basis der Werte von einer gemeinsamen Spalte. Wenn Sie möchten, um weitere filter dieses Ergebnis, verwenden Sie die WHERE-Klausel.
Beispielsweise "LEFT JOIN" werden ALLE Zeilen aus der linken Tabelle, plus die passenden Zeilen aus der rechten Tabelle. Aber das bedeutet nicht, filter die Datensätze auf einem bestimmten Wert oder auf anderen Spalten, die nicht Teil des Joins. Also, wenn Sie wollen, um weitere filter dieses Ergebnis, angeben, der zusätzliche Filter in der WHERE-Klausel.
InformationsquelleAutor der Antwort Gerhard Liebenberg