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!