Kurs
Kartesisches Produkt in SQL: Ein umfassender Leitfaden
Das kartesische Produkt ist ein grundlegendes Konzept in SQL, das sowohl leistungsstark als auch komplex sein kann. Wenn du verstehst, wie du sie effektiv nutzen kannst, kannst du deine Fähigkeiten zur Datenbearbeitung erheblich verbessern. In diesem Leitfaden gehen wir auf die Besonderheiten der kartesischen Produkte ein und geben praktische Einblicke und Beispiele.
Wenn du neu in SQL bist, solltest du mit unserem SQL-Kurs für Fortgeschrittene beginnen, um eine solide Grundlage zu schaffen. Auch das SQL Basics Cheat Sheet, das du herunterladen kannst, ist ein hilfreiches Nachschlagewerk, da es alle gängigen SQL-Funktionen enthält.
Was ist ein kartesisches Produkt?
Das kartesische Produkt in SQL ist das Ergebnis der Kombination jeder Zeile aus einer Tabelle mit jeder Zeile aus einer anderen Tabelle. Diese Operation wird meistens durch eine CROSS JOIN
erzeugt, die eine Ergebnismenge mit allen möglichen Zeilenpaaren aus den beiden Tabellen bildet. Sie ist zwar sehr leistungsfähig, kann aber zu sehr großen Ergebnismengen führen, vor allem wenn du mit Tabellen arbeitest, die viele Zeilen enthalten. Ich wette, dass viele Entwickler die kartesischen Produkte erst auf die harte Tour entdecken, indem sie versehentlich eine Verknüpfungsbedingung auslassen und dann mit einer riesigen Ergebnismenge dastehen.
Mathematischer Hintergrund
In der Mathematik ist ein kartesisches Produkt (bezeichnet als A × B) eine Menge aller möglichen geordneten Paare, die durch die Verknüpfung jedes Elements der Menge A mit jedem Element der Menge B entsteht.
Beispiel für ein kartesisches Produkt. Bild vom Autor.
SQL Cross Join
Die Cross-Join-Operation in SQL erstellt ein kartesisches Produkt zwischen zwei Tabellen, indem jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle verbunden wird. Das Ergebnis ist, dass der Cross-Join alle möglichen Zeilenkombinationen für die Daten erzeugt. Schauen wir uns ein Beispiel für die Durchführung einer Cross-Join-Operation in SQL an.
Angenommen, du hast zwei Tabellen, Students
und Courses
:
Tabelle für Schüler
Name | Klasse |
---|---|
Alice | 10 |
Bob | 11 |
Charlie | 12 |
Tabelle der Kurse
Kurs | Ebene |
---|---|
Mathe | Basic |
Wissenschaft | Fortgeschrittene |
Geschichte | Zwischenbericht |
In der folgenden Abfrage wird jeder Schüler mit jedem Kurs gepaart, wobei seine Note und sein Schwierigkeitsgrad angezeigt werden.
-- Perform the cross join to list each student with every course
SELECT Students.name, Students.grade, Courses.course, Courses.level
FROM Students
CROSS JOIN Courses;
Beispiel für ein kartesisches Produkt in SQL, das aus einem Cross Join resultiert. Bild vom Autor.
Wann sollte man das kartesische Produkt in SQL verwenden und wann nicht?
Das kartesische Produkt in SQL kann sehr nützlich sein, wenn das Verhalten verstanden und bewusst eingesetzt wird. Schauen wir uns die Anwendungsfälle (und potenziellen Fallstricke) der Verwendung des kartesischen Produkts an.
Anwendungsfälle
Im Folgenden sind die Szenarien aufgeführt, in denen die Verwendung des kartesischen Produkts nützlich sein kann:
- Kombinationen generieren: Ein kartesisches Produkt ist ideal, um alle Kombinationen aus zwei Wertesätzen zu erzeugen. Du kannst z.B. Produkte mit Rabatten verbinden, Mitarbeiter zu Schichten zuordnen oder alle möglichen Kombinationen zwischen verschiedenen Kategorien erstellen.
- Test-Szenarien: Bei der Durchführung von Testfällen kann ein kartesisches Produkt nützlich sein, um jedes mögliche Szenario zu simulieren, indem verschiedene Parametersätze oder Konfigurationen abgeglichen werden.
- Fülle fehlende Daten auf: Ein kartesisches Produkt kann auch dabei helfen, Lücken zu finden, indem es alle möglichen Kombinationen generiert und dann die Ergebnisse links verbindet, um fehlende Einträge zu finden, wie zum Beispiel fehlende Daten in einer Zeitreihenanalyse.
Mögliche Fallstricke
Das kartesische Produkt ist zwar für einige Szenarien nützlich, birgt aber auch einige Risiken, darunter die folgenden:
- Performance-Probleme: Da ein kartesisches Produkt die Zeilen einer Tabelle mit denen einer anderen multipliziert, kann das Ergebnis exponentiell wachsen. Wenn der Datensatz zu groß ist, kann dies zu langsamen Abfragezeiten, übermäßigem Speicherverbrauch und sogar zum Absturz der Datenbank führen.
- Unbeabsichtigte Datendopplung: Ohne sorgfältige Filterung können kartesische Produkte Zeilen erzeugen, die doppelt vorkommen oder für die Analyse irrelevant sind, was zu verzerrten Dateninterpretationen oder falschen Ergebnissen führt, wenn die Duplikate nicht erwartet oder korrekt verwaltet werden.
- Schwierige Fehlersuche: Unbeabsichtigte kartesische Produkte, wie z.B. das Vergessen der Angabe einer Verknüpfungsbedingung, können zu einer Kreuzverknüpfung anstelle einer inneren oder äußeren Verknüpfung führen. Das kann zu unerwarteten Ergebnissen führen, die sich nur schwer zurückverfolgen und korrigieren lassen.
Reale Anwendungen des kartesischen Produkts
Obwohl das kartesische Produkt aufgrund der potenziellen Risiken nur sparsam eingesetzt werden sollte, ist es in Szenarien nützlich, in denen du jedes mögliche Paar von Datenelementen kombinieren musst.
Szenarien der Datenkombination
Das kartesische Produkt ist nützlich für die Berechnung relativer Leistungskennzahlen, die Analyse der Kompatibilität oder die Erstellung von Rankingsystemen. Wenn du alle Elemente in zwei Datensätzen vergleichen musst, kannst du das kartesische Produkt verwenden, um jedes Element mit jedem anderen Element zu verbinden.
Um zum Beispiel die Leistung eines jeden Mitarbeiters mit der jedes anderen Mitarbeiters zu vergleichen, würde das kartesische Produkt alle möglichen Mitarbeiterpaare bilden:
-- Select two columns with employee names from the Employees table
SELECT
A.employee_name AS Employee1,
B.employee_name AS Employee2
FROM Employees AS A
-- Cross join to create all possible pairs of employees
CROSS JOIN Employees AS B;
Das kartesische Produkt ist auch in der E-Commerce-Analyse wichtig, um die gesamte Bandbreite der Produkt-Rabatt-Paarungen zu untersuchen. Angenommen, du hast Tabellen für Products
und Discounts
, dann könnte ein Cross Join eine Liste aller Produkt-Rabatt-Kombinationen erstellen:
-- Select product names and discount types
SELECT
Products.product_name,
Discounts.discount_type
FROM Products
-- Generate all product and discount combinations
CROSS JOIN Discounts;
Prüfung und Validierung
Ein kartesisches Produkt ermöglicht die Erstellung aller möglichen Parameterkombinationen in Testumgebungen, was für umfassende Szenariotests unerlässlich ist. Wenn du zum Beispiel ein System mit verschiedenen Betriebssystem-, Geräte- und Browserkonfigurationen testest, kannst du mit einem Cross-Join sicherstellen, dass jede mögliche Konfiguration getestet wird.
-- Select combinations of operating systems, devices, and browsers
SELECT
OS.name AS OperatingSystem,
Device.name AS Device,
Browser.name AS Browser
FROM OperatingSystems AS OS
-- All combinations with devices
CROSS JOIN Devices AS Device
-- All combinations with browsers
CROSS JOIN Browsers AS Browser;
Ein kartesisches Produkt kann dabei helfen, fehlende Datensätze zu identifizieren, und ist daher nützlich, um die Vollständigkeit der Daten sicherzustellen. Wenn du zum Beispiel tägliche Verkaufsdaten analysierst und sicherstellen willst, dass für jedes Produkt jeden Tag Daten vorhanden sind, kannst du ein kartesisches Produkt aus den Tabellen Products
und Dates
erstellen. Dann kannst du die tatsächlichen Verkaufsdaten mit der linken Seite verbinden, um fehlende Datums- und Produkteinträge zu identifizieren.
-- Select dates and products with no sales
SELECT
Dates.date,
Products.product_name,
Sales.sales_amount
FROM Dates
-- Create all date and product combinations
CROSS JOIN Products
-- Match sales by date and product
LEFT JOIN
Sales ON Dates.date = Sales.date
AND Products.product_name = Sales.product_name
-- Filter for combinations with no sales
WHERE Sales.sales_amount IS NULL;
Einige Ideen zur Leistung
Da kartesische Produkte mögliche Datenkombinationen zwischen zwei Tabellen erzeugen, kann es zu erheblichen Leistungsproblemen kommen, wenn große Tabellen betroffen sind. Ich schlage die folgenden Techniken zur Optimierung von Abfragen und zur Verwaltung großer Datenmengen vor, um die Datenbankleistung zu verbessern.
Abfrageoptimierung
Betrachte die folgenden Methoden zum Schreiben effizienter Abfragen, die kartesische Produkte beinhalten.
-
Begrenze die Zeilenzahl vor dem Zusammenfügen: Um die Anzahl der am kartesischen Produkt beteiligten Zeilen zu reduzieren, wende vor dem Cross Join Filter auf jede Tabelle an. Verwende zum Beispiel
WHERE
Klauseln, um jede Tabelle nach relevanten Kriterien zu filtern und den resultierenden Datensatz zu minimieren. -
Verwende SELECT mit bestimmten Spalten: Wenn du ein kartesisches Produkt durchführst, gib in der
SELECT
Klausel nur die Spalten an, die du brauchst, um die Speichernutzung zu reduzieren und die Leistung zu verbessern. Vermeide die Verwendung vonSELECT *
, da sie alle Spalten zurückgibt, was zu großen, unübersichtlichen Ergebnissen führen kann. -
Bedingungen anwenden, um Cross Joins in Inner Joins umzuwandeln: Wenn nur bestimmte Zeilenkombinationen relevant sind, solltest du zusätzliche Cross-Join-Bedingungen hinzufügen, die wie die
INNER JOIN
funktionieren. Dies hilft, die Ausgabe einzuschränken, indem es die Zeilen aus jeder Tabelle eingrenzt, die gepaart werden sollen. -
Stapelverarbeitung: Bei großen Datensätzen kannst du die Abfragen in überschaubare Teile aufteilen, um sie im Stapel zu verarbeiten. Dies kann einen Speicherüberlauf verhindern und die Antwortzeit verbessern, insbesondere bei Abfragen über große Tabellen.
Große Datenmengen verwalten
Verwende die folgenden Techniken, um die großen Datenmengen zu verwalten, die durch die Verwendung kartesischer Produkte entstehen.
-
Indizierung: Füge Indizes für häufig verknüpfte Spalten hinzu, um die Leistung beim Filtern oder Zusammenführen großer Tabellen zu verbessern. Die Indizierung beschleunigt zwar nicht direkt die Cross-Joins, ist aber nützlich, wenn du das kartesische Produkt später filterst oder mit anderen Tabellen verknüpfst, damit die Datenbank schneller auf Zeilen zugreifen kann.
-
Partitionierung großer Tabellen: Die Partitionierung von Tabellen kann die Leistung von Abfragen mit kartesischen Produkten verbessern. Bei der Partitionierung werden Tabellen anhand bestimmter Spalten in kleinere, besser handhabbare Teile unterteilt, so dass die Datenbank bei der Abfrageausführung nur die relevanten Partitionen lesen kann.
-
Ergebniszeilen begrenzen: Verwende die
LIMIT
Klausel, um die Anzahl der zurückgegebenen Zeilen einzuschränken, wenn du nur eine Stichprobe aus dem kartesischen Produkt zu Test- oder Prüfzwecken benötigst. -
Verwende temporäre Tabellen für Zwischenergebnisse: Speichere Zwischenergebnisse in temporären Tabellen, wenn du ein kartesisches Produkt mehrmals wiederverwenden musst, um Neuberechnungen zu reduzieren und nachfolgende Operationen zu beschleunigen.
Andere SQL-Operationen, die helfen
In Szenarien, in denen die Erstellung eines vollständigen kartesischen Produkts nicht effizient ist, gibt es alternative Methoden. Mit den folgenden Methoden kannst du die gewünschten Ergebnisse erzielen, ohne die Datenbank zu überlasten.
Innere und äußere Fugen
Eine INNER JOIN
gibt nur Zeilen zurück, bei denen die angegebenen Spalten in beiden Tabellen übereinstimmen. Diese Technik beschränkt das Ergebnis auf relevante Kombinationen und vermeidet die vielen Zeilen, die bei einem kartesischen Produkt entstehen. Der Inner Join eignet sich, wenn du nur die Zeilen benötigst, die bestimmte Kriterien in beiden Tabellen erfüllen.
Im folgenden Beispiel gibt die INNER JOIN
nur Produkte und Rabatte zurück, die dieselbe Kategorie haben.
-- Select products and corresponding discounts by category
SELECT
A.product_name,
B.discount_type
FROM Products AS A
-- Match products and discounts by category
INNER JOIN Discounts AS B ON A.category_id = B.category_id;
Die äußere Verknüpfung (LEFT JOIN
, RIGHT JOIN
und FULL JOIN
) liefert übereinstimmende und nicht übereinstimmende Zeilen aus einer oder beiden Tabellen. Diese Technik ist hilfreich, wenn du alle Zeilen aus einer Tabelle und alle übereinstimmenden Zeilen aus der anderen Tabelle abrufen willst, ohne jedoch alle möglichen Kombinationen zu erstellen. Die äußere Verknüpfung ist geeignet, wenn du nicht übereinstimmende Daten für die Analyse einbeziehen willst, aber keine vollständige kartesische Paarung.
Die LEFT JOIN
in der folgenden Abfrage gibt alle Produkte zurück, auch die ohne entsprechenden Rabatt, mit NULL
Werten für nicht übereinstimmende Rabatte.
-- Select products with corresponding discounts, (NULL if no matching discount)
SELECT
A.product_name,
B.discount_type
FROM Products AS A
-- Match products with discounts by category
LEFT JOIN Discounts AS B ON A.category_id = B.category_id;
Ich empfehle, den Kurs Einführung in SQL Server von DataCamp zu besuchen, um mehr darüber zu erfahren, wie man Tabellen verbindet und Daten aus mehreren Tabellen abruft.
Unterabfragen und CTEs
Mit Unterabfragen kannst du bestimmte Daten aus einer Tabelle auswählen und sie zum Filtern der Ergebnisse in der Hauptabfrage verwenden. Dies hilft, unnötige Zeilenkombinationen zu vermeiden, indem die Daten auf die relevanten Einträge gefiltert werden. Unterabfragen sind nützlich, wenn du Daten vorfiltern oder bestimmte Werte für die Verwendung in der Hauptabfrage berechnen musst, ohne dass eine vollständige kartesische Verknüpfung erforderlich ist.
Die Subquery filtert Rabatte mit Werten über 10 vor der Verknüpfung, wodurch die verarbeiteten Daten reduziert und eine unnötige Kreuzverknüpfung vermieden wird.
-- Select products with discounts greater than 10 by category
SELECT
A.product_name,
B.discount
FROM Products AS A
-- Subquery to filter discounts over 10
INNER JOIN
(SELECT discount, category_id
FROM Discounts
WHERE discount > 10) AS B
-- Match products with filtered discounts by category
ON A.category_id = B.category_id;
CTEs, oder WITH
Klauseln, ermöglichen es, komplexe Abfragen in Schritte zu unterteilen. Diese Methode hilft, kartesische Produkte zu vermeiden, indem Daten vor dem Zusammenführen gefiltert oder aggregiert werden. CTEs eignen sich zur Vereinfachung von mehrstufigen Abfragen, insbesondere wenn du Daten voraggregierst oder mehrere Joins durchführst, aber ein vollständiges kartesisches Ergebnis vermeiden willst.
Die folgende Abfrage verwendet eine Common Table Expression (CTE), um Rabatte größer als 10 zu filtern, bevor sie mit den Produkten nach Kategorie verknüpft werden.
-- Filter discounts and join with products by category
WITH FilteredDiscounts AS (
SELECT discount, category_id
FROM Discounts
WHERE discount > 10
)
SELECT
A.product_name,
FD.discount
FROM Products AS A
-- Join with filtered discounts by category
INNER JOIN
FilteredDiscounts AS FD ON A.category_id = FD.category_id;
Innovative Anwendungen des kartesischen Produkts
Das kartesische Produkt wird zwar häufig bei grundlegenden SQL-Operationen verwendet, hat aber auch Anwendungen jenseits der traditionellen Datenbankanwendungen. Schauen wir uns an, wie das kartesische Produkt bei der Datenaufbereitung für maschinelles Lernen und bei der Erstellung synthetischer Datensätze für die Simulation verwendet werden kann.
Datenvorbereitung für maschinelles Lernen
Vielfältige und umfassende Datensätze sind wichtig, um Daten für maschinelles Lernen aufzubereiten und robuste Modelle zu trainieren. Mit kartesischen Produkten kann ein kompletter Datensatz erstellt werden, der alle möglichen Kombinationen von Merkmalswerten abdeckt, so dass ein Modell aus einer breiteren Palette von Szenarien lernen kann.
Bei der Erstellung von Betrugserkennungsmodellen kannst du zum Beispiel Transaktionsarten, Regionen und Gerätetypen kombinieren, um verschiedene Bedingungen zu simulieren, damit das Modell über verschiedene Fälle hinweg verallgemeinert werden kann.
Synthetische Daten erzeugen
Synthetische Daten werden oft verwendet, um Systeme unter einer Vielzahl von Bedingungen zu testen oder um die Privatsphäre zu schützen, indem die Verwendung echter Daten vermieden wird. Kartesische Produkte können helfen, verschiedene synthetische Datensätze zu erzeugen, die für verschiedene Anwendungen nützlich sind, von Simulationen bis hin zur Datenerweiterung für maschinelle Lernmodelle.
Du könntest zum Beispiel verschiedene Marktbedingungen, Zinssätze und Kundenprofile in Finanzsimulationen kombinieren, um zu testen, wie ein Modell oder Algorithmus bei diesen Variablen abschneidet.
Im Folgenden findest du ein einfaches Beispiel dafür, wie du synthetische Daten sozusagen "aus dem Nichts" in SQL erstellst und sie dann mit CROSS JOIN
zu einem größeren Datensatz erweiterst. Die Idee ist, dass jede kleine Tabelle eine Dimension unserer Testdaten repräsentiert und wir dann, wenn wir sie miteinander verknüpfen, alle möglichen Kombinationen erhalten.
Beispiel 1: Mehrere Dimensionen kombinieren
Angenommen, du möchtest verschiedene Finanzszenarien auf der Grundlage von Marktbedingungen, Zinssätzen und Kundenprofilen simulieren. Wir können jede Dimension über eine Common Table Expression (CTE) oder eine temporäre Tabelle mit Literalwerten definieren. Dann werden sie auf CROSS JOIN
zu jeder möglichen Kombination zusammengefügt:
WITH MarketConditions AS (
SELECT 'Bull' AS condition
UNION ALL
SELECT 'Bear'
UNION ALL
SELECT 'Sideways'
),
InterestRates AS (
SELECT 1.5 AS rate
UNION ALL
SELECT 2.0
UNION ALL
SELECT 3.25
),
CustomerProfiles AS (
SELECT 'Younger' AS profile
UNION ALL
SELECT 'Mid-career'
UNION ALL
SELECT 'Retired'
)
SELECT
mc.condition,
ir.rate,
cp.profile
FROM
MarketConditions mc
CROSS JOIN
InterestRates ir
CROSS JOIN
CustomerProfiles cp;
Die Ergebnismenge wird 3×3×3 = 27 Zeilen haben. Jede Zeile ist eine einzigartige Kombination aus Marktbedingungen, Zinssatz und Kundenprofil.
Beispiel für die Erzeugung synthetischer Daten mithilfe des kartesischen Produkts. Bild vom Autor.
Beispiel 2: Erzeugen von Zeilen mit Sequenzen oder einfachen VALUES
Eine andere Technik besteht darin, eine Reihe von Zahlen oder Zeitintervallen zu erzeugen, indem kleine Tabellen miteinander verbunden werden. Damit kannst du große Mengen synthetischer Reihen für schnelle Tests produzieren. Wir können zum Beispiel die folgende Abfrage verwenden, um die Zahlen 1 bis 10 zu generieren.
WITH
Nums AS (
SELECT 1 AS n
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
)
SELECT n
FROM Nums;
Benutze das kartesische Produkt, um Zeilen mit Sequenzen zu erzeugen. Bild vom Autor.
Wir können dann dieselbe 10-reihige Menge mit sich selbst kreuzen, um 10×10=100 zu machen:
WITH
Nums AS (
SELECT 1 AS n
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
)
SELECT A.n AS n1, B.n AS n2
FROM Nums A
CROSS JOIN Nums B
ORDER BY A.n, B.n;
Als Ergebnis erhältst du 100 Zeilen, wobei jede Zeile ein Wertepaar (n1,n2) enthält. Du kannst diese Logik auf Hunderte, Tausende oder sogar Millionen von Zeilen ausdehnen - achte aber auf die Leistung und den Speicherplatz.
Mit diesen Ansätzen - CTEs (oder VALUES
Klauseln) für Dimensionsdefinitionen und CROSS JOIN
für die Kombination - kannst du schnell synthetische Datensätze in SQL erstellen, ohne auf bestehende Tabellen zurückgreifen zu müssen.
Fazit
Das Verständnis des kartesischen Produkts in SQL eröffnet eine Reihe von Möglichkeiten zur Datenmanipulation und -analyse. Wenn du dieses Konzept beherrschst, kannst du deine Fähigkeiten bei der Arbeit mit komplexen Datensätzen verbessern und deine Datenbankabfragen optimieren. Wenn du mehr wissen willst, kannst du dein Wissen in unserem Lernpfad SQL Server Fundamentals vertiefen.
Je nachdem, in welche Richtung du dich beruflich orientieren möchtest, empfehle ich dir, entweder den Lernpfad "Associate Data Analyst in SQL" von DataCamp zu besuchen, um die für einen Datenanalysten erforderlichen Fähigkeiten zu erlernen, oder unseren Lernpfad "Associate Date Engineer in SQL " auszuprobieren, um ein Dateningenieur zu werden.
Kartesische Produkt FAQs
Was ist ein kartesisches Produkt in SQL?
Ein kartesisches Produkt in SQL ist das Ergebnis einer Cross-Join-Operation, bei der jede Zeile aus einer Tabelle mit jeder Zeile aus einer anderen Tabelle kombiniert wird.
Wie unterscheidet sich das kartesische Produkt von anderen SQL-Joins?
Im Gegensatz zu anderen Joins werden bei einem kartesischen Produkt alle möglichen Zeilenpaare aus den beteiligten Tabellen kombiniert, was oft zu einem großen Datensatz führt.
Wann sollte ich ein kartesisches Produkt verwenden?
Verwende ein kartesisches Produkt, wenn du alle Zeilenkombinationen aus zwei Tabellen generieren musst, z. B. bei Tests oder bestimmten analytischen Szenarien.
Was sind die Leistungsaspekte für kartesische Produkte?
Kartesische Produkte können zu großen Ergebnismengen führen, was die Leistung beeinträchtigen kann. Um dies zu verhindern, musst du deine Abfragen optimieren und die Datenbestände sorgfältig verwalten.
Gibt es Alternativen zur Verwendung kartesischer Produkte in SQL?
Ja, je nach Anwendungsfall gibt es Alternativen wie innere oder äußere Joins, Unterabfragen und allgemeine Ausdrücke in Tabellen.
SQL lernen mit DataCamp
Kurs
Data Manipulation in SQL
Lernpfad
SQL for Business Analysts
Der Blog
Die 32 besten AWS-Interview-Fragen und Antworten für 2024
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024

Hesam Sheikh Hassani
15 Min.
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Nisha Arya Ahmed
20 Min.
Der Blog
Q2 2023 DataCamp Donates Digest
Der Blog