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!