Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gängiger Tabellenausdruck in MySQL

Common Table Expressions (CTE) ermöglichen das einfache Schreiben komplexer SQL-Abfragen in MySQL. In diesem Artikel sehen wir uns an, was Common Table Expression in MySQL ist und wie CTEs in MySQL geschrieben werden.


Was ist ein allgemeiner Tabellenausdruck

Common Table Expression ist eine benannte Ergebnismenge, deren Geltungsbereich auf die SQL-Abfrage beschränkt ist, in der sie definiert und verwendet wird. Sie ähnelt einer abgeleiteten Tabelle, wird jedoch nicht als Objekt gespeichert und kann im Gegensatz zu abgeleiteten Tabellen auf sich selbst verweisen. Daher bietet CTE eine bessere Leistung als abgeleitete Tabellen in MySQL.

Bonus-Lesetext:So berechnen Sie die Margin in MySQL


Gängiger Tabellenausdruck in MySQL

Hier ist die Syntax des allgemeinen Tabellenausdrucks in MySQL.

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

In der obigen Abfrage müssen Sie den Namen des CTE angeben, die SQL-Abfrage, auf deren Ergebnis mit dem CTE-Namen verwiesen werden soll. Bitte beachten Sie die Anzahl der Spalten in column_list sollten mit denen in Ihrer Abfrage identisch sein .

Sehen wir uns ein Beispiel für einen gemeinsamen Tabellenausdruck (CTE) an.

Bonuslektüre:So erhalten Sie das meistverkaufte Produkt mithilfe von SQL-Abfragen

Angenommen, Sie haben Verkäufe (ID, Bestelldatum, Betrag) Tabelle.

mysql> create table sales(id int, order_date date, amount int);

mysql> insert into sales(id, order_date, amount)
      values(1, '2021-01-01', 200),
      (2, '2021-01-02', 250),
      (3, '2021-01-03', 220),
      (4, '2021-01-04', 230),
      (5, '2021-01-05', 210),
      (6, '2021-01-06', 100),
      (7, '2021-01-07', 120),
      (8, '2021-01-08', 150),
      (9, '2021-01-09', 180),
      (10, '2021-01-10', 200);

 mysql> select * from sales;
 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-01 |    200 |
 |    2 | 2021-01-02 |    250 |
 |    3 | 2021-01-03 |    220 |
 |    4 | 2021-01-04 |    230 |
 |    5 | 2021-01-05 |    210 |
 |    6 | 2021-01-06 |    100 |
 |    7 | 2021-01-07 |    120 |
 |    8 | 2021-01-08 |    150 |
 |    9 | 2021-01-09 |    180 |
 |   10 | 2021-01-10 |    200 |
 +------+------------+--------+

Hier ist ein CTE, um nur Verkaufsdatensätze mit einem Betrag>200 auszuwählen.

with test_cte as (
     select id,order_date,amount from sales
     where amount>200
 ) select * from test_cte; 

 +------+------------+--------+
 | id   | order_date | amount |
 +------+------------+--------+
 |    1 | 2021-01-01 |    200 |
 |    2 | 2021-01-02 |    250 |
 |    3 | 2021-01-03 |    220 |
 |    4 | 2021-01-04 |    230 |
 |    5 | 2021-01-05 |    210 |
 |   10 | 2021-01-10 |    200 |
 +------+------------+--------+

Im obigen CTE spezifizieren wir die SELECT-Abfrage, um Zeilen mit einer Menge>200 innerhalb der WITH-Klausel zu filtern.

Bonuslektüre:Verwendung der CASE-Anweisung in MySQL

Bitte beachten Sie, dass Sie CTE mit SELECT-, UPDATE-, INSERT- und DELETE-Anweisungen verwenden können. Hier sind die Syntaxen dafür.

WITH … SELECT …
WITH … UPDATE …
WITH … DELETE …

Außerdem können Sie einen CTE als Unterabfrage verwenden, wie unten gezeigt

SELECT … WHERE id IN (WITH … SELECT …);
SELECT * FROM (WITH … SELECT …) AS temporary_table;

Wenn Sie das Ergebnis einer SELECT-Anweisung als Eingabe für CREATE/INSERT/REPLACE-Anweisungen verwenden, können Sie darin auch die WITH-Klausel verwenden. Hier sind einige Beispiele,

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

Bonus lesen:Erhalten Sie mehrere Zählungen mit unterschiedlichen Bedingungen in MySQL


Allgemeiner Tabellenausdruck in Ubiq

Das Ubiq-Berichtstool unterstützt CTE-basierte SELECT-Abfragen und erleichtert die Visualisierung von SQL-Ergebnissen auf unterschiedliche Weise. Außerdem können Sie Dashboards und Diagramme aus MySQL-Abfrageergebnissen erstellen. Hier ist die obige CTE-Abfrage in Ubiq.

Nachdem Sie die Abfrage ausgeführt haben, können Sie einfach auf einen Visualisierungstyp klicken, um das Ergebnis in einem Diagramm darzustellen.

Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!