Le Common Table Expressions (CTE) ti consentono di scrivere facilmente query SQL complesse in MySQL. In questo articolo, esamineremo cos'è Common Table Expression in MySQL e come scrivere CTE in MySQL.
Che cos'è l'espressione tabella comune
Common Table Expression è un set di risultati denominato il cui ambito è limitato alla query SQL in cui è definito e utilizzato. È simile a una tabella derivata ma non è archiviata come oggetto e può essere autoreferenziale, a differenza delle tabelle derivate. Di conseguenza, CTE offre prestazioni migliori rispetto alle tabelle derivate in MySQL.
Bonus Leggi:Come calcolare il margine in MySQL
Espressione di tabella comune in MySQL
Ecco la sintassi dell'espressione di tabella comune in MySQL.
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
Nella query precedente, è necessario specificare il nome di CTE, la query SQL il cui risultato deve essere referenziato utilizzando il nome CTE. Tieni presente il numero di colonne in column_list dovrebbero essere gli stessi della tua query .
Diamo un'occhiata a un esempio di Common Table Expression (CTE).
Bonus Leggi:Come ottenere il prodotto più venduto utilizzando SQL Query
Supponiamo che tu abbia vendite(id, data_ordine, importo) tabella.
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 | +------+------------+--------+
Ecco un CTE per selezionare solo i record di vendita che hanno un importo>200.
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 | +------+------------+--------+
Nella CTE sopra, specifichiamo la query SELECT per filtrare le righe con importo>200 all'interno della clausola WITH.
Bonus Lettura:come utilizzare l'istruzione CASE in MySQL
Tieni presente che puoi utilizzare CTE con le istruzioni SELECT, UPDATE, INSERT e DELETE. Ecco le sintassi per lo stesso.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Inoltre, puoi utilizzare un CTE come sottoquery, come mostrato di seguito
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Se si utilizza il risultato di un'istruzione SELECT come input per le istruzioni CREATE/INSERT/REPLACE, è possibile utilizzare anche la clausola WITH in essa. Ecco alcuni esempi,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Lettura bonus:ottieni più conteggi con condizioni diverse in MySQL
Espressione di tabelle comuni in Ubiq
Lo strumento Ubiq Reporting supporta le query SELECT basate su CTE e semplifica la visualizzazione dei risultati SQL in diversi modi. Consente inoltre di creare dashboard e grafici dai risultati delle query MySQL. Ecco la query CTE sopra in Ubiq.

Infatti, dopo aver eseguito la query, puoi semplicemente fare clic su un tipo di visualizzazione per tracciare il risultato in un grafico.

Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!