Zurück zur Artikelliste Artikel
20 Leseminuten

SQL-Interview-Fragen für Datenanalysten

Inhaltsverzeichnis

Sie haben demnächst ein Vorstellungsgespräch für eine Stelle als Datenanalyst und SQL ist eine der Fähigkeiten, die getestet werden. Diese SQL-Fragen für Datenanalysten sind speziell auf Sie zugeschnitten!

SQL gehört zur Grundausstattung eines jeden Datenanalysten. Es vereinfacht die Datenextraktion und -manipulation und ermöglicht es den Analysten, Rohdaten in verwertbare Erkenntnisse umzuwandeln. Es ermöglicht Analysten die Durchführung von Ad-hoc-Analysen und beschleunigt so die Entscheidungsprozesse im Unternehmen. Außerdem wird die Zusammenarbeit zwischen Datenanalysten und Datenbankadministratoren gefördert, was zu einem reibungsloseren Datenbetrieb führt.

Wenn Sie sich nicht sicher sind, wo Sie mit SQL beginnen sollen, ist unser Kurs SQL für Datenanalyse genau das Richtige für Sie. Dieser umfassende Kurs deckt alle Aspekte der Datenanalyse ab, einschließlich Datenabfrage und Berichterstellung.

Wahrscheinlich sind Sie aber hier, um sich auf Ihr Bewerbungsgespräch als Datenanalyst vorzubereiten. Lassen Sie uns also ohne Umschweife gleich loslegen.

Wie Sie sich auf ein Vorstellungsgespräch als Datenanalyst vorbereiten

Die Vorbereitung auf ein erfolgreiches Vorstellungsgespräch als Datenanalyst erfordert eine strategische Kombination aus technischem Fachwissen und gezielter Vorbereitung. Hier sind einige praktische Hinweise und Vorschläge, die Ihnen helfen, sich von der Konkurrenz abzuheben:

  • Wiederholen Sie grundlegende SQL-Konzepte. Vergewissern Sie sich, dass Sie mit den grundlegenden SQL-Konzepten vertraut sind, d. h. mit dem Abfragen, Filtern, Verbinden und Aggregieren von Daten. Melden Sie sich zu unserem KursSQL für Anfänger an, der Ihre Kenntnisse der SQL-Grundlagen vertieft.
  • Lernen Sie Standard-SQL-Funktionen. Verbessern Sie Ihr Verständnis der Standard-SQL-Funktionen, einschließlich numerischer, Text- und Datum/Zeit-Funktionen. Lernen Sie, wie man effektiv mit NULL Werten umgeht und SQL-Funktionen verwendet, um effektivere Abfragen zu schreiben.
  • Üben Sie SQL-Berichte. Beginnen Sie mit grundlegenden Berichten unter Verwendung von GROUP BY, ORDER BY und HAVING. Danach können Sie zu mittleren und fortgeschrittenen Berichten übergehen, die Unterabfragen, Fensterfunktionen und gemeinsame Tabellenausdrücke (CTEs) verwenden.
  • Nehmen Sie an einer Kompetenzbewertung teil. Nehmen Sie an einer SQL-Bewertung teil, um Ihren Kenntnisstand zu ermitteln. Unser SQL Skills Assessment umfasst 18 interaktive Online-Aufgaben, die sechs SQL-Kompetenzbereiche abdecken.
  • Nutzen Sie Lernressourcen. Nutzen Sie Online-Kurse und -Tutorials, um Ihre SQL-Kenntnisse zu verbessern. Unsere SQL-Kurse enthalten umfassendes Lernmaterial und praktische Übungen, mit denen Sie Ihre Datenanalyse und SQL-Abfragen verbessern können. Wenn Sie Bücher bevorzugen, können Sie auch unsere Liste der besten SQL-Bücher für die Datenanalyse konsultieren.

Grundlegende SQL-Interview-Fragen

Nachdem wir nun die Bedeutung des Erlernens von SQL für die Datenanalyse erörtert haben, wollen wir uns nun einige aktuelle SQL-Interview-Fragen ansehen, die auf die verschiedenen Qualifikationsniveaus zugeschnitten sind - Grundlagen, Mittelstufe und Fortgeschrittene. Halten Sie unser Spickzettel SQL für die Datenanalyse bereit, um Ihnen bei den bevorstehenden Herausforderungen zu helfen.

Frage 1: Was ist SQL?

SQL (Structured Query Language) ist eine Standardprogrammiersprache für die Verwaltung und Kommunikation mit relationalen Datenbanken. Sie ermöglicht es Benutzern, Daten abzufragen, Datensätze einzufügen, zu aktualisieren und zu löschen, Datenbankschemata zu erstellen und zu ändern und Zugriffsrechte zu verwalten.

Frage 2: Nennen Sie die grundlegenden Elemente einer SQL-Abfrage.

Eine SQL-Abfrage enthält normalerweise eine:

  • SELECT Anweisung, die Daten aus einer oder mehreren Tabellen abruft.
  • FROM Klausel, die die Tabelle(n) angibt, in denen sich die Daten befinden.
  • WHERE-Klausel (optional), die die Ergebnisse auf der Grundlage bestimmter Kriterien filtert.
  • GROUP BY-Klausel (optional), die die Ergebnisse nach Spalte(n) gruppiert.
  • HAVING-Klausel (optional), die gruppierte Ergebnisse filtert.
  • ORDER BY-Klausel (optional), die die Ergebnisse in aufsteigender (oder absteigender) Reihenfolge sortiert.

Frage 3: Wie kann man alle Daten aus einer Tabelle auswählen?

Um alle Daten aus einer Tabelle abzurufen, verwenden Sie:

SELECT * 
FROM employees;

Diese Abfrage holt alle Zeilen aller Spalten aus der Tabelle " Mitarbeiter":

  • SELECT *: Wählt alle Spalten aus der angegebenen Tabelle aus; das Sternchen (*) steht für alle Spalten in einer Tabelle.
  • FROM employees: Gibt die Tabelle an, aus der die Daten abgerufen werden sollen.

Frage 4: Wie kann man bestimmte Spalten aus einer Tabelle auswählen?

Um bestimmte Spalten aus einer Tabelle abzurufen, müssen Sie die gewünschten Spaltennamen in der Anweisung SELECT auflisten:

SELECT first_name, last_name, department 
FROM employees;

Diese Abfrage ruft nur Daten aus den angegebenen Spalten ab und bietet eine gezielte Ansicht der relevanten Informationen aus der employees Tabelle.

  • SELECT first_name, last_name, department: Diese Anweisung gibt nur die Daten in den Spalten first_name, last_name, und department
  • FROM employees: Gibt die Tabelle an, aus der die Daten abgerufen werden sollen.

Wir können auch ausgewählte Spalten mit AS benennen:

SELECT first_name, 
last_name AS surname, 
department 
FROM employees;

In den Abfrageergebnissen wird die Spalte last_name als Nachname angezeigt. Sie können dies verwenden, um zwischen zwei Spalten mit ähnlichen Namen zu unterscheiden oder um einer Spalte mehr Kontext hinzuzufügen. Wenn Sie zum Beispiel die Spalte number in part_id_number umbenennen, können die Leser schnell erkennen, welche Art von Daten in dieser Spalte gespeichert ist.

Frage 5: Erläutern Sie die Syntax der WHERE-Klausel.

Die WHERE Klausel filtert Zeilen, die bestimmte Bedingungen erfüllen. Hier ist ein Beispiel für die Syntax:

SELECT first_name, last_name
FROM employees
WHERE department = 'Sales';

In dieser Abfrage schränkt WHERE die Ergebnisse auf die Daten der Mitarbeiter der Verkaufsabteilung ein.

  • SELECT first_name, last_name: Gibt an, aus welchen Spalten Daten abgerufen werden sollen.
  • FROM employees: Gibt die Tabelle an, aus der die Daten abgerufen werden sollen.
  • WHERE department = 'Sales': Begrenzt die Ergebnisse auf die Mitarbeiter der Verkaufsabteilung.

WHERE kann auf verschiedene Datentypen angewendet werden. Wenn Sie nach Zahlen oder Daten filtern, können Sie direkte Vergleiche oder Operatoren wie <,<=,>,>= oder = verwenden.

SELECT first_name, last_name
FROM employees
WHERE salary > 50000;

Beim Filtern von NULL Werten können die Operatoren IS NULL oder IS NOT NULL verwendet werden:

SELECT * 
FROM employees 
WHERE manager_id IS NULL;

Frage 6: Wie filtert man Abfrageergebnisse basierend auf mehreren Bedingungen?

Um Ergebnisse auf der Grundlage mehrerer Bedingungen zu filtern, werden logische Operatoren wie AND, OR und NOT in der Klausel WHERE verwendet.

  • Der AND Operator gibt Zeilen zurück, die alle angegebenen Bedingungen erfüllen.
  • Der OR Operator gibt Zeilen zurück, die mindestens eine der angegebenen Bedingungen erfüllen.
  • Der NOT Operator gibt Zeilen zurück, die die Bedingung(en) nicht erfüllen.

Betrachten Sie das folgende Beispiel:

SELECT first_name, last_name
FROM employees
WHERE department = 'Sales' AND salary > 50000;

Diese Abfrage gibt nur Mitarbeiter zurück, die im Vertrieb arbeiten und deren Gehalt größer als 50.000 $ ist. Wenn der Mitarbeiter in einer anderen Abteilung oder im Vertrieb arbeitet und weniger als 50.000 Dollar verdient, wird er nicht in den Ergebnissen angezeigt.

  • SELECT first_name, last_name: Bestimmt, aus welchen Spalten die Daten abgerufen werden sollen.
  • FROM employees: Tabelle: Gibt die Tabelle an, aus der die Daten abgerufen werden sollen.
  • WHERE department = 'Sales' AND salary > 50000: Filtert die Ergebnisse so, dass nur Mitarbeiter aus der Vertriebsabteilung mit einem höheren Gehalt berücksichtigt werden.

Sie können mehrere Bedingungen mit Hilfe von Klammern kombinieren:

SELECT first_name, last_name
FROM employees
WHERE (department = 'Sales' AND salary > 50000) 
  OR manager_id IS NULL;

In dieser Abfrage werden nur Mitarbeiter in die Ergebnisse aufgenommen, die keinem Manager unterstellt sind (d. h. deren Manager-ID NULL ist) oder die im Vertrieb arbeiten und mehr als 50.000 $ verdienen.

Frage 7: Wie filtert man Ergebnisse für einen bestimmten Textwert?

Um Ergebnisse nach einem bestimmten Wert in einer Textspalte zu filtern, verwenden Sie den LIKE-Operator. Außerdem benötigen Sie die Symbole für den Mustervergleich % (entspricht null oder mehr Zeichen) und/oder _ (entspricht einem einzelnen Zeichen). Betrachten Sie das folgende Beispiel:

SELECT product_name, description
FROM products
WHERE description LIKE '%apple%';

Diese Abfrage demonstriert die Verwendung von LIKE mit Musterabgleich:

  • SELECT product_name, description: gibt an, aus welchen Spalten Daten abgerufen werden sollen.
  • FROM products: Gibt die Tabelle an, aus der die Daten abgerufen werden sollen.
  • WHERE description IS LIKE '%apple%': Filtert die Ergebnisse so, dass nur Produkte angezeigt werden, die das Wort "apple" in ihrer Beschreibung enthalten.

Ein anderes Beispiel könnte sein:

SELECT * 
FROM employees 
WHERE first_name LIKE 'Mar_a';

Stellen Sie sich vor, Sie suchen nach allen Mitarbeitern, die Maria oder Maria heißen. Diese Abfrage gibt alle Mitarbeiter zurück, deren Vornamen mit "Mar" beginnen, gefolgt von einem beliebigen Zeichen anstelle des "i" und einem "a". Dieses Muster kann verwendet werden, um sowohl "Maria" als auch "María" in einer Datenbank abzugleichen, in der der Name möglicherweise keinen Akzent auf dem "i" hat. (Es würde auch "Marta", "Marla", "Marja" und alle anderen Namen zurückgeben, die dem Muster entsprechen).

Frage 8: Wie kann man Zeilen in einer Datenbank aktualisieren?

Um vorhandene Zeilen in einer Datenbanktabelle zu aktualisieren, verwenden Sie die Anweisung UPDATE:

UPDATE employees
SET salary = 60000, department = 'Marketing'
WHERE employee_id = 101;

Diese Abfrage demonstriert, wie man bestehende Spalten mit neuen Werten für Zeilen aktualisiert, die die angegebene Bedingung erfüllen.

  • UPDATE employees: Gibt an, welche Tabelle aktualisiert werden soll.
  • SET salary = 60000, department = 'Marketing': Gibt die Spalten und ihre neuen (aktualisierten) Werte an.
  • WHERE employee_id = 101: Legt fest, welche Zeilen aktualisiert werden sollen - in diesem Fall die Zeile, in der die Mitarbeiter-ID 101 ist. Sie können auch AND, OR, NOT, Zahlenfilterung usw. verwenden, um komplexere Aktualisierungsbedingungen anzugeben.

Frage 9: Wie entfernt man Zeilen aus einer Datenbank?

Um Zeilen aus einer Datenbanktabelle zu entfernen, verwenden Sie die Anweisung DELETE FROM, gefolgt von dem Tabellennamen und der Bedingung, die angibt, welche Zeilen gelöscht werden sollen:

DELETE FROM employees
WHERE department = 'Human Resources';

Diese Abfrage zeigt, wie man Zeilen aus einer Datenbanktabelle auf der Grundlage einer bestimmten Bedingung löscht:

  • DELETE FROM employees: Gibt die Tabelle an, aus der Zeilen gelöscht werden sollen.
  • WHERE department = 'Human Resources': Gibt die Bedingung an, die bestimmt, welche Zeilen gelöscht werden sollen - in diesem Fall alle Mitarbeiter der Personalabteilung. Sie können die Löschbedingungen mit dem Standard WHERE

Frage 10: Wie sortiert man die Ergebnisse einer SQL-Abfrage?

Verwenden Sie die ORDER BY Klausel, gefolgt von dem/den Spaltennamen, nach denen Sie die Ergebnisse sortieren möchten:

SELECT product_name, price
FROM products
ORDER BY price DESC;

Diese Abfrage veranschaulicht, wie die Ergebnisse auf der Grundlage einer bestimmten Spalte sortiert werden können, so dass die Daten in der gewünschten Reihenfolge angezeigt werden können.

  • SELECT product_name, price: Bestimmt, aus welchen Spalten die Daten abgerufen werden sollen.
  • FROM products: Definiert die Tabelle, in der sich diese Daten befinden.
  • ORDER BY price DESC: Sortiert die Ergebnisse (vom höchsten zum niedrigsten Wert, auch absteigend) nach price. Die Standardsortierreihenfolge von SQL ist aufsteigend, wobei Textwerte von A bis Z und numerische Werte vom niedrigsten zum höchsten Wert sortiert werden. Wenn DESC nicht angegeben wird, erfolgt die Sortierung in aufsteigender Reihenfolge.

SQL-Zwischenfragen

Frage 11: Wie kann man Daten aus mehreren Tabellen in einer Abfrage kombinieren?

SQL-Abfragen verwenden JOIN Klauseln, um Ergebnisse aus mehreren Tabellen zu kombinieren. Mit JOINkönnen Sie Daten aus verwandten Tabellen (d. h. Tabellen mit einer oder mehreren gemeinsamen Spalten) anhand bestimmter Kriterien abrufen. Hier ist ein Beispiel für JOIN:

SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers 
ON orders.customer_id = customers.customer_id;

Diese Abfrage ruft die Bestell-ID und den Kundennamen aus den Tabellen orders und customers Tabellen ab. Sie fügt die Informationen zusammen, wenn die Datensätze in beiden Tabellen eine übereinstimmende Kunden-ID enthalten. Weitere Informationen über die Funktionsweise von JOINfinden Sie in An Illustrated Guide to the SQL INNER JOIN. Weitere Beispiele für JOIN Interviewfragen finden Sie in The Top 10 SQL JOIN Interview Questions and How to Answer Them.

Frage 12: Beschreiben Sie die JOIN-Typen.

JOIN-Typen umfassen mehrere Variationen, die jeweils einen bestimmten Zweck bei der Kombination von Ergebnissen aus mehreren Tabellen erfüllen:

  • INNER JOIN: Ruft nur Datensätze ab, bei denen beide Tabellen übereinstimmende Werte auf der Grundlage der angegebenen Bedingung haben.
  • LEFT JOIN: Liefert alle Datensätze aus der linken Tabelle und alle passenden Datensätze aus der rechten Tabelle. Wenn keine Übereinstimmung gefunden wird, werden NULL Werte für die Spalten der rechten Tabelle zurückgegeben.
  • RIGHT JOIN: Gibt alle Datensätze aus der rechten Tabelle und alle übereinstimmenden Datensätze aus der linken Tabelle zurück. Wenn keine Übereinstimmung gefunden wird, werden für die Spalten der linken Tabelle die Werte NULL zurückgegeben.
  • FULL JOIN: Gibt alle Datensätze zurück, wenn es entweder in der linken oder in der rechten Tabelle eine Übereinstimmung gibt. Wenn keine Übereinstimmung gefunden wird, werden die nicht übereinstimmenden Zeilen mit NULLs zurückgegeben.
  • CROSS JOIN: Gibt das kartesische Produkt der beiden Tabellen zurück - d. h. alle möglichen Kombinationen von Zeilen.

Obwohl ein self-JOIN die gleiche Syntax wie andere JOINs verwendet, handelt es sich dabei um die Verbindung einer Tabelle mit sich selbst. Dadurch sind Vergleiche zwischen Zeilen innerhalb derselben Tabelle möglich.

Frage 13: Beschreiben Sie LEFT JOIN und den Unterschied zwischen LEFT JOIN und INNER JOIN.

LEFT JOIN LEFT JOIN ist eine Art von OUTER JOIN, der alle Zeilen aus der linken Tabelle und alle passenden Zeilen aus der rechten Tabelle zurückgibt. Wenn es keine Übereinstimmung gibt, werden NULL Werte für die Spalten in der rechten Tabelle zurückgegeben.

Der Hauptunterschied zwischen LEFT JOIN und INNER JOIN ist ihr Verhalten bei nicht übereinstimmenden Zeilen:

  • LEFT JOIN gibt alle Zeilen aus der linken Tabelle zurück, unabhängig davon, ob eine Übereinstimmung in der rechten Tabelle besteht. Wenn es keine Übereinstimmung in der rechten Tabelle gibt, werden diesen Spalten NULL Werte zugewiesen.
  • INNER JOIN gibt nur übereinstimmende Zeilen aus beiden Tabellen zurück. Nicht übereinstimmende Zeilen aus beiden Tabellen werden aus der Ergebnismenge entfernt.

Stellen Sie sich vor, Sie haben eine Tabelle mit den Namen der Schüler und eine weitere mit deren Noten. Wenn Sie LEFT JOIN verwenden, erhalten Sie eine Liste aller Schüler - einschließlich derjenigen, die NULL Noten haben. Im Gegensatz dazu würde eine INNER JOIN nur die Schüler anzeigen, die Noten haben, und Datensätze mit NULL Noten ausschließen.

Frage 14: Was bewirkt GROUP BY?

Die GROUP BY-Klausel fasst Zeilen mit denselben Werten zu Summenzeilen zusammen. Sie wird häufig mit Aggregatfunktionen (wie SUM(), COUNT() und AVG()) kombiniert, um Berechnungen mit gruppierten Daten durchzuführen.

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;

In diesem Beispiel gruppiert die Abfrage die Zeilen basierend auf den Werten in der Spalte department und zählt die employee_id Werte für jede Abteilung. Weitere Beispiele für ähnliche Abfragen finden Sie in unserem Artikel Top 9 SQL GROUP BY Interview Questions.

Frage 15: Was sind Aggregatfunktionen?

SQL-Aggregatfunktionen berechnen einen Satz von Werten und geben einen einzigen Wert zurück. Diese Funktionen werden häufig verwendet, um Daten zusammenzufassen und Berechnungen für mehrere Zeilen durchzuführen.

Die gebräuchlichsten SQL-Aggregatfunktionen sind:

  • SUM(): Gibt die Summe der numerischen Werte in einer Menge zurück.
  • COUNT(): Zählt die Anzahl der Zeilen in einer Menge, optional einschließlich der Nicht-Null-Werte.
  • AVG(): Bestimmt den Durchschnitt der numerischen Werte in einer Menge.
  • MIN(): Gibt den Mindestwert der Menge zurück.
  • MAX(): Gibt den Maximalwert der Menge zurück.
SELECT 
    AVG(salary) AS avg_salary,
    COUNT(*) AS total_employees,
    MAX(age) AS max_age
FROM 
    employees;

In diesem Beispiel berechnen die Aggregatfunktionen das Durchschnittsgehalt, zählen die Gesamtzahl der Mitarbeiter und ermitteln das höchste Alter aller Mitarbeiter in der employees Tabelle. Weitere Beispiele für diese Funktionen finden Sie in unserem SQL Aggregate Functions Cheat Sheet.

Frage 16: Was bewirkt HAVING?

Die HAVING-Klausel filtert die Ergebnisse der GROUP BY -Klausel. Sie wird nur mit aggregierten Daten verwendet und ermöglicht es Ihnen, Filterkriterien auf gruppierte Ergebnisse anzuwenden.

Stellen Sie sich vor, Sie haben eine Tabelle mit Bestellungen und möchten den Gesamtumsatz für jeden Kunden ermitteln. Sie möchten jedoch nur Kunden mit einem Gesamtbetrag von 1.000 $ oder mehr einschließen. Dies ist die Abfrage, die Sie verwenden würden:

SELECT customer_id, SUM(amount) AS total_sales
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Hier filtert die HAVING Klausel die Gruppen (Kunden) basierend auf der Bedingung, dass der Gesamtverkaufsbetrag des Kunden 1.000 $ übersteigt. Sie wird nach der Operation GROUP BY angewendet und ermöglicht es Ihnen, die gruppierten Ergebnisse zu filtern.

Frage 17: Was ist der Unterschied zwischen WHERE und HAVING?

HAVING filtert Gruppen von Zeilen und wird nach der Anweisung GROUP BY angewandt. Sie ist speziell für aggregierte Daten gedacht und ermöglicht es Ihnen, Filterkriterien auf gruppierte Ergebnisse anzuwenden. WHERE filtert einzelne Zeilen und wird vor GROUP BY angewendet.

Stellen Sie sich vor, Sie haben eine Tabelle mit Bestellungen und möchten den Gesamtumsatz für jedes Produkt berechnen, aber nur für Produkte, deren Gesamtumsatz 10.000 $ übersteigt. So würden Sie die Klausel HAVING verwenden:

SELECT 
    product_id,
    SUM(quantity_sold * price_per_unit) AS total_sales
FROM 
    sales
GROUP BY 
    product_id
HAVING 
    SUM(quantity_sold * price_per_unit) > 10000;

Betrachten Sie nun dasselbe Szenario, aber dieses Mal wollen Sie nur die Verkäufe berücksichtigen, bei denen der Stückpreis des Produkts größer als 10 $ ist und der Gesamtverkauf über 10.000 $ liegt. Einige dieser Informationen befinden sich in einzelnen Zeilen, so dass die Zeilen vor der Gruppierung gefiltert werden müssen. Außerdem muss nach dem Gesamtumsatz gefiltert werden, so dass auch die Gruppen gefiltert werden.

SELECT 
    product_id,
    SUM(quantity_sold * price_per_unit) AS total_sales
FROM 
    sales
WHERE
    price_per_unit > 10
GROUP BY 
    product_id
HAVING 
    SUM(quantity_sold * price_per_unit) > 10000;

Dies zeigt, wie die WHERE Klausel einzelne Zeilen auf der Grundlage von Bedingungen filtert, während die HAVING Klausel Gruppen von Zeilen auf der Grundlage von aggregierten Daten filtert. Wenn Sie tiefer in dieses Thema eintauchen möchten, lesen Sie unseren Artikel HAVING vs. WHERE in SQL: Was Sie wissen sollten.

Frage 18: Nennen Sie ein Beispiel für eine SQL-Subquery.

Eine SQL-Subquery, auch bekannt als verschachtelte Abfrage oder innere Abfrage, ist eine Abfrage, die in einer anderen Abfrage enthalten ist. Sie wird in den Anweisungen SELECT, INSERT, UPDATE und DELETE verwendet, um Operationen auszuführen, die auf den Ergebnissen einer anderen Abfrage basieren. Betrachten Sie das folgende Beispiel:

SELECT product_name
FROM products
WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');

In dieser Abfrage verwendet die WHERE Klausel eine Unterabfrage, um category_id Werte aus der Tabelle mit der abzurufen. categoriescategory_name 'Electronics' Die äußere Abfrage ruft dann Produktnamen für Elektronikprodukte basierend auf den Ergebnissen der Unterabfrage ab.

Fortgeschrittenes SQL Fragen

Frage 19: Was ist der Unterschied zwischen UNION und UNION ALL?

UNION entfernt doppelte Zeilen aus der kombinierten Ergebnismenge. Im Gegensatz dazu behält UNION ALL alle Zeilen, einschließlich der Duplikate.

Nehmen wir an, wir haben zwei Tabellen, employees und managers, die beide die Spalte employee_id enthalten. Wir wollen die Mitarbeiter-IDs aus den beiden Tabellen kombinieren.

SELECT employee_id FROM employees
UNION
SELECT employee_id FROM managers;

In dieser Abfrage, wenn employee_id sowohl in employees und managersvorkommt, entfernt UNION das Duplikat, aber UNION ALL behält beide Vorkommen. Weitere Informationen hierzu finden Sie unter UNION vs. UNION ALL in SQL: Was ist der Unterschied?

Frage 20: Was sind SQL-Fensterfunktionen und wofür werden sie verwendet?

SQL-Fensterfunktionen führen Berechnungen auf einer Teilmenge von Tabellenzeilen durch, die sich auf die aktuelle Zeile beziehen. Sie werden auf ein Fenster angewendet, das eine Sammlung von Zeilen ist, die sich auf die aktuelle Zeile beziehen.

Fensterfunktionen unterscheiden sich von GROUP BY Abfragen, da GROUP BY Daten auf der Grundlage bestimmter Spalten aggregiert und mehrere Zeilen zu zusammenfassenden Zeilen zusammenfasst. Im Gegensatz dazu führen Fensterfunktionen Berechnungen in einer Reihe von Zeilen durch, die sich auf die aktuelle Zeile im Abfrageergebnis beziehen, ohne die Ergebnismenge zusammenzufassen. Weitere Informationen finden Sie unter SQL Fensterfunktionen vs. GROUP BY: Was ist der Unterschied?

Um Fensterfunktionen anzuwenden, wird die OVER-Klausel mit der folgenden Syntax verwendet:

<function>(column) OVER (PARTITION BY partition_column ORDER BY order_column)

Wobei:

  • <function> gibt die verwendete Fensterfunktion an (z. B. AVG(), SUM(), RANK()).
  • (column): Die Spalte oder der Ausdruck, auf den die Fensterfunktion angewendet wird.
  • PARTITION BY partition_column: Eine optionale Klausel, die die Ergebnismenge auf der Grundlage einer oder mehrerer Spalten in Teilmengen aufteilt. Die Funktion wird dann auf jede Teilmenge einzeln angewandt.
  • ORDER BY order_column: Eine optionale Klausel, die die Reihenfolge der Zeilen innerhalb jeder Partition angibt. Dies bestimmt, welche Zeilen im Fensterrahmen für jede Berechnung erscheinen.

Fensterfunktionen werden häufig verwendet, um aggregierte Werte wie Durchschnittswerte, Summen und Zählungen über eine Reihe von Zeilen zu berechnen. Sie werden auch verwendet, um Werte mit anderen Zeilen in der Ergebnismenge zu vergleichen; dies hilft bei der Bestimmung von Rangfolgen, Zeilennummerierungen sowie Maximal- und Minimalwerten innerhalb eines Fensters. Um mehr darüber zu erfahren, lesen Sie Wann verwende ich SQL Fensterfunktionen?

Stellen Sie sich vor, wir haben eine Tabelle namens employees mit den Spalten employee_id, department_id, und salary. Wir können das Durchschnittsgehalt pro Abteilung mit der Fensterfunktion AVG() berechnen:

SELECT 
    employee_id, 
    department_id, 
    salary,
    AVG(salary) OVER (PARTITION BY department_id) AS avg_salary_per_department
FROM 
    employees;

SQL-Fensterfunktionen eignen sich hervorragend für die Berechnung von Aggregaten über bestimmte Teilmengen von Daten - wie in diesem Beispiel für die Berechnung des Durchschnittsgehalts innerhalb von Abteilungen gezeigt. Sie sind von unschätzbarem Wert für das Ranking von Daten, was bei Aufgaben wie der Leistungsbewertung nützlich sein kann. Diese Funktionen erleichtern die Durchführung analytischer Vergleiche und die Ermittlung von Trends, z. B. bei den Quartalseinnahmen. In den folgenden Fragen werden wir uns weitere Beispiele ansehen.

Frage 21: Wie ordnet man Zeilen in SQL?

Um Zeilen in SQL zu ordnen, verwenden Sie die Fensterfunktionen RANK(), DENSE_RANK(), PERCENT_RANK() und ROW_NUMBER(). Diese Funktionen weisen jeder Zeile in der Ergebnismenge auf der Grundlage vordefinierter Kriterien einen Rang oder eine Zeilennummer zu:

  • RANK(): Weist jeder einzelnen Zeile einen eindeutigen Rang zu. Zeilen mit demselben Wert erhalten denselben Rang, aber es gibt Lücken in der Rangfolge (z.B. 1,2,3,3,5).
  • DENSE_RANK(): Weist ebenfalls jeder Zeile einen eindeutigen Rang zu und gibt gleichwertigen Zeilen den gleichen Rang, beseitigt aber Lücken in der Rangfolge. Stattdessen wird der nächstfolgende Rang der Zeile zugewiesen, die auf die verbundenen Zeilen folgt (z. B. 1,2,3,3,4).
  • PERCENT_RANK() gibt die Rangfolge für jede Zeile in der Partition/Ergebnismenge als Perzentil (von 0 bis 1) zurück.
  • ROW_NUMBER() weist jeder Zeile in der Ergebnismenge eine eindeutige Zeilennummer zu, unabhängig von Duplikaten oder Gleichheitswerten.

Lesen Sie unseren Überblick über Ranking-Funktionen in SQL, um mehr über die Unterschiede zwischen diesen Funktionen zu erfahren.

Angenommen, wir haben eine Tabelle namens employees mit den Spalten employee_id, employee_name und salary. Mit der Fensterfunktion RANK() können wir die Mitarbeiter nach ihrem Gehalt in absteigender Reihenfolge ordnen:

SELECT 
    employee_id, 
    employee_name, 
    salary,
    RANK() OVER (ORDER BY salary DESC) AS salary_rank
FROM 
    employees;

Diese Abfrage gibt die IDs, Namen und Gehälter der Mitarbeiter aus der employees Tabelle zurück. Sie ordnet dann jeden Mitarbeiter nach seinem Gehalt ein, wobei höhere Gehälter niedrigere Ränge erhalten. Das Ergebnis enthält die ursprünglichen Spalten sowie eine neue Spalte, salary_rank, die den Gehaltsrang jedes Mitarbeiters angibt.

Frage 22: Was ist ein CTE? Wann verwenden Sie es?

Ein CTE oder gemeinsamer Tabellenausdruck ist eine temporäre benannte Ergebnismenge, die in einer SELECT, INSERT, UPDATE oder DELETE Anweisung verwendet werden kann. Er ermöglicht es Ihnen, komplexe Abfragen in handhabbare und wiederverwendbare Teile zu unterteilen.

Mit einer CTE, die mit dem Schlüsselwort WITH eingeführt wird, können Sie eine temporäre tabellenähnliche Struktur erstellen, die nur während der Ausführung der Abfrage existiert. Auf diese temporäre Tabelle kann dann in derselben Abfrage Bezug genommen werden. CTEs sind besonders nützlich, um komplexe Berechnungen in mehrere Schritte aufzuteilen; dies verbessert die Codeorganisation und ermöglicht die Wiederverwendung von Code.

Angenommen, wir haben eine Tabelle namens employees mit den Spalten employee_id, employee_name, und salary. Wir können eine CTE erstellen, um hoch bezahlte Mitarbeiter auszuwählen, die mehr als 100.000 $ verdienen:

WITH high_paid_employees AS (
  SELECT 
      employee_id, 
      employee_name, 
      salary
  FROM 
      employees
  WHERE 
      salary > 100000
)
SELECT 
    * 
FROM 
    high_paid_employees;

Frage 23: Was ist eine laufende Summe und wie berechnet man sie in SQL?

Eine laufende Summe, auch bekannt als kumulative Summe, ist die Summe eines Wertes über eine Reihe von Zeilen in einer bestimmten Reihenfolge. In SQL kann eine laufende Summe mithilfe von SUM() und der Klausel OVER() berechnet werden.

Die folgende Abfrage berechnet die laufende Summe von order_amount über alle Zeilen in der orders Tabelle, sortiert nach order_date:

SELECT 
    order_date, 
    order_amount,
    SUM(order_amount) OVER (ORDER BY order_date) AS running_total
FROM 
    orders;

Frage 24: Was ist ein gleitender Durchschnitt und wie berechnet man ihn in SQL?

Ein gleitender Durchschnitt stellt den Durchschnitt einer Reihe von Werten über eine Reihe von Zeiten dar, wobei sich das Fenster entlang des Datensatzes"bewegt". In SQL können Sie einen gleitenden Durchschnitt berechnen, indem Sie AVG() mit OVER() verwenden und einen Fensterrahmen angeben.

Die folgende Abfrage berechnet den gleitenden Durchschnitt der Werte für die aktuelle Zeile und die beiden vorangegangenen Zeilen, geordnet nach Datum.

SELECT 
    date, 
    value,
    AVG(value) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average
FROM 
    dataset;

Frage 25: Wie berechnet man die Differenz von Jahr zu Jahr in SQL?

Um die Differenz von Jahr zu Jahr in SQL zu berechnen, verwenden Sie Funktionen wie LAG(), um Werte zwischen aufeinanderfolgenden Zeilen zu vergleichen.

Die folgende Abfrage berechnet die Jahresdifferenz der Einnahmen, indem sie die Einnahmen des aktuellen Jahres von den Einnahmen des Vorjahres subtrahiert:

SELECT 
    year, 
    revenue,
    revenue - LAG(revenue, 1) OVER (ORDER BY year) AS year_to_year_difference
FROM 
    yearly_revenue;

Weitere Hilfe bei SQL-Interviewfragen für Datenanalysten

SQL-Kenntnisse sind für den Erfolg als Datenanalyst unerlässlich. Sie ermöglichen eine effiziente Interaktion mit relationalen Datenbanken und vereinfachen das Abrufen und Bearbeiten von Daten sowie statistische Berechnungen. Wenn Sie Ihre SQL-Kenntnisse verbessern, können Sie selbstbewusst an Vorstellungsgespräche für Datenanalysten herangehen.

Denken Sie daran: Übung macht den Meister. Nehmen Sie an einem unserer interaktiven Kurse wie SQL for Data Analysis teil. In unserem Blog finden Sie außerdem viele weitere Beispiele für Vorstellungsgespräche, z. B. den Artikel Top 27 Fortgeschrittenes SQL Interview Questions with Answers. So sind Sie im Handumdrehen für das Vorstellungsgespräch gerüstet!