SELECT и WHERE: как отсеять лишнее

Картотека на полторы сотни имён, а труп ждать не станет. Прочитать всех глазами — не работа, а самоубийство. Первый инструмент сыщика проще, чем кажется: сито. В SQL оно зовётся фильтром — отсеиваете всех, кто отвечает «нет», и оставляете тех, кто отвечает «да».

Это первый урок курса — дальше они идут по порядку, и каждый следующий опирается на предыдущий. Примеры взяты из архивного дела, и таблицы в них всё время одни и те же: guest_list — кто был в зале, receipts — что покупали, contacts — кто с кем связан.

Сначала поднимите папку целиком. SELECT — «покажи», FROM — «откуда брать».

SELECT *
FROM guest_list;

Как из полутора сотен имён получить троих?

Полтораста строк вповалку. Теперь просеиваем. WHERE — это вопрос, на который каждая строка отвечает «да» или «нет». Кто ушёл после одиннадцати?

SELECT name
FROM guest_list
WHERE left_at > '23:00';
name
Восс
Ортис

Один признак проредил толпу, но не сдал её. Мало. Два признака сужают быстрее: AND — «и то, и другое», OR — «хоть что-нибудь из двух».

SELECT name
FROM guest_list
WHERE left_at > '23:00'
  AND coat = 'бархат';
«Сито не ищет виновного. Оно выбрасывает невиновных, пока не останется, с кем говорить.»

А если на примете короткий список имён — спрашивайте напрямую. IN — «кто из этих».

SELECT name
FROM guest_list
WHERE name IN ('Восс', 'Ортис', 'Бэнкс');

Что будет, если смешать AND и OR в одном фильтре?

Теперь капкан, и он стоит осторожного шага. AND связывает крепче, чем OR. Прочтите вот это глазами базы, а не своими:

WHERE coat = 'бархат' OR coat = 'кожа' AND left_at > '23:00'

База читает не слева направо, а так: бархат ИЛИ (кожа И ушёл поздно). В улов попадут все в бархате — в любое время, хоть в полдень. Не то, что вы просили. Где в одном фильтре встречаются AND и OR — ставьте скобки всегда:

WHERE (coat = 'бархат' OR coat = 'кожа')
  AND left_at > '23:00'

И вторая западня, тихая: WHERE coat <> 'бархат' выбросит не только чужие пальто, но и всех, у кого пальто вообще не записано. Пустая графа не отвечает «да» ни на что. Про этого призрака — отдельный урок, восьмой; пока просто знайте, что он есть.

На работе это ваша первая отсечка на чём угодно: кто в нужном городе, кто в нужном окне, кто из нужного списка. Сито не назовёт виновного. Оно расчистит стол, чтобы виновному было негде спрятаться.

«Сначала выбросите всех, кто точно ни при чём. Говорить будете с теми, кто останется.»

Сито — не теория. В первом деле архива с него начинается вся работа: полтораста имён, один вечер, трое, с кем стоит говорить. Проверять на слово не обязательно — откройте дело и просейте сами.

$0
тащи карточки за верхнюю кромку · «+ стикер» · «🧵 нить» — клик по двум

ЛОТОК УЛИК

во вкладке SQL найди подозреваемых и жми «+ доска»

НА ПРОВЕРКУ

теории из «Заметок» отправляются сюда — подтверди на доске или удали
Ctrl+Enter · «+ доска» на строке — выбрать поля и перенестипиши запрос, я подожду
Результат появится здесь.

Картотека

Заметки

Факты

Теории на проверку

Подсказки

◆ РЕЖИМ АРХИВАРИУСАуправление картотекой дел · не виден игроку