Las funciones de agregación no pueden aparecer en el where

Es habitual encontrarse consultas como la siguiente: hallar los artículos con el precio más bajo de entre los contenidos en una tabla. Para resolverla podríamos tener la tentación de ejecutar un select SQL, que incluye funciones de agregación en el where, y, por tanto, es incorrecta:

Notación de comparación de tupla para simplificar consultas

SQL permite comparar varias columnas con una única operación, usando la notación de tupla; p.ej., (nombre, apellido) = ('Fran', 'García'). Se trata de una notación muy compacta y útil, que puede llegar a simplificar mucho algunas consultas que requieren de varias subconsultas sobre la misma tabla. Veamos un ejemplo.

FULL OUTER JOIN en MySQL

A diferencia de otros SGBD como SQL Server, Oracle o PostgreSQL, MySQL no implementa la operación FULL OUTER JOIN (me refiero a la versión 8.0.32 e inferiores). Sí implementa LEFT OUTER JOIN y RIGHT OUTER JOIN.

Para realizar esta operación en MySQL hay que hacer la UNION de ambos OUTER JOIN laterales. Pero la explicación requiere aclarar algún matiz adicional que encontrarás descrito a continuación

En las instrucciones update o delete también se pueden hacer joins

Del mismo modo que ante una consulta que requiera datos de varias tablas recurrimos a join para obtener la solución, en una instrucción update o delete también podemos hacerlo. Lo que sigue utiliza la sintaxis propia de MySQL, pero otros SGBD (como SQL Server o PostgreSQL) también permiten hacerlo de forma similar.

Para actualizar un campo usando su antiguo valor no hace falta una subconsulta

Sabemos que en las instrucciones LMD (insert, update, delete) podemos usar subconsultas. Pero en ocasiones, como cuando se quiere actualizar el valor de un campo a partir del valor anterior del mismo, no es conveniente emplearlas. Lo único que conseguimos es complicar la instrucción y penalizar el rendimiento en su ejecución.

Qué hacer cuando una modificación requiere consultar la tabla que se está modificando

En ocasiones, para modificar una tabla (con update, insert, delete), necesitamos consultar algún dato de la la propia tabla para usarlo en la instrucción de modificación. En MySQL esto no es posible, salvo que emplees este truco.