Имя order конфликтует с ключевым словом SQL, поэтому без экранирования запрос обычно не выполнится. Сам скалярный подзапрос COUNT(*) допустим, но здесь лишний.
SQL‑запрос и использование зарезервированных имен
Имя order конфликтует с ключевым словом SQL, поэтому без экранирования запрос обычно не выполнится. Сам скалярный подзапрос COUNT(*) допустим, но здесь лишний.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В базе данных присутствует таблица order(name, price). Возникает вопрос: корректно ли выполнится следующий запрос?
select (select count(*) from order) as qty
Ответ
Имя order конфликтует с ключевым словом SQL, поэтому без экранирования запрос обычно не выполнится. Сам скалярный подзапрос COUNT(*) допустим, но здесь лишний.
Для PostgreSQL проще:
SELECT COUNT(*) AS qty
FROM "order";
COUNT(*) возвращает одну строку даже для пустой таблицы, со значением 0. В исходном варианте после экранирования подзапрос также даст одно значение. Правила quoting и допустимость SELECT без внешнего FROM зависят от СУБД; безопаснее выбирать незарезервированные имена таблиц.