Modifizieren#

Überblick#

Modifikatoren in SQL++ sind ein mächtiges Werkzeug, das es ermöglicht, komplexe Abfragen und Datenextraktionen durchzuführen. Sie ermöglichen eine präzise Kontrolle darüber, welche Daten von einer Abfrage zurückgegeben werden und wie sie sortiert werden.

Kontrollieren#

ROLLUP#

Die ROLLUP-Abfrage wird verwendet, um Daten über mehrere Hierarchieebenen hinweg zu aggregieren. Es werden zusätzliche Zeilen zurückgegeben, die die Summen für jede Gruppe darstellen. Diese Abfrage gibt eine Liste aller Kurse mit der Anzahl der Studierenden und der Gesamtnote für jeden Kurs zurück:

SELECT
  c.title,
  COUNT(DISTINCT s.id) AS student_count,
  SUM(s.grade) AS total_grade
FROM hs.nosql.courses AS c
JOIN hs.nosql.offers AS o ON c.id = o.course
JOIN hs.nosql.students AS s ON o.student = s.id
GROUP BY ROLLUP(c.title);

Mit ROLLUP werden Daten über mehrere Hierarchieebenen hinweg gruppiert. In diesem Fall werden die Daten nach Kursniveau gruppiert. Für jede Hierarchiestufe werden die Anzahl der Studierenden und die Gesamtnote berechnet. Ein Beispiel für ein Abfrageergebnis:

[
   {
     "title": "Einführung in SQL",
     "student_count": 100,
     "total_grade": 80
   },
   {
     "title": "Erweitertes SQL",
     "student_count": 50,
     "total_grade": 75
   }
]

ORDER BY#

Die ORDER BY-Abfrage wird zum Sortieren der Ergebnisse einer Abfrage verwendet. Das Feld oder die Felder sind anzugeben, nach denen die Abfrageergebnisse sortiert werden sollen.

Die folgende Abfrage gibt beispielsweise eine Liste aller Kurse zurück, sortiert nach Titel in aufsteigender Reihenfolge:

SELECT c.title
FROM hs.nosql.courses AS c
ORDER BY c.title;

Filter#

HAVING#

Die HAVING-Abfrage wird verwendet, um Abfrageergebnisse nach der Gruppierung zu filtern. Sie ermöglicht es, eine Bedingung anzugeben, die für jede Gruppe wahr sein muss, damit sie in die Abfrageergebnisse einbezogen wird.

Die folgende Abfrage gibt beispielsweise eine Liste aller Kurse mit mehr als 50 Studierenden zurück, sortiert nach Anzahl der Studierenden in absteigender Reihenfolge:

SELECT
  c.title,
  COUNT(DISTINCT s.id) AS student_count
FROM hs.nosql.courses AS c
JOIN hs.nosql.offers AS o ON c.id = o.course
JOIN hs.nosql.students AS s ON o.student = s.id
GROUP BY c.title
HAVING COUNT(DISTINCT s.id) > 50
ORDER BY student_count DESC;

GROUP BY#

Die GROUP BY-Abfrage wird zum Gruppieren der Ergebnisse einer Abfrage verwendet. Sie ermöglicht es, Abfrageergebnisse nach einem oder mehreren Feldern zu kombinieren.

Die folgende Abfrage gibt beispielsweise eine Liste aller Kurse mit der Anzahl der Studierenden zurück:

SELECT
  c.title,
  COUNT(DISTINCT s.id) AS student_count
FROM hs.nosql.courses AS c
JOIN hs.nosql.offers AS o ON c.id = o.course
JOIN hs.nosql.students AS s ON o.student = s.id
GROUP BY c.title;

LIMIT#

Die LIMIT-Abfrage wird verwendet, um die Anzahl der Abfrageergebnisse zu begrenzen. Hier ist es möglich, die maximale Anzahl der Zeilen anzugeben, die zurückgegeben werden sollen.

Die folgende Abfrage gibt beispielsweise die ersten 10 Kurse aus der hs.nosql.courses-Collection zurück:

SELECT c.title
FROM hs.nosql.courses AS c
LIMIT 10;

OFFSET#

Die OFFSET-Abfrage wird verwendet, um die Ergebnisse einer Abfrage zu versetzen. Die Anzahl der Zeilen ist anzugeben, die übersprungen werden müssen, bevor Ergebnisse zurückgegeben werden.

Die folgende Abfrage gibt beispielsweise die Kurse 11 bis 20 aus der hs.nosql.courses-Collection zurück:

SELECT c.title
FROM hs.nosql.courses AS c
OFFSET 10;

Modifizieren#

LET#

Die LET-Abfrage deklariert eine Variable, deren Wert einmal zu Beginn der Anfrage ausgewertet und dann in anderen Teilen der Anfrage verwendet wird. Eine Variable kann in Ausdrücken, Bedingungen und an anderen Stellen in einer Abfrage verwendet werden. Die folgende Abfrage gibt beispielsweise eine Liste aller Kurse zurück, in denen die Anzahl der Studierenden die durchschnittliche Anzahl der Studierenden pro Kurs in der hs.nosql.courses-Collection übersteigt:

LET avg_students = AVG(c.students)
FROM hs.nosql.courses AS c;

SELECT c.title
FROM hs.nosql.courses AS c
WHERE COUNT(c.students) > avg_students;

Unterabfrage#

Eine Unterabfrage ist eine Abfrage, die innerhalb einer anderen Abfrage verwendet wird. Unterabfragen können zum Ausführen einer Vielzahl von Aufgaben verwendet werden, z. B. zum Filtern von Ergebnissen, zum Aggregieren von Daten und zum Zusammenführen von Daten aus mehreren Collections.

Die folgende Abfrage gibt beispielsweise eine Liste aller Studierenden zurück, die einen Kurs mit dem Titel Einführung in SQL belegen:

SELECT
  s.name
FROM hs.nosql.students AS s
WHERE s.id IN (
  SELECT o.student
  FROM hs.nosql.offers AS o
  WHERE o.course = META(hs.nosql.courses).id AND c.title = "Introduction to SQL"
);

Diese Abfrage verwendet eine Unterabfrage, um eine Liste der Studenten-IDs abzurufen, die an einem Kurs mit dem Titel Einführung in SQL teilnehmen. Diese Liste wird dann verwendet, um die Ergebnisse der Hauptabfrage zu filtern.