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!