MySql

Buenas, hoy vamos a hablar de las consultas multitablas en MySql, es decir las consultas que involucran varias tablas. Para hacer este tipo de consultas debemos conocer dos conceptos muy fundamentales de la álgebra relacional que son el producto cartesiano y la composición.

Producto cartesiano 

Para comprender esto de la mejor forma vamos hacer esto con un ejemplo. Crearemos una base de datos prueba, la sentencia es:
CREATE DATABASE CONSULTAMULTITABLA;

Creamos dos tablas:

mysql> CREATE TABLE personas (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> nombre VARCHAR(40),
-> fecha DATE);
Query OK, 0 rows affected (0.13 sec)
mysql> CREATE TABLE telefonos (
-> numero CHAR(12),
-> id INT NOT NULL REFERENCES personas (id)
-> ON DELETE CASCADE ON UPDATE CASCADE); (1)
Query OK, 0 rows affected (0.13 sec)

Ahora las llenaremos de información:

mysql> INSERT INTO personas2 (nombre, fecha) VALUES
-> ("Fulanito", "1956-12-14"),
-> ("Menganito", "1975-10-15"),
-> ("Tulanita", "1985-03-17"),
-> ("Fusganita", "1976-08-25");
Query OK, 4 rows affected (0.09 sec)
Records: 4 Duplicates: 0 Warnings: 0


Verificamos que se hayan guardado los datos:

mysql> SELECT * FROM personas2;
+----+-----------+------------+
| id | nombre | fecha |
+----+-----------+------------+
| 1 | Fulanito | 1956-12-14 |
| 2 | Menganito | 1975-10-15 |
| 3 | Tulanita | 1985-03-17 |
| 4 | Fusganita | 1976-08-25 |
+----+-----------+------------+
4 rows in set (0.00 sec)
mysql>


Ahora insertaremos datos en la tabla de telefonos2:

mysql> INSERT INTO telefonos2 (id, numero) VALUES
-> (1, "123456789"),
http://localhost/conclase/mysql/curso/para-pdf/index.php?cap=012 (1 of 15)15/05/2005 12:20:52
Consultas multitabla
-> (1, "145654854"),
-> (1, "152452545"),
-> (2, "254254254"),
-> (4, "456545654"),
-> (4, "441415414");
Query OK, 6 rows affected (0.06 sec)
Records: 6 Duplicates: 0 Warnings: 0

Verificamos que se hayan guardado los datos:

mysql> SELECT * FROM telefonos2;
+-----------+---------+
| numero | persona |
+-----------+---------+
| 123456789 | 1 |
| 145654854 | 1 |
| 152452545 | 1 |
| 254254254 | 2 |
| 456545654 | 4 |
| 441415414 | 4 |
+-----------+---------+
6 rows in set (0.00 sec)

Listo, vamos bien.

Haora 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 con el comodin  "*" precedida de la sentencia. Los nombres
de las tablas se indican en la cláusula FROM separados con comas.

Hagamos la consulta y miremos todas las combinaciones de todas las filas de todas la tablas involucradas en la consulta:

mysql> SELECT * FROM personas2,telefonos2;
+----+-----------+------------+-----------+----+
| id | nombre | fecha | numero | id |
+----+-----------+------------+-----------+----+
| 1 | Fulanito | 1956-12-14 | 123456789     | 1 |
| 2 | Menganito | 1975-10-15 | 123456789 | 1 |
| 3 | Tulanita | 1985-03-17 | 123456789     | 1 |
| 4 | Fusganita | 1976-08-25 | 123456789   | 1 |
| 1 | Fulanito | 1956-12-14 | 145654854     | 1 |
| 2 | Menganito | 1975-10-15 | 145654854 | 1 |
| 3 | Tulanita | 1985-03-17 | 145654854     | 1 |
| 4 | Fusganita | 1976-08-25 | 145654854   | 1 |
| 1 | Fulanito | 1956-12-14 | 152452545     | 1 |
| 2 | Menganito | 1975-10-15 | 152452545 | 1 |
| 3 | Tulanita | 1985-03-17 | 152452545     | 1 |
| 4 | Fusganita | 1976-08-25 | 152452545   | 1 |
| 1 | Fulanito | 1956-12-14 | 254254254     | 2 |
| 2 | Menganito | 1975-10-15 | 254254254 | 2 |
| 3 | Tulanita | 1985-03-17 | 254254254     | 2 |
| 4 | Fusganita | 1976-08-25 | 254254254  | 2 |
| 1 | Fulanito | 1956-12-14 | 456545654     | 4 |
| 2 | Menganito | 1975-10-15 | 456545654 | 4 |
| 3 | Tulanita | 1985-03-17 | 456545654      | 4 |
| 4 | Fusganita | 1976-08-25 | 456545654   | 4 |
| 1 | Fulanito | 1956-12-14 | 441415414     | 4 |
| 2 | Menganito | 1975-10-15 | 441415414 | 4 |
| 3 | Tulanita | 1985-03-17 | 441415414     | 4 |
| 4 | Fusganita | 1976-08-25 | 441415414   | 4 |
+----+-----------+------------+-----------+----+
24 rows in set (0.73 sec)
mysql>

Toda la informacion fue sacada de un libro que puedes descargar en la siguiente dirección:
http://decimera.weebly.com/base-de-datos.html le das click en manual de mysql 





No hay comentarios:

Publicar un comentario