Erweitertes SQL

Mar 03 2023
Vor nicht allzu langer Zeit habe ich ein SQL-Anfänger-Tutorial erstellt, das Sie hier lesen können. Heute ist es an der Zeit, Sie über fortgeschrittenere Themen wie GROUP BY- und HAVING-Operatoren, MERGE-Anweisungen und gespeicherte Prozeduren zu informieren.

Vor nicht allzu langer Zeit habe ich ein SQL-Anfänger-Tutorial erstellt, das Sie hier lesen können . Heute ist es an der Zeit, Sie über fortgeschrittenere Themen wie GROUP BY- und HAVING-Operatoren, MERGE-Anweisungen und gespeicherte Prozeduren zu informieren.

GRUPPIERE NACH

Die GROUP BY-Klausel in SQL wird verwendet, um Zeilen in einer Ergebnismenge basierend auf einer oder mehreren Spalten zu gruppieren. Es wird normalerweise in Verbindung mit Aggregatfunktionen wie COUNT, SUM, AVG, MIN und MAX verwendet, um Werte für jede Gruppe zu berechnen.

SELECT category, SUM(sales)
FROM orders
GROUP BY category;

Ein anderes Beispiel:

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

Es ist wichtig zu beachten, dass Sie Aggregatfunktionen für alle von Ihnen ausgewählten Spalten verwenden müssen, die nicht von der GROUP BY-Klausel abgedeckt werden, um den Empfang einer Fehlermeldung zu vermeiden. Darüber hinaus ist es wichtig, sich daran zu erinnern, dass die Spalten in der GROUP BY-Klausel diejenigen sind, die die Gruppen definieren; Die Reihenfolge der Spalten in der SELECT-Anweisung hat keinen Einfluss auf die Ergebnismenge.

HABEN

Basierend auf Bedingungen für die Aggregatfunktion können Gruppen von Zeilen in einer Ergebnismenge mithilfe der HAVING-Klausel in SQL gefiltert werden. Sie wird normalerweise mit der GROUP BY-Klausel kombiniert, um Gruppen zu eliminieren, die bestimmte Anforderungen nicht erfüllen.

Betrachten Sie beispielsweise die folgende SQL-Abfrage, die den Gesamtumsatz für jede Produktkategorie in einer Beispieltabelle auswählt orderund nur Kategorien zurückgibt, deren Gesamtumsatz größer als 1000 ist:

SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;

Ein anderes Beispiel:

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;

Ähnlich wie die WHERE-Klausel wird die HAVING-Klausel zum Filtern von Gruppen verwendet, nachdem sie durch die GROUP BY-Klausel erstellt und Aggregatfunktionen angewendet wurden.

VERSCHMELZEN

Die SQL-MERGE-Anweisung wird verwendet, um Daten basierend auf Daten in einer Quelltabelle zu aktualisieren oder in eine Zieltabelle einzufügen oder um Daten aus zwei oder mehr Tabellen in einer einzigen Tabelle zu kombinieren. Es wird häufig als Alternative zu Anweisungen verwendet, die INSERT, UPDATE und DELETE kombinieren.

Syntax:

MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
    UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
    INSERT (column1, column2, ...)
    VALUES (source_table.column1, source_table.column2, ...)

MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
    UPDATE SET products.price = prices.price;

MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
    UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
    INSERT (employee_id, first_name, last_name, department, salary)
    VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);

Einige Datenbankverwaltungssysteme wie MySQL und SQLite unterstützen die MERGE-Anweisung nicht, daher müssen Sie stattdessen die Kombination der INSERT-, UPDATE- und DELETE-Anweisungen verwenden.

Der MERGE-Befehl sollte an einer kleinen Teilmenge von Daten getestet werden, bevor er für die gesamte Tabelle verwendet wird, da er bei großen Tabellen erhebliche Auswirkungen auf die Leistung haben kann.

Gespeicherte Prozeduren

Eine vorkompilierte Gruppe von SQL-Anweisungen, die als gespeicherte Prozedur in einer Datenbank gespeichert werden. Sie werden häufig zur Ausführung einer bestimmten Aufgabe oder einer Reihe von Aktivitäten eingesetzt, beispielsweise zum Abrufen von Informationen aus einer Datenbank oder zum Ausführen kniffliger Mathematikaufgaben. Im Vergleich zur Ausführung zahlreicher separater SQL-Anweisungen sind gespeicherte Prozeduren vielseitiger und effektiver, da sie Eingabeparameter empfangen und Ausgabewerte zurückgeben können.

Hier ist ein Beispiel für eine einfache gespeicherte Prozedur, die alle Zeilen aus einer Tabelle abruft employees:

CREATE PROCEDURE GetAllEmployees
AS
BEGIN
    SELECT * FROM employees;
END

EXEC GetAllEmployees;

Unterstützen Sie unsere Publikation, indem Sie ihr folgen

Beachten Sie auch die folgenden Artikel.

Fragen und Antworten zum Java 8 Stream API-Interview