602SQL-Úplná dokumentace Index  

Zobecněné porovnávání (SQL)

zobecněné_porovnání ::= výraz  relační_operátor kvantifikátor ( dotazový_výraz )
relační_operátor ::= < | > | = | <= | >= | <> 
kvantifikátor  ::= SOME | ANY | ALL

Zobecněné porovnání porovnává hodnotu výrazu s množinou hodnot získanou jako odpověď na dotazový výraz (subdotaz).

Pokud kvantifikátor je SOME nebo ANY, pak zobecněné porovnání má hodnotu TRUE, když relace vyjádřena relačním operátorem platí pro alespoň jednu hodnotu z odpovědi na subdotaz, má hodnotu UNKNOWN, když relace je UNKNOWN pro alespoň jednu hodnotu z odpovědi na subdotaz, jinak má hodnotu FALSE.

Pokud kvantifikátor je ALL, pak zobecněné porovnání má hodnotu TRUE, když relace platí pro všechny hodnoty z odpovědi na subdotaz, má hodnotu UNKNOWN, když relace platí nebo je UNKNOWN pro všechny hodnoty z odpovědi na subdotaz, jinak má hodnotu FALSE.

Z toho vyplývá, že je-li odpověď na subdotaz prázdná, pak zobecněné porovnání má pro kvantifikátor SOME nebo ANY hodnotu FALSE, pro kvantifikátor ALL hodnotu TRUE.

Odpověď na subdotaz musí být skalární (musí obsahovat jediný sloupec) a její typ musí být porovnatelný s typem výrazu.

Identifikátory ANY a SOME jsou zcela ekvivalentní. Zápis =ANY je ekvivalentní s predikátem IN

Příklad použití:

Vybrat ty zaměstnance, kteří mají plat větší než všichni zaměstnanci z Prahy

SELECT TAB1.jmeno,TAB1.plat
FROM Lidi TAB1
WHERE plat > ALL (SELECT plat
                  FROM Lidi 
                  WHERE adresa LIKE '%Praha%')