Subconsulta en MySQL

Subconsulta en MySQL

¡Hola, bienvenidos y bienvenidas! Dando continuidad al curso MySQL 8, hoy veremos lo que son las subconsulta en MySQL.

Con las consultas podemos obtener, crear, modificar y borrar información almacenada en una base de datos. Sin embargo existen ocasiones en las que se requiere obtener información más detallada  y específica, para esto, se debe realizar consultas más complejas que implican más de una tabla y más de una condición para esto podemos utilizar lo que son las subconsultas.

¡Empecemos!

¿Qué son las subconsultas?

Las subconsultas son consultas que se encuentran dentro de otra consulta más grande en una base de datos. Estas subconsultas se utilizan para obtener un conjunto de datos específico que se utilizará como parte de la consulta principal. Las subconsultas se pueden aplicar en diferentes partes de una consulta, como en las cláusulas WHERE, JOIN, HAVING, etc.

Una de las sintaxis básicas de una subconsulta se puede determinar de la siguiente manera:

SELECT Lista_Columnas
FROM Nombre_tabla
WHERE Condición = (
   SELECT Lista_Columnas2
   FROM Nombre_tabla2
   WHERE Condiciones
);
Anuncio

Subconsultas en la cláusula WHERE

La subconsulta se utiliza para filtrar el resultado de la consulta principal. Por ejemplo, utilizando la tabla “Servicios”, quiero obtener todos los datos del servicio que más costó tiene.

SELECT * FROM clinica_veterinaria.servicios
WHERE clinica_veterinaria.servicios.costo = (
   SELECT MAX(clinica_veterinaria.servicios.costo)
   FROM clinica_veterinaria.servicios
);

Otro ejemplo, quiero obtener todos los servicios que tienen un costo igual o superior al costo promedio.

SELECT * FROM clinica_veterinaria.servicios
WHERE clinica_veterinaria.servicios.costo >= (
   SELECT AVG(clinica_veterinaria.servicios.costo)
   FROM clinica_veterinaria.servicios
);

Sentencia IN y NOT IN

La sentencia IN nos permite comparar valores del campo de una tabla que coincida con algún elemento de la lista. También existe la sentencia NOT IN que es lo contrario de IN, devuelve todos los campos que no coincidan con ningún elemento de la lista.

Veamos otro ejemplo, utilizando las tablas “Clientes” y “Mascotas”, quiero obtener a todas las mascotas que viven en la zona central.

SELECT * FROM clinica_veterinaria.mascotas
WHERE clinica_veterinaria.mascotas.cliente_id IN (
   SELECT clinica_veterinaria.clientes.id FROM clinica_veterinaria.clientes
   WHERE clinica_veterinaria.clientes.zona = 'Zona Central'
);

Sentencia EXITST

La sentencia EXITST se utiliza para determinar si existen resultados de la consulta o no, generalmente se utilizan en subconsultas para restringir el resultado de la consulta superior.

Veamos un último ejemplo, utilizando las tablas “Mascotas” y “Mascota Servicios”, quiero obtener a todos los clientes que hayan realizado al menos un servicio.

SELECT * FROM clinica_veterinaria.mascotas
WHERE EXISTS (
   SELECT * FROM clinica_veterinaria.`mascota-servicio`
   WHERE clinica_veterinaria.mascotas .id = clinica_veterinaria.`mascota-servicio`.mascota_id
);

Recuerden que todos los ejemplos realizados pueden ir probando en MySQL Workbench, así tener una idea más clara de la consulta y los resultados que arroja.

Subconsultas SQL

Es importante tener en cuenta que las subconsultas pueden ser una herramienta poderosa, pero también pueden tener un impacto en el rendimiento de la base de datos si no se utilizan adecuadamente. Hasta aquí la clase de subconsulta en MySQL.

En la siguiente clase veremos lo que es EXPLAIN en MySQL.

¡Saludos y éxitos!

Victor Peña

Victor Peña

Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.

1 comentario en “Subconsulta en MySQL”

  1. Excelente información , concisa y fácil de entender , espero que sigan compartiendo mas información acerca de estos temas , ya que verdaderamente me fue de mucha ayuda , les comparto un manual de como instalar MySQL ya que la instalación se me complico un poco , pero este manual me ayudo a terminarla de manera exitosa.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *