Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

sintaxe simples da instrução de seleção do Oracle

SELECT name
FROM   FRUIT
WHERE  color IN ( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;

Você também pode usar coleções para fazer a mesma coisa:
CREATE FruitColorTableType AS TABLE OF FRUIT.COLOR%TYPE;
/

SELECT DISTINCT
       Name
FROM   FRUIT f
WHERE  FruitColorTableType( 'Red', 'Green' )
       SUBMULTISET OF
       CAST( MULTISET(
         SELECT Color
         FROM   FRUIT c
         WHERE  c.name = f.name
       ) AS FruitColorTableType );

OU:
SELECT name
FROM   FRUIT
WHERE  color MEMBER OF FruitColorTableType( 'Red', 'Green' )
GROUP BY name
HAVING COUNT( DISTINCT color ) = 2;

e se você reescrevê-lo como uma função/procedimento, você pode passar a coleção como um argumento e usar o CARDINALITY() função em vez de codificar o tamanho da coleção.

(Não testei essas duas últimas consultas, então pode haver alguns erros de digitação)