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 hay comentarios:
Publicar un comentario