Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Joins - Anwendung

Dieses Thema im Forum "Oracle" wurde erstellt von 123michi19, 31 Januar 2017.

  1. 123michi19

    123michi19 Neuer Benutzer

    Hallo zusammen :)

    ich bin gerade am Verzweifeln was Joins in SQL betrifft.
    - Mir ist bewusst, dass es Left Joins, Right Joins etc. gibt und dass sich diese auf die jeweilige Tabellenhälfte beziehen.

    Aber ein paar Fragen stelle ich mir noch:

    Was bringt mir using und on?

    Hier mal eine Beispielaufgabe mit Lösung:

    Die Personalabteilung benötigt einen Bericht der Mitarbeiter in Toronto. Zeigen Sie den Nachnamen, die Job-Kennung, die Abteilungsnummer und den Abteilungsnamen für alle Mitarbeiter an, die in Toronto arbeiten.

    Die Lösung:

    select e.last_name, e.job_id, e.department_id, d.department_name
    from employees e, departments d, locations l
    where e.department_id = d.department_id
    and d.location_id = l.location_id
    and lower(l.city) = 'toronto';

    Hier noch die Inhalte der Tabellen von Employees und Departments:

    Name Null Typ
    -------------- -------- ------------
    EMPLOYEE_ID NOT NULL NUMBER(6)
    FIRST_NAME VARCHAR2(20)
    LAST_NAME NOT NULL VARCHAR2(25)
    EMAIL NOT NULL VARCHAR2(25)
    PHONE_NUMBER VARCHAR2(20)
    HIRE_DATE NOT NULL DATE
    JOB_ID NOT NULL VARCHAR2(10)
    SALARY NUMBER(8,2)
    COMMISSION_PCT NUMBER(2,2)
    MANAGER_ID NUMBER(6)
    DEPARTMENT_ID NUMBER(4)
    Name Null Typ
    --------------- -------- ------------
    DEPARTMENT_ID NOT NULL NUMBER(4)
    DEPARTMENT_NAME NOT NULL VARCHAR2(30)
    MANAGER_ID NUMBER(6)
    LOCATION_ID NUMBER(4)


    Mir leuchtet die Lösung nicht ein, ich sehe keinen Left Join etc. und warum haben last_name, job_id und department_id den Bezeichner von employees und department_name den Bezeichner von departments?


    Vielen Dank für Eure Hilfe.
     
  2. drdimitri

    drdimitri Datenbank-Guru

    Das ist der gute, alte Kommajoin (umgangssprachlich).
    Statt dem = kann man auch join.. on schreiben.
    Deine andere Frage versteh ich nicht ganz, das sind die Spalte aus den jeweiligen Tabellen. Die Verbindung der beiden Tabellen wird über den Join hergestellt.
     
    akretschmer gefällt das.
  3. akretschmer

    akretschmer Datenbank-Guru

    Ack @drdimitri , ergänzend dazu noch, daß die expliziete Join-Syntax besser ist, da sie die Join-Condition von der Where-Condition trennt. Die andere Frage ist offenbar auf das e.<Spalte> und d.<Spalte> bezogen. In der From-List werden den beteiligten Tabellen Aliase vergeben, eben z.B. e und d. Im 'Rest' der Abfrage bezieht man sich dann auf diese Aliase.
     
  4. drdimitri

    drdimitri Datenbank-Guru

    Ist vermutlich Gewohnheitssache. In den älteren Oracleversionen (vor 9i) gab's die ANSI Join Syntax noch gar nicht. Ich find den Kommajoin übersichtlicher (mit Ausnahme des Full Outer Joins). Vom Ausführungsplan her ist es egal ob alte oder neue Syntax.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden