|  |  |   Der Datenbank Join im DetailWir betrachten die beiden Tabellen:
Beide haben jeweils eine ID und ein weiteres Feld (NAME bzw. NUMMER). Nun wollen wir das Produkt von beiden Tabellen bilden und entsprechende Einschränkungen vornehmen.Hier die Tabellendeffinitionen:
 
 | 
 
CREATE TABLE BUCHSTABEN (
 ID int(8) NOT NULL default '0',
 NAME varchar(64) NOT NULL default '',
 PRIMARY KEY  (ID)
 );
 
 INSERT INTO BUCHSTABEN VALUES (10, 'ANFANG');
 INSERT INTO BUCHSTABEN VALUES (12, 'MARTHA');
 
 CREATE TABLE ZAHLEN (
 ID int(6) NOT NULL default '0',
 NUMMER decimal(16,0) NOT NULL default '0',
 PRIMARY KEY  (ID)
 )
 
 INSERT INTO ZAHLEN VALUES (10, '1');
 INSERT INTO ZAHLEN VALUES (11, '2');
 INSERT INTO ZAHLEN VALUES (12, '3');
 
 
 | 
 
  
   Das Kartesische Produkt Beide Tabellen werden mit einander "multipliziert, d.h. jedes Element der einen Tabelle mit jedem Element der anderen Tabelle verbunden.So ergibt sich aus 2 Elementen aus Tabelle Buchstaben mal 3 Elementen aus Tabelle Zahlen 6 Ergebnisse.
 D.h.: Anzahl der Tupel aus Tabelle A X Anzahl der Tupel aus Tabelle B = Treffermenge
 
 | 
   
SELECT
 ZAHLEN.ID AS "Z.ID"
 ,ZAHLEN.NUMMER AS "Z.NUMMER"
 ,BUCHSTABEN.ID AS "B.ID"
 ,BUCHSTABEN.NAME AS "B.NAME"
 FROM BUCHSTABEN
 ,ZAHLEN
 
 
 | 
 Die zu multiplizierenden Tabellen werden nach FROM aufgeführt.
 Ergebnis: 
    
 
   
    | Z.ID | Z.NUMMER | B.ID | B.NAME |   
    | 10 | 1 | 10 | ANFANG |   
    | 10 | 1 | 12 | MARTHA |   
    | 11 | 2 | 10 | ANFANG |   
    | 11 | 2 | 12 | MARTHA |   
    | 12 | 3 | 10 | ANFANG |   
    | 12 | 3 | 12 | MARTHA |    Equi Join / Natural JoinBeide Tabellen werden mit einander multipliziert aber nur die Werte in die Ergebnismenge aufgenommen die bei beiden tabellen übereinstimmen.
z.B.: B.ID=Z.ID
Das Ergebnis kann nie größer als die Gesamttupelmenge der größten Tabelle werden.  
 | 
  
SELECT
 ZAHLEN.ID AS "Z.ID"
 ,ZAHLEN.NUMMER AS "Z.NUMMER"
 ,BUCHSTABEN.ID AS "B.ID"
 ,BUCHSTABEN.NAME AS "B.NAME"
 FROM BUCHSTABEN
 ,ZAHLEN
 WHERE BUCHSTABEN.ID=ZAHLEN.ID
 
 
 | 
 Der Vergleich wird in der WHERE Bedingung wie bekannt vollzogen Z.D=B.ID
 Ergebnis: 
 
   
    | Z.ID | Z.NUMMER | B.ID | B.NAME |   
    | 10 | 1 | 10 | ANFANG |   
    | 12 | 3 | 12 | MARTHA |   
 Inner/Outer/Right/Left JoinErläuterungen anhand des LEFT JOIN.Wir vergleichen nun ausgehenden von einer Master Tabelle aus die Werte der anderen Tabelle mit dieser, dabei bilden wir alle Werte der anderen Tabelle auf unsere Master Tabelle soweit vorhanden ab.
(z.B.:ZAHLEN LEFT JOIN BUCHSTABEN)
 Das Ergebnis ist immer die Gesamttupelmenge der Master Tabelle.
 
 | 
 
SELECT
 ZAHLEN.ID AS "Z.ID"
 ,ZAHLEN.NUMMER AS "Z.NUMMER"
 ,BUCHSTABEN.ID AS "B.ID"
 ,BUCHSTABEN.NAME AS "B.NAME"
 FROM ZAHLEN
 LEFT JOIN BUCHSTABEN
 ON BUCHSTABEN.ID=ZAHLEN.ID
 
 
 | 
 In diesem Fall wird der JOIN mit FROM Tabelle LEFT JOIN Tabelle2 gebildet.
 Right Join ist zu Left Join spiegelverkehrt zu sehen.
 Ergebnis: 
 
   
    | Z.ID | Z.NUMMER | B.ID | B.NAME |   
    | 10 | 1 | 10 | ANFANG |   
    | 11 | 2 | NULL | NULL |   
    | 12 | 3 | 12 | MARTHA |    Auto-Join/Self-JoinAuto-Join bedeutet ein Join mit sich selbst das heisst die Tabelle wird it sich selbst multipliziert.
Dazu fügen wir folgende Daten ein:| 
 
 INSERT INTO BUCHSTABEN VALUES (11, 'ANFANG');
 INSERT INTO BUCHSTABEN VALUES (13, 'BERTA');
 | 
 
 In diesem Fall ist die Ergebnis Menge genau die Tupelmenge in der Datenbank.
 Wir Joinen auf uns selbst:
 
 | 
 
SELECT
 B1.ID AS "B1.ID"
 ,B1.NAME AS "B1.NUMMER"
 ,B2.ID AS "B2.ID"
 ,B2.NAME AS "B2.NAME"
 FROM BUCHSTABEN B1
 ,BUCHSTABEN B2
 WHERE B1.ID=B2.ID
 
 
 | 
 Wir müssen bei einem Self Join auf jeden Fall Tabellen Aliase verwenden ansonsten können wir keinen Join durchführen z.B.: Tabelle AS T1, Tabelle as T2
 Ergebnis: 
 
   
    | B1.ID | B1.NUMMER | B2.ID | B2.NAME |   
    | 10 | ANFANG | 10 | ANFANG |   
    | 11 | ANFANG | 11 | ANFANG |   
    | 12 | MARTHA | 12 | MARTHA |   
    | 13 | BERTA | 13 | BERTA |   Wo macht der Einsatz eines Self Joins Sinn? 
Z.B.: Doubletten innerhalb einer Tabelle suchen:
 | 
 
SELECT
 B1.ID AS "B1.ID"
 ,B1.NAME AS "B1.NUMMER"
 ,B2.ID AS "B2.ID"
 ,B2.NAME AS "B2.NAME"
 FROM BUCHSTABEN B1
 ,BUCHSTABEN B2
 WHERE B1.ID!=B2.ID
 ANND B1.NAME = B2.NAME
 
 
 | 
 Keine gleiche ID aber sehr wohl gleicher Name.
 Ergebnis: 
 
   
    | B1.ID | B1.NUMMER | B2.ID | B2.NAME |   
    | 11 | ANFANG | 10 | ANFANG |   
    | 10 | ANFANG | 11 | ANFANG |  Aufgaben zum Join 
  Tabellen Buchstaben und Zeichen anlegen und mit Datensätzen erweitern 
  
    Alle drei Joins nachvollziehen
 Verschiedene Joins mit Drei Tabellen. 
    
      Join als kartesisches ProduktEqui JoinLeft JoinRight Join 
  Join über Zeichen auf sich selbst (alle Doubletten raussuchen) und 
    dazu die ID aus Buchstaben 
    
      Ergebnis soll sein Zeichen.Name | Buchstaben.Id       
      |  |