Programmieren lernen
PacmanÜber mich
English
English
  • Course Outline
  • 1 - Databricks
    • Getting Started
    • Working with Notebooks
      • Adding Documentation
      • Built-In Visualizations
      • Import Data
      • Export Data
  • 2 - Introduction
    • Types of Questions
      • Finding Individual Records
      • Summarizing Data
      • Exploring Data
      • Drawing Inferences From Data
      • Predicting Information
      • Finding Causality
    • Steps in Data Analytics
    • Dimensions of Data Sets
    • Dimensions of Records
    • Dimensions of Fields
    • Data Types and Scales
  • 3 - SQL
    • Basic SQL
      • What is SQL?
      • Import Data
      • Select Columns
      • Filter Rows
      • Aggregate and Group Rows
      • Filter Aggregated Rows
      • Sort Rows
    • Advanced SQL
      • Views
      • Set Operators
      • Subqueries
      • Window Functions
      • Date and Time
      • Arrays
      • JSON
      • Statistical Analysis
    • Multiple Data Sets with SQL
    • Text with SQL
      • Search Text
      • Analyzing Words
        • Prefilter the Data
        • Clean and Normalize
        • Tokenize and Count
        • Filter Stop Words
        • POS Tagging
      • Word Pairs
      • Extract Emoticons
  • 4 - Python
    • Python for Data Analytics
      • What is Python?
    • Natural Language Processing
  • 5 - R
    • R Basics
  • 6 - Visualization
    • Why Visualize Data?
    • Data Visualization with R
    • Types of Visualizations
      • Developments and Trends
      • Distributions
    • Pitfalls in Data Visualization
  • 7 - Tableau
    • Getting Data Into Tableau
  • 8 - Spreadsheets
    • What Is A Spreadsheet?
  • Data & Exercises
    • Simpsons
    • Covid19
    • TED Talks
    • Lemonade Market Research
    • Chicago Crimes
    • Tweets of German Politicians
    • Amazon Product Reviews
    • REWE Online Products
Powered by GitBook
On this page
  • Das Relationale Modell
  • Informationen liegen in mehreren Tabellen vor
  • Für Analysen benötigen wir oft Informationen aus mehreren Tabellen
  • Der JOIN-Operator in SQL verbindet Tabellen in einer Abfrage
  • Anwendungsbeispiel
  • INNER JOIN - Nur Treffer auf beiden Seiten im Ergebnis belassen
  • LEFT JOIN - Alle Zeilen der linken Tabelle behalten
  • RIGHT JOIN - Alle Zeilen der rechten Tabelle behalten
  • FULL OUTER JOIN - Alle Zeilen beider Tabellen behalten
  • Vereinfachtes Beispiel im Databricks Notebook
  • Slides

Was this helpful?

  1. 3 - SQL

Multiple Data Sets with SQL

PreviousStatistical AnalysisNextText with SQL

Last updated 4 years ago

Was this helpful?

Das Relationale Modell

Informationen liegen in mehreren Tabellen vor

Im weit verbreiteten relationalen Datenbankmodell werden Informationen zu Objekten in getrennten Tabellen gespeichert. So werden Stammdaten der Kunden z.B. in einer Tabelle customers abgelegt, die Verkäufe in der Tabelle orders, und die Produkte wiederum in der Tabelle products. Das hat Vorteile bei der Verwaltung dieser Informationen, weil wir einen Kunden so nur einmal und nicht redundant mehrfach speichern müssen. Das Gleiche gilt für die Produkte.

Für Analysen benötigen wir oft Informationen aus mehreren Tabellen

Wollen wir jedoch Analysen durchführen, die Informationen zu allen 3 Objekten benötigen, erhöht sich durch die Aufteilung auf 3 Tabellen die Komplexität: Wir müssen die Tabellen in der SQL-Abfrage zuerst verknüpfen.

Beispiel: Was ist die Top 5 der Produkte nach Umsatz in jedem PLZ-Gebiet? Um diese Frage zu beantworten, benötigen wir Stammdaten der Kunden (PLZ), die Verkäufe (Summe Umsatz) sowie die Produkte (Produktbezeichnung).

Der JOIN-Operator in SQL verbindet Tabellen in einer Abfrage

In SQL können wir den JOIN-Operator nutzen, um zwei Tabellen miteinander zu verbinden. Wir können den JOIN-Operator innerhalb einer Abfrage beliebig oft verwenden und so beliebige viele Tabellen in die Abfrage einbeziehen. Der JOIN-Operator benötigt einen Ausdruck, der angibt, wie genau 2 Tabellen miteinander verbunden werden sollen. Wir nennen diesen Ausdruck auch die JOIN-Bedingung. Für gewöhnlich werden Tabellen über die existierenden Fremd- und Primärschlüsselbeziehungen miteinander verknüpft. Die JOIN-Bedingung hat dann die Form FK1 = PK

Es gibt unterschiedliche Typen von JOINS:

  • CROSS JOIN: Das Ergebnis ist das Kreuzprodukt alle Einträge aus beiden Tabellen. Eine JOIN Bedingung entfällt bei diesem Typ. Dieser Typ ist in der Praxis fast ohne Relevanz und wir in diesem Artikel nicht weiter vorgestellt. Im unten verlinkten Notebook findet ihr ein Beispiel dafür.

  • INNER JOIN: Im Ergebnis sind nur die Zeilen enthalten, für die Treffer in beiden beteiligten Tabellen existieren. Alle anderen Zeilen werden herausgefiltert.

  • LEFT JOIN und RIGHT JOIN: Im Ergebnis sind alle Zeilen der linken oder der rechten Tabelle enthalten. Fehlende Pendants in der jeweils anderen Tabelle werden mit dem Platzhalter für fehlende Werte NULL aufgefüllt.

  • FULL OUTER JOIN: Im Ergebnis sind alle Zeilen beider Tabellen enthalten, egal ob es in der jeweils anderen Tabelle Treffer gab. Fehlende Werten von auf beiden Seiten mit dem Platzhalter für fehlende Werte NULL aufgefüllt.

Anwendungsbeispiel

Ein Informationssystem nutzt zur Verwaltung der Informationen die 3 oben beschriebenen Tabellen. Alle Bestellungen werden in der Tabelle orders verwaltet. Dort sind Spalten für das Datum und die Uhrzeit der Bestellung, der Zahlungsart und dem Status der Bestellung hinterlegt. In einer zweiten Tabelle customers verwaltet das System die Informationen zu den Kunden. Darunter fallen Informationen wie der Vor- und Nachname, die Postadresse und die E-Mail-Adresse. Da eine Bestellung immer zu genau einem Kunden gehört, gibt es eine Verknüpfung zwischen diesen beiden Tabellen. Die Verknüpfung wird über den eindeutigen Schlüssel eines Kunden abgebildet. Dieser Schlüssel ist eine intern generierte Nummer, die für jeden Kunden eindeutig ist. Der Schlüssel des Kunden wird als sogenannter Fremdschlüssel in die Tabelle orders eingetragen und verweist auf einen bestimmten Eintrag in der Tabelle customers.

Wie würden wir auf Basis des beschriebenen Datenmodells die folgende Frage mit SQL beantworten: Welche 10 Kunden haben die meisten Bestellungen getätigt? Um die Antwort zu finden, müssen wir Informationen aus beiden Tabellen abfragen. Die orders, weil dort die Bestellungen enthalten sind, die wir zählen wollen. Die customers, weil dort der Name der Kunden enthalten sind, die wir im Ergebnis ausgeben wollen. Diese Verknüpfung können wir in SQL mit einem sogenannten join herstellen. Im fiktiven Beispiel sähe das so aus:

select nachname
			,vorname
			,count(*) as `Anzahl Bestellungen`
from orders
inner join customers
	on orders.customer_id = customers.customer_id
group by nachname, vorname

Nehmen wir an, wir haben 2 Kunden A und B in der Tabelle customers. Wir nehmen weiter an, dass mit Kunde A 3 Bestellungen und mit Kunde B 2 Bestellungen in der Tabelle orders verknüpft sind (im Feld customerId steht die ID des jeweiligen Kunden). In diesem Szenario würde der obige inner join der beiden Tabellen über das Feld customerId, das in beiden Tabellen vorhanden ist, zu einem Ergebnis mit 5 Zeilen führen. Jede Bestellung wird um die Informationen aus der Tabelle customers ergänzt. Wenn wir anschließend wie oben die Zeilen zählen und nach dem Vor- und Nachnamen des Kunden gruppieren, so erhalten wir im Ergebnis eine Zeile pro Kunde mit der Anzahl Bestellungen für diesen Kunden.

INNER JOIN - Nur Treffer auf beiden Seiten im Ergebnis belassen

Unten seht ihr eine schematische Darstellung der Funktionsweise einer INNER JOIN Operation. Es bleiben nur Zeilen im Ergebnis, bei denen es in beiden Tabellen Treffer gibt.

LEFT JOIN - Alle Zeilen der linken Tabelle behalten

Unten seht ihr eine schematische Darstellung der Funktionsweise einer LEFT JOIN Operation. Es bleiben alle Zeilen der linken Tabelle im Ergebnis. Es werden alle Informationen aus der rechten Tabelle aufgefüllt, wenn Treffer vorhanden sind. Ansonsten wird der Platzhalter NULL zurückgegeben.

RIGHT JOIN - Alle Zeilen der rechten Tabelle behalten

Unten seht ihr eine schematische Darstellung der Funktionsweise einer RIGHT JOIN Operation. Es bleiben alle Zeilen der rechten Tabelle im Ergebnis. Es werden alle Informationen aus der linken Tabelle aufgefüllt, wenn Treffer vorhanden sind. Ansonsten wird der Platzhalter NULL zurückgegeben. Der RIGHT JOIN funktioniert wie der LEFT JOIN und dreht lediglich die Reihenfolge der Tabellen um.

FULL OUTER JOIN - Alle Zeilen beider Tabellen behalten

Unten seht ihr eine schematische Darstellung der Funktionsweise einer FULL OUTER JOIN Operation. Es bleiben alle Zeilen beider Tabellen im Ergebnis. Fehlende Informationen in beiden Tabellen werden mit dem Platzhalter NULL aufgefüllt zurückgegeben. Der FULL OUTER JOIN ist äquivalent zur gleichzeitigen Anwendung eines LEFT und RIGHT JOINS.

Vereinfachtes Beispiel im Databricks Notebook

Im verlinkten Notebook nutzen wir ein einfaches Datenmodell bestehend aus 2 Tabellen, um das Konzept des join mit seinen unterschiedlichen Ausprägungen zu illustrieren.

Slides

Die folgenden Slides führen die unterschiedlichen join-Typen in SQL an einem visuellen Beispiel ein.

https://s3.us-east-1.amazonaws.com/nicolas.meseth/databricks-notebooks/example_notebook_sql_joins.htmls3.us-east-1.amazonaws.com
Ein einfaches relationales Modell mit 2 verknüpften Tabellen.