Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



miércoles, 6 de agosto de 2014

SQL: Subconsultas (consultas a otras consultas) y vistas

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.idmaterialesAs 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