Voltar para a lista de artigos Artigos
6 minutos de leitura

O que é uma Consulta SQL Inline?

Você já ouviu o termo "consulta inline"? Como elas são diferentes de subconsultas e tabelas derivadas? Você já procurou isto em vários lugares e ainda não sabe a resposta? Vamos embarcar em uma viagem e descobrir juntos!

A primeira vez que ouvi o termo "consulta inline", fiquei um pouco surpreso. Não soa como uma das nuances do SQL e eu pensei que conhecia todos os conceitos básicos. Infelizmente, o googling do termo não foi muito útil - houve apenas alguns poucos resultados e todas as respostas foram vagas. Demorei algum tempo para fazer a pesquisa adequada e aprender sobre consultas em SQL. É por isso que decidi escrever este artigo e reunir tudo o que aprendi em um só lugar.

Subquery vs. Visualizações em linha

Você já ouviu falar de uma subquisição? É uma pergunta dentro de uma consulta - pelo menos na terminologia que me foi ensinada. A seguir, há a frase inline view. Uma visão inline é uma consulta na cláusula FROM de outra consulta. Como aprendi, isto faz com que seja o mesmo que uma subconsulta. No Oracle, porém, as consultas inline são colocadas somente na cláusula FROM, enquanto as subconsultas estão nas cláusulas SELECT ou WHERE. (Veja subconsulta nas FAQs do Oracle e visão inline nas FAQs do Oracle.) Em outras palavras, a Oracle trata estes dois conceitos como dois conceitos separados.

Assim, se você aprendeu sobre subconsultas fora da Oracle, você será capaz de entender as visões inline. Entretanto, você deve se lembrar que os usuários Oracle podem interpretá-lo mal se você usar os termos subconsultas e visões inline de forma intercambiável.

Não vamos gastar mais tempo com subconsultas agora. Se você não estiver familiarizado com elas, recomendo que leia o Subconsultas SQL artigo no blog LearnSQL.com.br para uma visão geral básica do tópico.

Então, o que é uma Consulta em Linha?

Uma consulta inline é uma consulta na cláusula FROM. Você seleciona os dados a partir dela como faria com uma tabela.

Vamos dar uma olhada em um exemplo de uma consulta inline. Vamos trabalhar com alguns dados de filmes de um site onde as pessoas classificam os filmes que assistiram:

movie - Contém informações sobre filmes:

  • id - Uma identificação única para cada filme.
  • title - O título do filme.
  • year - Quando o filme foi lançado.
  • director_id - O ID do diretor desse filme.

rating - Armazena classificações de usuários para filmes:

  • id - Uma identificação única para cada classificação.
  • rating - Um número de 1 (que significa "é tão ruim que mostrar este filme deveria ser ilegal") a 10 (que significa "eu poderia assistir a este filme pelo resto da minha vida, 24/7").
  • movie_id - o ID do filme classificado.
  • user_id - o ID do usuário que classificou o filme.

movie

idtitleyeardirector_id
1The Lord of the Rings: The Return of the King200314
2Mad Max: Fury Road201569
3Avengers: Endgame201971

rating

idratingmovie_iduser_id
171332
261469
3101767
4101111
58184
622417
772441
8102118
95274
1022630
1110399
1243189
1373887
1483521
1543144

A consulta mostrará a maior média de classificação do filme. Dê uma olhada:

SELECT
  MAX(avg_rating) AS max_avg_rating
FROM (
  SELECT
    AVG(rating) AS avg_rating
  FROM rating
  GROUP BY movie_id
) AS avg_movie_ratings;
max_avg_rating
8.2

Na cláusula FROM, usamos a visualização inline (chamada avg_movie_ratings e mostrada em negrito) para calcular a classificação média de cada filme. Então, a partir das médias, selecionamos o maior valor. A visualização inline que usamos funciona como uma tabela temporária.

Exibições em linha fora do Oracle

Como já mencionei antes, a visão em linha é um termo bastante Oracle. Eu também tropecei nele enquanto lia sobre o MySQL; entretanto, algumas pessoas se referiram a ele como uma visão em linha e outras como uma subconsciência. Em outros motores de banco de dados, as visões inline têm nomes diferentes. Por exemplo, no MS SQL Server, uma subconsulta em uma cláusula FROM é chamada de tabela derivada.

Você provavelmente já notou que estou usando o termo subconsulta aqui. Isto porque subquery (ou às vezes subquery) é o nome usado no PostgreSQL - o motor de banco de dados que mais uso. Este nome também é usado pela maioria dos usuários do MySQL.

Não importa o que você esteja chamando de inline views, lembre-se - é apenas o nome de um conceito. Não importa realmente como você o está chamando. O importante é saber como utilizar corretamente o conceito em suas consultas.

Vistas em linha vs. Subconsultas

Voltemos à terminologia da Oracle por um momento. Qual é a diferença entre visões em linha e subconsultas (Ver subconsultas em Oracle FAQs) se em alguns motores eles têm o mesmo nome?

Mesmo que pareçam semelhantes, eles funcionam de maneira diferente. Vamos nos concentrar nas duas maiores diferenças.

A primeira diferença é que as visões inline podem conter várias colunas, enquanto as subconsultas (no significado de Oracle) devem retornar apenas uma. A razão é simples - uma vista inline funciona como uma tabela e as tabelas podem conter mais de uma coluna. As subconsultas, por outro lado, geralmente funcionam como um único valor.

A segunda é a correlação. Em visualizações não em linha, pode-se usar um valor para a consulta externa (principal). Dessa forma, sua subconsulta pode retornar um valor diferente para linhas diferentes. Este conceito é muito poderoso e pode poupar seu tempo quando você escreve consultas complicadas. Leia mais sobre isso em Subconsulta Correlata em SQL: Um Guia para Iniciantes no blog LearnSQL.com.br .

Se você acha que precisa de mais informações sobre o tópico e os diferentes tipos de subgrupos (incluindo visualizações em linha), confira o artigo Quais são os diferentes tipos de subconsultas em SQL?.

O quanto os nomes são importantes? Não muito!

Como já mencionei, não importa se você chama o conceito de visão em linha, tabela derivada, subconsulta, ou subconsulta. Tudo se resume ao seu conhecimento e ao uso desta poderosa técnica SQL. É claro que, ao se comunicar com os outros, você deve fazer o melhor possível para evitar mal-entendidos. É por isso que vale a pena conhecer todos os diferentes nomes sob os quais este conceito se enquadra. Entretanto, se sua equipe concordar, a visão inline pode ser chamada de in-part thingamajig - desde que todos saibam do que você está falando!

Se você nunca ouviu falar do conceito, talvez queira verificar o SQL para Iniciantes curso em LearnSQL.com.br. Se você já aprendeu sobre isso, mas não se sente muito confiante em suas habilidades, você pode querer resolver alguns exercícios do Curso de Práticas em SQL. Só esperamos que você não se importe que chamemos o conceito de subquisição.