logo

MySQL Common Table Expression (CTE)

In MySQL erzeugt jede Anweisung oder Abfrage ein temporäres Ergebnis oder eine temporäre Beziehung. Dazu wird ein allgemeiner Tabellenausdruck oder CTE verwendet Benennen Sie diese temporäre Ergebnismenge die im Ausführungsbereich dieser bestimmten Anweisung vorhanden sind, wie z. B. CREATE, EINFÜGEN , WÄHLEN , AKTUALISIEREN , LÖSCHEN , usw.

Durchquerung des Binärbaum-Versandhandels

Einige der wichtigsten Punkte im Zusammenhang mit CTE sind:

  • Es wird mithilfe von definiert MIT Klausel.
  • Mit der WITH-Klausel können wir in einer einzigen Abfrage mehr als einen CTE angeben.
  • Ein CTE kann auf andere CTEs verweisen, die Teil derselben WITH-Klausel sind, diese CTEs sollten jedoch zuvor definiert werden.
  • Der Ausführungsbereich von CTE liegt innerhalb der jeweiligen Anweisung, in der es verwendet wird.

MySQL CTE-Syntax

Die Syntax von MySQL CTE umfasst den Namen, eine optionale Spaltenliste und eine Anweisung/Abfrage, die den Common Table Expression (CTE) definiert. Nachdem wir den CTE definiert haben, können wir ihn als Ansicht in einer SELECT-, INSERT-, UPDATE- und DELETE-Abfrage verwenden.

Das Folgende ist die grundlegende Syntax von CTE in MySQL :

 WITH cte_name (column_names) AS (query) SELECT * FROM cte_name; 

Dadurch soll sichergestellt werden, dass die Anzahl der Spalten in den CTE-Argumenten mit der Anzahl der Spalten in der Abfrage übereinstimmen muss. Wenn wir die Spalten in den CTE-Argumenten nicht definiert haben, werden die Abfragespalten verwendet, die den CTE definieren.

Ähnlich wie die abgeleitete Tabelle kann sie nicht als Objekt gespeichert werden und geht verloren, sobald die Ausführung einer Abfrage abgeschlossen ist. Ein CTE sorgt für eine bessere Lesbarkeit und erhöht zudem die Leistung im Vergleich zur abgeleiteten Tabelle.

Im Gegensatz zu einer abgeleiteten Tabelle ist ein CTE ein Unterabfrage das kann sein Selbstreferenzierung unter Verwendung seines eigenen Namens. Es ist auch bekannt als rekursiver CTE und kann auch mehrfach in derselben Abfrage referenziert werden.

Einige der wesentlichen Punkte im Zusammenhang mit dem rekursiven CTE sind:

  • Es wird mithilfe der WITH RECURSIVE-Klausel definiert.
  • Ein rekursiver CTE muss eine Abschlussbedingung enthalten.
  • Wir werden den rekursiven CTE zur Seriengenerierung und Durchquerung hierarchischer oder baumstrukturierter Daten verwenden.

Rekursive CTE-Syntax von MySQL

Das Folgende ist die grundlegende Syntax des rekursiven CTE in MySQL:

 WITH RECURSIVE cte_name (column_names) AS ( subquery ) SELECT * FROM cte_name; 

Hier ist die Unterabfrage eine MySQL-Abfrage, die auf sich selbst verweist, indem sie cte_name als eigenen Namen verwendet.

MySQL CTE-Beispiele

Lassen Sie uns anhand verschiedener Beispiele verstehen, wie CTE in MySQL funktioniert. Hier verwenden wir eine Tabelle 'Mitarbeiter' für eine Demonstration. Angenommen, diese Tabelle enthält die folgenden Daten:

25 von 100
MySQL Common Table Expression (CTE)

Führen Sie die folgende Anweisung aus, um das Konzept von CTE zu verstehen. In diesem Beispiel lautet der CTE-Name Mitarbeiter_in_Kalifornien , gibt die Unterabfrage, die den CTE definiert, die drei Spalten emp_name, emp_age und city zurück. Daher gibt der CTE-Mitarbeiter_in_Kalifornien alle Mitarbeiter zurück, die sich in der befinden Kalifornische Stadt .

Nachdem wir den CTE „employee_in_california“ definiert haben, haben wir ihn in der referenziert WÄHLEN Erklärung zur Auswahl nur der Mitarbeiter, die in Kalifornien ansässig sind.

 WITH employees_in_california AS ( SELECT * FROM employees WHERE city = 'California' ) SELECT emp_name, emp_age, city FROM employees_in_california WHERE emp_age >= 32 ORDER BY emp_name; 

Nach der Ausführung der obigen Anweisung wird die folgende Ausgabe ausgegeben. Hier sehen wir, dass das Ergebnis nur die Mitarbeiterdaten zurückgibt, die sich in Kalifornien befinden.

MySQL Common Table Expression (CTE)

Das fortgeschrittenere MySQL CTE-Beispiel

Angenommen, wir haben eine Tabelle mit dem Namen Kunde Und Befehl das folgende Daten enthält:

Tabelle: Kunde

Java-Vergleichszeichenfolge
MySQL Common Table Expression (CTE)

Tabelle: Bestellungen

MySQL Common Table Expression (CTE)

Sehen Sie sich die folgende Anweisung an, die ein erweitertes CTE-Beispiel anhand von erläutert INNER JOIN Klausel.

 WITH total_customer_2020 AS ( SELECT cust_id, name, occupation FROM customer INNER JOIN orders USING (cust_id) ORDER BY age ) SELECT * FROM orders JOIN total_customer_2020 USING (cust_id); 

Nach der Ausführung erhalten wir die folgende Ausgabe:

MySQL Common Table Expression (CTE)

Beispiel für einen rekursiven MySQL-CTE

Die folgenden Beispiele erläutern die Funktionsweise des rekursiven CTE. Betrachten Sie die folgende Anweisung, die eine Reihe von generiert die ersten fünf ungeraden Zahlen :

 WITH RECURSIVE odd_num_cte (id, n) AS ( SELECT 1, 1 union all SELECT id+1, n+2 from odd_num_cte where id <5 ) select * from odd_num_cte; < pre> <p>After executing the above statement, it will give the output as below:</p> <img src="//techcodeview.com/img/mysql-tutorial/80/mysql-common-table-expression-6.webp" alt="MySQL Common Table Expression (CTE)"> <p>The above statement consists of two parts one is non-recursive, and another is recursive.</p> <p> <strong>Non-recursive: SELECT 1, 1</strong> </p> <p>This part will produce the initial rows with two columns as &apos;id&apos; and &apos;n&apos; and a single row.</p> <p> <strong>Recursive: SELECT id+1, n+2 from odd_num_cte where id <5< strong> </5<></strong></p> <p>This part is responsible for adding rows to the previous output until the terminating condition (id <5) will not be satisfied. when the id reached 5, condition becomes false, and recursion process is terminated.< p> <h3>The WITH clause uses</h3> <p>MySQL provides many contexts to use the WITH clause for creating CTE. Let&apos;s discuss one by one in detail.</p> <p>First, we can use the WITH clause at the beginning of SELECT, UPDATE, and DELETE query as below.</p> <pre> WITH ... SELECT ... WITH ... UPDATE ... WITH ... DELETE ... </pre> <p>Second, we can use the WITH clause at the beginning of a subquery or a derived table subquery as below:</p> <pre> SELECT ... WHERE id IN (WITH ... SELECT ...); SELECT * FROM (WITH ... SELECT ...) AS derived_table; </pre> <p>Third, we can use the WITH clause immediately preceding of SELECT statements that include a SELECT clause as below:</p> <pre> CREATE TABLE ... WITH ... SELECT ... CREATE VIEW ... WITH ... SELECT ... INSERT ... WITH ... SELECT ... REPLACE ... WITH ... SELECT ... DECLARE CURSOR ... WITH ... SELECT ... EXPLAIN ... WITH ... SELECT ... </pre> <h3>Benefits of using CTE</h3> <ul> <li>It provides better readability of the query.</li> <li>It increases the performance of the query.</li> <li>The CTE allows us to use it as an alternative to the VIEW concept</li> <li>It can also be used as chaining of CTE for simplifying the query.</li> <li>It can also be used to implement recursive queries easily.</li> </ul> <hr></5)></p></5>

Zweitens können wir die WITH-Klausel am Anfang einer Unterabfrage oder einer Unterabfrage einer abgeleiteten Tabelle wie folgt verwenden:

 SELECT ... WHERE id IN (WITH ... SELECT ...); SELECT * FROM (WITH ... SELECT ...) AS derived_table; 

Drittens können wir die WITH-Klausel unmittelbar vor SELECT-Anweisungen verwenden, die eine SELECT-Klausel wie folgt enthalten:

 CREATE TABLE ... WITH ... SELECT ... CREATE VIEW ... WITH ... SELECT ... INSERT ... WITH ... SELECT ... REPLACE ... WITH ... SELECT ... DECLARE CURSOR ... WITH ... SELECT ... EXPLAIN ... WITH ... SELECT ... 

Vorteile der Verwendung von CTE

  • Es sorgt für eine bessere Lesbarkeit der Abfrage.
  • Es erhöht die Leistung der Abfrage.
  • Der CTE ermöglicht es uns, ihn als Alternative zum VIEW-Konzept zu verwenden
  • Es kann auch als CTE-Verkettung zur Vereinfachung der Abfrage verwendet werden.
  • Es kann auch zur einfachen Implementierung rekursiver Abfragen verwendet werden.

Array sortieren Java