viernes, 9 de abril de 2021

Bases de Datos (09/04/2021)

 Continuación Operadores, Consultas

En la clase online de hoy hemos hecho un breve repaso de lo visto en la clase anterior, sobre los operadores Between para rangos, lógicos como NOT, OR y AND o el IN para listas

Hemos continuado viendo un ejercicio de ejemplo para usar estos operadores, utilizando como ejercicio la base de datos de "ejemplo" para realizar la práctica, utilizando para ello tanto el SGBD HeidiSQL como MySQLWorkbench (previamente encendido nuestro servidor Debian). 

Continuamos haciendo una consulta en HeidiSQL de los nombres de los profesores, mediante la sentencia:

"SELECT *

FROM profesores,imparte;"

El "*" lo que provoca es que se muestren los nombres de los profesores duplicados por cada asignatura que imparten. Esto es incorrecto, genera lo que se denomina "producto cartesiano". Para solucionarlo, nos dirigimos a MySQLWorkbench, mediante ingeniería inversa obtenemos las tablas, se utiliza la clave ajena "DNI", que hace referencia a las dos tablas de "imparte" y "asignaturas", por lo que une las dos y muestra los datos comunes, que en este caso son los nombres de los profesores.


Recordatorio: Cuidado con el "Producto Cartesiano", es un error que puede penalizar en las prácticas.

Para seguir, hemos añadido una nueva condición en el ejercicio, un nuevo "AND", precedido por un "NOT" y el "IN". Hemos unido las dos tablas, después hemos hecho el filtro según lo que se pedía en el ejercicio (para que no se produzca el producto cartesiano).



Aparte hemos continuado viendo las consultas anidadas y las listas de valores. Si introducimos únicamente la sentencia: "SELECT dni FROM imparte;" aparecerá solo una columna con 0 o  varias filas, en este caso 3 filas, sin eliminar las duplicadas. A continuación, modificamos la sentencia introduciendo: "SELECT * from profesores WHERE dni IN (SELECT dni FROM imparte):" , con esto se produce una subconsulta.
No podemos introducir algo dentro de la subconsulta que nos pueda crear mas de una columna, nos saldrá error si se producen mas columnas. Para resumir, se ha realizado este ejercicio para, aparte de repasar contenido anterior, ver el contenido nuevo "IN" para hacer además las subconsultas.

En la segunda hora de clase hemos seguido con la realización del mismo ejercicio pero añadiendo cosas nuevas, como por ejemplo: "SELECT DISTINCT p.* 
                                                from profesores p, imparte i
                                                WHERE p.dni != i.dni;"

Hemos continuado con las Funciones del Sistema: funciones de Fecha y de Tiempo en concreto.

En el formato de fecha y hora encontramos sentencias como "NOW", "DAY", "DAY of the WEEK", "MONTH", "HOUR", "MINUTE", "SECOND", etc.
Con la sentencia "SELECT NOW();" nos devolverá la hora en la que hemos hecho la última llamada de la consulta.
Con la sentencia por ejemplo: "SELECT NOW(),CURDATE(),CURTIME();" nos mostrará la fecha general, la fecha por separado y la hora por separado.
Podemos especificar un formato en el que queramos que se nos muestre por ejemplo la fecha de algo, esto es mediante: "SELECT dni, nombre, DATE_FORMAT(ingreso, '%d/%m/%Y') ingreso
                                FROM profesores;"

Por último hemos visto la función "String to Date" o "str_to_date". Se utiliza de la siguiente manera:
"SELECT *
FROM profesores
WHERE ingreso <STR_TO_DATE ('1/1/1990', '%d/%m/%Y');"
Es lo mismo que utilizarlo así:
"SELECT *
FROM profesores
WHERE ingreso <'1990/1/1';"



No hay comentarios:

Publicar un comentario

Entrada de Bienvenida al Blog