Consultas SQL y Operaciones MongoDB para Gestión de Datos

Clasificado en Informática

Escrito el en español con un tamaño de 5,2 KB

Creación de Vistas en SQL

Vista de Docentes con 30 Horas

Esta vista selecciona el nombre y especialidad de los docentes, junto con el título del curso, para aquellos cursos que tienen una duración de 30 horas. Los resultados se ordenan por el nombre del docente.


CREATE VIEW profes_30h AS
SELECT dt.nombre, dt.especialidad, c.titulo
FROM docentes dt
JOIN docencia dc ON c.codigocurso = dc.curso
JOIN cursos c ON c.codigocurso = dc.curso
WHERE c.horas = 30
ORDER BY dt.nombre;

Vista de Alumnos No Aptos

Esta vista muestra información de los alumnos que no han sido calificados como aptos en alguna matrícula. Incluye todos los campos de la tabla de alumnos y el título del curso asociado a la matrícula.


CREATE VIEW no_aptos AS
SELECT *, c.titulo
FROM alumnos a
JOIN matricula m ON m.codigoalumno = a.codigoalumno
JOIN cursos c ON c.codigocurso = m.codigocurso
WHERE m.apto = false;

Consultas de Selección y Filtrado en SQL

Alumnos Matriculados en Cursos de Internet

Se seleccionan los nombres de los alumnos para quienes existe al menos una matrícula en un curso cuya categoría es 'Internet'.


SELECT nombre
FROM alumnos
WHERE EXISTS (
    SELECT 1
    FROM matricula m
    JOIN cursos c ON m.codigocurso = c.codigocurso
    WHERE c.categoria = 'Internet'
);

Información de Citas Médicas

Se recupera el nombre del paciente, terapeuta, tratamiento y la fecha de la cita, uniendo las tablas correspondientes.


SELECT p.nombre AS paciente, t.nombre AS terapeuta, tr.nombre AS tratamiento, c.fecha
FROM pacientes p
JOIN citas c ON c.paciente_id = p.id
JOIN terapeutas t ON t.id = c.terapeuta_id
JOIN tratamientos tr ON tr.id = c.tratamiento_id;

Gasto Total por Paciente

Se calcula el gasto total de cada paciente sumando el precio de todas sus citas. Los resultados se agrupan por el nombre del paciente.


SELECT p.nombre, SUM(c.precio) AS gasto_total
FROM pacientes p
JOIN citas c ON c.paciente_id = p.id
GROUP BY p.nombre;

Manejo de Relaciones y Estructuras de Datos

Se describen diferentes tipos de relaciones entre entidades:

  • N:N:N (Relación muchos a muchos entre tres entidades)
  • 1:N:N (Relación uno a muchos y muchos a muchos)
  • 1:1:N (Relación uno a uno y uno a muchos)
  • 1:1:1 (Relación uno a uno entre tres entidades en parejas)

Se indica la necesidad de crear una estructura de datos adicional: C.ALT.

Triggers y Funciones en SQL (PL/pgSQL)

Auditoría de Citas

Este fragmento parece ser parte de la definición de un trigger que registra cambios en la tabla de citas en una tabla de auditoría. Se insertan los detalles de la cita nueva en auditoria_citas.


-- Posible fragmento de un trigger
INSERT INTO auditoria_citas(cita_id, paciente_id, terapeuta_id, tratamiento_id, fecha_id)
VALUES (new.cita, new.paciente_id, new.terapeuta_id, new.tratamiento_id, new.fecha_id);
RETURN new;

Función para Registrar Cambio de Salario

Esta función, escrita en PL/pgSQL, se activa (como trigger) cuando hay una modificación en el salario de un empleado. Si el nuevo salario es diferente al anterior, se registra el cambio en la tabla auditoria_salarios.


CREATE OR REPLACE FUNCTION registrar_cambio_salario()
RETURNS TRIGGER AS $$
BEGIN
  IF NEW.salario <> OLD.salario THEN
    INSERT INTO auditoria_salarios (
      empleado_id,
      salario_anterior,
      salario_nuevo
    )
    VALUES (
      OLD.id,
      OLD.salario,
      NEW.salario
    );
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Declaración de Constante y Notificación

Este bloque PL/pgSQL declara una constante numérica para el valor de Pi y luego muestra este valor utilizando RAISE NOTICE.


DECLARE
  pi CONSTANT NUMERIC := 3.14159;
BEGIN
  RAISE NOTICE 'El valor de pi es %', pi;
END;

Operaciones con MongoDB

Actualización de Documentos en la Colección 'modelos'

Se actualiza el campo RAM para los modelos de la marca 'Lenovo' y se establece el precio para el modelo 'XPS 13' de Dell.


db.modelos.updateOne(
  { marca: "Lenovo" },
  { $set: { RAM: ["8GB", "16GB", "32GB"] } }
);

db.modelos.updateOne(
  { marca: "Dell", modelo: "XPS 13" },
  { $set: { precio: 1350 } }
);

Búsqueda de Documentos en 'modelos'

Se buscan todos los documentos en la colección modelos que tengan especificada la memoria RAM como '16GB'.


db.modelos.find(
  { RAM: "16GB" }
);

Actualización y Eliminación en la Colección 'portatil'

Se actualizan los colores para el portátil con _id: 6, se modifica el precio para el portátil con _id: 2, y se eliminan todos los portátiles que utilizan el procesador 'Core i7-13620H'.


db.portatil.updateOne(
  { _id: 6 },
  { $set: { colores: ["Gris"] } }
);

db.portatil.updateOne(
  { _id: 2 },
  { $set: { precio: 909 } }
);

db.portatil.deleteMany(
  { procesador: "Core i7-13620H" }
);

Entradas relacionadas: