sql >> Database >  >> RDS >> Mysql

Gemeenschappelijke tabelexpressie in MySQL

Met Common Table Expressions (CTE) kunt u eenvoudig complexe SQL-query's in MySQL schrijven. In dit artikel zullen we kijken naar wat Common Table Expression is in MySQL en hoe je CTE's schrijft in MySQL.


Wat is een algemene tabeluitdrukking

Common Table Expression is een benoemde resultaatset waarvan het bereik beperkt is tot de SQL-query waarin deze is gedefinieerd en gebruikt. Het is vergelijkbaar met een afgeleide tabel, maar het wordt niet opgeslagen als een object en kan naar zichzelf verwijzen, in tegenstelling tot afgeleide tabellen. Als resultaat levert CTE betere prestaties dan afgeleide tabellen in MySQL.

Bonus lezen:marge berekenen in MySQL


Gemeenschappelijke tabelexpressie in MySQL

Hier is de syntaxis van algemene tabeluitdrukkingen in MySQL.

WITH cte_name (column_list) AS (     
      query 
)  
SELECT * FROM cte_name;

In de bovenstaande query moet u de naam van CTE specificeren, de SQL-query waarvan het resultaat moet worden verwezen met CTE-naam. Let op, het aantal kolommen in column_list moeten hetzelfde zijn als die in uw query .

Laten we eens kijken naar een voorbeeld van Common Table Expression (CTE).

Bonus lezen:hoe u het best verkopende product kunt krijgen met behulp van SQL Query

Stel dat u verkoop(id, order_date, bedrag) heeft tafel.

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 |
 +------+------------+--------+

Hier is een CTE om alleen verkooprecords te selecteren met een bedrag>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 |
 +------+------------+--------+

In de bovenstaande CTE specificeren we de SELECT-query om rijen te filteren met bedrag>200 binnen de WITH-clausule.

Bonus lezen:CASE-instructie gebruiken in MySQL

Houd er rekening mee dat u CTE kunt gebruiken met SELECT-, UPDATE-, INSERT- en DELETE-instructies. Hier zijn de syntaxis voor hetzelfde.

WITH … SELECT …
WITH … UPDATE …
WITH … DELETE …

U kunt ook een CTE als subquery gebruiken, zoals hieronder weergegeven

SELECT … WHERE id IN (WITH … SELECT …);
SELECT * FROM (WITH … SELECT …) AS temporary_table;

Als u het resultaat van een SELECT-statement gebruikt als invoer voor CREATE/INSERT/REPLACE-statements, dan kunt u ook de WITH-component daarin gebruiken. Hier zijn enkele voorbeelden,

CREATE TABLE … WITH … SELECT …
CREATE VIEW … WITH … SELECT …
INSERT … WITH … SELECT …
REPLACE … WITH … SELECT …
DECLARE CURSOR … WITH … SELECT …
EXPLAIN … WITH … SELECT …

Bonus gelezen:krijg meerdere tellingen met verschillende voorwaarden in MySQL


Gemeenschappelijke tabeluitdrukking in Ubiq

De rapportagetool van Ubiq ondersteunt op CTE gebaseerde SELECT-query's en maakt het eenvoudig om SQL-resultaten op verschillende manieren te visualiseren. Hiermee kunt u ook dashboards en grafieken maken van MySQL-queryresultaten. Hier is de bovenstaande CTE-query in Ubiq.

Nadat u de query heeft uitgevoerd, kunt u zelfs eenvoudig op een visualisatietype klikken om het resultaat in een grafiek uit te zetten.

Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!

  1. Optimalisatiedrempels - Gegevens groeperen en aggregeren, deel 5

  2. Is er een functie in oracle die lijkt op group_concat in mysql?

  3. Hoe mysqlnd voor php inschakelen?

  4. Hoe kleine letters naar hoofdletters te converteren in SQL Server - UPPER()