Saltar a contenido

El operador ALL de PostgreSQL permite comparar un valor con todos los valores de un conjunto devuelto por una subconsulta.

Esta es la sintaxis básica del operador ALL:

expresion operator ALL(subquery)

En esta sintaxis:

  • El operador ALL debe ir precedido de un operador de comparación como igual (=), no igual (<>), mayor que (>), mayor o igual que (>=), menor que (<) y menor o igual que (<=).
  • El operador ALL debe ir seguido de una subconsulta que también debe ir rodeada de paréntesis.

Si la subconsulta devuelve un conjunto de resultados no vacío, el operador ALL funciona del siguiente modo:

  • valor > ALL (subconsulta) devuelve verdadero si el valor es mayor que el mayor valor devuelto por la subconsulta.
  • valor >= ALL (subconsulta) devuelve verdadero si el valor es mayor o igual que el mayor valor devuelto por la subconsulta.
  • valor < ALL (subconsulta) devuelve verdadero si el valor es menor que el menor valor devuelto por la subconsulta.
  • valor <= ALL (subconsulta) devuelve verdadero si el valor es menor o igual que el menor valor devuelto por la subconsulta.
  • valor = ALL (subconsulta) devuelve verdadero si el valor es igual a todos los valores devueltos por la subconsulta.
  • valor != ALL (subconsulta) devuelve verdadero si el valor no es igual a ningún valor devuelto por la subconsulta.

Cuando la subconsulta no devuelve ninguna fila, el operador ALL siempre es verdadero.

Ejemplos del operador ALL

Exploremos algunos ejemplos de uso del operador ALL de PostgreSQL.

Configurando una tabla de ejemplo

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    first_name VARCHAR(255) NOT NULL,
    last_name VARCHAR(255) NOT NULL,
    salary DECIMAL(10, 2) NOT NULL
);

CREATE TABLE managers(
    id SERIAL PRIMARY KEY,
    first_name VARCHAR(255) NOT NULL,
    last_name VARCHAR(255) NOT NULL,
    salary DECIMAL(10, 2) NOT NULL
);

INSERT INTO employees (first_name, last_name, salary) 
VALUES
('Bob', 'Williams', 75000.00),
('Charlie', 'Davis', 55000.00),
('David', 'Jones', 50000.00),
('Emma', 'Brown', 48000.00),
('Frank', 'Miller', 52000.00),
('Grace', 'Wilson', 49000.00),
('Harry', 'Taylor', 53000.00),
('Ivy', 'Moore', 47000.00),
('Jack', 'Anderson', 56000.00),
('Kate', 'Hill',  44000.00),
('Liam', 'Clark', 59000.00),
('Mia', 'Parker', 42000.00);

INSERT INTO managers(first_name, last_name, salary) 
VALUES
('John', 'Doe',  60000.00),
('Jane', 'Smith', 55000.00),
('Alice', 'Johnson',  58000.00);

Ejemplo de uso del operador ALL con mayor que (>)

El siguiente ejemplo utiliza el operador ALL para los empleados que tienen salarios superiores a todos los directivos

SELECT 
  * 
FROM 
  employees 
WHERE 
  salary > ALL(
    select 
      salary 
    from 
      managers
  );

Salida:

 id | first_name | last_name |  salary
----+------------+-----------+----------
  1 | Bob        | Williams  | 75000.00
(1 row)

La consulta devuelve una fila con un salario de 75K que es mayor que el salario más alto de todos los directivos (60K).

Ejemplo de uso del operador ALL con menor que (<)

El siguiente ejemplo utiliza el operador ALL para los empleados que tienen sueldos inferiores a todos los directivos:

SELECT 
  * 
FROM 
  employees 
WHERE 
  salary < ALL(
    select 
      salary 
    from 
      managers
  )
ORDER BY salary DESC;

Salida:

 id | first_name | last_name |  salary
----+------------+-----------+----------
  7 | Harry      | Taylor    | 53000.00
  5 | Frank      | Miller    | 52000.00
  3 | David      | Jones     | 50000.00
  6 | Grace      | Wilson    | 49000.00
  4 | Emma       | Brown     | 48000.00
  8 | Ivy        | Moore     | 47000.00
 10 | Kate       | Hill      | 44000.00
 12 | Mia        | Parker    | 42000.00
(8 rows)

Devuelve todos los empleados cuyo salario es inferior al salario más bajo de todos los directivos que es 55K.

Resumen

  • Utilice el operador ALL de PostgreSQL para comparar un valor con todos los valores de un conjunto de valores devueltos por una subconsulta.