Тут два пути. Первый получить с помощью SQL запроса - точно верный метод.
И получить с помощью подсчёта строк полученных из запроса - не всегда верный метод(только при маленьком наборе данных).
Сейчас объясню почему:
Представьте, что у вас таблица на 100 000 000 000 строк.
Вы делаете запрос и получаете в результате 10 000 000 000 строк.
Допустим все эти строки вам нужны в программе (пользователь в форме на сайте глюканул и запросил все данные за последние 10 лет). Но вы сначала проверяете с помощью count(*) сколько вернулось строк.
Очевидные плюсы - ваша программа не вылетит потому, что вы получаете всего одно значение, а не 10 000 000 000(И соответственно можете не допустить выгрузки такого большого количества данных которые подвесят вашу систему - что то типа if result > 10 000 then return "Слишком много данных"). Во вторых анализатор SQL вполне возможно обойдётся внутренней статистикой, а не проходом по индексам (или если совсем не повезёт фул тейбл сканом, что даже на миллионой таблице может сильно затормозить). В любом случае при использовании count мы не наблюдаем падения производительности, а в хорошем случае наблюдаем её прирост.
А теперь представим, что вам нужно сделать отчет, вы знаете SQL запрос который вернёт нужные значения, но вы не знаете сколько строк он вернёт. RAM на вашей машине ограничен. Есть вариант, что программа сожрёт всю доступную память и уйдёт в своп(или упадёт если она 32'ух битная и приложению максимум выделяется 1,5 Гб) если заранее не проверить сколько данных мы запихнём в программу. Поэтому нужно перед выгрузкой данных проверить сколько у нас получится этих данных.
По этому самый лучший вариант сначала "SELECT COUNT(*) FROM chel", а потом уже "SELECT <какие-то_столбцы> FROM chel".
Это будет правильно. Ну и старайтесь избегать подзапросов там где без них можно обойтись.
PS это облегчит жизнь и вам и DBA которые будут сопровождать вашу БД.
С уважением админ как раз одной такой большой БД у которого программисты периодически пишут косячный SQL