sql >> Base de Datos >  >> RDS >> Mysql

SQL:¿necesitamos ALGUNAS/ALGUNAS y TODAS las palabras clave?

Encuentro que ANY y ALL son muy útiles cuando no solo estás probando igualdad o desigualdad. Considere

'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);

como usé mi respuesta a esta pregunta .

ANY , ALL y sus negaciones pueden simplificar en gran medida el código que, de lo contrario, requeriría subconsultas o CTE no triviales, y en mi opinión, están significativamente infrautilizados.

Considere que ANY funcionará con cualquier operador. Es muy útil con LIKE y ~ , pero funcionará con tsquery, pruebas de membresía de matriz, pruebas de clave hstore y más.

'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])

o:

'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])

Sin ANY o ALL probablemente tendría que expresarlos como una subconsulta o CTE sobre un VALUES lista con un agregado para producir un único resultado. Claro, puedes hacerlo si quieres, pero me ceñiré a ANY .

Aquí hay una advertencia real:en versiones anteriores de Pg, si está escribiendo ANY( SELECT ... ) , es casi seguro que estará mejor en términos de rendimiento con EXISTS (SELECT 1 FROM ... WHERE ...) . Si está en una versión en la que el optimizador activará ANY (...) en una unión, entonces no necesita preocuparse. En caso de duda, consulte EXPLAIN salida.