Plantilla:PHP/SQL join

De WikiEducator
Saltar a: navegación, buscar

Concepto de join o reunión natural



Icon define.gif
JOIN
El join consiste en unir filas de diferentes tablas
Con la condición que esas filas tengan una relación directa
Por relación directa vamos a entender que son dos realidades
que en el mundo real están relacionadas


Icon casestudy.gif
Ejemplo
Las facturas de cada empleados
Un empleado tiene realción directa con sus facturas


La relación directa queda almacenada con la clave extranjera que propagamos.
Se tratará de los clientes sus facturas
es decir para cada cliente, reunirlo con las facturas
cuyo valor en el campo id_cliente coincida con la clave de cliente


Join img1.png 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

Join img2.png

La sintaxis posible que vamos a estudiar

Join img3.png

A continución vemos su significado para analizar cada una de ellas

Join img4.png

Creación de uniones naturales

Join img5.png

  • 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

Join img6.png

  • 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

Join img7.png

  • 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

Join img8.png

  • 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


Icon key points.gif

Puntos clave

Podría ser que también nos interesaran esas tuplas

Join img10.png

INNER vS OUTER

Join img11.png

Unión por la izquierda

Join img12.png

Unión por la derecha

Join img13.png

Y si queremos todas (Tanto de la izquierda como de la derecha)

Join img14.png



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

Funciones de conversión de tipos

Func conv1.png


Func conv1.png


Func conv2.png


Func conv3.png


Func conv4.png


Func conv5.png


Func conv6.png


Func conv7.png


Func conv8.png


Func conv9.png


Func conv10.png