La table des employés comporte des colonnes ID et NAME. Les noms peuvent être répétés. Je veux savoir s'il y a au moins une ligne avec un nom comme 'kaushik%'.
La requête doit donc renvoyer true/false ou 1/0.
Est-il possible de le trouver en utilisant une seule requête. Si nous essayons quelque chose comme
select count(1) from employee where name like 'kaushik%'
dans ce cas, il ne renvoie pas vrai/faux. Nous parcourons également tous les enregistrements du tableau. Existe-t-il un moyen dans SQL simple de sorte que chaque fois que le premier enregistrement qui satisfait la condition est récupéré, il devrait cesser de vérifier d'autres enregistrements. Ou une telle chose ne peut être gérée que dans le bloc Pl/SQL?
EDIT * La première approche fournie par Justin semble bonne réponse
SELECT COUNT(*) FROM employee WHERE name like 'kaushik%' AND rownum = 1
Généralement, vous exprimeriez cela soit
SELECT COUNT(*)
FROM employee
WHERE name like 'kaushik%'
AND rownum = 1
où le rownum = 1
le prédicat permet à Oracle de cesser de chercher dès qu'il trouve la première ligne correspondante ou
SELECT 1
FROM dual
WHERE EXISTS( SELECT 1
FROM employee
WHERE name like 'kaushik%' )
où la clause EXISTS
permet à Oracle d'arrêter la recherche dès qu'il trouve la première ligne correspondante.
La première approche est un peu plus compacte mais, à mon avis, la deuxième approche est un peu plus claire car vous cherchez vraiment à déterminer si une ligne particulière existe plutôt que d'essayer de compter quelque chose. Mais la première approche est également assez facile à comprendre.
Que diriez-vous:
select max(case when name like 'kraushik%' then 1 else 0 end)
from employee
Ou, ce qui pourrait être plus efficace puisque like
peut utiliser des index:
select count(x)
from (select 1 as x
from employee
where name like 'kraushik%'
) t
where rownum = 1
puisque vous avez besoin que la requête sql retourne 1 ou 0, alors vous pouvez essayer la requête suivante: -
select count(1) from dual
where exists(SELECT 1
FROM employee
WHERE name like 'kaushik%')
Étant donné que la requête ci-dessus utilise Exists, elle analysera la table des employés et dès qu'elle rencontrera le premier enregistrement dont le nom correspond à "kaushik", elle renverra 1 (sans analyser le reste de la table). Si aucun des enregistrements ne correspond, il renvoie 0.
select 1
where exists ( select name
from employee
where name like 'kaushik%'
)