Le subquery con ALL

Le subquery che usano la parola chiave ALL restituiscono TRUE se la comparazione restituisce TRUE per tutte le righe restituite dalla subquery, o se la subquery non restituisce alcuna riga.

Sintassi

espressione_scalare operatore_comparazione ALL <subquery_tabella>
  • espressione_scalare può essere una qualsiasi espressione che restituisce un solo valore
  • operatore_comparazione può essere uno dei seguenti operatori: =, >, <, >=, <=, <> e !=

ALL restituisce TRUE se la subquery_tabella restituisce zero righe o se l'operatore di comparazione restituisce TRUE per ogni riga restituita da subquery_tabella. ALL restituisce FALSE se l'operatore di comparazione restituisce FALSE per almeno una delle righe restituite da subquery_tabella.

NOT IN è sinonimo di <> ALL.

Esempi

CREATE TABLE sq1 (num TINYINT);

CREATE TABLE sq2 (num2 TINYINT);

INSERT INTO sq1 VALUES(100);

INSERT INTO sq2 VALUES(40),(50),(60);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
+------+
| num  |
+------+
|  100 |
+------+

Siccome 100 > 40,50 e 60, l'operazione risulta true e la riga viene restituita.

Aggiungiamo a sq1 una seconda riga, per la quale il confronto è false:

INSERT INTO sq1 VALUES(30);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
+------+
| num  |
+------+
|  100 |
+------+

Aggiungiamo una nuova riga a sq2, facendo diventare false tutti i confronti:

INSERT INTO sq2 VALUES(120);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);
Empty set (0.00 sec)

Quando la subquery non restituisce alcun risultato, il confronto è true:

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2 WHERE num2 > 300);
+------+
| num  |
+------+
|  100 |
|   30 |
+------+

Il confronto con NULL genera un risultato sconosciuto, non true, e pertanto non restituisce righe:

INSERT INTO sq2 VALUES (NULL);

SELECT * FROM sq1 WHERE num > ALL (SELECT * FROM sq2);

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.