Heim  >  Artikel  >  Datenbank  >  Was ist die Syntax von with as mysql

Was ist die Syntax von with as mysql

WBOY
WBOYnach vorne
2023-05-29 22:28:311746Durchsuche

  1. MIT als Grammatik

MIT als Grammatik ist hauptsächlich in die folgenden zwei Teile unterteilt :

1) WITH: Schlüsselwort, das zum Einführen einer oder mehrerer temporärer Tabellen verwendet wird.

2) AS: Schlüsselwort, das zum Definieren einer oder mehrerer temporärer Tabellen verwendet wird.

Die allgemeine Syntax der WITH as-Anweisung lautet wie folgt:

WITH [RECURSIVE] cte_name (column_name1,column_name2,...) AS
 (
   subquery1
   UNION [ALL]
   subquery2
   UNION [ALL]
   subquery3
   ...
 )
SELECT *
FROM cte_name;

Daunter

cte_name: der Name der temporären Tabelle; 🎜🎜#

Spaltenname1, Spaltenname2,...: Spaltennamen in der temporären Tabelle;

Unterabfrage1, Unterabfrage2, Unterabfrage3...: Unterabfrageanweisungen.

  1. MIT als praktische Anwendung

Die praktischen Anwendungsszenarien von MIT als Aussage umfassen hauptsächlich die folgenden Aspekte:

1) Rekursive Abfrage

Mithilfe der WITH-Anweisung können Sie eine rekursive Abfrage implementieren und eine hierarchische Ergebnismenge erhalten. Im Folgenden wird zur Veranschaulichung eine Mitarbeitertabelle als Beispiel verwendet:

WITH RECURSIVE emp AS (
   SELECT emp_id, emp_name, emp_manager_id
   FROM employees
   WHERE emp_manager_id IS NULL 
   UNION ALL
   SELECT e2.emp_id, e2.emp_name, e2.emp_manager_id
   FROM employees e2
   INNER JOIN emp ON e2.emp_manager_id = emp.emp_id
)
SELECT * FROM emp;

In der obigen Anweisung besteht der grundlegende Teil der rekursiven Abfrage darin, den Stammknoten in der Tabelle nachzuschlagen (d. h. Mitarbeiter ohne Manager). ). In jeder rekursiven Iteration findet eine Unterabfrage der Tabelle die untergeordneten Knoten jedes Knotens auf einmal und fügt sie der Ergebnismenge hinzu.

2) Organisieren Sie die Ergebnismenge

Mit der WITH-Anweisung können mehrere Abfrageergebnisse kombiniert werden, um Multi-Table-Join-Abfragen durchzuführen. Im Folgenden wird zur Veranschaulichung eine Tabelle mit Produktverkäufen und -beständen als Beispiel verwendet:

WITH sales AS (
   SELECT p.product_id, p.product_name, s.sale_id, s.sale_date, s.quantity, s.price
   FROM products p
   INNER JOIN sales s ON p.product_id = s.product_id
), inventory AS (
   SELECT p.product_id, p.product_name, i.inventory_id, i.quantity
   FROM products p
   INNER JOIN inventory i ON p.product_id = i.product_id
)
SELECT s.sale_id, s.sale_date, s.product_id, s.product_name, s.quantity, s.price, i.inventory_id, i.quantity as inventory_quantity
FROM sales s
INNER JOIN inventory i ON s.product_id = i.product_id;

In der obigen Anweisung definieren wir zunächst zwei temporäre Tabellen, Verkäufe und Lagerbestände, und führen dann eine gemeinsame Abfrage für diese beiden Tabellen durch . Geben Sie die Ergebnismenge aus. Dieser Ergebnissatz enthält Verkaufsinformationen aus der Verkaufstabelle und Lagerbestandsinformationen aus der Lagerbestandstabelle.

3) Unterabfrageoptimierung

WITH as-Anweisung kann auch zur Optimierung von Unterabfragen verwendet werden. Unterabfrageanweisungen sind oft ineffizient und können zu verwirrendem Code und Fehlern führen. Die WITH as-Anweisung kann die Lesbarkeit und Wartbarkeit von Abfragen verbessern. Im Folgenden wird als Beispiel eine Tabelle mit Bestellungen und Bestelldetails verwendet:

WITH ord AS (
   SELECT order_id
   FROM orders
   WHERE order_date > '2022-01-01'
)
SELECT *
FROM order_details
WHERE order_id IN (SELECT order_id FROM ord);

Wir definieren eine temporäre Tabelle mit dem Namen „ord“, um Bestellinformationen zu speichern, die die Bedingungen erfüllen. Verwenden Sie dann in der nachfolgenden Abfrage direkt die Anweisung WHERE order_id IN (SELECT order_id FROM ord), um die Bestelldetails abzufragen. Dies verbessert nicht nur die Abfrageeffizienz, sondern auch die Lesbarkeit und Wartbarkeit des Codes.

Das obige ist der detaillierte Inhalt vonWas ist die Syntax von with as mysql. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen