Definition eines einfachen CTE mit der WITH-Klausel
In diesem Schritt lernen Sie, wie Sie einen einfachen Common Table Expression (CTE) mit der WITH
-Klausel in MySQL definieren. CTEs sind temporäre, benannte Ergebnismengen, auf die Sie innerhalb einer einzelnen SELECT
-, INSERT
-, UPDATE
- oder DELETE
-Anweisung verweisen können. Sie sind nützlich, um komplexe Abfragen in kleinere, besser verwaltbare Teile aufzuteilen und so die Lesbarkeit und Wartbarkeit zu verbessern.
Grundlagen zu CTEs
Ein CTE ist im Wesentlichen eine benannte Unterabfrage, die nur während der Ausführung der Abfrage existiert. Es wird mit der WITH
-Klausel definiert, gefolgt vom CTE-Namen, der Spaltenliste (optional) und dem Schlüsselwort AS
, gefolgt von der in Klammern eingeschlossenen Unterabfrage.
Erstellen einer Beispiel-Tabelle
Zunächst erstellen wir eine einfache Tabelle namens employees
, mit der wir arbeiten können. Führen Sie die folgenden SQL-Anweisungen in Ihrer MySQL-Umgebung aus. Sie können auf den MySQL-Befehlszeilenclient zugreifen, indem Sie einfach mysql
in Ihrem Terminal eingeben.
mysql
Erstellen Sie dann die Tabelle:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO employees (employee_id, first_name, last_name, department, salary) VALUES
(1, 'John', 'Doe', 'Sales', 60000.00),
(2, 'Jane', 'Smith', 'Marketing', 75000.00),
(3, 'Robert', 'Jones', 'Sales', 55000.00),
(4, 'Emily', 'Brown', 'IT', 90000.00),
(5, 'Michael', 'Davis', 'Marketing', 70000.00);
Verlassen Sie nun den MySQL-Client:
exit
Definition eines einfachen CTE
Nun definieren wir einen einfachen CTE, um Mitarbeiter aus der Abteilung 'Sales' auszuwählen.
WITH SalesEmployees AS (
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department = 'Sales'
)
SELECT employee_id, first_name, last_name, salary
FROM SalesEmployees;
Erklärung:
WITH SalesEmployees AS (...)
: Dies definiert einen CTE namens SalesEmployees
.
SELECT employee_id, first_name, last_name, salary FROM employees WHERE department = 'Sales'
: Dies ist die Unterabfrage, die die Mitarbeiterinformationen aus der employees
-Tabelle auswählt, wenn die Abteilung 'Sales' ist.
SELECT employee_id, first_name, last_name, salary FROM SalesEmployees
: Dies ist die Hauptabfrage, die alle Spalten aus dem SalesEmployees
-CTE auswählt.
Ausführen der Abfrage
Um die Abfrage auszuführen, können Sie sie in einer Datei namens sales_employees.sql
in Ihrem ~/project
-Verzeichnis mit nano
speichern:
nano ~/project/sales_employees.sql
Fügen Sie den SQL-Code in die Datei ein, speichern Sie ihn (Ctrl+O) und verlassen Sie die Datei (Ctrl+X).
Führen Sie dann die SQL-Datei mit dem MySQL-Befehlszeilenclient aus:
mysql < ~/project/sales_employees.sql
Erwartete Ausgabe:
Die Ausgabe sollte eine Tabelle sein, die die Mitarbeiter-ID, den Vornamen, den Nachnamen und das Gehalt aller Mitarbeiter aus der Abteilung 'Sales' enthält:
+-------------+------------+-----------+----------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+----------+
| 1 | John | Doe | 60000.00 |
| 3 | Robert | Jones | 55000.00 |
+-------------+------------+-----------+----------+
2 rows in set (0.00 sec)
Dies zeigt, wie Sie einen einfachen CTE definieren und verwenden, um Daten aus einer Tabelle zu filtern. In den folgenden Schritten lernen Sie fortgeschrittene Techniken wie rekursive CTEs und das Verbinden von CTEs mit Tabellen kennen.