Common Table Expressions (CTE) permitem que você escreva facilmente consultas SQL complexas no MySQL. Neste artigo, veremos o que é Common Table Expression no MySQL e como escrever CTEs no MySQL.
O que é expressão de tabela comum
Expressão de Tabela Comum é um conjunto de resultados nomeado cujo escopo é limitado à consulta SQL na qual é definido e usado. É semelhante a uma tabela derivada, mas não é armazenada como um objeto e pode ser auto-referenciada, ao contrário das tabelas derivadas. Como resultado, o CTE oferece melhor desempenho do que tabelas derivadas no MySQL.
Bônus de leitura:Como calcular a margem no MySQL
Expressão de tabela comum no MySQL
Aqui está a sintaxe da expressão de tabela comum no MySQL.
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
Na consulta acima, você precisa especificar o nome do CTE, a consulta SQL cujo resultado deve ser referenciado usando o nome do CTE. Observe que o número de colunas em column_list devem ser iguais aos da sua consulta .
Vejamos um exemplo de expressão de tabela comum (CTE).
Bônus de leitura:Como obter o produto mais vendido usando SQL Query
Digamos que você tenha vendas(id, order_date, amount) tabela.
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 | +------+------------+--------+
Aqui está um CTE para selecionar apenas registros de vendas que tenham valor>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 | +------+------------+--------+
No CTE acima, especificamos a consulta SELECT para filtrar linhas com valor>200 dentro da cláusula WITH.
Bônus de leitura:Como usar a instrução CASE no MySQL
Observe que você pode usar CTE com instruções SELECT, UPDATE, INSERT e DELETE. Aqui estão as sintaxes para o mesmo.
WITH … SELECT … WITH … UPDATE … WITH … DELETE …
Além disso, você pode usar um CTE como uma subconsulta, conforme mostrado abaixo
SELECT … WHERE id IN (WITH … SELECT …); SELECT * FROM (WITH … SELECT …) AS temporary_table;
Se você usar o resultado de uma instrução SELECT como entrada para instruções CREATE/INSERT/REPLACE, também poderá usar a cláusula WITH nela. Aqui estão alguns exemplos,
CREATE TABLE … WITH … SELECT … CREATE VIEW … WITH … SELECT … INSERT … WITH … SELECT … REPLACE … WITH … SELECT … DECLARE CURSOR … WITH … SELECT … EXPLAIN … WITH … SELECT …
Leitura de bônus:Obtenha várias contagens com diferentes condições no MySQL
Expressão de tabela comum no Ubiq
A ferramenta de relatórios Ubiq é compatível com consultas SELECT baseadas em CTE e facilita a visualização de resultados SQL de diferentes maneiras. Ele também permite que você crie painéis e gráficos a partir dos resultados da consulta do MySQL. Aqui está a consulta CTE acima no Ubiq.
Na verdade, depois de executar a consulta, você pode simplesmente clicar em um tipo de visualização para plotar o resultado em um gráfico.
Precisa de uma ferramenta de relatório para MySQL? O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!