SQL-Einführung mit Beispielen

Mit SQL lassen sich Datenbanken erstellen sowie Daten aus bestehenden Datenbanken abfragen. Die Sprache gehört zum Standardrepertoire von Webentwicklern und -entwicklerinnen, Daten-Analysten und -Analystinnen und Forschenden. Im Vergleich mit anderen Programmiersprachen ist SQL speziell. Wir zeigen, wie die Sprache aufgebaut ist und wie sie funktioniert.

Domain Bundle Aktion

Nur für kurze Zeit: So erhalten Sie zwei Gratis-Domains!

Kaufen Sie eine .de-Domain und erhalten eine .com und .info Domain gratis dazu.

E-Mail-Postfach
Wildcard SSL
Persönlicher Berater

Was ist SQL?

Bei SQL handelt es sich um die „Structured Query Language“, zu Deutsch „strukturierte Abfrage-Sprache“. Mitte der 1970er Jahre entstanden, entwickelte sich SQL zur Standard-Programmiersprache für Datenbank-Anwendungen. Dabei geht SQL weit über die namensgebenden Abfragen hinaus: Die Sprache bildet die vorherrschende Schnittstelle zur Interaktion mit relationalen Daten bzw. relationalen Datenbank-Management-Systemen.

Essenziell für ein Verständnis der SQL-Entstehung ist die Erkenntnis, dass die Sprache auf der „relationalen Algebra“ aufbaut. Dabei handelt es sich um eine mathematische Theorie, Daten zu strukturieren und die Ergebnisse von Abfragen zu errechnen. Aus dieser mathematischen Grundlage leiten sich viele der Besonderheiten von SQL als Programmiersprache ab.

SQL als Schnittstelle zur Steuerung von RDBMS

SQL kommt als Schnittstelle für die Kommunikation mit einem relationalen Datenbank-Management-System (RDBMS) zum Einsatz. Entweder wird der SQL-Code direkt vom Menschen über eine textbasierte Schnittstelle eingegeben und ausgeführt oder in API-Zugriffe integriert. Ferner existieren grafische Benutzeroberflächen, die die Interaktionen des Nutzers bzw. der Nutzerin in SQL-Code übersetzen. In jedem Fall wird SQL-Code vom RDBMS ausgeführt. Ein RDBMS besteht aus mehreren Komponenten:

  1. Speicher- bzw. Datenbank-Engine – verwaltet Daten auf technischer Ebene.
  2. Programmierschnittstelle(n) API – ermöglicht programmatische Steuerung des RDBMS und liefert Zugriff auf Daten.
  3. Benutzer-Schnittstellen (GUI/CLI) – erlauben Steuerung des RDBMS und Zugriff auf Daten durch den Menschen.
  4. Die eigentliche(n) Datenbank(en) – organisieren Daten auf logischer Ebene.

Ein RDBMS umfasst eine Hierarchie von Speicherschichten, vom Datenbankserver bis zum in einem Feld gespeicherten Wert. SQL enthält Befehle, um auf all diesen zu operieren. Wir zeigen die Hierarchie der RDBMS-Objekte als Übersicht:

RDBMS-Objekt Enthält
Server Datenbanken
Datenbank Tabellen
Tabelle Datensätze
Datensatz Felder
Feld Typisierter Wert

SQL ist eine domänenspezifische und deklarative Sprache

Im Vergleich zu den meisten etablierten Programmiersprachen ist SQL speziell. Zum einen ist die Sprache bereits vor dem Internet-Zeitalter entstanden, zum anderen handelt es sich um eine „domänenspezifische Sprache“ („domain-specific language“, DSL). Im Gegensatz dazu spricht man von „General Purpose Languages“, die sich für den Einsatz in vielen unterschiedlichen Szenarien eignen. Bekannte Vertreter der General Purpose Languages sind C, C++, C#, Java, JavaScript, Python, PHP.

Unter den für das moderne Web zum Einsatz kommenden Sprachen existiert mit CSS lediglich eine weitere domänenspezifische Sprache. Interessanterweise handelt es sich sowohl bei SQL als auch bei CSS um „deklarative“ Programmiersprachen. Das heißt, der Programmierer bzw. die Programmiererin beschreibt ein gewünschtes Ergebnis, und das System, das den Code ausführt, sorgt dafür, dass dieses Ergebnis erzielt wird. Dies steht im Gegensatz zur verbreiteten „imperativen“ Programmierung, bei der die einzelnen Schritte zum Erreichen der Ziele explizit im Code festgelegt werden.

Der Sprachumfang von SQL ist in verschiedenen ISO/IEC-Standards festgelegt. Davon abweichend existieren Dialekte der unterschiedlichen SQL-Implementationen großer Anbieter. So haben MySQL/MariaDB, PostgreSQL, Oracle SQL und Microsoft SQL Server jeweils eigene Befehle bzw. Befehlsvarianten.

Wozu wird SQL eingesetzt?

Mit SQL lassen sich alle Aspekte eines RDBMS steuern. Auch wenn SQL im Allgemeinen als eine Sprache bezeichnet wird, erstreckt sich die Funktionalität über mindestens fünf benannte Untersprachen. Jede der fünf Sprachen umfasst eigene SQL-Befehle, die den jeweiligen Teilbereich abdecken. Schauen wir uns einige Beispiele an:

SQL-Untersprache Befehle Beispiele
Data Definition Language (DDL) Befehle zur Definition des Datenbankschemas: Erzeugen, Ändern und Löschen von Datenbanktabellen; Definition von Primärschlüsseln, Fremdschlüsseln und Constraints CREATE TABLE, DROP TABLE
Data Manipulation Language (DML) Befehle zur Datenmanipulation: Ändern, Einfügen und Löschen von Datensätzen INSERT, UPDATE
Data Query Language (DQL) Befehle zur Abfrage und Aufbereitung der von Daten SELECT
Data Control Language (DCL) Befehle für die Rechteverwaltung GRANT, REVOKE
Transaction Control Language (TCL) Befehle für die Transaktionskontrolle COMMIT, ROLLBACK

Die SQL-Syntax anhand von Beispielen lernen

Generell versteht man unter Syntax die „Schreibweise“ einer Programmiersprache. Die Syntax legt fest, welche Arten von grundlegenden Code-Konstrukten es gibt und wie sich diese miteinander verknüpfen lassen. Das Verständnis der Syntax ist eine grundsätzliche Voraussetzung zum Lesen und Schreiben von Code in der jeweiligen Sprache. Bevor wir uns im Detail mit der SQL-Syntax auseinandersetzen, schauen wir uns zunächst an, wie SQL-Code ausgeführt wird.

Tipp

MySQL-Lernen leicht gemacht – mit unserem MySQL-Tutorial.

Wie lässt sich SQL-Code ausführen?

SQL-Code liegt als Quelltext in Textdateien vor. Dem Code wird erst durch eine geeignete Ausführungsumgebung Leben eingehaucht. Der Quelltext wird von einem SQL-Interpreter gelesen und in Aktionen eines RDBMS umgesetzt. Dabei gibt es zwei grundsätzliche Herangehensweisen:

  1. SQL-Code in interaktiver Sitzung ausführen

Bei diesem Ansatz wird SQL-Code direkt in ein Textfenster eingetragen oder kopiert. Der SQL-Code wird ausgeführt, das Ergebnis angezeigt. Man hat die Möglichkeit, den Code anzupassen und erneut auszuführen. Durch den die schnelle Abfolge von Code-Manipulation und Ergebnisanzeige eignet sich dieses Vorgehen am besten zum Lernen und zum Erstellen komplexer Abfragen.

  1. SQL-Code als Skript ausführen

Bei diesem Ansatz wird eine gesamte Quelltext-Datei mit SQL-Code zeilenweise ausgeführt. Dabei wird ggf. nur am Ende der Ausführung ein Feedback an den Nutzer übermittelt. Dieses Vorgehen eignet sich am besten zum Automatisieren von Abläufen und zum Einspielen von MySQL Datenbank-Backups mit MySQL-Dump.

Schnittstelle Beschreibung Beispiele
Kommandozeilen-Schnittstelle (CLI) Textbasierte Schnittstelle; SQL-Code wird eingegeben und ausgeführt, Ergebnis in Text angezeigt mysql, psql, mysqlsh
Grafische Benutzeroberfläche (GUI) SQL-Code wird in Textfenster eingegeben und/oder als Reaktion auf Nutzerinteraktion erzeugt; SQL-Code wird ausgeführt, Ergebnis in Form von Tabellen dargestellt phpMyAdmin, MySQL Workbench, HeidiSQL
Programmierschnittstelle (API) Erlaubt direkte Kommunikation mit einem RDBMS; SQL-Code wird als String in Code der jeweiligen Programmiersprache eingebunden und ausgeführt; Resultate stehen als Datenstrukturen zur weiteren Verwendung zur Verfügung PHP Data Objects (PDO), Connector/J (Java), Connector/Python, C API

Syntax-Konstrukte in SQL

Die wichtigsten Syntax-Konstrukte in SQL sind SQL-Anweisungen mit ggf. darin enthaltenen Klauseln. Obwohl technisch nicht ganz korrekt, werden beide im Allgemeinen als „SQL-Befehle“ bezeichnet. Daneben existieren weitere Syntax-Konstrukte, die wir der Übersicht halber darstellen:

Begriff Englische Entsprechung Erklärung Beispiel
Anweisung Statement Weist das DBMS an, eine Aktion auszuführen; endet mit einem Semikolon CREATE TABLE People;
Klausel Clause Modifiziert eine Anweisung; können nur innerhalb von Anweisungen auftreten WHERE, HAVING
Ausdruck Expression Liefert beim Evaluieren einen Wert zurück 6 * 7
Identifikator Identifier Name eines Datenbank-Objekts, einer Variablen oder Prozedur; können qualifiziert oder unqualifiziert sein dbname.tablename / tablename
Prädikat Predicate Ausdruck, der zu TRUE, FALSE oder UNKNOWN evaluiert Age < 42
Abfrage Query Spezielle Anweisung; liefert Ergebnismenge von Datensätzen zurück SELECT Name FROM People WHERE Age < 42;
Funktion Function Verarbeitet einen oder mehrere Werte; erzeugt in der Regel einen neuen Wert UPPER('text') -- Gibt 'TEXT' zurück
Kommentar Comment Dient zum Kommentieren von SQL-Code; wird vom RDBMS ignoriert -- Kommentar bis zum Ende der Zeile / /* Ggf. mehrzeiliger Kommentar */
Hinweis

SQL-Befehle wie SELECT und CREATE TABLE werden meist großgeschrieben. In der Tat unterscheidet SQL jedoch nicht zwischen Groß- und Kleinschreibung. Es handelt sich lediglich um eine weit verbreitete Konvention.

Mit SQL exemplarisch eine Produktverwaltung aufbauen

Man lernt eine Programmiersprache am einfachsten, indem man selbst Code schreibt und ausführt. Wir werden im Folgenden eine Mini-Datenbank erstellen und Abfragen dagegen ausführen. Dazu nutzen wir den Online SQL interpreter der Website sql.js. Rufen Sie die verlinkte Site auf und ersetzen Sie den bereits eingetragenen SQL-Code mit dem Code aus unseren Beispielen. Führen Sie den Code Stück für Stück aus, um die Ergebnisse angezeigt zu bekommen.

Grundlegendes Vorgehen beim Aufbau einer SQL-Datenbank

Wir werden exemplarisch eine kommerzielle Produktverwaltung aufbauen, wie sie für einen physischen Laden oder einen Onlineshop zum Einsatz kommt. Dazu stecken wir grob die Anforderungen ab:

  • Es gibt eine Reihe von Produkten, von denen wir jeweils eine bestimmte Anzahl auf Lager haben.
  • Unser Kundenstamm umfasst mehrere Kunden und Kundinnen.
  • Ein Kunde oder eine Kundin gibt eine Bestellung auf, die mehrere Produkte enthalten kann.
  • Wir speichern für jede Bestellung das Bestelldatum und die bestellende Person; ferner, welche Produkte in welcher Anzahl bestellt wurden.

Diese Anforderungen übersetzen wir zunächst in eine abstrakte Beschreibung und im Anschluss in SQL-Code. Wir folgen dem nachstehenden Muster:

  1. Modell erstellen
  2. Schema definieren
  3. Datensätze einpflegen
  4. Abfragen definieren

Modell der Entitäten und Beziehungen erstellen

Der erste Schritt findet auf Papier statt bzw. nutzt spezielle Modellierungs-Tools. Wir sammeln Informationen über das zu modellierende System und abstrahieren daraus Entitäten und Relationen. Dieser Schritt wird oft als Entity Relationship (ER) Diagram verwirklicht.

Welche Entitäten gibt es und wie sind diese verknüpft? Entitäten sind Klassen von Dingen. In unserem Beispiel der Produktverwaltung finden sich die Entitäten Produkt, Kunde bzw. Kundin und Bestellung. Für jede Entität wird eine Tabelle benötigt. Auf Grund der Besonderheiten des relationalen Modells kommen weitere Tabellen hinzu, um die Relationen zu modellieren. Dies zu erkennen und gut umzusetzen, benötigt Erfahrung.

Eine zentrale Frage ist, wie die Entitäten miteinander verknüpft sind. Dabei betrachtet man beide Richtungen einer Relation und unterscheidet Singular und Plural. Am Beispiel der Beziehung Besitzer–Auto:

  1. „Einem Besitzer gehören potenziell mehrere Autos“
  2. „Ein Auto gehört genau einem Besitzer“

Es ergeben sich drei mögliche Beziehungsmuster zwischen zwei Entitäten:

Beziehung Entitäten Von links Von rechts
1:1-Beziehung Auto:Kennzeichen „Ein Auto hat genau ein Kennzeichen“ „Ein Kennzeichen gehört zu genau einem Auto“
1:n-Beziehung Besitzer:Auto „Einem Besitzer gehören potenziell mehrere Autos“ „Ein Auto gehört genau einem Besitzer“
m:n-Beziehung Auto:Straße „Ein Auto fährt auf mehreren Straßen“ „Auf einer Straße fahren mehrere Autos“

Produkte implementieren

Wir implementieren zunächst die Produkte-Tabelle. Dafür definieren wir ein Schema, pflegen Datensätze ein und führen testhalber ein paar simple Abfragen aus. Wir gehen im Detail auf die einzelnen Schritte ein.

Schema definieren

Der zentrale SQL-Befehl zum Definieren von Datenbanktabellen ist CREATE TABLE. Der Befehl erzeugt eine benannte Tabelle und legt Spalten-Eigenschaften fest. Im selben Zug werden Datentypen und ggf. Einschränkungen der zu speichernden Werte definiert:

DROP TABLE IF EXISTS Products;
CREATE TABLE Products ( product_id int, product_name text, stocked int, price int );
Hinweis

Wir nutzen vor der Tabellen-Definition eine DROP TABLE IF EXISTS-Anweisung. Diese entfernt eine ggf. existierende Tabelle und ermöglicht, denselben SQL-Code mehrmals auszuführen, ohne dass es zu Fehlermeldungen kommt.

Datensätze einpflegen

Wir legen ein paar Test-Datensätze an. Dabei nutzen wir den SQL-Befehl INSERT INTO sowie die VALUES-Funktion, um die Felder zu befüllen:

INSERT INTO Products VALUES (10, 'ABC Product', 74, 1050);
INSERT INTO Products VALUES (20, 'KLM Product', 23, 750);
INSERT INTO Products VALUES (30, 'XYZ Product', 104, 350);

Abfragen definieren

Zum Überprüfen des Zustands der Produkte-Tabelle schreiben wir eine simple Abfrage. Wir nutzen den SELECT FROM-Befehl und geben die komplette Tabelle aus:

SELECT * FROM Products;

Des Weiteren schreiben wir eine etwas komplexere Abfrage, die den Gesamtwert der gelagerten Produkte errechnet:

SELECT product_name AS 'Name', (stocked * price) AS 'Value' FROM Products;

Die weiteren Tabellen implementieren

Im weiteren Verlauf legen wir die restlichen benötigten Tabellen an. Dabei gehen wir analog zur Produkte-Tabelle vor. Zunächst legen wir die Kunden-Tabelle an:

DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers ( customer_id int, customer_name text, contact text );

Wir pflegen Datensätze für zwei Beispiel-Kunden bzw. -Kundinnen ein:

INSERT INTO Customers VALUES (100, 'EDC Customer', 'ED@example.com');
INSERT INTO Customers VALUES (200, 'WVU Customer', 'WV@example.com');

Zum Überprüfen geben wir die Kunden-Tabelle aus:

SELECT * FROM Customers;

Als nächsten Schritt legen wir die Bestellungen-Tabelle an:

DROP TABLE IF EXISTS Orders;
CREATE TABLE Orders ( order_id int, customer_id int, order_date text );

Wir pflegen drei Beispiel-Bestellungen ein. Beachten Sie, dass wir als ersten Wert der Datensätze eine ID als Primärschlüssel vergeben. Demgegenüber handelt es sich beim zweiten Wert um bereits existierende Kunden-IDs als Fremdschlüssel. Ferner speichern wir das Datum der Bestellung:

INSERT INTO Orders VALUES (1000, 100, '2022-05-03');
INSERT INTO Orders VALUES (1001, 100, '2022-05-04');
INSERT INTO Orders VALUES (1002, 200, '2022-05-08');

Zum Testen geben wir die Bestellungen aus:

SELECT * FROM Orders;

Zu guter Letzt benötigen wir eine Tabelle für die in einer Bestellung enthaltenen Produkte samt Anzahl. Es handelt sich um eine m:n-Beziehung, denn eine Bestellung kann mehrere Produkte enthalten und ein Produkt kann in mehreren Bestellungen auftauchen. Wir definieren eine Tabelle, die die IDs von Bestellungen und Produkten als Fremdschlüssel enthält:

DROP TABLE IF EXISTS OrderItems;
CREATE TABLE OrderItems ( orderitem_id int, order_id int, product_id int, count int );

Wir pflegen ein paar bestellte Produkte ein. Dabei wählen wir die IDs der Bestellungen und Produkte so, dass sich eine Bestellung mit zwei Produkten sowie eine weitere Bestellung mit nur einem Produkt ergibt:

INSERT INTO OrderItems VALUES (10001, 1000, 10, 3);
INSERT INTO OrderItems VALUES (10002, 1000, 20, 2);
INSERT INTO OrderItems VALUES (10003, 1002, 30, 12);

Zum Überprüfen geben wir die bestellten Produkte aus:

SELECT * FROM OrderItems;

Komplexe Abfragen schreiben

Wenn Sie alle bisher gezeigten Code-Schnipsel ausgeführt haben, sollten Sie die Struktur unserer Test-Datenbank nachvollziehen können. Gehen wir nun über zu komplexeren Abfragen, an denen die Mächtigkeit von SQL deutlich wird. Schreiben wir zunächst eine Abfrage, die über mehrere Tabellen verteilte Daten zusammenführt. Wir nutzen einen SQL JOIN-Befehl, um die Daten der Kunden- und Bestellungen-Tabelle miteinander zu verknüpfen. Dabei benennen wir einige der Spalten und legen Übereinstimmung der Kunden-ID als JOIN-Bedingung fest. Beachten Sie, dass wir qualifizierte Identifikatoren verwenden, um zwischen den Spalten der beiden Tabellen zu unterscheiden:

SELECT customers.customer_name as 'Customer', customers.customer_id, orders.order_id, orders.order_date AS 'Date' FROM Customers JOIN Orders ON Orders.customer_id = Customers.customer_id ORDER BY Customers.customer_id;

Zu guter Letzt nutzen wir einen weiteren JOIN-Befehl, um die Gesamtkosten der bestellten Produkte zu berechnen:

SELECT OrderItems.order_id, OrderItems.orderitem_id AS 'Order Item', Products.product_name AS 'Product', Products.price AS 'Unit Price', OrderItems.count AS 'Count', (OrderItems.count * Products.price) AS 'Total' FROM OrderItems JOIN Products ON OrderItems.product_id = Products.product_id;

Was sind die Vor- und Nachteile von SQL?

Vorteile von SQL

Der größte Vorteil von SQL liegt in der hohen Bekanntheit und weiten Verbreitung der Technologie. Bezogen auf Datenbank-Lösungen stellt die Sprache einen Industriestandard dar. So ist es relativ einfach, erfahrene SQL-Programmierende zu finden. Ferner ist es bei korrekt vergebenen Rechten möglich, Analysten bzw. Analystinnen Zugriff auf das System zu gewähren, ohne dass diese Gefahr laufen, Fehler zu verursachen.

Mit der relationalen Algebra fußt die Sprache auf einer robusten mathematischen Grundlage. Dies erlaubt eine optimale Speicherung von Daten, erfordert jedoch ein fundiertes Verständnis der Technologie sowie Geschick bei der Modellierung. Bei gut designtem Schema ist es im Nachhinein möglich, über entsprechende Abfragen neue Erkenntnisse aus den Daten zu gewinnen.

Nachteil von SQL: Hohe Komplexität der Sprache

Ein großer Nachteil von SQL ist die hohe Komplexität der Sprache. Während eine Programmiersprache wie Python mit weniger als 40 Befehlen auskommt, umfasst SQL Hunderte von Befehlen und Klauseln. Erschwerend kommt hinzu, dass viele davon implementationsspezifisch sind.

Der Aufbau einer SQL-Datenbank erfordert eine Reihe von Annahmen über die zu speichernden Daten. Diese Annahmen werden im Datenbankschema festgelegt und sichern im Idealfall die Qualität der Daten. Jedoch: Bei schlecht designtem Schema muss man mit dauerhaften Problemen rechnen. Änderungen des Schemas im laufenden Betrieb stellen u. U. eine ernsthafte Herausforderung dar.

Bei SQL-Datenbanken mit vielen Zugriffen oder sehr großen Datenmengen ist die Optimierung der Performanz alles andere als trivial. Eine geografische Verteilung gilt als ausgesprochen herausfordernd und erfordert erfahrene Spezialisten und ausgefeilte Ansätze wie Partitionierung und Sharding.

Nachteil von SQL: Impedance Mismatch

In der Programmierung ist die objektorientierte Methodologie (OOP) weit verbreitet. Allen OOP-Sprachen ist gemein, dass Daten als Objekte gekapselt vorliegen. Typischerweise umfasst ein OOP-Programm Systeme miteinander verbundener Objekte. Neben den Daten umfassen die Objekte ein „Verhalten“ in Form ihrer Methoden, die durch Klassenhierarchen vererbt werden.

Demgegenüber ist der relationale Ansatz grundlegend unterschiedlich: Daten werden über mehrere Tabellen verteilt. Es ist nicht möglich, das Verhalten der Objekte zu modellieren. Stattdessen kommen Abfragen und Einschränkungen der Feldwerte zum Einsatz. Die Eigenarten von OOP lassen sich nicht 1:1 auf relationale Datenbankstrukturen übertragen. In Anlehnung an ein Phänomen der Elektrotechnik spricht man vom „Impedance Mismatch“.

Um die Kluft zwischen OOP und SQL-basierten RDBMS zu überbrücken, kommen sogenannte objektrelationale Abbildungen (object-relational mapping, ORM) zum Einsatz. Beim ORM handelt es sich um eine Übersetzungsschicht, die Objekte bei Bedarf instanziiert und mit Daten aus der Datenbank versieht bzw. Daten aus Objekten in die Datenbank schreibt.

Was sind mögliche Alternativen zu SQL?

Relationale Datenbank-Management-Systeme (RDBMS) und damit SQL sind seit Jahrzehnten die vorherrschende Datenbank-Technologie. Heutzutage existieren vielfältige Alternativen mit unterschiedlich stark ausgeprägter Überschneidung zu SQL-RDBMS. Schauen wir uns drei verbreitete Alternativen an:

PostgreSQL

Bei PostgreSQL handelt es sich um ein mächtiges objektrelationales Datenbank-Management-System (ORDBMS). Neben SQL als Abfragesprache werden Kernkonzepte der objektorientierten Programmierung direkt unterstützt. So lassen sich Objekthierarchien, Vererbung und Objektverhalten ohne Einsatz einer objektrelationalen Abbildung (object-relational mapping, ORM) nutzen. Insbesondere Nutzer-definierte und zusammengesetzte Datentypen verringern die Komplexität der Schemata und Abfragen.

SQLite

Mit SQLite steht eine eingebettete SQL-Datenbank unter einer Open-Source-Lizenz zur Verfügung. Die abgespeckte SQL-Datenbank wird als Bibliothek eingebunden und läuft direkt im Browser sowie auf Mobilgeräten. SQLite besticht durch die geringe Komplexität des Systems; der gesamte Datenbestand liegt als einzelne Binärdatei vor.

NoSQL

Der Begriff NoSQL bezeichnet eine Familie von nichtrelationalen DBMS. Anstatt Daten primär als Felder in Tabellen zu modellieren, kommen verschiedene Ansätze zum Einsatz. Für gewöhnlich sind NoSQL-Lösungen weniger komplex und bringen Vorteile in Bezug auf Skalierung und Performance-Optimierung. Ferner ist es in der Regel einfacher, im laufenden Betrieb das Schema zu ändern bzw. Daten flexibel zu speichern. Dafür ergeben sich u. U. weniger starke Garantien in Bezug auf die Qualität der Daten.

Zu den verbreiteten NoSQL-Lösungen zählen u. a.: