SQL WITH | |
SQL >
Linguagem SQL avançada >
WITH
Às vezes, você se depara com uma pergunta complexa que não pode ser facilmente respondida por meio de uma única declaração SQL. Você poderia tentar chegar à resposta em uma única passagem usando várias visualizações embutidas ou várias subconsultas, mas isso provavelmente tornaria seu SQL difícil de entender, e algumas variedades de SQL, como o Hive SQL, não permitem mais de uma subconsulta. Uma segunda abordagem é decompor a complexidade em várias etapas diferentes. Uma maneira de fazer isso é criar várias tabelas, sendo que cada tabela armazena os resultados de cada etapa. Isso é frequentemente uma boa estratégia, pois torna a depuração mais fácil e o acompanhamento de como o código é executado se torna mais simples. No entanto, o efeito colateral indesejado é que você precisa se lembrar de excluir essas tabelas após concluir sua análise; caso contrário, essas tabelas permanecerão no banco de dados, criando assim problemas de gerenciamento de banco de dados. A alternativa à criação de várias tabelas é usar a cláusula WITH no SQL. SintaxeA sintaxe básica para a cláusula WITH é a seguinte: WITH <nome_da_consulta_1> AS (
SELECT Declaração 1 ) Declaração SELECT Principal O uso da cláusula WITH é muito semelhante à criação de tabelas. Quando você cria uma tabela, dá a ela um nome. Da mesma forma, ao usar a cláusula WITH, você também dá a ela um nome, e esse nome age essencialmente como um nome de tabela na declaração SQL principal. Porque o WITH não cria uma tabela ou uma visualização, o objeto associado à declaração WITH desaparece após a execução da declaração SQL principal e não há nada para limpar. Você também pode ter várias cláusulas WITH. A sintaxe é a seguinte: WITH <nome_da_consulta_1> AS (
SELECT Declaração 1 ), <nome_da_consulta_2> AS ( SELECT Declaração 2 ), .. <nome_da_consulta_n> AS ( SELECT Declaração N ) Declaração SELECT Principal Para ter várias cláusulas WITH, você não precisa especificar WITH várias vezes. Em vez disso, após a conclusão da primeira cláusula WITH, adicione uma vírgula e, em seguida, você pode especificar a próxima cláusula começando com <nome_da_consulta> seguido de COMO. Não há vírgula entre a última cláusula WITH e a consulta SQL principal. ExemplosUsamos a seguinte tabela em nossos exemplos. Tabela Store_Sales
Exemplo 1: Usar o WITH em uma declaração SELECTDigamos que queremos listar todas as lojas que têm mais vendas do que a média. Para fazer isso, podemos usar a seguinte declaração WITH: WITH t1 AS (
SELECT AVG(Sales) AVG_SALES FROM Store_Sales ) SELECT a1.* FROM Store_Sales a1, t1 WHERE a1.Sales > t1.AVG_SALES; Resultado:
A declaração WITH calcula o valor médio das vendas (que é de $6.875), e então a consulta SQL principal simplesmente retorna todas as linhas em que o valor da coluna Vendas é maior do que esse valor médio. Um SQL equivalente usando uma visualização em linha seria: SELECT a1.* FROM Store_Sales a1,
(SELECT AVG(Sales) AVG_SALES FROM Store_Sales) t1 WHERE a1.Sales > t1.AVG_SALES; Da mesma forma, isso pode ser alcançado através do seguinte SQL usando uma subconsulta: SELECT a1.* FROM Store_Sales a1
WHERE a1.Sales > (SELECT AVG(Sales) AVG_SALES FROM Store_Sales); Observe que a versão com subconsulta não funciona no Hive SQL devido à forma como o Hive SQL suporta subconsultas. Exemplo 2: Usar o WITH em uma instrução CREATE TABLETambém podemos usar o WITH juntamente com uma instrução CREATE TABLE. Digamos que desejamos criar uma tabela usando a cláusula WITH no exemplo anterior, digitamos: CREATE TABLE Above_Average_Sales
AS WITH t1 AS ( SELECT AVG(Sales) AVG_SALES FROM Store_Sales ) SELECT a1.* FROM Store_Sales a1, t1 WHERE a1.Sales > t1.AVG_SALES; A parte WITH da consulta vem após o CREATE TABLE AS. Não coloque a cláusula WITH no início. A consulta abaixo resultará em um erro: WITH t1 AS (
SELECT AVG(Sales) AVG_SALES FROM Store_Sales ) CREATE TABLE Above_Average_Sales AS SELECT a1.* FROM Store_Sales a1, t1 WHERE a1.Sales > t1.AVG_SALES;
Copyright © 2024 1keydata.com Todos os direitos reservados. |