Cuando se encuentran subconsultas en una consulta, la base de datos primero realiza la subconsulta y la guarda en memoria, y despues ejecuta la consulta, de manera que si existes varias subconsultas en una consulta en una base de datos muy grande, el rendimiento se verá mermado, pero también nos facilita encontrar información sin ejecutar una segunda consulta, se que se lee un poco revoltoso, pero consideremos el siguiente ejercicio:
Ejercicio 1
Ejecutar una consulta
que nos muestre los partidos del torneo de “Clausura
2016” utilizando subconsultas
select * from partidos
where idtorneo in
(select idtorneo
from torneos
where nombre = 'Clausura 2016');
La línea nueva, que no habíamos visto ni explicado es la clausula IN, junto con la subconsulta
in
(select idtorneo
from torneos
where nombre = 'Clausura 2016');
La clausula IN funciona de manera similar a la clausula OR, lo que nos indica es que nos mostrará los partidos que cuyo idtorneo sea... luego viene la subconsula que nos indica que nos seleccione el idtorneo de la tabla TORNEOS cuyo nombre sea 'Clausura 2016', como les comenté en un principio, la base de datos primero realiza las subconsultas, las guarda en memoria y después ejecuta las consultas, así que el idtorneo del Clausura 2016 es el 11, ese 11, lo guardará en memoria y ejecutara el query completo, que traducido quedaría:
select * from partidos
where idtorneo in
(11);
select * from partidos
where idtorneo in
(11, 12);
select * from partidos
where idtorneo = 11
or idtorneo = 12
Estas dos consultas funcionan de manera exactamente igual, la diferencia es que la clausula IN, nos ahorrará algunas líneas de código.
Pero veamos otro ejemplo de subconsultas.
Como pueden ver, las subconsultas se pueden realizar tambien dentro del INNER JOIN, aunque como les comentaba líneas arriba, primero realiza las subconsultas y despues la consulta, en una base de datos grande, las consultas puden tardar demasiado tiempo. Al ejecutar esta consulta, obtenemos el siguiente resultado.
Ejercicio 2:
Mostrar el nombre del equipo, el nombre del estadio, la
capacidad y la ciudad en que esta ubicados, nos interesa saber esos datos de
los equipos mexicanos que sean de Liga
select eq.idequipo, eq.abreviacion, eq.nombre, e.nombre as NombreEstadio, e.ciudad, e.capacidad
from equipos eq
inner join (select idestadio,nombre, ciudad, capacidad from estadios) e
on e.idestadio=eq.idestadio
and eq.codigopais='MX'
and eq.tipo=1
order by e.capacidad desc;
Esta consulta sería equialente a esta:
select eq.idequipo, eq.abreviacion, eq.nombre, e.nombre as NombreEstadio, e.ciudad, e.capacidad
from equipos eq
inner join estadios e
on e.idestadio=eq.idestadio
and eq.codigopais='MX'
and eq.tipo=1
order by e.capacidad desc;
No hay comentarios.:
Publicar un comentario