sql >> Database teknologi >  >> RDS >> Mysql

Fælles tabeludtryk i MySQL

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!

  1. Indlejret PostgreSQL til Java JUnit-tests

  2. Kan Hibernate arbejde med MySQL's ON DUPLICATE KEY UPDATE-syntaks?

  3. Brug af Percona Audit Log Plugin til databasesikkerhed

  4. Hvad er nogle måder at få adgang til Microsoft SQL Server fra Linux?