Consultas Avanzadas
Consultar Relacionadas
consultas de mas de una tabla
Es posible hacer consultas usando varias tablas en la misma sentencia SELECT.
Esto nos permite realizar otras dos operaciones de álgebra relacional: el producto cartesiano y la composición. Y la obtengo mencionando las dos tablas en una consulta sin ninguna restricción en la cláusula where.
El producto cartesiano de dos tablas son todas las combinaciones de todas las filas de las dos tablas. Usando una sentencia SELECT se hace proyectando todos los atributos de ambas tablas. Los nombres de las tablas se indican en la cláusula FROM separados con comas.
Ejemplo de producto cartesiano:
SELECT * FROM personas2, telefonos2; La cantidad de registros resultantes va a ser el producto entre cantidad de registro de una tabla y la cantidad de registros de la otra tabla. Se puede comprobar la cantidad de registros de la consulta de la siguiente forma SELECT count(*) FROM personas2, telefonos2;
Tupla: Conjunto de nombres de atributos relacionados.
La composición interna trata de un producto cartesiano restringido, las tuplas que se emparejan deben cumplir una determinada condición.
SELECT * FROM personas2, telefonos2 WHERE personas2.id=telefonos2.id;
Ejemplo:
Tabla Personas
Id | Nombre | Genero |
1 | Facundo | Masculino |
2 | Andrea | Femenino |
3 | Laura | Femenino |
4 | Lorena | Femenino |
5 | Gabriel | Masculino |
Tabla Teléfono
id | Numero |
1 | 4569798 |
2 | 4651232 |
3 | 5454655 |
4 | 2223333 |
5 | 8713256 |
Nota: En la tabla Personas el campo Id es clave primaria, y no puede tener valores repetidos. Pero en la tabla Telefonos el campo ID solo hace referencia a que persona pertenece el número de teléfono y si se permiten números repetidos.
Una persona puede tener ningún, uno o muchos números de teléfonos.
Este concepto se detalle en el capítulo siguiente y se denomina Clave Foránea.
Ejemplo de producto cartesiano:
SELECT * from Personas,Telefonos;
Resultado:
id | Nombre | Genero | Id | Numero |
1 | Facundo | Masculino | 1 | 4569798 |
1 | Facundo | Masculino | 1 | 4651232 |
1 | Facundo | Masculino | 2 | 5454655 |
1 | Facundo | Masculino | 3 | 2223333 |
1 | Facundo | Masculino | 5 | 8713256 |
2 | Andrea | Femenino | 1 | 4569798 |
2 | Andrea | Femenino | 1 | 4651232 |
2 | Andrea | Femenino | 2 | 5454655 |
2 | Andrea | Femenino | 3 | 2223333 |
2 | Andrea | Femenino | 5 | 8713256 |
3 | Laura | Femenino | 1 | 4569798 |
3 | Laura | Femenino | 1 | 4651232 |
3 | Laura | Femenino | 2 | 5454655 |
3 | Laura | Femenino | 3 | 2223333 |
3 | Laura | Femenino | 5 | 8713256 |
4 | Lorena | Femenino | 1 | 4569798 |
4 | Lorena | Femenino | 1 | 4651232 |
4 | Lorena | Femenino | 2 | 5454655 |
4 | Lorena | Femenino | 3 | 2223333 |
4 | Lorena | Femenino | 5 | 8713256 |
5 | Gabriel | Masculino | 1 | 4569798 |
5 | Gabriel | Masculino | 1 | 4651232 |
5 | Gabriel | Masculino | 2 | 5454655 |
5 | Gabriel | Masculino | 3 | 2223333 |
5 | Gabriel | Masculino | 5 | 8713256 |
Obtengo la combinación de todos los registros de la primera tabla con todos los registros de la segunda tabla.
Total 25 registros, se puede comprobar que son 25 registros realizando la siguiente consulta.
SELECT count(*) from Persona,Telefonos;
Ejemplo de Composición Interna:
Observando la tabla resultante del producto cartesiano, se puede ver que los registros válidos, son aquellos en que los valores de los campos ID son iguales.
SELECT * from Personas,Telefonos WHERE Personas.Id=Telefonos.ID;
Resultado:
id | Nombre | Genero | id | Numero |
1 | Facundo | Masculino | 1 | 4569798 |
2 | Facundo | Masculino | 1 | 4651232 |
3 | Andrea | Femenino | 2 | 5454655 |
4 | Laura | Femenino | 3 | 2223333 |
5 | Gabriel | Masculino | 5 | 8713256 |
0 Comentarios