Common Table Expressions (CTE) giver dig mulighed for nemt at skrive komplekse SQL-forespørgsler i MySQL. I denne artikel vil vi se på, hvad der er almindeligt tabeludtryk i MySQL, og hvordan man skriver CTE'er i MySQL.
Hvad er almindeligt tabeludtryk
Fælles tabeludtryk er et navngivet resultatsæt, hvis omfang er begrænset til den SQL-forespørgsel, hvori det er defineret og brugt. Det ligner en afledt tabel, men den gemmes ikke som et objekt og kan være selvrefererende i modsætning til afledte tabeller. Som et resultat giver CTE bedre ydeevne end afledte tabeller i MySQL.
Bonus Læs:Sådan beregnes margin i MySQL
Fælles tabeludtryk i MySQL
Her er syntaksen for almindeligt tabeludtryk i MySQL.
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
I ovenstående forespørgsel skal du angive CTEs navn, SQL-forespørgslen, hvis resultat skal refereres til ved hjælp af CTE-navn. Bemærk venligst antallet af kolonner i column_list skal være de samme som dem i din forespørgsel .
Lad os se på et eksempel på almindeligt tabeludtryk (CTE).
Bonuslæser:Sådan får du bedst sælgende produkter ved hjælp af SQL-forespørgsel
Lad os sige, at du har salg(id, ordredato, beløb) tabel.
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 | +------+------------+--------+
Her er en CTE til kun at vælge salgsposter, der har et beløb>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 ovenstående CTE specificerer vi SELECT-forespørgslen for at filtrere rækker med beløb>200 inde i WITH-klausulen.
Bonus Læs:Sådan bruger du CASE-sætning i MySQL
Bemærk venligst, at du kan bruge CTE med SELECT-, UPDATE-, INSERT- og DELETE-sætninger. Her er syntakserne for det samme.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Du kan også bruge en CTE som en underforespørgsel, som vist nedenfor
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Hvis du bruger resultatet af en SELECT-sætning som input til CREATE/INSERT/REPLACE-sætninger, så kan du også bruge WITH-sætning i den. Her er nogle eksempler,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Bonus læst:Få flere tællinger med forskellige betingelser i MySQL
Fælles tabeludtryk i Ubiq
Ubiq-rapporteringsværktøjet understøtter CTE-baserede SELECT-forespørgsler og gør det nemt at visualisere SQL-resultater på forskellige måder. Det giver dig også mulighed for at oprette dashboards og diagrammer fra MySQL-forespørgselsresultater. Her er ovenstående CTE-forespørgsel i Ubiq.
Faktisk, efter at du har kørt forespørgslen, kan du blot klikke på en visualiseringstype for at plotte resultatet i et diagram.
Har du brug for et rapporteringsværktøj til MySQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!