0% encontró este documento útil (0 votos)
15 vistas15 páginas

Clase de SQL

Cargado por

gonzalezmauroj
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
15 vistas15 páginas

Clase de SQL

Cargado por

gonzalezmauroj
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

Resumen de SQL

Contenido
EL MODELO ............................................................................................................................... 1
EL DDL........................................................................................................................................ 2
Cómo insertar datos de ejemplo en las tablas de obras sociales y pacientes: ......................... 5
Cómo agregar historias clínicas, estudios médicos y medicación a algunos pacientes: ........... 7
Consultas utilizando las cláusulas BETWEEN, LIKE y GROUP BY con HAVING en la tabla
pacientes: .................................................................................................................................. 8
Consultas de acción sobre la tabla pacientes para realizar inserciones, eliminaciones y
modificaciones de datos: .......................................................................................................... 9
Consultas utilizando la cláusula JOIN para combinar las tablas pacientes, obrasSociales e
historiasClinicas: ...................................................................................................................... 10
Consultas echas en clase ......................................................................................................... 11
PRACTICOS .............................................................................................................................. 13

EL MODELO
EL DDL

DDL

Aquí tienes el script para crear la base de datos en SQL Server con las tablas
mencionadas:

-- Crear la base de datos

CREATE DATABASE NOMBRE_BASE_DE_DATOS;

GO

-- Usar la base de datos

USE NOMBRE_BASE_DE_DATOS;

GO

-- Crear la tabla de obras sociales

CREATE TABLE obrasSociales (

id INT PRIMARY KEY,


nombreOSocial VARCHAR(50)

);

GO

-- Crear la tabla de pacientes

CREATE TABLE pacientes (

id INT PRIMARY KEY,

dni VARCHAR(20),

nombre VARCHAR(50),

apellido VARCHAR(50),

direccion VARCHAR(100),

telefono VARCHAR(20),

email VARCHAR(50),

fechaNacimiento DATE,

obraSocialId INT,

FOREIGN KEY (obraSocialId) REFERENCES obrasSociales(id)

);

GO

-- Crear la tabla de historias clinicas

CREATE TABLE historiasClinicas (

id INT PRIMARY KEY,

fecha DATE,

motivoVisita VARCHAR(100),

sintomas VARCHAR(200),

diagnostico VARCHAR(200),
tratamiento VARCHAR(200),

prescripciones VARCHAR(200),

pacienteId INT,

FOREIGN KEY (pacienteId) REFERENCES pacientes(id)

);

GO

-- Crear la tabla de estudios medicos

CREATE TABLE estudiosMedicos (

id INT PRIMARY KEY,

nombre VARCHAR(50),

detalles VARCHAR(200),

archivo VARCHAR(100),

historiaClinicaId INT,

FOREIGN KEY (historiaClinicaId) REFERENCES historiasClinicas(id)

);

GO

-- Crear la tabla de medicaciones

CREATE TABLE medicaciones (

id INT PRIMARY KEY,

droga VARCHAR(50),

indicaciones VARCHAR(200),

historiaClinicaId INT,

FOREIGN KEY (historiaClinicaId) REFERENCES historiasClinicas(id)

);

GO
Recuerda reemplazar "NOMBRE_BASE_DE_DATOS" por el nombre deseado para tu
base de datos. Este script creará las tablas "pacientes", "obrasSociales",
"historiasClinicas", "estudiosMedicos" y "medicaciones" con sus respectivos campos y
relaciones.

Cómo insertar datos de ejemplo en las tablas de obras sociales y


pacientes:

-- Insertar datos en la tabla de obras sociales

INSERT INTO obrasSociales (id, nombreOSocial)

VALUES (1, 'Obra Social A'),

(2, 'Obra Social B'),

(3, 'Obra Social C');

GO

-- Insertar datos en la tabla de pacientes

INSERT INTO pacientes (id, dni, nombre, apellido, direccion, telefono, email,
fechaNacimiento, obraSocialId)

VALUES (1, '12345678', 'Juan', 'Pérez', 'Calle A, 123', '111111111',


'[email protected]', '1990-01-01', 1),

(2, '87654321', 'María', 'Gómez', 'Calle B, 456', '222222222', '[email protected]',


'1985-05-10', 2),

(3, '98765432', 'Pedro', 'López', 'Calle C, 789', '333333333', '[email protected]',


'1995-12-15', 3);

GO

Esto insertará tres filas de datos en la tabla "obrasSociales" y tres filas de datos en la
tabla "pacientes". Puedes ajustar los valores de ejemplo según tus necesidades y agregar
más filas si es necesario.

Cómo agregar treinta pacientes adicionales a la tabla "pacientes":


-- Insertar datos en la tabla de pacientes

INSERT INTO pacientes (id, dni, nombre, apellido, direccion, telefono, email,
fechaNacimiento, obraSocialId)

VALUES

-- Pacientes del 1 al 10

(4, '11111111', 'Carlos', 'García', 'Calle D, 987', '444444444', '[email protected]',


'1988-03-20', 1),

(5, '22222222', 'Ana', 'Rodríguez', 'Calle E, 654', '555555555', '[email protected]',


'1992-07-12', 2),

(6, '33333333', 'Luis', 'Martínez', 'Calle F, 321', '666666666', '[email protected]',


'1980-11-05', 3),

(7, '44444444', 'Laura', 'Hernández', 'Calle G, 654', '777777777', '[email protected]',


'1975-09-15', 1),

(8, '55555555', 'Diego', 'López', 'Calle H, 987', '888888888', '[email protected]',


'1991-02-18', 2),

(9, '66666666', 'Sofía', 'Gómez', 'Calle I, 654', '999999999', '[email protected]', '1987-


06-30', 3),

(10, '77777777', 'Manuel', 'Fernández', 'Calle J, 321', '101010101',


'[email protected]', '1983-12-10', 1),

(11, '88888888', 'Isabel', 'Ramírez', 'Calle K, 987', '111111111', '[email protected]',


'1978-08-22', 2),

(12, '99999999', 'Javier', 'Vargas', 'Calle L, 654', '121212121', '[email protected]',


'1993-04-25', 3),

(13, '12345678', 'Lucía', 'Torres', 'Calle M, 321', '131313131', '[email protected]',


'1997-01-07', 1),

-- Pacientes del 11 al 20

(14, '87654321', 'Roberto', 'Mendoza', 'Calle N, 987', '141414141',


'[email protected]', '1982-05-14', 2),

(15, '98765432', 'Marta', 'Navarro', 'Calle O, 654', '151515151', '[email protected]',


'1996-09-28', 3),

(16, '76543210', 'Pablo', 'Ortega', 'Calle P, 321', '161616161', '[email protected]',


'1989-02-17', 1),
(17, '65432109', 'Carolina', 'Guerrero', 'Calle Q, 987', '171717171',
'[email protected]', '1984-07-31', 2)

Cómo agregar historias clínicas, estudios médicos y medicación a


algunos pacientes:

-- Insertar datos en la tabla de historias clinicas

INSERT INTO historiasClinicas (id, fecha, motivoVisita, sintomas, diagnostico,


tratamiento, prescripciones, pacienteId)

VALUES

(1, '2022-01-15', 'Dolor de cabeza', 'Dolor intenso en la sien izquierda', 'Migraña',


'Reposo y analgésicos', 'Paracetamol cada 8 horas', 1),

(2, '2022-03-05', 'Fiebre y dolor de garganta', 'Fiebre alta y dolor al tragar', 'Amigdalitis',
'Antibióticos y reposo', 'Amoxicilina cada 12 horas', 2),

(3, '2022-05-20', 'Dolor en el pecho', 'Opresión en el pecho y dificultad para respirar',


'Angina de pecho', 'Medicación para controlar la presión arterial', 'Amlodipino una vez
al día', 3),

(4, '2022-07-10', 'Mareos y vértigo', 'Sensación de mareo y pérdida de equilibrio',


'Vértigo posicional paroxístico benigno', 'Maniobras de reposición canalicular',
'Ejercicios de Brandt-Daroff', 4),

(5, '2022-09-08', 'Dolor lumbar', 'Dolor intenso en la región lumbar', 'Lumbalgia',


'Fisioterapia y analgésicos', 'Ibuprofeno cada 6 horas', 5);

-- Insertar datos en la tabla de estudios medicos

INSERT INTO estudiosMedicos (id, nombre, detalles, archivo, historiaClinicaId)

VALUES

(1, 'Radiografía de tórax', 'Radiografía para evaluar el estado pulmonar',


'radiografia_torax.jpg', 1),

(2, 'Análisis de sangre completo', 'Hemograma, perfil lipídico, y glucemia',


'analisis_sangre.pdf', 2),

(3, 'Electrocardiograma', 'Registro de la actividad eléctrica del corazón',


'electrocardiograma.pdf', 3),
(4, 'Prueba de equilibrio', 'Evaluación del equilibrio y la coordinación',
'prueba_equilibrio.jpg', 4),

(5, 'Resonancia magnética lumbar', 'Estudio para visualizar la columna lumbar',


'resonancia_lumbar.pdf', 5);

-- Insertar datos en la tabla de medicaciones

INSERT INTO medicaciones (id, droga, indicaciones, historiaClinicaId)

VALUES

(1, 'Paracetamol', 'Tomar 1 tableta cada 8 horas con alimentos', 1),

(2, 'Amoxicilina', 'Tomar 1 cápsula cada 12 horas durante 10 días', 2),

(3, 'Amlodipino', 'Tomar 1 tableta diaria por la mañana', 3),

(4, 'Dimenhidrinato', 'Tomar 1 tableta cada 6 horas en caso de mareo', 4),

Consultas utilizando las cláusulas BETWEEN, LIKE y GROUP BY con


HAVING en la tabla pacientes:

Consulta utilizando BETWEEN para obtener pacientes con fechas de nacimiento entre
dos rangos:

SELECT *

FROM pacientes

WHERE fechaNacimiento BETWEEN '1980-01-01' AND '1990-12-31';

Esta consulta seleccionará todos los pacientes cuyas fechas de nacimiento se encuentren
entre el 1 de enero de 1980 y el 31 de diciembre de 1990.

Consulta utilizando LIKE para buscar pacientes cuyo nombre o apellido contenga cierto
patrón:

SELECT *

FROM pacientes

WHERE nombre LIKE '%ana%' OR apellido LIKE '%ana%';


Esta consulta seleccionará todos los pacientes cuyo nombre o apellido contengan la
cadena "ana", sin importar su posición en el nombre o apellido.

Consulta utilizando GROUP BY y HAVING para obtener pacientes con más de una
visita registrada:

SELECT pacienteId, COUNT(*) AS totalVisitas

FROM historiasClinicas

GROUP BY pacienteId

HAVING COUNT(*) > 1;

Esta consulta agrupará las historias clínicas por paciente y mostrará la cantidad total de
visitas para cada paciente. Luego, la cláusula HAVING filtrará los resultados para
mostrar solo los pacientes con más de una visita registrada.

Consultas de acción sobre la tabla pacientes para realizar


inserciones, eliminaciones y modificaciones de datos:

Inserción de un nuevo paciente:

INSERT INTO pacientes (id, dni, nombre, apellido, direccion, telefono, email,
fechaNacimiento, obraSocialId)

VALUES (6, '11111111', 'Luisa', 'González', 'Calle A, 123', '555555555',


'[email protected]', '1992-08-15', 1);

Esta consulta insertará un nuevo paciente con los datos proporcionados en la tabla
pacientes.

Eliminación de un paciente:

DELETE FROM pacientes

WHERE id = 3;

Esta consulta eliminará el paciente con id igual a 3 de la tabla pacientes.

Modificación de los datos de un paciente existente:

UPDATE pacientes

SET telefono = '666666666', email = '[email protected]'


WHERE id = 2;

Esta consulta actualizará el número de teléfono y el correo electrónico del paciente con
id igual a 2 en la tabla pacientes.

Consultas utilizando la cláusula JOIN para combinar las tablas


pacientes, obrasSociales e historiasClinicas:

Consulta utilizando INNER JOIN entre pacientes y obrasSociales para obtener la


información de un paciente y su obra social:

SELECT p.id, p.nombre, p.apellido, o.nombreOSocial

FROM pacientes p

INNER JOIN obrasSociales o ON p.obraSocialId = o.id

WHERE p.id = 1;

Esta consulta combina las tablas pacientes y obrasSociales utilizando la columna


obraSocialId en pacientes y la columna id en obrasSociales para obtener la información
del paciente y su correspondiente obra social. En este ejemplo, se obtendrá la
información del paciente con id igual a 1.

Consulta utilizando LEFT JOIN entre pacientes e historiasClinicas para obtener la


información de los pacientes junto con sus historias clínicas (si existen):

SELECT p.id, p.nombre, p.apellido, hc.fecha, hc.diagnostico

FROM pacientes p

LEFT JOIN historiasClinicas hc ON p.id = hc.pacienteId;

Esta consulta combina las tablas pacientes e historiasClinicas utilizando la columna id


en pacientes y la columna pacienteId en historiasClinicas mediante un LEFT JOIN. Esto
recuperará la información de todos los pacientes, junto con la fecha de la historia clínica
y el diagnóstico asociado (si existe).

Recuerda ajustar los nombres de las columnas y las tablas según tu estructura de base de
datos. Además, puedes modificar las condiciones del WHERE para filtrar los resultados
según tus necesidades.
Consultas echas en clase

select * from pacientes

where fechaNacimiento Between '1980-09-15' and '1988-09-15'

--where fechaNacimiento<'1985-09-15'

--where obraSocialId=1

--group by dni,apellido,nombre

--where id=3

SELECT * FROM obrasSociales

SeLECT dni,apellido,nombre,o.nombreOSocial FROM PACIENTES P INNER JOIN


OBRASSOCIALES O ON P.obraSocialId=O.id

order by nombreOSocial

SeLECT count(dni),nombreOSocial FROM PACIENTES P INNER JOIN


OBRASSOCIALES O ON P.obraSocialId=O.id

group by nombreOSocial

order by nombreOSocial

Aquí tienes diez consultas basadas en las consultas mas a modo de ejemplo:

Obtener todos los pacientes cuya fecha de nacimiento esté entre el 15 de septiembre de
1980 y el 15 de septiembre de 1988:

SELECT *

FROM pacientes

WHERE fechaNacimiento BETWEEN '1980-09-15' AND '1988-09-15';

Obtener todos los pacientes cuya fecha de nacimiento sea anterior al 15 de septiembre
de 1985:

SELECT *

FROM pacientes

WHERE fechaNacimiento < '1985-09-15';


Obtener todos los pacientes afiliados a la obra social con ID 1:

SELECT *

FROM pacientes

WHERE obraSocialId = 1;

Obtener la cantidad de pacientes por obra social:

SELECT o.nombreOSocial, COUNT(p.dni) AS cantidadPacientes

FROM pacientes p

INNER JOIN obrasSociales o ON p.obraSocialId = o.id

GROUP BY o.nombreOSocial;

Obtener la información de los pacientes, incluyendo su DNI, apellido, nombre y nombre


de la obra social a la que están afiliados, ordenados por nombre de la obra social:

SELECT p.dni, p.apellido, p.nombre, o.nombreOSocial

FROM pacientes p

INNER JOIN obrasSociales o ON p.obraSocialId = o.id

ORDER BY o.nombreOSocial;

Obtener la cantidad de pacientes por obra social, mostrando el número de pacientes y el


nombre de la obra social, ordenados por nombre de la obra social:

SELECT COUNT(p.dni) AS cantidadPacientes, o.nombreOSocial

FROM pacientes p

INNER JOIN obrasSociales o ON p.obraSocialId = o.id

GROUP BY o.nombreOSocial

ORDER BY o.nombreOSocial;

Obtener la cantidad total de pacientes registrados:

SELECT COUNT(*) AS totalPacientes

FROM pacientes;

Obtener el nombre y el apellido de los pacientes, agrupados por su DNI, apellido y


nombre:
SELECT dni, apellido, nombre

FROM pacientes

GROUP BY dni, apellido, nombre;

Obtener la información del paciente con ID 3:

SELECT *

FROM pacientes

WHERE id = 3;

Obtener la información de todas las obras sociales:

SELECT *

FROM obrasSociales;

Recuerda que puedes adaptar estas consultas según tus necesidades y los nombres
exactos de las tablas y los campos en tu base de datos.

Consulta 18: Obtener los pacientes que han tenido una visita con un diagnóstico y
tratamiento relacionados con diabetes.

SELECT p.*

FROM pacientes p

INNER JOIN historiasClinicas hc ON p.id = hc.pacienteId

INNER JOIN visitas v ON hc.id = v.historiaClinicaId

WHERE hc.diagnostico LIKE '%diabetes%' OR v.tratamiento LIKE '%diabetes%';

PRACTICOS

Enunciados para consultas adicionales con las que puedes practicar:

1. Obtener todos los pacientes cuyos apellidos empiecen con la letra "S".
2. Obtener el promedio de edades de los pacientes.
3. Obtener los pacientes cuyo teléfono de contacto contiene el número "555".
4. Obtener la cantidad de pacientes por año de nacimiento.
5. Obtener los pacientes que tienen más de una dirección registrada.
6. Obtener los pacientes que no tienen asignada una obra social.
7. Obtener los pacientes cuyo correo electrónico no contiene el dominio
"gmail.com".
8. Obtener los pacientes ordenados alfabéticamente por apellido y nombre.
9. Obtener el paciente más joven de la base de datos.
10. Obtener el paciente más antiguo de la base de datos.
11. Obtener los pacientes cuyo nombre y apellido contienen la misma letra.
12. Obtener los pacientes que nacieron en un mes específico (por ejemplo, enero).
13. Obtener los pacientes cuya dirección contiene la palabra "avenida".
14. Obtener los pacientes que tienen una fecha de nacimiento duplicada en la base
de datos.
15. Obtener los pacientes cuyo DNI termina en un número par.
16. Obtener los pacientes que tienen historias clínicas con diagnóstico
"Hipertensión".
17. Obtener los pacientes que tienen historias clínicas con más de 3 prescripciones.
18. Obtener los pacientes que han tenido visitas con motivo "Control de rutina".
19. Obtener los pacientes cuyo nombre o apellido comienza con la letra "A" y tienen
más de 30 años.
20. Obtener los pacientes que tienen la misma dirección de otro paciente en la base
de datos.
21. Obtener todos los pacientes cuyos apellidos empiecen con la letra "S".
22. Obtener el promedio de edades de los pacientes.
23. Obtener los pacientes cuyo teléfono de contacto contiene el número "555".
24. Obtener la cantidad de pacientes por año de nacimiento.
25. Obtener los pacientes que tienen más de una dirección registrada.
26. Obtener los pacientes que no tienen asignada una obra social.
27. Obtener los pacientes cuyo correo electrónico no contiene el dominio
"gmail.com".
28. Obtener los pacientes ordenados alfabéticamente por apellido y nombre.
29. Obtener el paciente más joven de la base de datos.
30. Obtener el paciente más antiguo de la base de datos.
31. Obtener los pacientes cuyo nombre y apellido contienen la misma letra.
32. Obtener los pacientes que nacieron en un mes específico (por ejemplo, enero).
33. Obtener los pacientes cuya dirección contiene la palabra "avenida".
34. Obtener los pacientes que tienen una fecha de nacimiento duplicada en la base
de datos.
35. Obtener los pacientes cuyo DNI termina en un número par.
36. Obtener los pacientes que tienen historias clínicas con diagnóstico
"Hipertensión".
37. Obtener los pacientes que tienen historias clínicas con más de 3 prescripciones.
38. Obtener los pacientes que han tenido visitas con motivo "Control de rutina".
39. Obtener los pacientes cuyo nombre o apellido comienza con la letra "A" y tienen
más de 30 años.
40. Obtener los pacientes que tienen la misma dirección de otro paciente en la base
de datos.

También podría gustarte