Announcement

Collapse
No announcement yet.

Joins

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Joins

    Hi,

    folgende joins sind ja inner joins:
    cross join
    equi join
    natural join
    inner join

    der Natural join:
    Alle gleichnamigen Spalten verschiedener Tabellen werden verglichen. Die Werte in diesen Spalten werden sodann auf Gleichheit bzw. Übereinstimmung geprüft. Im Anschluss daran werden zusätzlich noch doppelte Spalten eliminiert. Stimmen keine Spalten überein, so wird ein Cross Join durchgeführt. Natural Join überprüft nur auf Gleichheit.

    der Equi join:
    Beim Equi Join werden nur explizit angegebene Spalten verglichen.Die Werte in diesen Spalten werden sodann auf Übereinstimmung geprüft. Doppelte Spalten werden nicht Eliminiert. Werden explizit keine Spalten angegeben, so wird ein Cross Join durchgeführt. Der Equi Join überprüft, wie der Name schon sagt, nur auf Gleichheit.

    Jetzt meine Frage, da ich hier leider nur mysql und kein oracle habe, kann ich das schlecht selber überprüfen:
    Müssen die Spaltennamen beim Equi join genau wie beim Natural join auch übereinstimmen? oder wird beim equi join nur der inhalt der beiden angegeben
    spalten auf gleichheit geprüft? die Spaltennamen dürfen jedoch differgieren?

    also z.b.
    t1 (name, c1)
    t2 (name, c2)

    Select * from t1 natural join t2; -> es werden die spalten t1.name und t2.name
    verglichen
    Select * from t1 equi join t2 on t1.name = t2.name -> hat den selbigen effekt, es werden auch nur diese beiden spalten auf gleichheit überprüft.
    Ist aber jetzt folgendes möglich?
    Select * from t1 equi join t2 on t1.c1 = t2.c2

    So weit ich weiss, ist dies beim Inner join auf jedenfall möglich! Zumindestens
    ist es so in mysql implementiert. Desweiteren kann man beim inner join ja auch auf != und > und < testen und nicht nur auf Gleichheit.

    VIelen dank für eure Hilfe!
    Gruß Mentor

  • #2
    Hi,

    ich würde nie im Leben einen natural join verwenden.

    Davon abgesehen ist ein inner join und ein equi join äquivalent zu sehen. Die Spaltennamen müssen natürlich nicht übereinstimmen.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Join

      1. Cross Join
      Ein Cross Join ist kein Inner Join!
      Bei einem Cross Join wird jeder Datensatz der einen Tabelle mit jedem Datensatz
      der anderen Tabelle verknüpft. Dies erfolgt ohne Beachtung von möglichen
      gleichen Werten oder Spaltennamen.

      2. Inner Join und Equi Jon
      Inner Join und Equi Join sind äquivalente Begriffe.

      3. Equi-Join und Non-Equi-Join
      Bei einem Equi-Join wird immer auf gleiche Werte überprüft.
      Soll ein Vergleich durchgeführt werden, der nicht auf Gleichheit basiert,
      so wird von einem Non-Equi-Join gesprochen.

      3. Equi Join
      Als Vergleichsoprator wird die Gleichheit verwendet. Die Spalten, die miteinander verglichen
      werden sollen, müssen namentlich nicht übereinstimmen.

      4. Natural Join und Equi-Join
      Ein Natural Join ist kein Equi-Join. Allerdings kann ein Natural-Join durch ein Equi-Join
      ausgedrückt werden.
      Bei einem Natural Join erfolgt der Join über alle namentlich gleichen Spalten,
      die in beiden Tabellen vorkommen. Diese Spalten werden über die Gleichheit
      miteinander verglichen.

      Beispiel:
      t1 (id, nr, name)
      t2 (id, nr, titel)

      Natural-Join:
      select * from t1 NATURAL JOIN t2; ist äquivalent zu:

      Equi-Join:
      select * from t1 JOIN t2 ON (t1.id = t2.id AND t1.nr = t2.nr);

      oder auch
      select * from t1 JOIN t2 USING (id, nr);

      ABER:
      select * from t1 JOIN t2 ON (t1.id = t1.id); liefert ein ganz anderes Ergebnis!


      Gruss kuemmelchen

      Comment

      Working...
      X