Если я выполняю запрос, такой как:
SELECT COUNT(*) as num FROM table WHERE x = 'y'
Это будет всегда возвращать результат, даже когда запрос не соответствует никакой записи? Или я должен проверить и удостовериться, что строка возвращается как результат?
Да, потому что это агрегат и возвращает ноль. Если вы не добавите GROUP BY, в этом случае нет результата, потому что нет группы. ..
MAX / SUM и т. Д. Вернет NULL, если вы не добавите GROUP BY, а затем никаких строк. Только COUNT возвращает число без результатов
Редактировать, немного поздно: SUM вернет NULL, как MAX
Edit, май 2013: это относится ко всем основным СУБД. Полагаю, согласно стандарту ANSI
Агрегатная функция Count () всегда возвращает значение
если ни одна запись не найдена, счетчик вернет 0. (так что да, счетчик всегда возвращает результат, если только у вас нет синтаксической ошибки )
Всегда будет такая строка результата:
| COUNT(*) |
------------
| 0 |
, если совпадений нет.
Кстати, я бы предпочел считать только первичный ключ вместо *
.