HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Достаточно распространенная ситуация - нам нужно выбрать строки по нескольким условиям. Например, мы ищем все курсы, которые созданы до 14 июня 2022 года и содержат в описании слово dolor.</p>
1 <p>Достаточно распространенная ситуация - нам нужно выбрать строки по нескольким условиям. Например, мы ищем все курсы, которые созданы до 14 июня 2022 года и содержат в описании слово dolor.</p>
2 <p>Мы можем составить два запроса: один на условие с датой, второй - на условие с текстом в описании. Потом мы сравниваем, какие строки попали в оба запроса. Этот способ крайне неудобный и чреват ошибками.</p>
2 <p>Мы можем составить два запроса: один на условие с датой, второй - на условие с текстом в описании. Потом мы сравниваем, какие строки попали в оба запроса. Этот способ крайне неудобный и чреват ошибками.</p>
3 <p>В этом уроке мы научимся решать эту задачу по-другому. Вы узнаете, как сочетать несколько условий в одном запросе с помощью логических операторов OR и AND.</p>
3 <p>В этом уроке мы научимся решать эту задачу по-другому. Вы узнаете, как сочетать несколько условий в одном запросе с помощью логических операторов OR и AND.</p>
4 <h2>Таблицы истинности</h2>
4 <h2>Таблицы истинности</h2>
5 <p>Прежде чем приступать к запросам, давайте рассмотрим, в чем разница между логическими операторами OR и AND.</p>
5 <p>Прежде чем приступать к запросам, давайте рассмотрим, в чем разница между логическими операторами OR и AND.</p>
6 <p>Начнем с оператора OR. Он переводится как "ИЛИ" и указывает, что выражение будет верным, если хотя бы одно условие выполняется.</p>
6 <p>Начнем с оператора OR. Он переводится как "ИЛИ" и указывает, что выражение будет верным, если хотя бы одно условие выполняется.</p>
7 <p>Пусть у нас будет два условия: A и B. Например:</p>
7 <p>Пусть у нас будет два условия: A и B. Например:</p>
8 <ul><li>А: В описании содержится слово "dolor"?</li>
8 <ul><li>А: В описании содержится слово "dolor"?</li>
9 <li>B: Дата создания до 14 июня 2022 года?</li>
9 <li>B: Дата создания до 14 июня 2022 года?</li>
10 </ul><p>Составим таблицу, в которой перечислим всевозможные сочетания этих условий и результат A OR B. Такая таблица называется<strong>таблицей истинности</strong>оператора OR:</p>
10 </ul><p>Составим таблицу, в которой перечислим всевозможные сочетания этих условий и результат A OR B. Такая таблица называется<strong>таблицей истинности</strong>оператора OR:</p>
11 <p>Второй оператор - это AND. Он переводится как "И" и указывает, что выражение будет верным, только если оба условия A и B выполняются.</p>
11 <p>Второй оператор - это AND. Он переводится как "И" и указывает, что выражение будет верным, только если оба условия A и B выполняются.</p>
12 <p>Таблица истинности оператора AND выглядит так:</p>
12 <p>Таблица истинности оператора AND выглядит так:</p>
13 <h2>Как объединять условия</h2>
13 <h2>Как объединять условия</h2>
14 <p>Теперь вы знаете, как работают логические операторы. Попробуем объединить несколько условий в одном запросе.</p>
14 <p>Теперь вы знаете, как работают логические операторы. Попробуем объединить несколько условий в одном запросе.</p>
15 <p>Представим, что строка должна попасть в результирующую таблицу только если оба условия будут выполнены. В таком случае мы используем AND.</p>
15 <p>Представим, что строка должна попасть в результирующую таблицу только если оба условия будут выполнены. В таком случае мы используем AND.</p>
16 <p>Выведем всю информацию о курсах, созданных до 14 июня 2022 года и содержащих слово dolor в описании:</p>
16 <p>Выведем всю информацию о курсах, созданных до 14 июня 2022 года и содержащих слово dolor в описании:</p>
17 <p><a>View on DB Fiddle</a></p>
17 <p><a>View on DB Fiddle</a></p>
18 <p>В этом запросе мы выбираем по двум условиям:</p>
18 <p>В этом запросе мы выбираем по двум условиям:</p>
19 <ul><li>В описании встречается слово dolor</li>
19 <ul><li>В описании встречается слово dolor</li>
20 <li>И при этом дата создания курса строго раньше 14 июня 2022 года</li>
20 <li>И при этом дата создания курса строго раньше 14 июня 2022 года</li>
21 </ul><p>Обратите внимание на запись запроса выше. Он разбит на отдельные строки: строка для перечисления столбцов, строка для указания таблицы, строка для условий фильтрации. Ранее мы работали с более простыми запросами, в которых разбиение не требовалось.</p>
21 </ul><p>Обратите внимание на запись запроса выше. Он разбит на отдельные строки: строка для перечисления столбцов, строка для указания таблицы, строка для условий фильтрации. Ранее мы работали с более простыми запросами, в которых разбиение не требовалось.</p>
22 <p>Для сложных запросов будем придерживаться такого формата записи, потому что он позволяет лучше ориентироваться.</p>
22 <p>Для сложных запросов будем придерживаться такого формата записи, потому что он позволяет лучше ориентироваться.</p>
23 <p>Теперь представим такую задачу: нужно выбрать пользователей с идентификатором больше 90. Мы знаем, что иногда идентификатор не проставляется из-за сбоя. Поэтому мы добавляем в результирующую таблицу еще и тех пользователей, у кого идентификатор не проставлен вовсе.</p>
23 <p>Теперь представим такую задачу: нужно выбрать пользователей с идентификатором больше 90. Мы знаем, что иногда идентификатор не проставляется из-за сбоя. Поэтому мы добавляем в результирующую таблицу еще и тех пользователей, у кого идентификатор не проставлен вовсе.</p>
24 <p>Чтобы это сделать, нам нужно использовать логический оператор OR:</p>
24 <p>Чтобы это сделать, нам нужно использовать логический оператор OR:</p>
25 <p><a>View on DB Fiddle</a></p>
25 <p><a>View on DB Fiddle</a></p>
26 <p>Если бы мы ошиблись в этом запросе и вместо OR использовали бы AND, то такой запрос всегда бы возвращал пустую таблицу - идентификатор не может быть одновременно пустым и больше 90.</p>
26 <p>Если бы мы ошиблись в этом запросе и вместо OR использовали бы AND, то такой запрос всегда бы возвращал пустую таблицу - идентификатор не может быть одновременно пустым и больше 90.</p>
27 <p>Логические операторы OR и AND можно комбинировать, однако нужно помнить об особенности - приоритет AND выше, чем OR. Другими словами, всегда сначала выполняются проверки на "И", а уже потом - на "ИЛИ".</p>
27 <p>Логические операторы OR и AND можно комбинировать, однако нужно помнить об особенности - приоритет AND выше, чем OR. Другими словами, всегда сначала выполняются проверки на "И", а уже потом - на "ИЛИ".</p>
28 <p>Чтобы не создавать неоднозначностей, в сложных условиях рекомендуем использовать круглые скобки. Проверка в скобках имеет больший приоритет:</p>
28 <p>Чтобы не создавать неоднозначностей, в сложных условиях рекомендуем использовать круглые скобки. Проверка в скобках имеет больший приоритет:</p>
29 <p><a>View on DB Fiddle</a></p>
29 <p><a>View on DB Fiddle</a></p>
30 <p>В этом запросе мы выберем либо пользователей с именем Andy, либо тех, кто зарегистрировался между 13 и 14 июня 2022 года.</p>
30 <p>В этом запросе мы выберем либо пользователей с именем Andy, либо тех, кто зарегистрировался между 13 и 14 июня 2022 года.</p>
31 <h2>Выводы</h2>
31 <h2>Выводы</h2>
32 <p>В этом уроке мы научились объединять условия с помощью логических операторов OR и AND.</p>
32 <p>В этом уроке мы научились объединять условия с помощью логических операторов OR и AND.</p>
33 <p>Если требуется выполнение обоих условий, то необходимо использовать оператор AND. Если нам достаточно выполнения какого-то одного условия из двух, то нужно использовать оператор OR.</p>
33 <p>Если требуется выполнение обоих условий, то необходимо использовать оператор AND. Если нам достаточно выполнения какого-то одного условия из двух, то нужно использовать оператор OR.</p>
34 <p>Теперь вы сможете искать записи по нескольким условиям и писать еще более точные запросы.</p>
34 <p>Теперь вы сможете искать записи по нескольким условиям и писать еще более точные запросы.</p>