Volver a la lista de artículos Artículos
Lectura de 6 minutos

¿Qué es una consulta SQL en línea?

¿Ha oído alguna vez el término "consulta en línea"? ¿En qué se diferencian de las subconsultas y las tablas derivadas? ¿Has buscado esto en numerosos lugares y todavía no sabes la respuesta? Emprendamos un viaje para descubrirlo juntos.

La primera vez que oí el término "consulta en línea", me sorprendió un poco. No parece uno de los matices de SQL y creía conocer todos los conceptos básicos. Desgraciadamente, buscar el término en Google no fue de mucha ayuda: sólo había unos pocos resultados y todas las respuestas eran vagas. Me llevó bastante tiempo investigar bien y aprender sobre las consultas en línea en SQL. Por eso he decidido escribir este artículo y reunir todo lo que he aprendido en un solo lugar.

Subconsulta vs. Vistas en línea

¿Has oído hablar de una subconsulta? Es una consulta dentro de otra consulta - al menos en la terminología que me enseñaron. Luego, está la frase vista en línea. Una vista en línea es una consulta en la cláusula FROM de otra consulta. Según aprendí, esto la convierte en lo mismo que una subconsulta. Sin embargo, en Oracle, las vistas inline se colocan sólo en la cláusula FROM, mientras que las sub consultas están en las cláusulas SELECT o WHERE. (Ver subconsulta en las preguntas frecuentes de Oracle y vista en línea en las preguntas frecuentes de Oracle). En otras palabras, Oracle los trata como dos conceptos distintos.

Por lo tanto, si has aprendido sobre subconsultas fuera de Oracle, podrás entender las vistas en línea. Sin embargo, debes recordar que los usuarios de Oracle pueden malinterpretarte si utilizas los términos subconsultas y vistas en línea indistintamente.

No vamos a dedicar más tiempo a las subconsultas ahora. Si no estás familiarizado con ellas, te recomiendo que leas el Subconsultas SQL artículo en el blog LearnSQL.es para obtener una visión general del tema.

¿Qué es una consulta en línea?

Una consulta en línea es una consulta en la cláusula FROM. Los datos se seleccionan de la misma manera que en una tabla.

Veamos un ejemplo de una consulta en línea. Trabajaremos con algunos datos de películas de un sitio donde la gente califica las películas que ha visto:

movie - Contiene información sobre las películas:

  • id - Un ID único para cada película.
  • title - El título de la película.
  • year - Cuándo se estrenó la película.
  • director_id - El ID del director de la película.

rating - Almacena las valoraciones de los usuarios sobre las películas:

  • id - Un identificador único para cada calificación.
  • rating - Un número del 1 (que significa "es tan mala que mostrar esta película debería ser ilegal") al 10 (que significa "podría ver esta película el resto de mi vida, 24/7").
  • movie_id - El ID de la película calificada.
  • user_id - el ID del usuario que ha calificado la película.

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

La consulta mostrará la calificación media más alta de la película. Echa un vistazo:

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

En la cláusula FROM, hemos utilizado la vista en línea (llamada avg_movie_ratings y mostrada en negrita) para calcular la calificación media de cada película. Luego, a partir de los promedios, seleccionamos el valor más alto. La vista en línea que hemos utilizado funciona como una tabla temporal.

Vistas en línea fuera de Oracle

Como he mencionado antes, la vista en línea es más bien un término de Oracle. También me he topado con él al leer sobre MySQL; sin embargo, algunas personas se refieren a él como vista en línea y otras como subconsulta. En otros motores de bases de datos, las vistas en línea tienen nombres diferentes. Por ejemplo, en MS SQL Server, una subconsulta en una cláusula FROM se llama tabla derivada.

Probablemente te hayas dado cuenta de que estoy utilizando el término subconsulta aquí. Esto se debe a que subconsulta (o a veces subselección) es el nombre utilizado en PostgreSQL - el motor de base de datos que más utilizo. Este nombre también es utilizado por la mayoría de los usuarios de MySQL.

No importa cómo llames a las vistas en línea, recuerda: es sólo el nombre de un concepto. Realmente no importa cómo lo nombras. Lo importante es saber cómo utilizar correctamente el concepto en sus consultas.

Vistas en línea vs. Subconsultas

Volvamos a la terminología de Oracle por un momento. ¿Cuál es la diferencia entre las vistas en línea y las subselectas (Ver subconsulta en las preguntas frecuentes de Oracle) si en algunos motores tienen el mismo nombre?

Aunque parezcan similares, funcionan de forma diferente. Nos centraremos en las dos mayores diferencias.

La primera diferencia es que las vistas en línea pueden contener múltiples columnas, mientras que las subconsultas (en el sentido de Oracle) deben devolver sólo una. La razón es sencilla: una vista en línea funciona como una tabla y las tablas pueden contener más de una columna. Las subconsultas, en cambio, suelen funcionar como un único valor.

La segunda es la correlación. En las vistas no en línea, puede utilizar un valor para la consulta externa (principal). De esta manera, su subconsulta puede devolver un valor diferente para diferentes filas. Este concepto es muy poderoso y puede ahorrarte tiempo cuando escribes consultas complicadas. Lea más sobre este tema en Correlated Subquery in SQL: A Beginner's Guide en el blogLearnSQL.es .

Si crees que necesitas más información sobre el tema y los diferentes tipos de subselectos (incluyendo las vistas en línea), consulta el artículo ¿Cuáles son los diferentes tipos de subconsultas SQL?.

¿Cuánto importan los nombres? ¡No mucho!

Como ya he mencionado, no importa si llamas al concepto vista en línea, tabla derivada, subconsulta o subselección. Todo se reduce a tu conocimiento y uso de esta poderosa técnica SQL. Por supuesto, cuando te comuniques con otras personas, debes hacer todo lo posible para evitar una mala comunicación. Por eso vale la pena conocer los diferentes nombres que recibe este concepto. Sin embargo, si tu equipo está de acuerdo, la vista en línea podría llamarse desde la parte thingamajig - ¡siempre y cuando todo el mundo sepa de qué está hablando!

Si nunca has oído hablar del concepto, tal vez quieras consultar el SQL para principiantes curso en LearnSQL.es. Si ya has aprendido sobre el tema pero no te sientes muy seguro de tus habilidades, puedes resolver algunos ejercicios del curso Ejercicios prácticos de SQL. Sólo esperamos que no te importe que llamemos al concepto subconsulta.