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 <> 'бархат' выбросит не только чужие пальто, но и всех, у кого пальто вообще не записано. Пустая графа не отвечает «да» ни на что. Про этого призрака — отдельный урок, восьмой; пока просто знайте, что он есть.
На работе это ваша первая отсечка на чём угодно: кто в нужном городе, кто в нужном окне, кто из нужного списка. Сито не назовёт виновного. Оно расчистит стол, чтобы виновному было негде спрятаться.
«Сначала выбросите всех, кто точно ни при чём. Говорить будете с теми, кто останется.»
Сито — не теория. В первом деле архива с него начинается вся работа: полтораста имён, один вечер, трое, с кем стоит говорить. Проверять на слово не обязательно — откройте дело и просейте сами.