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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow