Plantilla:PHP/SQL join
De WikiEducator
Revisión a fecha de 22:19 14 may 2018; ManuelRomero (Discusión | contribuciones)
Concepto de join o reunión natural
Por relación directa vamos a entender que son dos realidades que en el mundo real están relacionadas
es decir para cada cliente, reunirlo con las facturas cuyo valor en el campo id_cliente coincida con la clave de cliente |
Una forma de realizar esta reunión sería
SELECT campos FROM tabla t1 otra_tabla t2 WHERE t1.clave_ppal = t2.clave_foranea
- Por ejemplo:
SELECT * FROM cliente c, factura f WHERE c.id = f.cliente_id
- Por ser una operación muy frecuente se ha implementado un operador explícito para ello
- La sintaxis posible que vamos a estudiar
- A continución vemos su significado para analizar cada una de ellas
- Creación de uniones naturales
- Miramos el ejemplo de employees y departments
- En ella vemos que la coincidencia de clave principal y foránea que las relaciona
department_id
- Podemos hacer el join natural
- Pero en este caso tenemos un pequeño problema
- Hay que tener cuidad con el operador natural join si hay más de una columna que coincida los nombres
- Veamos el siguiente ejemplo
SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID FROM DEPARTMENTS d, EMPLOYEES e WHERE d.DEPARTMENT_ID=e.DEPARTMENT_ID
- Nos da la siguiente salida
- Pero si hacemos la unión natura
SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID FROM DEPARTMENTS NATURAL JOIN EMPLOYEES
o
SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID FROM EMPLOYEES NATURAL JOIN DEPARTMENTS
- Vemos la siguiente salida
- Por que el operador 'NATURAL JOIN' junta las filas de los campos que coincidan nombres
- Si observamos la imagen anterior estas dos tablas tiene las campos en común
DEPARTMENTS_ID MANAGER_ID
- Para esto está el operador USING dentro del JOIN
SELECT DEPARTMENT_NAME, LAST_NAME, EMPLOYEE_ID FROM DEPARTMENTS JOIN EMPLOYEES USING (DEPARTMENT_ID)
- Ahora vemos que el resultado es igual a los 19 registros
- Qué pasa con las filas que no tienen relación
- En el ejemplo anterior tenemos un empleado que no pertenece a ningún departamento
- También tenemos departamentos dónde no hay ningún empleado trabajando
- INNER vS OUTER
- Unión por la izquierda
- Unión por la derecha
- Y si queremos todas (Tanto de la izquierda como de la derecha)
- Juntar una tabla consigo misma
- En este caso debemos ver que el mismo atributo juega roles diferentes
En empleados un concepto es el id de empleado (su clave) y otro el id de la empleada que es gerente (clave extranjera) Archivo:Join img15.png