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.