Uso del Subquery SELECT IN (SELECT …) en Consultas SQL

En el ámbito de las bases de datos, realizar consultas complejas puede ser esencial para obtener información precisa y relevante. Una de las técnicas poderosas para lograr esto es el uso de subconsultas (subqueries). En este artículo, exploraremos cómo utilizar la estructura SELECT IN (SELECT ...) en consultas SQL, utilizando como ejemplo una base de datos de una comisaría.

Ejemplo de Base de Datos: Comisaría

Para ilustrar el uso de SELECT IN (SELECT ...), consideraremos la siguiente base de datos de una comisaría:

Creación de la Base de Datos

CREATE DATABASE Comisaria;
USE Comisaria;

Tablas en la Base de Datos

Tabla de Agentes

CREATE TABLE Agentes (
    id_agente INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    rango VARCHAR(30),
    salario DECIMAL(10, 2) NOT NULL,
    fecha_ingreso DATE
);

Tabla de Ciudadanos

CREATE TABLE Ciudadanos (
    id_ciudadano INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    direccion VARCHAR(100),
    telefono VARCHAR(15)
);

Tabla de Casos

CREATE TABLE Casos (
    id_caso INT AUTO_INCREMENT PRIMARY KEY,
    descripcion TEXT,
    fecha_inicio DATE,
    estado VARCHAR(20),
    id_agente INT,
    FOREIGN KEY (id_agente) REFERENCES Agentes(id_agente)
);

Tabla de Reportes

CREATE TABLE Reportes (
    id_reporte INT AUTO_INCREMENT PRIMARY KEY,
    id_caso INT,
    id_ciudadano INT,
    descripcion TEXT,
    fecha_reporte DATE,
    FOREIGN KEY (id_caso) REFERENCES Casos(id_caso),
    FOREIGN KEY (id_ciudadano) REFERENCES Ciudadanos(id_ciudadano)
);

Inserción de Datos

Datos en la Tabla Agentes

INSERT INTO Agentes (nombre, rango, salario, fecha_ingreso) VALUES
('Juan Pérez', 'Sargento', 45000.00, '2015-06-23'),
('Ana Gómez', 'Teniente', 50000.00, '2018-09-15'),
('Carlos López', 'Cabo', 40000.00, '2020-01-10');

Datos en la Tabla Ciudadanos

INSERT INTO Ciudadanos (nombre, direccion, telefono) VALUES
('Pedro Martínez', 'Calle Falsa 123', '555-1234'),
('María Fernández', 'Avenida Siempre Viva 742', '555-5678'),
('Luis García', 'Boulevard Central 456', '555-8765');

Datos en la Tabla Casos

INSERT INTO Casos (descripcion, fecha_inicio, estado, id_agente) VALUES
('Robo en tienda', '2022-03-10', 'Abierto', 1),
('Asalto a mano armada', '2022-04-22', 'Cerrado', 2),
('Vandalismo en parque', '2022-05-15', 'En Proceso', 3);

Datos en la Tabla Reportes

INSERT INTO Reportes (id_caso, id_ciudadano, descripcion, fecha_reporte) VALUES
(1, 1, 'Robo de mercancía en tienda', '2022-03-10'),
(2, 2, 'Asalto a mano armada en banco', '2022-04-22'),
(3, 3, 'Daños en parque público', '2022-05-15');

Uso de SELECT IN (SELECT ...)

Supongamos que queremos encontrar todos los agentes que han trabajado en casos que están actualmente «Abiertos». Podemos lograr esto utilizando una subconsulta.

Consulta SQL

SELECT nombre, rango 
FROM Agentes 
WHERE id_agente IN (
    SELECT id_agente 
    FROM Casos 
    WHERE estado = 'Abierto'
);

Explicación

  1. Subconsulta Interna: SELECT id_agente FROM Casos WHERE estado = 'Abierto';
  • Esta subconsulta selecciona todos los id_agente de la tabla Casos donde el estado del caso es ‘Abierto’.
  1. Consulta Externa: SELECT nombre, rango FROM Agentes WHERE id_agente IN (...);
  • Esta consulta selecciona el nombre y rango de la tabla Agentes donde el id_agente coincide con alguno de los id_agente obtenidos en la subconsulta interna.

Este uso de subconsultas es extremadamente útil cuando necesitas filtrar resultados basados en condiciones en otras tablas.

Conclusión

Las subconsultas SELECT IN (SELECT ...) son herramientas poderosas en SQL que permiten realizar consultas complejas de manera eficiente. En el contexto de una base de datos de una comisaría, hemos demostrado cómo esta técnica puede ser utilizada para obtener información específica sobre agentes involucrados en casos abiertos. Este enfoque es aplicable a una amplia variedad de escenarios en la gestión de bases de datos.

person encoding in laptop
Photo by Lukas on Pexels.com

Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde InfoGonzalez - Blog de formador e informático

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad