SQL:
Subconsultas (consultas a otras consultas)
y
Vistas
Pues siguiendo con SQL, dependiendo de la complejidad y numero de tablas que tenga nuestra base de dates, necesitamos de realizar consultas a resultados de otras consultas, y filtrarlas con algún criterio.
¿como hacerlo?
Pues, en la zona de la sentencia donde indicaríamos la tabla a la que haríamos la consulta, (detrás de FROM) se le añade entre paréntesis la otra consulta.
Un ejemplo:
Tenemos esta base de datos, organizada en estas tablas
Y hacemos esta consulta:
SELECT * FROM Materia, Profesores, Relaciones WHERE Relaciones.idprofesor=Profesores.idProfesor and Relaciones.idmateria=materia.idmateriales
A los resultados de esta consulta, nos interesa mostrar solo los registros cuyo dato del campo "Telefono_Prof", tenga como inicio el número 6.
En principio sería asi:
SELECT * FROM tabla Where Telefono_Prof Like '6%'
Sustituirnos "tabla" por la 1º sentencia:
SELECT * FROM (SELECT * FROM Materia, Profesores, Relaciones WHERE Relaciones.idprofesor=Profesores.idProfesor and Relaciones.idmateria=materia.idmateriales) Where Telefono_Prof Like '6%'
Nota:
En el caso de que haya columnas con el mismo nombre, o necesitamos dar más claridad a la consulta que estemos usando, para poder seguir realizando subconsultas, se puede usar "AS"
Por ejemplo:
SELECT * FROM (SELECT * FROM Materia, Profesores, Relaciones WHERE Relaciones.idprofesor=Profesores.idProfesor and Relaciones.idmateria=materia.idmateriales) As TablaFiltrada Where TablaFiltrada.Telefono_Prof Like '6%'
USANDO Vistas
A diferencia de las tablas ordinarias no forma parte del esquema físico. Se trata de una tabla dinámica de los datos en la base de datos."Tabla Dinámica": Esto quiere decir que si cambiamos (modificar, borrar o añadir) algún dato de alguna tabla, automáticamente, la vista ya nos mostraría los resultados actualizados.
Ejemplo de creación de una vista:
CREATE VIEW TablaTelefono6 AS SELECT * FROM (SELECT * FROM Materia, Profesores, Relaciones WHERE Relaciones.idprofesor=Profesores.idProfesor and Relaciones.idmateria=materia.idmateriales) As TablaFiltrada Where TablaFiltrada.Telefono_Prof Like '6%'
Ejemplo de uso:
SELECT idmateriales, idprofesor FROM TablaTelefono6
Puede ser muy útil, por ejemplo una vez creada la base de datos con sus tablas y sabiendo que consultas y subconsultas típicas que vamos a realizar en nuestro programa, crear esas vistas y así tenerlas ya preparadas para usarlas, con el considerable ahorro de tiempo.
Para más información:
http://www.tutorialspoint.com/sqlite/sqlite_alias_syntax.htm
http://www.tutorialspoint.com/sqlite/sqlite_views.htm