Guía Completa para Consultas SQL con Ejemplos Prácticos

Las bases de datos relacionales permiten realizar consultas complejas para gestionar y analizar la información de manera eficiente. En este artículo, exploraremos una variedad de conceptos y técnicas que podrían ser esenciales en un examen de SQL, utilizando una base de datos de ejemplo relacionada con una comisaría.

Creación de la Base de Datos

Primero, crearemos la base de datos y las tablas necesarias:

CREATE DATABASE Comisaria;
USE Comisaria;

Tablas de 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

Insertaremos algunos datos en estas tablas:

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');

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');

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);

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');

Conceptos Clave y Ejemplos de Consultas

SELECT

La instrucción SELECT se utiliza para seleccionar datos de una base de datos.

SELECT nombre, rango FROM Agentes;

DISTINCT

El uso de DISTINCT elimina filas duplicadas en los resultados.

SELECT DISTINCT estado FROM Casos;

AS

AS permite renombrar columnas o tablas.

SELECT nombre AS 'Nombre del Agente', salario AS 'Salario Anual' FROM Agentes;

WHERE

La cláusula WHERE se usa para filtrar registros.

SELECT * FROM Casos WHERE estado = 'Abierto';

Operadores en WHERE

SELECT * FROM Agentes WHERE salario > 40000;
SELECT * FROM Ciudadanos WHERE direccion LIKE 'Calle%';
SELECT * FROM Casos WHERE fecha_inicio BETWEEN '2022-01-01' AND '2022-12-31';
SELECT * FROM Casos WHERE id_agente IN (1, 2);

ORDER BY

Ordena los resultados de la consulta.

SELECT nombre, salario FROM Agentes ORDER BY salario DESC;

Funciones de Agregación

COUNT

Cuenta el número de filas.

SELECT COUNT(*) FROM Casos WHERE estado = 'Abierto';

SUM

Suma los valores de una columna.

SELECT SUM(salario) FROM Agentes;

MIN y MAX

Encuentra el valor mínimo y máximo.

SELECT MIN(salario) AS 'Salario Mínimo', MAX(salario) AS 'Salario Máximo' FROM Agentes;

AVG

Calcula el promedio.

SELECT AVG(salario) AS 'Salario Promedio' FROM Agentes;

JOIN

Combina filas de dos o más tablas.

SELECT A.nombre, C.descripcion
FROM Agentes A
JOIN Casos C ON A.id_agente = C.id_agente;

Subconsultas

Las subconsultas se utilizan para realizar consultas dentro de otras consultas.

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

INSERT

Inserta nuevos registros en una tabla.

INSERT INTO Agentes (nombre, rango, salario, fecha_ingreso) VALUES ('Laura Sánchez', 'Cabo', 42000.00, '2021-08-15');

UPDATE

Actualiza registros existentes.

UPDATE Agentes SET salario = salario * 1.05 WHERE rango = 'Cabo';

DELETE

Elimina registros de una tabla.

DELETE FROM Casos WHERE estado = 'Cerrado';

Vistas

Las vistas almacenan consultas como si fueran tablas.

CREATE VIEW AgentesActivos AS
SELECT nombre, rango, salario FROM Agentes WHERE fecha_ingreso > '2018-01-01';

Funciones para Cadenas de Caracteres

Algunas funciones útiles incluyen CHAR_LENGTH, CONCAT, LOWER, UPPER, y TRIM.

SELECT CONCAT(nombre, ' - ', rango) AS 'Identificación' FROM Agentes;

Funciones de Fecha

Trabaja con fechas utilizando CURDATE(), CURTIME(), DATEDIFF, DATE_ADD, y DATE_SUB.

SELECT CURDATE();
SELECT DATEDIFF(CURDATE(), fecha_ingreso) AS 'Días en Servicio' FROM Agentes;

HAVING

Filtra resultados después de una agregación.

SELECT id_agente, COUNT(*) AS 'Casos Asignados'
FROM Casos
GROUP BY id_agente
HAVING COUNT(*) > 1;

Conclusión

Este artículo proporciona una guía completa sobre los conceptos y consultas SQL más importantes utilizando una base de datos de ejemplo de una comisaría. Estos conceptos son fundamentales para gestionar y analizar datos de manera eficiente y son esenciales para cualquier examen de SQL.

person encoding in laptop
Photo by Lukas on Pexels.com

Deja un comentario

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
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.