Common Table Expressions (CTE) låter dig enkelt skriva komplexa SQL-frågor i MySQL. I den här artikeln kommer vi att titta på vad som är vanligt tabelluttryck i MySQL och hur man skriver CTE i MySQL.
Vad är vanligt tabelluttryck
Common Table Expression är en namngiven resultatuppsättning vars omfattning är begränsad till SQL-frågan där den definieras och används. Den liknar en härledd tabell men den lagras inte som ett objekt och kan vara självrefererande, till skillnad från härledda tabeller. Som ett resultat ger CTE bättre prestanda än härledda tabeller i MySQL.
Bonus Läs:Hur man beräknar marginal i MySQL
Vanligt tabelluttryck i MySQL
Här är syntaxen för vanliga tabelluttryck i MySQL.
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
I ovanstående fråga måste du ange CTE:s namn, SQL-frågan vars resultat ska refereras med CTE-namn. Observera antalet kolumner i column_list bör vara samma som de i din fråga .
Låt oss titta på ett exempel på vanligt tabelluttryck (CTE).
Bonusläs:Hur man får bästsäljande produkter med SQL-fråga
Låt oss säga att du har försäljning(id, order_date, summa) bord.
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 | +------+------------+--------+
Här är en CTE för att endast välja försäljningsposter som har belopp> 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 | +------+------------+--------+
I ovanstående CTE anger vi SELECT-frågan för att filtrera rader med mängd>200 inuti WITH-satsen.
Bonus Läs:Hur man använder CASE-satsen i MySQL
Observera att du kan använda CTE med SELECT-, UPDATE-, INSERT- och DELETE-satser. Här är syntaxerna för detsamma.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Du kan också använda en CTE som en underfråga, som visas nedan
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Om du använder resultatet av en SELECT-sats som indata för CREATE/INSERT/REPLACE-satser, kan du också använda WITH-satsen i den. Här är några exempel,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Bonus läsning:Få flera räkningar med olika villkor i MySQL
Vanligt tabelluttryck i Ubiq
Ubiqs rapporteringsverktyg stöder CTE-baserade SELECT-frågor och gör det enkelt att visualisera SQL-resultat på olika sätt. Det låter dig också skapa instrumentpaneler och diagram från MySQL-frågeresultat. Här är ovanstående CTE-fråga i Ubiq.
När du har kört frågan kan du faktiskt helt enkelt klicka på en visualiseringstyp för att plotta resultatet i ett diagram.
Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!