Relacionando información de dos tablas en SQL

En SQL: podemos relacionar información de dos tablas para obtener información de ambas al mismo tiempo, en este ejemplo estaremos haciendo una union de uno a muchos, donde tendremos una tabla de clientes que puede tener uno o mas registros en una tabla de ordenes:

Primero creamos la tabla de clientes:

CREATE TABLE clientes(
 id int auto_increment primary key,
 nombre varchar(100),
 apellido varchar(100),
 email varchar(100)
);

Después creamos la tabla de ordenes, y al final indicamos que el campo clientes_id sera una foreign key, lo cual significa que es la primary key de otra tabla, y con el cual haremos la relación entre las dos tablas:

create table ordenes(
 id int auto_increment primary key,
 fecha_orden date,
 cantidad decimal(8,2),
 clientes_id int,
 foreign key(clientes_id) references clientes(id)
);

De esta forma estamos indicando que el campo clientes_id en la tabla de ordenes es el campo id en la tabla de clientes.

Ahora, para realizar queries que muestren información de ambas tablas usando sub queries, por ejemplo, las ordenes creadas por el cliente con apellido George:

MariaDB [animales]> select * from ordenes where clientes_id =
 -> (
 -> select id from clientes
 -> where apellido= 'George'
 -> );
+----+-------------+----------+-------------+
| id | fecha_orden | cantidad | clientes_id |
+----+-------------+----------+-------------+
| 1 | 2016-02-10 | 99.99 | 1 |
| 2 | 2017-11-11 | 35.50 | 1 |
+----+-------------+----------+-------------+

La forma preferida de realizar este tipo de queries en vez de usar sub queries, es con JOINS, el cual une información de dos tablas para mostrarla junta.

MariaDB [animales]> SELECT nombre, apellido, fecha_orden, cantidad 
FROM clientes 
JOIN ordenes 
ON clientes.id = ordenes.clientes_id;
+--------+----------+-------------+----------+
| nombre | apellido | fecha_orden | cantidad |
+--------+----------+-------------+----------+
| Boy | George | 2016-02-10 | 99.99 |
| Boy | George | 2017-11-11 | 35.50 |

Lo cual se conoce como un Explicit Inner Join.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s