SQL Grundkurs 1: Die Sprache erlernen

OUTER JOIN Teil 2

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Oftmals ist gerade das interessant, wofür es in der anderen Tabelle keine Entsprechung gibt. Um dies aber trotzdem zu erhalten, benötigen Sie unbedingt einen OUTER JOIN. Wie Sie zum Beispiel die Frage klären, welcher Artikel noch nie bestellt worden ist, zeigt Ihnen dieser Film.

Transkript

In diesem Video lernen Sie, wie Sie einen "AutoJoin" dazu nutzen können, um festzustellen, was es nur in der einen Tabelle und in der anderen Tabelle nicht gibt. In anderen Worten: Wofür es in der anderen Tabelle kein Pendant gibt. Ich möchte dazu folgendes Beispiel verwenden: Ich möchte feststellen, welchen Artikelgruppen ist derzeit kein Artikel zugeordnet? Zuerst joine ich einmal klassisch mittels "InnerJoin" diese zwei Tabellen, nämlich die "Artikelgruppen" und die "Artikel". Ich vergebe gleich wie gewohnt die Tabellen-Aliasnamen, "G" für die Artikelgruppen und "A" für die Artikel. {A.Gruppe = G.Artgr}. Ich hole mir jetzt aus der Artikelgruppen-Tabelle die Langbezeichnung, die Spalte "Text" "SGruppe", und hole mir aus der Artikeltabelle die "Bezeichnung" und sortiere das Ganze nach der Artikelbezeichnung. Vielleicht macht es sogar Sinn, zuerst nach der Artikelgruppe zu sortieren und innerhalb der Artikelgruppe nach der Bezeichnung. Ich führe die Anweisung aus. Hier habe ich einen Fehler im Spaltennamen "Invalid Identifier". Es ist immer sehr wichtig, dass man die Fehlermeldungen auch versucht zu interpretieren. "Invalid Identifier" heißt, dass der Name falsch geschrieben ist. In dem Fall heißt die Spalte nicht "Text", sondern "GrText". Ich bessere das aus und starte die Anweisung erneut. Jetzt hat es funktioniert. Der "Inner Join" zeigt uns jetzt quasi die Schnittmenge dieser beiden Tabellen. Mit anderen Worten: Wir sehen jetzt hier alle Artikel, die einer Gruppe zugeordnet sind, bzw. alle Artikelgruppen, die auch mindestens einem Artikel zugeordnet sind. Wenn wir jetzt all jene Artikelgruppen haben möchten, denen derzeit kein Artikel zugeordnet ist, dann können wir mittels "InnerJoin" nicht reüssieren. Warum? Wir können mit der "Where-Klausel" jetzt filternd einschränken. Wir könnten sagen: "Alle die, wo es drüben nichts gibt", aber diese haben wir jetzt von vornherein noch gar nicht im Ergebnis enthalten. Das heißt, wir können deswegen diese auch nicht herausfiltern. Deshalb müssen wir zuerst gleich einmal einen "OuterJoin" verwenden, damit wir alle angezeigt bekommen. Aus diesem Grund kopiere ich mir die Anweisung und mache aus dem "Inner" einen "Outer Join". Wir wollen alle Artikelgruppen, auch wenn sie keinen Artikel zugeordnet haben. Die Tabelle "Artikelgruppen" steht früher, also weiter links in der Anweisung, deshalb müssen wir hier einen "Left Outer Join" verwenden. Wenn ich diese Anweisung nun ausführe, dann haben wir auch jene Artikelgruppen mit im Ergebnis, die keine Zuordnung aufweisen. Z.B. sehen wir jetzt hier die "Spielwaren". Per Definition des "Outer Joins" muss ja jede Spalte aus der anderen Tabelle, in der es keine Zuordnung gibt, nur "Null"-Werte anzeigen. Deshalb steht in der Bezeichnung auch nichts drinnen. In dem Fall "Null". Das wird jetzt unser Filterkriterium. Um genau jene zu bekommen, wo es in der anderen Tabelle keine Entsprechung gibt, müssen wir nun genau auf diesen "Null"-Wert hier filtern. "Where", und ich verwende jetzt z.B. die Spalte "A.Gruppe", also ich verwende eine Spalte aus der anderen Tabelle, in dem Fall aus der Artikeltabelle, "= Null", weil wenn sie "Null" ist, dann deshalb, weil es keine Zuordnung gibt. Ich muss jetzt natürlich beim Ergänzen noch beachten, dass ich die "Where-Klausel" hier an die richtige Stelle setze. Natürlich nicht nach, sondern vor die "Order By-Klausel". Jetzt führe ich die Anweisung aus, und wir sehen jetzt hier per Definition die zwei Artikelgruppen, denen im Moment kein einziger Artikel zugeordnet ist. In der Praxis kann man natürlich diese Spalte ausblenden, weil per Definition muss sie ja "Null" sein. Das heißt, wir könnten sie auch entweder weglassen oder ich mache einen Kommentar daraus und führe die Anweisung noch einmal aus. Das wäre jetzt mein offizielles Ergebnis. Wir sehen hier alle Artikelgruppen, denen kein Artikel im Moment zugeordnet ist. Es stellt sich jetzt natürlich noch die Frage: In der "Where-Klausel" muss ich eine Spalte aus der anderen Tabelle "Null" setzen. Kann ich alle Spalten dafür verwenden oder nur bestimmte? Ich kann nicht alle verwenden. Ich darf nur jene verwenden, die von sich aus nicht leer sein dürfen. Was meine ich damit? Wenn wir uns kurz die Struktur der Artikeltabelle ansehen, dann sehen wir, dass es Spalten gibt, die nicht "Nullable" sind und "Shown". Ein "No" hier bei "Nullable" heißt, dass sie als "Not-Null"-Spalten definiert sind, das heißt, sie müssen einen Wert enthalten. Alle anderen können einen Wert enthalten. Sie dürfen hier alle Spalten verwenden, die von sich aus nicht "Nullable" sind. Das heißt, wir dürfen die Spalte "Gruppe" verwenden, weil sie hier ein "No" stehen hat. Wir dürfen auch die "Artikelnummer", die "Primärschlüssel"-Spalte natürlich, verwenden, die "Bezeichnung", die "Verkaufspreis"-Spalte, "Lieferanten". Beim "Einkaufspreis" könnte es sein, dass immer etwas enthalten ist, müsste aber nicht. Anderes z.B. bei der "offenen Bestellmenge" auch. Das heißt, wir müssen hier immer eine Spalte verwenden, die einen Wert haben muss. Sonst wäre es für diese Aufgabenstellung ungültig. Sehen wir uns das nun im Detail an. Dazu zeige ich mir einfach den kompletten Inhalt der Artikeltabelle kurz an und hier sehen wir z.B. in der "Lieferzeit", dass de facto hier wirklich "Null-Werte" existieren. Was würde das jetzt bedeuten? Wenn wir uns jetzt noch einmal die "Bezeichnung" dazu nehmen und die "Lieferzeit", und kurz diese "Where-Klausel" deaktivieren, dann sehen wir folgendes: Es gibt hier Einträge, die "Null" sind, deshalb, weil sie in der Artikeltabelle wirklich leer sind. Oder es gibt Einträge, die deshalb "Null" sind, hier in der "Bezeichnung", weil es keine Entsprechung gibt. Dieses "Null" und dieses "Null" haben also nicht dieselbe Bedeutung. Wenn wir also für unsere Aufgabenstellung alle zu filtern, für die es keine Entsprechung gibt, hier auf die "Lieferzeit" filtern, dann wäre das inhaltlich falsch. Das heißt, würde ich hier schreiben {WhereA.Lieferzeit=Null}, dann hätten wir hier kein richtiges Ergebnis, weil wir ja auch jene Artikelgruppen sehen, die eine Zuordnung haben. Das erkennen wir schon daran, dass hier "Besteck" mehrmals dargestellt wird. Also das wäre inhaltlich falsch. Sie dürfen also hier für die Aufgabenstellung um festzustellen, was gibt es nur in einer und in den anderen Tabellen nicht, nur jene Spalten verwenden, die von sich aus nicht leer sein können. Ein Tipp: Wenn Sie auf Nummer sicher gehen möchten, verwenden Sie entweder die Primärschlüssel-Spalte, sprich die Artikelnummer, die muss ja immer befüllt sein in der anderen Tabelle, oder Sie verwenden die Spalte, die in der "Join-Bedingung" drinnen steht. Weil, wenn es hier keine Gleichheit gibt, gibt es auch keine Zuordnung. Damit gehen Sie immer sicher, dass Sie eine richtige Spalte verwenden, um die Aufgabenstellung zu lösen. Um also aus einer Tabelle all jene Datensätze zu filtern, für die es in einer anderen keine Entsprechung gibt, verwenden Sie einen "Auto Join", um alle Datensätze anzuzeigen, die es in dieser Tabelle gibt. Über die "Where-Klausel" filtern Sie alle weg, für die es sehr wohl eine Zuordnung gibt. Das bedeutet, Sie filtern auf alle Einträge, für die eine Spalte, die von sich aus nicht "Null" sein kann, einen "Null-Wert" enthält.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!