|
![]() | Podmínky a predikáty | Predikát BETWEEN | ![]() |
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%')
![]() | Podmínky a predikáty | Predikát BETWEEN | ![]() |