Мелочь в синтаксисе SELECT
В синтаксисе запроса SELECT «Постгреса» есть приятная мелочь, которая хоть и нестандартна, но греет мне душу, — согласно описанию, выбираемые поля (часть между SELECT и FROM) можно опускать.
Вот как это работает в консоли:
SELECT FROM usr;
--
(588910 строк)
Кстати, можно ещё поставить там ключевое слово ALL, будет результат будет точно такой же.
Для чего это может пригодиться? Для подзапросов с EXISTS. Мне не нравится, как выглядит всем привычный вариант:
SELECT COUNT(*)
FROM document
WHERE EXISTS (
SELECT NULL
FROM document_n
WHERE id = document.id
)
В подзапросе после SELECT по стандарту надо что-то указать, всё равно что, использоваться это не будет. Мне такая избыточность не по вкусу. А вот «Постгрес» позволяет ничего там не указывать:
SELECT COUNT(*)
FROM document
WHERE EXISTS (
SELECT
FROM document_n
WHERE id = document.id
)
Смотрится как будто чуть почище. Знаю, многие ребята осуждают использование особенностей реализации эскуэля в конкретной СУБД, из-за возможных проблем с портированием на другие СУБД, но для нас это вряд ли проблема — в нашем продукте используется множество куда более сложных специфичных для «Постгреса» вещей.
Если когда-либо встанет вопрос о переезде на другую СУБД, то вышеописанное — самая малая из проблем и решить её просто — заменой через регулярное выражение.
Контекст не очень знаю, но все же спрошу, в проекте пишете на чистом SQL, без использования ORM? И если да, то почему?
Мы пишем на чистом SQL, да, нам приходится серьёзно заниматься оптимизацией запросов.