Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

  1. Startseite
  2. Blog
  3. Datenbanken und SQL

Datenbanken und SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Eine Unterabfrage ist eine Abfrage innerhalb einer anderen Abfrage. Lernen Sie jeden Typ kennen und wissen Sie, wo er passt, verstehen Sie korrelierte Unterabfragen richtig und vermeiden Sie die NOT IN-Falle, die stillschweigend überhaupt keine Zeilen zurückgibt.

9 Min. Lesezeit
Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Das Wichtigste

  • Eine Unterabfrage ist eine in einer anderen verschachtelte Abfrage, und die äußere Abfrage verwendet ihr Ergebnis.
  • Unterabfragen können in WHERE, FROM, SELECT und HAVING erscheinen.
  • Eine korrelierte Unterabfrage bezieht sich auf die äußere Zeile, sodass sie logisch pro Zeile ausgewertet wird.
  • Bevorzugen Sie NOT EXISTS gegenüber NOT IN, wenn NULL-Werte möglich sind.

Die Beantwortung einiger Fragen erfordert zwei Schritte. „Welche Bestellungen liegen über dem Durchschnitt?“ erfordert, dass Sie zuerst den Durchschnitt ermitteln und dann jede Bestellung damit vergleichen. SQL-Unterabfragen ermöglichen es Ihnen, beide Schritte als eine Anweisung zu schreiben.

In diesem Tutorial wird jeder Typ anhand von zwei kleinen Tabellen behandelt. Wir haben diese Abfragen in SQLite 3.50 ausgeführt und die angezeigten Ergebnisse stammen aus diesem Lauf. Die Standard-Unterabfragesyntax wird weitgehend unterstützt und wir weisen auf die Stellen hin, an denen sich die Datenbanken unterscheiden.

Was ist eine Unterabfrage?

Eine Unterabfrage, auch innere oder verschachtelte Abfrage genannt, ist eine SELECT-Anweisung, die in runden Klammern in eine andere Anweisung eingefügt wird. Konzeptionell erzeugt die innere Abfrage ein Ergebnis, das dann von der äußeren Abfrage verwendet wird.

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

Die Beispieltabellen

CREATE TABLE customers (id INT, name TEXT, city TEXT);
CREATE TABLE orders (id INT, customer_id INT, total INT);

INSERT INTO customers VALUES
 (1,'Asha','Pune'), (2,'Ben','Delhi'), (3,'Chitra','Pune'), (4,'Dev','Goa');

INSERT INTO orders VALUES
 (101,1,1200), (102,1,800), (103,2,300), (104,3,2500), (105,3,100);

Beachten Sie, dass Dev keine Befehle hat. Dieses Detail ist für mehrere Beispiele unten wichtig.

Arten von Unterabfragen im Überblick

Typ Rückgaben Typischer Standort Gemeinsame Operatoren
Skalar Ein Wert WHERE, SELECT =, >, <
Mehrreihig Eine Spalte, viele Zeilen WO IN, ANY, ALL
Tabelle (abgeleitet) Viele Spalten und Zeilen VON Wird wie ein Tisch verwendet
Korreliert Hängt von der äußeren Reihe ab WHERE, SELECT Beliebig und EXISTS

Skalare Unterabfragen

Eine skalare Unterabfrage gibt genau einen Wert zurück, sodass Sie sie überall dort verwenden können, wo ein einzelner Wert sinnvoll ist. Hier ist die Abfrage von vorhin mit ihrem Ergebnis. Der Durchschnitt aller Bestellungen liegt bei 980:

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

-- 101 | 1200
-- 104 | 2500

Sie konnten WHERE total > AVG(total) nicht schreiben, da Aggregate in WHERE nicht direkt erlaubt sind. Die Unterabfrage umgeht dies, indem sie den Wert separat berechnet.

Was passiert, wenn eine „skalare“ Unterabfrage mehrere Zeilen zurückgibt? Die meisten Datenbanken, einschließlich PostgreSQL, MySQL und SQL Server, lösen einen Fehler aus. SQLite nicht. In unserem Test wurde stillschweigend nur die erste Zeile verwendet, was einen echten Fehler verbergen könnte. Verlassen Sie sich also nicht auf dieses Verhalten.

IN und NICHT IN

Wenn die innere Abfrage eine Liste zurückgibt, verwenden Sie IN. Dadurch werden Kunden mit mindestens einer Bestellung über 1000 gefunden:

SELECT name FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

-- Asha
-- Chitra

NOT IN macht das Gegenteil und findet Kunden, die noch nie bestellt haben:

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);

-- Dev

Das funktioniert hier, aber NOT IN hat einen gefährlichen Randfall, den wir weiter unten behandeln.

Unterabfragen in FROM

Eine Unterabfrage in FROM fungiert als temporäre Tabelle, die oft als abgeleitete Tabelle bezeichnet wird. Dies ist nützlich, wenn Sie zwei Aggregationen durchführen müssen, wie in dieser Abfrage für die durchschnittlichen Ausgaben pro Kunde in jeder Stadt:

SELECT city, AVG(spent) AS avg_spent
FROM (
  SELECT c.city, SUM(o.total) AS spent
  FROM customers c
  JOIN orders o ON o.customer_id = c.id
  GROUP BY c.id, c.city
) AS per_customer
GROUP BY city;

-- Delhi |  300.0
-- Pune  | 2300.0

Die innere Abfrage summiert jeden Kunden und die äußere ermittelt den Durchschnitt dieser Summen. Es ist eine gute Angewohnheit, der abgeleiteten Tabelle einen Alias ​​zu geben, da einige Datenbanken dies erfordern. Wenn GROUP BY für Sie neu ist, lesen Sie SQL GROUP BY und HAVING.

Unterabfragen in SELECT

Eine skalare Unterabfrage kann auch eine berechnete Spalte hinzufügen. Dieser zählt Bestellungen pro Kunde:

SELECT name,
       (SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.id) AS order_count
FROM customers c;

-- Asha   | 2
-- Ben    | 1
-- Chitra | 2
-- Dev    | 0

Dev erscheint mit Null. Ein innerer Join hätte Dev komplett gelöscht, da Dev keine passenden Zeilen hat. Das gleiche Ergebnis könnten Sie mit LEFT JOIN und GROUP BY erzielen, was wir unter Erklärte SQL-Joins erläutern.

Korrelierte Unterabfragen

Das vorherige Beispiel ist ebenfalls korreliert, da die innere Abfrage auf c.id aus der äußeren Abfrage verweist. Eine nicht korrelierte Unterabfrage kann alleine ausgeführt werden. Eine Korrelation kann nicht erfolgen, da sie von einem Wert aus der aktuellen äußeren Zeile abhängt.

Dadurch werden Bestellungen gefunden, die über dem Durchschnitt desselben Kunden liegen:

SELECT o.id, o.customer_id, o.total
FROM orders o
WHERE o.total > (
  SELECT AVG(i.total)
  FROM orders i
  WHERE i.customer_id = o.customer_id
);

-- 101 | 1 | 1200
-- 104 | 3 | 2500

So lesen Sie es. Für Bestellung 101 ermittelt die innere Abfrage den Durchschnitt der Bestellungen von Kunde 1 (1200 und 800), was 1000 ergibt. Da 1200 größer ist, wird die Zeile beibehalten. Für die Ordnung 102 gilt der gleiche Durchschnitt, aber 800 ist nicht größer und wird daher weggelassen. Die Einzelbestellung von Kunde 2 entspricht seinem eigenen Durchschnitt und wird daher ebenfalls verworfen.

Funktion Nicht korreliert Korreliert
Verwendet äußere Abfragewerte? Nein Ja
Kann alleine laufen? Ja Nein
Logische Ausführung Einmal Einmal pro äußerer Reihe
Leistungsrisiko Normalerweise niedrig Kann auf großen Tischen hoch stehen

„Einmal pro Zeile“ beschreibt die Logik, und Abfrageoptimierer schreiben diese häufig in etwas weitaus effizienteres um. Dennoch lohnt es sich, eine langsame korrelierte Unterabfrage zu untersuchen. Ein Index auf der inneren Spalte, hier orders.customer_id, kann einen großen Unterschied machen. Siehe Erklärte SQL-Indizes.

EXISTIERT und NICHT EXISTIERT

EXISTS stellt eine Ja- oder Nein-Frage: Gibt die innere Abfrage mindestens eine Zeile zurück? Es kann beim ersten Treffer aufhören, und was Sie darin auswählen, spielt keine Rolle, weshalb die Leute oft schreiben SELECT 1.

SELECT c.name FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Asha, Ben, Chitra

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Dev

Die NOT IN NULL-Falle

Dies ist einer der häufigsten Unterabfragefehler. Wir haben eine Tabelle mit einer echten ID und einem NULL-Wert erstellt und dann beide Formen dagegen ausgeführt:

CREATE TABLE r (customer_id INT);
INSERT INTO r VALUES (1), (NULL);

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM r);
-- (no rows at all)

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM r WHERE r.customer_id = c.id);
-- Ben, Chitra, Dev

Warum gibt das erste nichts zurück? id NOT IN (1, NULL) bedeutet id <> 1 AND id <> NULL. Jeder Vergleich mit NULL ist eher unbekannt als wahr, sodass die gesamte Bedingung niemals wahr sein kann. Es gibt keine Fehlermeldung und keine Warnung, sondern nur ein leeres Ergebnis, das plausibel aussieht.

Tipp: Verwenden Sie standardmäßig NOT EXISTS für Anti-Joins. Wenn Sie NOT IN verwenden, fügen Sie WHERE customer_id IS NOT NULL in die Unterabfrage ein.

Unterabfrage vs. JOIN vs. CTE

Viele Abfragen können auf mehr als eine Weise geschrieben werden. Früher haben wir mit IN Kunden mit einem Großauftrag gefunden. Hier ist das gleiche Ergebnis mit einem Join:

SELECT DISTINCT c.name FROM customers c
JOIN orders o ON o.customer_id = c.id AND o.total > 1000;

-- Asha
-- Chitra

Beachten Sie die DISTINCT. Ein Join kann Duplikate erzeugen, wenn ein Kunde mehrere Übereinstimmungen hat, während IN und EXISTS dies nicht können.

Benutzen Wann
TRETEN SIE MIT Sie benötigen Spalten aus beiden Tabellen
IN oder EXISTS Sie müssen nur danach filtern, ob eine Übereinstimmung vorhanden ist
Abgeleitete Tabelle Sie müssen zuerst aggregieren, und es bleibt kurz
CTE Die Logik besteht aus mehreren Schritten oder wird mehr als einmal verwendet
Fensterfunktion Neben jeder Reihe benötigen Sie eine Figur pro Gruppe

Die Leistung variiert je nach Datenbank und Daten, und moderne Optimierer erstellen oft ähnliche Pläne. Wählen Sie also zuerst die klarste Form und prüfen Sie dann EXPLAIN, ob sie langsam ist.

Häufige Fehler

  • Verwenden Sie = mit einem mehrzeiligen Ergebnis. Verwenden Sie IN oder stellen Sie sicher, dass die innere Abfrage eine Zeile zurückgibt.
  • Verwendung von NOT IN für eine Spalte, die NULL-Werte zulässt. Sie können stillschweigend jede Zeile verlieren.
  • Verwendung unklarer Aliase. Qualifizieren Sie bei korrelierten Abfragen jede Spalte, da sie sonst möglicherweise an die falsche Tabelle gebunden wird.
  • Tiefe Verschachtelung. Drei Ebenen sind schwer zu lesen, also konvertieren Sie sie in CTEs.
  • Hinzufügen von ORDER BY im Inneren. Es hat normalerweise keine Auswirkung auf das äußere Ergebnis und einige Datenbanken lehnen es ab.

Fazit

Unterabfragen sind eine natürliche Möglichkeit, zweistufige Fragen auszudrücken. Beginnen Sie mit skalaren Unterabfragen und IN und üben Sie dann korrelierte Unterabfragen, indem Sie jeweils eine einzelne äußere Zeile durchgehen. Und denken Sie an NOT EXISTS, wann immer NULL-Werte möglich sind. Schreiben Sie zum Üben eine Frage auf drei Arten, mit einer Unterabfrage, einem Join und einem CTE, und vergleichen Sie die Ergebnisse und die Lesbarkeit.

Häufige Fragen

Was ist eine Unterabfrage in SQL?

Eine Unterabfrage ist eine SELECT-Anweisung, die in Klammern in einer anderen SQL-Anweisung verschachtelt ist. Die äußere Anweisung verwendet ihr Ergebnis als Wert, Liste oder Tabelle.

Was ist eine korrelierte Unterabfrage?

Es handelt sich um eine Unterabfrage, die auf eine Spalte der äußeren Abfrage verweist. Es hängt von der aktuellen äußeren Zeile ab und kann daher nicht alleine ausgeführt werden.

Was ist schneller, eine Unterabfrage oder ein JOIN?

Es hängt von der Datenbank und den Daten ab, und Optimierer erstellen häufig ähnliche Pläne. Schreiben Sie zuerst die klarste Version und vergleichen Sie dann die Ausführungspläne, wenn es auf die Leistung ankommt.

Was ist der Unterschied zwischen IN und EXISTS?

IN vergleicht einen Wert mit einer Ergebnisliste. EXISTS prüft, ob überhaupt eine Zeile zurückgegeben wird. Bei NULL-Werten verhalten sie sich anders, wenn sie negiert werden.

Kann eine Unterabfrage mehrere Spalten zurückgeben?

Ja, wenn es in FROM als abgeleitete Tabelle verwendet wird, und einige Datenbanken erlauben auch Zeilenvergleiche. Eine skalare Unterabfrage muss nur eine Spalte und eine Zeile zurückgeben.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →