miércoles, 20 de febrero de 2013

Cómo utilizar JOIN en sentencias UPDATE o DELETE.


Cómo utilizar JOIN en sentencias UPDATE o DELETE.

 Una práctica muy recomendable antes de lanzar una sentencia UPDATE o DELETE sobre un subconjunto de tuplas, es probar a realizar la proyección, afinando las condiciones de restricción para el subconjunto (mediante una sentencia WHERE). Cuando nos encontramos ante una condiciones sencillas, reutilizar la misma clausula WHERE es trivial. Pero qué sucede cuando queremos utilizar funciones de composición (JOIN) para restringir el conjunto de datos.



SELECT * FROM c_menutipousuario mtu INNER JOIN tipousuario tu ON mtu.TipoUsuarioId =tu.TipoUsuarioId  INNER JOIN usuario u ON u.TipoUsuarioId=tu.TipoUsuarioId WHERE u.UsuarioId=3

 Ejemplo para DELETE. En este caso después del DELETE hay que especificar la tabla o tablas (multi-delete):

DELETE  mtu  FROM c_menutipousuario mtu INNER JOIN   tipousuario tu ON mtu.TipoUsuarioId =tu.TipoUsuarioId  INNER JOIN usuario u ON u.TipoUsuarioId=tu.TipoUsuarioId WHERE u.UsuarioId=3

DELETE T2 FROM table2 T2 ON T1.id = T2.id 
INNER JOIN table3 T3 ON T3.other_id = T2.other_id 
INNER JOIN table4 T4 ON T4.category = T3.category  
WHERE T1.TYPE = 'X' AND T1.category  = 'A';
 
 
 Ejemplo para UPDATE, donde se puede ver como se han utilizado varios J
OINs en el bloque de referencia a la table 
(table_reference en el manual de MySql):
 
UPDATE table1 T1 INNER JOIN table2 T2 ON T1.id = T2.id 
INNER JOIN table3 T3 ON T3.other_id = T2.other_id 
INNER JOIN table4 T4 ON T4.category = T3.category SET T1.readed = 0 
 WHERE T1.TYPE = 'X' AND T1.category  = 'A'; 

Referencia
http://ridersofthebit.net/blog/2010/10/05/como-utilizar-join-en-sentencias-update-o-delete-mysql/

otras pagina de Interes 
http://geeks.ms/blogs/ozonicco/archive/2006/10/03/Subqueries-vs-INNER-JOINs-.aspx


SubQueries vs INNER JOINs

Es muy conocido que en el proceso de trabajo con subconsultas, necesariamente manejaremos dos tipos de consultas: consultas internas y consultas externas. Las consultas internas no es más que las subconsultas propiamente dichas y la consultas externa es aquella que hace uso de los resultados devueltos por la consulta interna o subconsulta. En todo este rollo, también se harán uso del predicado IN.
Ejemplo: la consulta externa usa el predicado IN para operar con los valores devueltos por la subconsulta.
Por otra parte, cuando se presenta una subconsulta con la palabra clave EXISTS, funciona como una prueba de existencia. La cláusula WHERE de la consulta externa comprueba la existencia de las filas devueltas por la subconsulta. La subconsulta en realidad no produce ningún dato, devuelve el valor TRUE o FALSE.
En muchos casos puede usarse una operación de combinación en lugar de una consulta, no obstante algunas instancias pueden procesarse solo con una subconsulta. En algunos casos una operación de combinación puede producir un mejor rendimiento que una subconsulta, pero por lo general se observa muy poca diferencia en el rendimiento. Sin embargo, el uso de grandes anidamientos de subconsultas puede afectar seriamente el rendimiento. De manera general la utilización de combinaciones producirá los mejores resultados. Veámos un ejemplo:

Haciendo uso de una subconsulta podríamos realizar la siguiente consulta:
Formulando la anterior subconsulta como una combinación.
Haciendo uso de una subconsulta podríamos realizar la siguiente consulta:
Formulando la anterior subconsulta como una combinación.
Haciendo uso de una subconsulta podríamos realizar la siguiente consulta:
Formulando la anterior subconsulta como una combinación.
La subconsulta siempre está encerrada entre paréntesis y a menos que se vaya a ejecutar una subconsulta correlacionada termina antes de que se procese la consulta externa. Una subconsulta puede contener otra subconsulta, y esta subconsulta puede, a su vez, contener otra subconsulta, ... y así sucesivamente. Los recursos del sistema(como la memoria disponible) limitan el número de subconsultas que pueden procesarce. Se puede anidar subconsultas hasta 32 niveles, pero esto como le mencioné, depende de los recursos disponibles del sistema. Ejemplo:
Formulando la anterior subconsulta como una combinación:
Una subconsulta no está limitado para sentencias SELECT, tambíen se puede usar con instrucciones DELETE, UPDATE, INSERT.
INSERT
UPDATE
DELETE
Un subquery puede usarse de muchas maneras más, es bastante flexible, debes tener a la mano muchos criterios para saber cuando usarlo. Este artículo te ayudará a entender todo esto: ¿Cómo y cuándo usar subconsultas?
Otras formas de usar un subquery se explican en los siguientes artículos que os recomiendo leerlos:
Todo esto fue por esta vez, espero haber contribuido a aclarar este tema.




No hay comentarios.:

Publicar un comentario