foto perfil

Consultas complejas de SQL: funcionalidad y ejemplos

Publicado el 14 noviembre, 2020

Consultas complejas de SQL

Considere la enorme cantidad de datos que estarían presentes en una base de datos de música como Spotify. A veces, desea buscar más que un solo artista o álbum, o tal vez desee reunir diferentes subconjuntos de datos. Primero echemos un vistazo a cómo podría funcionar esto si fuera un administrador de base de datos que trabaja con un método de unión interno.

Unir internamente

Digamos que tienes una base de datos de música. Los álbumes, artistas, géneros, reseñas, etc. se almacenan en tablas separadas. Si desea obtener todos los registros de dos tablas relacionadas, puede usar una combinación interna simple . Esto selecciona datos donde los valores coinciden en ambas tablas. Mira estas tablas. El primero son algunos datos de muestra y el segundo es la tabla de álbumes:

Data de muestra

artistID nombre del artista
1 Viaje
2 Pastel de carne
3 Enya
4 Kate Wolf
5 Aerosmith

Tabla de álbumes

albumID artistID Título del álbum
1 1 Criado en la radio
2 1 Grandes Exitos
3 2 Murcielago del infierno
4 2 Timbre muerto
5 3 Los celtas
6 4 Corazón de poeta

Este código es cómo aparecería la unión interna:

SELECCIONAR * 
DE tblAlbum
INNER JOIN tblArtist ON
tblAlbum.artistID = tblArtist.artistID;

Ahora, con esta nueva tabla podemos ver que el resultado son 6 filas porque solo nos importan aquellos registros donde coinciden los ID.

albumIID tblAlbum.artistID Título del álbum tblArtist.artistID nombre del artista
1 1 Criado en la radio 1 Viaje
2 2 Grandes Exitos 1 Viaje
3 2 Murcielago del infierno 2 Pastel de carne
4 2 Timbre muerto 2 Pastel de carne
5 3 Los celtas 3 Enya
6 4 Corazón de poeta 4 Kate Wolf

Ahora, aquí hay un gráfico que representa una combinación interna. Parece bastante simple, ¿verdad?

Gráfico de unión interna de SQL

Unión externa

Ahora, echemos un vistazo más de cerca al uso del método de unión externa. Una combinación externa izquierda devuelve TODOS los registros coincidentes en la tabla de la izquierda, más los registros que coinciden en el medio (la combinación interna).

La declaración SQL es la siguiente:

SELECCIONAR * DE tblArtist 
LEFT OUTER JOIN tblAlbum ON
tblArtist.artistID = tblAlbum.artistID;

Esto genera las siete filas porque ahora obtenemos el registro de Aerosmith. Esta banda aún no tiene ningún álbum ingresado, ya que hay muchos para agregar. Sin embargo, al ejecutar la combinación externa izquierda, podemos ver su entrada.

tblArtist.artistID nombre del artista albumID tblAlbum.artistID Título del álbum
1 Viaje 1 1 Criado en la radio
1 Viaje 2 1 Grandes Exitos
2 Pastel de carne 3 2 Murcielago del infierno
2 Pastel de carne 4 2 Timbre muerto
3 Enya 5 3 Los celtas
4 Kate Wolf 6 4 Corazón de poeta
5 Aerosmith

Y ahora, aquí hay un gráfico que representa la combinación externa izquierda:

Gráfico de unión externa izquierda SQL

Unión externa derecha

Ahora, echemos un vistazo al método de unión externa correcto. Digamos que tenías un álbum llamado Desconocido, y aún no estaba vinculado a un artista. Para recuperar este elemento de datos, puede utilizar la combinación externa derecha . Esto es como el exterior izquierdo, excepto que recupera los registros coincidentes más los de la tabla de la derecha.

Aquí está la declaración SQL:

SELECCIONAR * 
DE tblArtist DERECHA EXTERIOR ÚNETE a tblAlbum ON tblArtist.artistID = tblAlbum.artistID;

Aquí hay un gráfico que muestra una combinación externa derecha:

Gráfico de unión externa derecha SQL

Unión externa completa (filas que no se unen)

Ahora echemos un vistazo a una combinación externa completa, en la que tenemos filas que no se unen. Considere que hemos insertado algunos álbumes nuevos y algunos artistas nuevos en la base de datos, pero no los hemos unido. Puedes ver esto en el código:

SELECCIONAR * DE tblArtist 
COMPLETO EXTERIOR JOIN tblAlbum ON
tblArtist.artistID = tblAlbum.artistID
DONDE
tblArtist.artistID = NULL o tblAlbum.artistID = NULL;

Esto resultaría en algo como esta tabla:

albumID artistID Título del álbum nombre del artista
8 Desconocido
9 Lo menos peor de
10 Alto brillo fuerte y claro
5 Aerosmith
6 La banda de Star Wars
7 Latón canadiense

Observe que usamos una combinación externa completa . Una combinación externa completa devuelve resultados de ambas tablas. Es una combinación de todo. Hemos mostrado cómo usarlo para encontrar solo filas que no coinciden.

En una base de datos relacional, esto puede ser útil para encontrar registros que no estén completamente establecidos (por ejemplo, no ingresamos los álbumes de Canadian Brass).

Unión

Ahora, echemos un vistazo más de cerca a un sindicato. Una unión es similar a una unión externa completa, excepto que una unión devuelve todos los registros en filas nuevas; mientras que el exterior completo muestra los datos en columnas. En este sentido, una unión crea una mesa mucho más larga / más grande; la combinación externa completa es un conjunto de datos más amplio.

Procedimientos almacenados

Ahora, echemos un vistazo a los procedimientos almacenados. Como administrador de la base de datos, es posible que desee permitir que los usuarios ejecuten sus propios miniprogramas para recuperar datos. No desea exponerles toda la base de datos, pero quizás les permita ingresar el nombre de una banda y buscar álbumes.

La mayoría de las bases de datos SQL permiten procedimientos almacenados , que son pequeños programas que ejecutan sentencias SQL. Permiten a los usuarios ingresar parámetros u otra información. Así es como puede controlar qué información se expone a los usuarios. Puedes ver esto en el código:

Crear procedimiento uspGetArtist 
 @artistTable varchar (100)
 @artistID int
AS
  DECLARE @SQL varchar (1000)
  SELECT @SQL = 'SELECT artistID, artistName FROM'
  SELECT @SQL = @SQL + @artistTable
  SELECT @SQL = @SQL + 'WHERE'
  SELECCIONAR @SQL = @SQL + 'artistID =' + @artistID
Exec (@SQL)
GO

Para ejecutar el procedimiento, este comando se usaría detrás de escena:

EXEC dbo.uspGetArtist @artistID = 155

Los procedimientos almacenados son muy útiles en los sistemas de bases de datos. Ahorran tiempo y recursos al realizar tareas repetitivas rápidamente. Como se indicó anteriormente, también reducen lo que expone a los usuarios finales y la cantidad de datos a los que les permite acceder.

Resumen de la lección

Dediquemos unos minutos a recapitular las cosas importantes que aprendimos en esta lección sobre consultas complejas de SQL. SQL proporciona algunas opciones avanzadas para recuperar datos. Una forma típica de recuperar datos de varias tablas es la combinación interna , donde los registros se seleccionan solo si una condición determinada es verdadera. Sin embargo, es posible que desee recuperar registros coincidentes y de otro tipo de las tablas. Una combinación externa izquierda recupera tanto los elementos de datos coincidentes como todos los demás elementos de la tabla de la izquierda. Si desea ir al otro lado y recuperar registros coincidentes más los de la tabla de la derecha, una combinación externa derecha es apropiada. Si desea encontrar datos donde los elementos no están unidos, puede usar una variación de la combinación externa completapara buscar datos que no están unidos, mientras que una unión devuelve todos los registros en filas nuevas. Un procedimiento almacenado es un pequeño programa o procedimiento que se ejecuta en la base de datos para ejecutar comandos SQL.

Articulos relacionados