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
- Subconsulta Interna:
SELECT id_agente FROM Casos WHERE estado = 'Abierto';
- Esta subconsulta selecciona todos los
id_agente
de la tablaCasos
donde el estado del caso es ‘Abierto’.
- Consulta Externa:
SELECT nombre, rango FROM Agentes WHERE id_agente IN (...);
- Esta consulta selecciona el
nombre
yrango
de la tablaAgentes
donde elid_agente
coincide con alguno de losid_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.
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.