MySQL
Uno a muchos
Buscar..
Introducción
La idea de uno a muchos (1: M) se refiere a la unión de filas entre sí, específicamente los casos en que una sola fila en una tabla corresponde a muchas filas en otra.
1: M es unidireccional, es decir, cada vez que consulta una relación 1: M, puede usar la fila 'one' para seleccionar 'muchas' filas en otra tabla, pero no puede usar una sola fila 'many' para seleccione más de una sola fila 'uno'.
Observaciones
Para la mayoría de los casos, trabajar con una relación 1: M requiere que comprendamos las claves principales y las claves externas .
Una clave principal es una columna en una tabla donde cualquier fila de esa columna representa una sola entidad, o, al seleccionar un valor en una columna de clave primaria, se obtiene exactamente una fila. Usando los ejemplos anteriores, un EMP_ID representa a un solo empleado. Si consulta por un solo EMP_ID, verá una sola fila que representa al empleado correspondiente.
Una clave externa es una columna en una tabla que corresponde a la clave principal de otra tabla diferente. De nuestro ejemplo anterior, el MGR_ID en la tabla EMPLEADOS es una clave externa. En general, para unir dos tablas, las unirá en función de la clave principal de una tabla y la clave externa en otra.
Ejemplo de tablas de empresas
Considere una compañía en la que cada empleado que sea gerente, maneje 1 o más empleados y cada empleado tenga solo 1 gerente.
Esto da como resultado dos tablas:
EMPLEADOS
EMP_ID | NOMBRE DE PILA | APELLIDO | MGR_ID |
---|---|---|---|
E01 | Johnny | Appleseed | M02 |
E02 | Irlanda | Macklemore | M01 |
E03 | Colby | Papeleo | M03 |
E04 | Ron | Sonswan | M01 |
Los gerentes
MGR_ID | NOMBRE DE PILA | APELLIDO |
---|---|---|
M01 | Ruidoso | McQueen |
M02 | Mandón | Pantalones |
M03 | Barril | Jones |
Haga que los empleados sean administrados por un solo gerente
SELECT e.emp_id , e.first_name , e.last_name FROM employees e INNER JOIN managers m ON m.mgr_id = e.mgr_id WHERE m.mgr_id = 'M01' ;
Resultados en:
EMP_ID | NOMBRE DE PILA | APELLIDO |
---|---|---|
E02 | Irlanda | Macklemore |
E04 | Ron | Sonswan |
En última instancia, para cada administrador que consultemos, veremos que se devuelve 1 o más empleados.
Obtener el gerente para un solo empleado
Consulte las tablas de ejemplo anteriores al mirar este ejemplo.
SELECT m.mgr_id , m.first_name , m.last_name FROM managers m INNER JOIN employees e ON e.mgr_id = m.mgr_id WHERE e.emp_id = 'E03' ;
MGR_ID | NOMBRE DE PILA | APELLIDO |
---|---|---|
M03 | Barril | Jones |
Como esto es lo inverso al ejemplo anterior, sabemos que para cada empleado que consultamos, solo veremos un gerente correspondiente.