Определить, существует ли хотя бы одна строка с заданным условием

Таблица сотрудников имеет идентификаторы и столбцы NAME. Имена могут повторяться. Я хочу узнать, есть ли хотя бы одна строка с именем "kaushik%".

Таким образом, запрос должен возвращать true/false или 1/0.

Можно ли найти его с помощью одного запроса. Если мы попробуем что-то вроде

select count(1) from employee where name like 'kaushik%'

в этом случае он не возвращает true/false. Также мы повторяем все записи в таблице. Есть ли способ в простом SQL, чтобы всякий раз, когда первая запись, которая удовлетворяет условию, извлекается, она должна прекратить проверку дальнейших записей. Или такая вещь может быть обработана только в блоке PL/SQL?

РЕДАКТИРОВАТЬ * Первый подход, представленный Джастином, выглядит правильным ответом

SELECT COUNT(*) FROM employee WHERE name like 'kaushik%' AND rownum = 1

Ответ 1

Обычно вы можете выразить это как

SELECT COUNT(*)
  FROM employee
 WHERE name like 'kaushik%'
   AND rownum = 1

где предикат rownum = 1 позволяет Oracle прекратить поиск, как только найдет первую соответствующую строку или

SELECT 1
  FROM dual
 WHERE EXISTS( SELECT 1
                 FROM employee
                WHERE name like 'kaushik%' )

где предложение EXISTS позволяет Oracle прекратить поиск, как только найдет первую соответствующую строку.

Первый подход немного компактнее, но, на мой взгляд, второй подход немного более ясен, поскольку вы действительно хотите определить, существует ли определенная строка, а не пытаться что-то подсчитать. Но первый подход довольно легко понять.

Ответ 2

Как насчет:

select max(case when name like 'kraushik%' then 1 else 0 end)
from employee

Или, что может быть более эффективным, поскольку like может использовать индексы:

select count(x)
from (select 1 as x
      from employee
      where name like 'kraushik%'
     ) t
where rownum = 1

Ответ 3

так как вам требуется, чтобы SQL-запрос возвращал 1 или 0, вы можете попробовать следующий запрос: -

select count(1) from dual 
where exists(SELECT 1 
             FROM employee
             WHERE name like 'kaushik%')

Так как вышеупомянутый запрос использует Exists, он сканирует таблицу employee и как только он встретит первую запись, где имя будет соответствовать "kaushik", оно вернет 1 (без сканирования остальной части таблицы). Если ни одна из записей не соответствует, тогда она вернет 0.

Ответ 4

select 1 
 where exists ( select name 
                  from employee 
                  where name like 'kaushik%'
               )