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>