Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Uso de duas tabelas na cláusula FROM

Olá, mais uma dúvida.

Nessa aula, a seguinte consulta foi criada (copiada da transcrição da aula):

WITH Media_Vendas_Anteriores AS (SELECT AVG(Qtd_Vendas) AS Media_Qtd_Vendas
FROM (
    SELECT COUNT(*) AS Qtd_Vendas, strftime("%Y", v.data_venda) AS Ano
    FROM vendas v
    WHERE strftime("%m", v.data_venda) = "11" AND Ano != "2022"
    GROUP BY Ano
)), Vendas_Atual AS (SELECT Qtd_Vendas AS Qtd_Vendas_Atual
FROM(
    SELECT COUNT(*) AS Qtd_Vendas, strftime("%Y", v.data_venda) AS Ano
    FROM vendas v
    WHERE strftime("%m", v.data_venda) = "11" AND Ano = "2022"
    GROUP BY Ano
    ))
    SELECT
    mva.Media_Qtd_Vendas,
    va.Qtd_Vendas_Atual,
    ROUND((va.Qtd_Vendas_Atual - mva.Media_Qtd_Vendas)/mva.Media_Qtd_Vendas *100.0, 2) || "%" AS Porcentagem
    FROM Vendas_Atual va, Media_Vendas_Anteriores mva

Na cláusula FROM estão sendo passadas as duas "tabelas" criadas com a cláusula WITH.

FROM Vendas_Atual va, Media_Vendas_Anteriores mva

Por favor, gostaria de entender por que isso está funcionando. Em aulas e cursos anteriores foi ensinado que para combinar tabelas deveria ser usado o JOIN, mas nesse caso simplesmente foram passadas as duas "tabelas" para o FROM e aparentemente funcionou.

Obrigado.

3 respostas
solução!

Olá, Matheus! Como vai?

Nesse caso, o FROM está funcionando como um JOIN implícito. O SQLite permite essa sintaxe mais antiga, onde você simplesmente lista as tabelas no FROM e, por padrão, ele assume que você quer um JOIN do tipo INNER JOIN.

SQLite entende que você quer combinar as linhas das duas tabelas, Vendas_Atual e Media_Vendas_Anteriores, com base em uma condição implícita. Essa condição é que as linhas de ambas as tabelas devem ter valores correspondentes para todas as colunas que possuem o mesmo nome.

Imagine que as tabelas Vendas_Atual e Media_Vendas_Anteriores tivessem uma coluna chamada id. O SQLite automaticamente faria um JOIN implícito, combinando as linhas que tivessem o mesmo valor para a coluna id.

Apesar de funcionar, usar o JOIN explícito é recomendado por alguns motivos:

  • A sintaxe do JOIN é mais explícita e deixa claro como as tabelas estão sendo combinadas.
  • JOIN oferece mais opções de combinação, como LEFT JOINRIGHT JOIN e FULL JOIN.
  • A maioria dos outros bancos de dados não permite essa sintaxe implícita, então usar o JOIN garante que sua consulta seja compatível com outros sistemas.

Espero ter ajudado!

Abraço ✨

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Oi Maiully, agradeço sua explicação!

Não lembro de isso do JOIN implícito ter sido abordado em nenhum dos cursos de SQLite, então valeu a pena aprender sobre ele. Obrigado!

Por nada, Matheus! Tô aqui para ajudar! E que bom que você trouxe essa discussão para o Fórum! ✨✨