/ / Sind INNER JOIN und OUTER JOIN notwendig? - SQL, Datenbank, beitreten

Sind INNER JOIN und OUTER JOIN notwendig? - SQL, Datenbank, Join

Ich verstehe, dass jeder Join mit einem CROSS-Join und einer WHERE-Klausel erfolgen kann.

Ich habe einige Experimente durchgeführt, und es sieht so aus, als würde das Gleichheits-Prädikat innerhalb der where-Klausel platziert oder als Parameter eines Inner-Joins dasselbe Ergebnis mit derselben Leistung erzielen.

Außerdem werden durch die Verwendung von Inner-Joins keine Eingaben gespeichert, da das Join-Prädikat noch angegeben werden muss.

Ich denke, dass dasselbe gilt für die verschiedenen Arten von äußeren Verbindungen. Geben Sie einfach an, dass die Werte null oder nicht null sein können.

Kann ich nur mit Cross-Joins gehen?

Antworten:

10 für die Antwort № 1

Mit einem CROSS-Join und einer WHERE-Klausel kann kein Join durchgeführt werden. Jeder Join von cross, inner und äußere hat seine eigene logische Bedeutung.

  1. Ein Cross Join gilt nur für eine Phase - das kartesische Produkt.
  2. Eine innere Verbindung wendet zwei Phasen an: kartesisches Produkt und Filter.
  3. Eine äußere Verknüpfung wendet drei Phasen an: kartesisches Produkt, Filter und äußere Zeilen hinzufügen.

Ein verwirrender Aspekt von Abfragen, die eine OUTER JOIN-Klausel enthalten, ist die Angabe eines logischen Ausdrucks im ON-Filter oder im WHERE-Filter. Der Hauptunterschied zwischen den beiden ist das ON wird vor dem Hinzufügen von äußeren Reihen angewendet , während WO wird danach angewendet. Eine Eliminierung einer Zeile aus der konservierten Tabelle (als linke äußere oder rechte äußere angegeben) durch den ON-Filter ist nicht endgültig, da sie wieder hinzugefügt wird. Eine Eliminierung einer Zeile durch den WHERE-Filter ist dagegen endgültig.

Dieser logische Unterschied zwischen den ON- und WHERE-Klauseln existiert nur bei Verwendung einer äußeren Beitreten. Wenn Sie einen Inner-Join verwenden, ist es egal, wo Sie Ihre logischen Ausdrücke in der ON-Klausel mit dem Inner-Join-Tabellenoperator oder in der Where-Klausel mit dem Cross-Join-Tabellenoperator angeben.

Hoffe das hilft!!!


1 für die Antwort № 2

Die Antwort ist, dass die Leistung nicht beeinträchtigt wird.Die Lesbarkeit und die Klarheit des Codes werden jedoch behindert, wenn Sie erfahren haben, wie Entwickler Cross-Joins betrachten, wenn sie wirklich innere Joins sind. Ansonsten geht es um persönliche Vorlieben.


0 für die Antwort № 3

Sie haben in Ihrer Frage nur halbwegs Recht. Sie sagten, dass Sie getestet und verglichen haben JOINs und Dekart Produkt. Und das Ergebnis, das Sie erhalten haben, ist, dass sie gleich sind, jedoch habe ich vor etwa einem Jahr denselben Test für MySQL-Datenbank und durchgeführt JOINs war viel schneller. Dies ist darauf zurückzuführen, dass der SQL-Standart angibt, wie der Verknüpfungsvorgang implementiert werden muss und dass die Dekart-Produktausgabe derselbe sein muss INNER JOIN.

Mein Rat ist daher, aus einigen Gründen die Standardmethode zum Schreiben von Abfragen zu verwenden:

  1. Abfragen, die unter DBMS (Datenbankverwaltungssystem) gut funktionieren, funktionieren unter anderen möglicherweise nicht so gut.
  2. Frühere Versionen des gleichen DBMS können Dekart-Produkte und letztere möglicherweise nicht optimieren.
  3. Und wahrscheinlich das Wichtigste. Abfragestruktur mit JOINs ist viel einfacher zu lesen und zu verstehen, so dass es einfacher ist, die Abfrage zu ändern.

Alles in allem ist mein Rat zu verwenden JOINstattdessen.