Common Table Expressions (CTE) vám umožní snadno psát složité SQL dotazy v MySQL. V tomto článku se podíváme na to, co je Common Table Expression v MySQL a jak psát CTE v MySQL.
Co je společný tabulkový výraz
Common Table Expression je pojmenovaná sada výsledků, jejíž rozsah je omezen na dotaz SQL, ve kterém je definován a používán. Je podobná odvozené tabulce, ale není uložena jako objekt a na rozdíl od odvozených tabulek může odkazovat sama na sebe. Výsledkem je, že CTE poskytuje lepší výkon než odvozené tabulky v MySQL.
Bonusové čtení:Jak vypočítat marži v MySQL
Běžný tabulkový výraz v MySQL
Zde je syntaxe běžného tabulkového výrazu v MySQL.
WITH cte_name (column_list) AS (
query
)
SELECT * FROM cte_name; Ve výše uvedeném dotazu musíte zadat název CTE, dotaz SQL, jehož výsledek by měl být odkazován pomocí názvu CTE. Všimněte si prosím počtu sloupců v column_list by měly být stejné jako ty ve vašem dotazu .
Podívejme se na příklad běžného tabulkového výrazu (CTE).
Bonusové čtení:Jak získat nejprodávanější produkt pomocí SQL Query
Řekněme, že máte prodej(id, datum_objednávky, částka) tabulka.
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 |
+------+------------+--------+ Zde je CTE pro výběr pouze záznamů prodeje, které mají částku>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 |
+------+------------+--------+ Ve výše uvedeném CTE zadáváme dotaz SELECT pro filtrování řádků s množstvím>200 uvnitř klauzule WITH.
Bonusové čtení:Jak používat příkaz CASE v MySQL
Vezměte prosím na vědomí, že CTE můžete použít s příkazy SELECT, UPDATE, INSERT a DELETE. Zde jsou syntaxe pro totéž.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Také můžete použít CTE jako dílčí dotaz, jak je uvedeno níže
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Pokud použijete výsledek příkazu SELECT jako vstup pro příkazy CREATE/INSERT/REPLACE, můžete v něm také použít klauzuli WITH. Zde je několik příkladů,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Bonusové čtení:Získejte vícenásobné počty s různými podmínkami v MySQL
Běžný tabulkový výraz v Ubiq
Nástroj Ubiq Reporting podporuje SELECT dotazy založené na CTE a usnadňuje vizualizaci výsledků SQL různými způsoby. Umožňuje také vytvářet řídicí panely a grafy z výsledků dotazů MySQL. Zde je výše uvedený dotaz CTE v Ubiq.
Ve skutečnosti po spuštění dotazu můžete jednoduše kliknout na typ vizualizace a výsledek vykreslit do grafu.
Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!