procedimientos linea funciones espaƱol desde datos consultas con comandos cero bases aprender administraciĆ³n sql database postgresql rdbms sql-in

funciones - linea de comandos postgresql



IN vs CUALQUIER operador en PostgreSQL (1)

Lógicamente , citando el manual :

IN es equivalente a = ANY .

Pero hay dos variantes de sintaxis de IN y dos variantes de ANY construcción. Detalles:

La variante IN () toma un conjunto es equivalente a = ANY() toma un conjunto , como se demuestra aquí:

Pero la segunda variante de cada uno no es equivalente a la otra . La segunda variante de la construcción ANY toma una matriz (debe ser un tipo de matriz real), mientras que la segunda variante de IN toma una lista de valores separados por comas. Esto lleva a diferentes restricciones en el paso de valores y también puede conducir a diferentes planes de consulta en casos especiales:

La construcción ANY es mucho más versátil, ya que se puede combinar con varios operadores, no solo = . Ejemplo para LIKE :

SELECT ''foo'' LIKE ANY(''{FOO,bar,%oo%}'');

Para una gran cantidad de valores, proporcionar un conjunto escala mejor para cada uno:

Relacionado:

Inversión / opuesto / exclusión

La inversión de:

SELECT * FROM foo WHERE id = ANY (ARRAY[1, 2]);

"buscar filas donde la id no está en la matriz" - es:

SELECT * FROM foo WHERE id <> ALL (ARRAY[1, 2]);

Que es lo mismo que:

SELECT * FROM foo WHERE NOT (id = ANY (ARRAY[1, 2]));

Las filas con id IS NULL no pasan ninguna de estas expresiones. Para incluir valores NULL adicionalmente:

SELECT * FROM foo WHERE (id = ANY (ARRAY[1, 2])) IS NOT TRUE;

¿Cuál es la diferencia entre IN y ANY operador en PostgreSQL?
El mecanismo de trabajo de ambos parece ser el mismo. ¿Alguien puede explicar esto con un ejemplo?