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!