companies.fdb → companies → SELECT … WHERE

SQL · SELECT … WHERE · База данных компаний

SELECT WHERE по таблице компаний

Таблица «companies» — 300 строк детерминированно сгенерированных данных. Показанный ниже SELECT … WHERE реально выполнен движком FileDB: 20 строк в результате, 5.3 мс на выполнение, полным сканом таблицы.

Структура таблицы companies

Поля и типы данных

ПолеТипNullableИндекс
idintнетда (PK)
namevarchar(80)нет
cityvarchar(80)нет
industryvarchar(80)нет
founded_yearint (1991–2023)нет
employees_countint (5–5000)нет
revenue_mlnrealнет
websitevarchar(80)нет
phonevarchar(80)нет
emailvarchar(80)нет
is_activebooleanнет
legal_formvarchar(80)нет
tax_idvarchar(80)нет
ratingrealнет
registered_datedateнет

Пример строк (8 из 300)

idnamecityindustryfounded_yearemployees_countrevenue_mlnwebsitephoneemailis_activelegal_formtax_idratingregistered_date
261Техно-ИнвестСанкт-ПетербургЛогистика19922684752.43bestplus.org+7 (962) 276-79-30user7631@example.comtrueПАО51230073.922025-03-17
262Столица-ПромМоскваПроизводство20044392856.03proinvest.ru+7 (978) 662-43-37user3275@example.comfalseНКО62340253.192025-02-25
263Актив-ТехКраснодарТорговля2000485083.48techgroup.net+7 (952) 413-84-32user3833@example.comfalseАО60120023.322025-04-08
264РусИнвестРостов-на-ДонуРеклама199731532419.25uniservis.com+7 (987) 828-84-91user8412@example.comtrueНКО70780252.842025-09-06
265ОсноваТехКазаньСтроительство202232968392.20novahub.com+7 (900) 121-57-87user2559@example.comfalseАО50780203.642025-06-25
266Зенит-МаркетСаратовФинансы19915271319.34smartline.ru+7 (920) 450-97-32user6898@example.comfalseЗАО24560041.082025-09-29
267Рус-ГруппНижний НовгородФинансы19971692973.84techcorp.org+7 (950) 479-70-23user5837@example.comtrueИП90560301.072025-02-20
268СинтезСтройОмскIT199712444551.73proinvest.org+7 (981) 743-61-05user9622@example.comtrueНКО45670252.692026-03-15

SQL-запрос: SELECT … WHERE

Задача: отобрать строки таблицы «companies» по условию на поле industry — базовый паттерн любой выборки.

SELECT id, name, city, industry, founded_year FROM companies WHERE industry = 'IT' AND revenue_mln < 4900.25 LIMIT 20;
SQL Playground · companies.fdbFileDB Engine
результат появится ниже

Результат выполнения

300строк в таблице
20строк в результате
5.3 мсвремя выполнения

В результате 20 строк из 300 (около 6%). Если бы условие возвращало почти всю таблицу, фильтр был бы бесполезен; ноль строк — повод проверить значения в данных, а не синтаксис.

Первые строки результата

idnamecityindustryfounded_year
116СтандартТрейдТольяттиIT2013
124ЛидерЛогистикИжевскIT1999
150Вектор-МаркетУфаIT2005
155Орбита-ПромВоронежIT2002
164ЮнионИнвестНижний НовгородIT2016

Показаны 5 из 20 строк результата.

Как читать этот запрос

WHERE — это фильтр по строкам: движок оставляет только те записи companies, для которых условие истинно. Читайте запрос справа налево: сначала «откуда» (FROM), потом «какие строки» (WHERE), и только потом «какие колонки» (SELECT).
Индекса по полю условия нет — движок делает полный скан всех 300 строк. Здесь это дёшево, но на больших таблицах такой запрос — первый кандидат на CREATE INDEX.
Замеренное время выполнения — 5.25 мс (embedded-режим, без сетевого хопа: FileDB работает в том же процессе, что и приложение).

SELECT … WHERE в разных СУБД

СУБДСинтаксисОтличие
PostgreSQLWHERE поле >= 4идентичен, строгая типизация дат
MySQLWHERE поле >= 4сравнение дат-строк допускает неявное приведение типов
SQLiteWHERE поле >= 4дата хранится как TEXT — важен формат ISO 8601
FileDBWHERE поле >= 4синтаксис ANSI SQL, B-Tree индекс используется автоматически

Скачать структуру и данные

Файлы собираются из текущего датасета (seed v1): структура таблицы, 300 строк данных и этот запрос.

Похожие запросы

Вопросы и ответы

Почему запрос выполняется за 5.3 мс на 300 строках, а не мгновенно?

«Мгновенно» физически не бывает: движку нужно время на поиск по B-Tree, чтение строк из кэша или с диска и сборку результата. Единицы миллисекунд на такой таблице — это и есть быстро.

Что вернёт условие при NULL в поле?

Сравнение с NULL не истинно и не ложно — такие строки не попадают в результат ни при условии, ни при его отрицании. Для них есть отдельные IS NULL / IS NOT NULL.

Чем WHERE отличается от HAVING?

WHERE фильтрует строки до группировки и агрегации, HAVING — уже посчитанные группы. В этом запросе группировки нет, поэтому используется только WHERE.