SEC S20W2 || Databases and SQL language - Part 2

SEC S20W2  Databases and SQL language - Part 2.png
Portada diseña en Canva

Ejercicio 1:

A) Para cada fila presentada en la tabla a continuación, extraiga el elemento atípico y proporcione una breve descripción del punto común entre los tres elementos restantes. (1 punto)

Elemento 1Elemento 2Elemento 3Elemento 4Parte aisladaPunto común
ActualizarSeleccionarAlterarInsertar
Alterar
MáximoDescSumaPromedio
Desc
EntreEnContarComo
Contar
Clave primariaClave externaÚnicoDistinto
Distinto

- Punto común entre los elementos (Actualizar, Seleccionar e Insertar )

Estos elementos pertenecen al lenguaje de manipulación de datos (DML), es decir, que estos comandos permiten insertar, seleccionar o actualizar datos dentro de la base de datos.

  • Actualizar: Este comando permite modificar los datos en uno o mas registros de una tabla.

  • Seleccionar: es el principal comando en el lenguaje de consulta de datos y permite operaciones de selección de datos sobre varias tablas relacionales. Es decir, que permite extraer o consultar la información almacenada en la base datos .

  • Insertar: es el comando que permite agregar datos en una tabla de la base de datos.

- Punto común entre los elementos (Máximo, Suma y Promedio)

Estos tres elementos tienen en común que corresponden a funciones predefinidas o agregadas las cuales permiten la realización de diferentes cálculos matemáticos.

  • Máximo: esta función permite identificar el máximo valor.
  • Suma: permite obtener el resultad de la suma de dos o mas valores.
  • Promedio: permite el calculo de el promedio entre varios valores.

- Punto común entre los elementos (Entre, En y Como)

Las restricciones se componen de la clausula WHERE + una condición lógica que puede estar presentada por operadores lógicos, aritméticos o predicados que en este caso son: Entre, En y Como. Estos son utilizados para realizar la consulta especifica de filas o filtrado de datos.

- Punto común entre los elementos (Clave primaria, Clave externa y Único)

Tanto la Clave primaria, Clave externa y Único comparten la característica de que son restricciones que se aplican en las tablas de SQL Server para garantizar la integridad de los datos.

  • Clave primaria: corresponde a una tabla en la cual existe una columna o una combinación de columnas en la cual sus datos o valores identifican de forma única cada fila de la tabla. A estas columnas se les llama Claves primarias o principales de la tabla, por lo cual exigen la integridad de entidad de la tabla.

  • Clave externa:corresponde a una columna o combinación de columnas, esta se utiliza para establecer un vínculo entre los datos de dos tablas, logrando de esta manera el control de los datos que se pueden almacenar una tabla de clave externa.

  • Único: esta restricción permite evitar que se almacenen valores duplicados en una columna o conjunto.

B) Responda VERDADERO o FALSO a las siguientes afirmaciones: (1 punto)

AfirmacionesVerdadero/Falso
1. En SQL, no es posible eliminar una tabla que contenga tuplas.
F
2. Un DBMS garantiza la redundancia de datos.
F
3. El lenguaje de definición de datos (DDL) permite agregar restricciones de integridad a una tabla.
V
4. Una clave principal en una tabla puede ser una clave principal en otra tabla.
F
5. En SQL, la cláusula ORDER BY se utiliza para ordenar columnas seleccionadas de una tabla.
V
6. Una columna de clave externa puede contener valores NULL.
V
7. La restricción CLAVE PRINCIPAL incluye restricciones UNIQUE y NULL.
F
8. Las restricciones de integridad referencial garantizan vínculos entre tablas en una base de datos.
V

Ejercicio 2:

Dadas las siguientes tablas de libros y miembros:

Tabla 1: Libros

IdentificaciónTítuloAutorEditorPáginasAñoPrestReturn_Date
1Notre Dame de ParísVíctor HugoGosselin636183112014-05-13
2Los miserablesVíctor HugoLacroix166218622014-08-28
3Viaje al centro de la TierraJulio VerneHetzel186412014-07-10
4La vuelta al mundo en 80 díasJulio VerneHetzel223187212014-05-13
5Casa de los muertosFiódor DostoievskiMijail1276186222014-05-13

Tabla 2: Miembros

IdentificaciónApellidoNombre de pilaCorreo electrónico
1DupontVaquero[email protected]
2MARTÍNPablo[email protected]

Complete la siguiente tabla indicando el resultado obtenido o la consulta realizada para obtener el resultado: (1 punto)

ConsultaResultado
SELECT count(Pages) "Count", sum(Pages) "Total Pages" FROM books
SELECT Id, Title, Return_Date FROM books WHERE Return_Date IS NOT NULL ORDER BY Return_Date ASCimage.png
SELECT * FROM books WHERE Year IN (SELECT Year FROM books WHERE Id=2) AND Id<>2image.png
SELECT CONCAT(Last Name, ' ', First Name) AS "Last and First Name", COUNT(*) AS "Nombre" FROM members JOIN books ON members.Id = books.Borrower GROUP BY members.Idimage.png

Consulta 1:

SELECT count(Pages) "Count", sum(Pages) "Total Pages" FROM books

En esta instrucción se utiliza el comando Select para consultar los datos almacenados en la columna Pages de la tabla Books, continua con un Contador de los datos y luego con la sumatoria de los valores que estén almacenados en dicha columna y el resultado se debe almacenar en la casilla Total Pages

Como podemos observar en la tabla, hay 5 datos: 636, 1662, NULL, 223, 1276.
El Contador reflejara que obtuvo 4 valores y la sumatoria de estos, dio como resultado: 3797.

Consulta 2:

SELECT Id, Title, Return_Date FROM books WHERE Return_Date IS NOT NULL ORDER BY Return_Date ASC

En esta instrucción se realiza una consulta seleccionando los datos correspondientes a Id, Title, Return_Date de la tabla Books, ademas, se añade una restricción WHERE donde se pide que se ordene las filas de menor a mayor, es decir, en orden ascendente que sean diferentes de Null de la columna Return_Date.

Consulta 3:

SELECT * FROM books WHERE Year IN (SELECT Year FROM books WHERE Id=2) AND Id<>2

En esta instrucción se ordena la selección desde la tabla Books, seleccionando el año del libro que tiene asigno el Id=2, pero a su vez, esta consulta excluye al libro que tiene asignado el Id=2.

Por lo que con esta consulta se obtiene los datos del libro que coincide con la fecha de publicación del libro con Id=2.

En este caso podemos ver que el libro que coincide con el mismo año de publicación, el que corresponde al Id=5.

image.png

Por lo que la consulta arroja los datos del libro con Id=5 que cumple con las instrucciones dadas en esta sentencia.

image.png

Consulta 4:

SELECT CONCAT(Last Name, ' ', First Name) AS "Last and First Name",
COUNT(*) AS "Nombre"
FROM members
JOIN books ON members.Id = books.Borrower
GROUP BY members.Id

Esta instrucción permite concatenar los datos de hace una consulta de Last Name y First Name desde la tabla Members para que se muestren juntos en una columna y otra columna con la etiqueta Nombre en la cual se muestre la conteo de la cantidad de libros que cada miembro ha prestado, esto se logra al utilizar el comando JOIN con el cual se lora vincular el Id correspondiente a cada miembro en la tabla Members con el id que se almacena en la tabla de Books en la columna Borrower.

Así que nos muestra esta consulta de datos que extrae datos de ambas tablas (Books y members).

image.png

Para cada una de las siguientes proposiciones, valide cada respuesta marcando la casilla con V para verdadero o F para falso.

a) Ejecutando la consulta SQL: UPDATE books SET Title = "Title1";el DBMS:

F □ Modifica el campo Título del primer registro de la tabla libros a Título1.
V □ Modifica el campo Título de todos los registros de la tabla libros a Título1.
F□ Muestra un mensaje de error debido a la ausencia de la cláusula WHERE.

b) La consulta SQL:
SELECT Title FROM books WHERE MONTH(Return_Date) in (5,6) AND YEAR(Return_Date) = 2014;es equivalente a:

V □ SELECT Title FROM books WHERE Return_Date between "2014-05-01" AND "2014-06-30";
F □ SELECT Title FROM books WHERE Return_Date >= "2014-05-01" OR Return_Date <= "2014-06-30";
F □SELECT Title FROM books WHERE Return_Date between "2014-05-01" OR "2014-06-30";

c) Ejecutando la consulta SQL: SELECT Author, count(*) FROM books GROUP BY Title;el DBMS:

F □ Muestra el número de autores por título.
F □ Muestra el número de libros por autor.
V □ No funciona.

d) Al ejecutar la consulta SQL: DELETE FROM books WHERE Pages = Null;el DBMS:

F □ Elimina la columna Páginas.
F□ Elimina las filas donde no se proporciona el recuento de páginas.
V□ No funciona.

Ejercicio 3:

Consideremos el "análisis" de la base de datos de laboratorio médico definido por la siguiente representación textual simplificada:

PACIENTE (idPaciente, apellido, nombre, edad, ciudad)
La tabla Paciente contiene todos los pacientes que han sido sometidos a análisis en el laboratorio.

idPatient: identificador del paciente (cadena), clave principal
last_name: apellido del paciente (cadena)
first_name: nombre del paciente (cadena)
edad: edad del paciente (entero)
ciudad: ciudad del paciente (cadena)
ANÁLISIS (idAnálisis, nombre, precio, valor mínimo, valor máximo)
La tabla Análisis contiene todos los análisis que el laboratorio puede realizar.

idAnalysis: identificador de análisis (cadena), clave principal
nombre: nombre del análisis (cadena)
Precio: precio de análisis (decimal)
min_value: valor mínimo usual (decimal)
max_value: valor máximo usual (decimal)
DOCTOR (idDoctor, apellido, ciudad, especialidad)
La tabla Doctor contiene todos los médicos actualmente en ejercicio registrados en la base de datos.

idDoctor: identificador del médico (cadena), clave principal
last_name: apellido del médico (cadena)
ciudad: ciudad del doctor (cadena)
especialidad: especialidad del médico (cadena)
INFORME (idInforme, idMédico#, idPaciente#, fecha)
La tabla Informe contiene informes de análisis de pacientes.

idReport: identificador del informe de análisis (entero), clave principal
idPatient: identificador del paciente (cadena)
idDoctor: identificador del médico (cadena)
Fecha: fecha del informe de análisis (formato de fecha: AAAA-MM-DD)
RESULT_REPORT (idReport#, idAnalysis#, valor, estado)
La tabla ResultReport contiene los resultados de los informes de análisis.

idReport: identificador del informe de análisis (entero)
idAnalysis: identificador de análisis (cadena)
valor: un valor que representa el resultado del análisis (decimal)
Estado: un carácter ('N' para normal, 'H' para alto, 'L' para bajo) que representa el estado del resultado del análisis.

- Determinar los ID, apellidos y nombres de los pacientes que se han sometido a análisis de 'Colesterol', ordenados en orden ascendente por apellidos y nombres.

SELECT patients.Id, patients.Last_Name, patients.First_Name
FROM patients
JOIN analyses ON patients.Id = analyses.Patient_Id
WHERE analyses.Test_Name = 'Cholesterol'
ORDER BY patients.Last_Name ASC, patients.First_Name ASC;

En esta serie de instrucciones se Seleccionan los datos de los pacientes (Id, nombre y apellido) desde la tabla patients, luego a traves del comando JOIN se vincula la tabla de pacientes con la de analisis (JOIN analyses ON patients.Id = analyses.Patient_Id), luego se coloca una condición en la que solo se tomaran los datos de los pacientes que se realizaron el analisis del colesterol (WHERE analyses.Test_Name = 'Cholesterol') y se pide que esta consulta se muestre en orden albatetico de forma ascendente por el nombre y apellido de los pacientes.

Determinar los nombres de los pacientes que se han realizado los análisis prescritos por el médico con ID ‘DR2015’ y que no son de su ciudad.

SELECT patients.First_Name, patients.Last_Name
FROM patients
JOIN analyses ON patients.Id = analyses.Patient_Id
JOIN doctors ON analyses.Doctor_Id = doctors.Id
WHERE doctors.Id = 'DR2015'
AND patients.City <> doctors.City;

Con esta serie de instrucciones se consulta desde la tabla patients los nombre y apellido de los pacientes, que cumplan con las siguientes ordenes:

Que se hayan realizado los análisis prescrito por el dr DR2015, así que primero se realiza la vinculación del id del paciente con los análisis realizados, esto se logra con el siguiente comando(JOIN analyses ON patients.Id = analyses.Patient_Id) y luego se estable el vinculo entre el Id del doctor y los análisis prescritos por el doctor (JOIN doctors ON analyses.Doctor_Id = doctors.Id).
Seguidamente se coloca la condición WHERE para filtrar que los datos tomados solo sean los correspondientes al DR2015 (WHERE doctors.Id = 'DR2015') y se establece otra condición para que los pacientes consultados sean de una ciudad diferente a la ciudad de residencia de este doctor (AND patients.City <> doctors.City).

Al realizarse esta consulta se mostraran los datos de los pacientes que viven en ciudades diferentes y que han realizado los análisis prescritos por el médico con ID ‘DR2015.

Determinar la fecha en la que el paciente con ID ‘PA161’ tuvo su último reporte de análisis.

SELECT MAX(analysis_date) AS Last_Analysis_Date
FROM analyses
WHERE Patient_Id = 'PA161';

En esta consulta se establece que se seleccione la ultima fecha del informe de análisis desde la tabla analyses al utilizar la funcion MAX y esta informacion se mostrara en la columna Last_Analysis_Date pero con la condición que permite filtrar la información correspondiente solo al paciente PA161 ( WHERE Patient_Id = 'PA161').

Recuperar toda la información relacionada con los resultados del análisis del paciente con ID 'PA170' realizado el 12 de marzo de 2018.

SELECT *
FROM analyses
WHERE Patient_Id = 'PA170'
AND analysis_date = '2018-03-12';

Con esta consulta se obtienen todos los datos un paciente tomados desde la tabla Analyses, pero se deben cumplir dos condiciones especificas, ya que solo se quieren los datos del paciente PA170 y que se hayan realizado en la fecha 2018-03-12 (WHERE Patient_Id = 'PA170' AND analysis_date = '2018-03-12';)

Actualice el estado de los resultados del análisis a 'L' para los análisis con ID 'AnChol12' y 'AnGlug15' para el informe con ID 2020.

UPDATE analyses
SET status = 'L'
WHERE analysis_id IN ('AnChol12', 'AnGlug15')
AND report_id = 2020;

Con estas instrucciones se ordena actualizar la tabla analyses, en la cual se le asignara la letra L al resultado de los análisis que tengan como resultado AnChol12 y AnGlug15 y en el informa que corresponde al id=2020, para lograr que se actualicen estos resultados se debe cumplir ambas condiciones (WHERE analysis_id IN ('AnChol12', 'AnGlug15') AND report_id = 2020;)

Encuentre los ID de informes y los ID de pacientes con al menos dos resultados de análisis anormales por informe.

SELECT report_id, patient_id
FROM analyses
WHERE result_status = 'anormal'
GROUP BY report_id, patient_id
HAVING COUNT(*) >= 2;.

Con estas instrucciones se ordena seleccionar los report_id y patient_id desde la tabla analyses y se ejecuta la condición en la cual se estable los seleccionados sean los pacientes que tienen como resultado en sus análisis abnormal (WHERE result_status = 'anormal') y si esto se cumple se ordena que se agrupen los datos del report_id y patient_id (GROUP BY report_id, patient_id) y que a su vez se realice el conteo de resultados, para que si se cumplen estas condiciones solo se muestren los datos de los pacientes que tengan 2 o mas reportes con el Status: anormal (HAVING COUNT(*) >= 2;.).

Contabilizar el número de informes por médico residente en la ciudad de Sousse.

SELECT doctors.id AS Doctor_ID, COUNT(reports.id) AS Report_Count
FROM doctors
LEFT JOIN reports ON doctors.id = reports.doctor_id
WHERE doctors.city = 'Sousse'
GROUP BY doctors.id;

Con estas intrucciones se ordena seleccionar doctors.id AS Doctor_ID, COUNT(reports.id) AS Report_Count de la tabla doctors y se vincula la tabla reports con el Id de los doctors.id = reports.doctor_id, logrando que doctors.id tenga los datos correspondientes a los reportes realizados por cada doctor. Luego se establece la condición en la que se filtran solo los doctores de la ciudad Sousse (WHERE doctors.city = 'Sousse') y que estos sean agrupados en filas según el valor de doctors.id (GROUP BY doctors.id;).

Recuperar los DNI, apellidos, nombres y ciudades de pacientes de entre 20 y 40 años que hayan tenido más de cinco análisis después del 26 de mayo de 2015.

SELECT patients.Id, patients.Last_Name, patients.First_Name, patients.City
FROM patients
JOIN analyses ON patients.Id = analyses.Patient_Id
WHERE patients.Age BETWEEN 20 AND 40
AND analyses.analysis_date > '2015-05-26'
GROUP BY patients.Id, patients.Last_Name, patients.First_Name, patients.City
HAVING COUNT(analyses.Id) > 5;

Con estas intrucciones primero se ordena seleccionar patients.Id, patients.Last_Name, patients.First_Name, patients.City de la tabla patients, luego se busca vincular y combinar los datos de la tabla patiens y patients.Id = analyses.Patient_Id y de esta manera obtener los datos de todos los pacientes. Luego se establece la condición en la que se ordena filtrar y tomar solo a los pacientes que tienen una edad comprendida entre los 20 y 40 años (WHERE patients.Age BETWEEN 20 AND 40) y ademas, los que cumplan con esta condición también deben haberse realizado análisis en una fecha mayor al 26 de mayo de 2015 (AND analyses.analysis_date > '2015-05-26'). Finalmente se pide agrupar filas en una tabla correspondientes a los datos: patients.Id, patients.Last_Name, patients.First_Name, patients.City y con la siguiente instrucción se establece un contador para filtrar a los pacientes que se hayan realizado mas de 5 analisys.

Asi que de esta manera al cumplirse todas estas instrucciones se podrá visualizar a los pacientes de edad comprendida entre los 20 y 40 años que se realizaron más de cinco análisis después del 26 de mayo de 2015.

Eliminar análisis sin nombre.

DELETE FROM analyses
WHERE analysis_name IS NULL OR analysis_name = '';

Con esta sentencia se ordena eliminar de la tabla analyses los registros en los cuales se almacenan los nombres analysis_name que tengan valor NULL o estén vacíos.


Ha sido un verdadero placer sumarme a esta serie de lecciones en las cuales he logrado aprender mucho acerca de este interesante tema de las bases de datos y el lenguaje SQL. Espero haber cumplido de la mejor forma con los requerimientos establecidos y haber desarrollado este tema lo mejor posible.

Invito a @claritza42, @leigth y @analp para que también puedan sumarse a participar

Las capturas utilizadas fueron tomadas desde mi Pc

Sort:  
Loading...

Upvoted. Thank You for sending some of your rewards to @null. It will make Steem stronger.

Esta publicación ha sido votada positivamente/apoyada por el Equipo 7 a través de @philhughes. Nuestro equipo apoya el contenido que contribuye a la comunidad.

image.png