Условие по нескольким критериям
Иногда надо определить условие по нескольким критериям. Например, требуется выбрать все потоки с номерами больше 40 и меньше 50. В этом случае для комбинации двух условий используется логическое «И» (AND):
sqlite> SELECT * FROM streams WHERE number > 40 AND number < 50; id number course_id start_date ---------- ---------- ---------- ---------- 1 45 2 2020-08-18 2 48 3 2020-10-02 sqlite> |
Если потребуется выполнить поиск по нескольким значениям, то применяется логическое «ИЛИ» (OR). Например, найдём все потоки с идентификатором курса 1 или 3:
sqlite> SELECT * FROM streams WHERE course_id = 1 OR course_id = 3; id number course_id start_date ---------- ---------- ---------- ---------- 2 48 3 2020-10-02 3 54 1 2020-11-12 sqlite> |
Поиск по диапазону значений, BETWEEN
Для поиска по диапазону значений используется ключевое слово BETWEEN, для которого определяются граничные значения через AND. Найдём потоки с номерами, лежащими в диапазоне значений между 45 и 50 включительно:
sqlite> SELECT number, start_date FROM streams WHERE number BETWEEN 45 AND 50; number start_date ---------- ---------- 45 2020-08-18 48 2020-10-02 sqlite> |
Команду с BETWEEN всегда можно переписать с операторами сравнения и логическим «И» в условии. Ту же логику мы получим, подкорректировав один из предыдущих примеров:
sqlite> SELECT number, start_date FROM streams WHERE number >= 45 AND number <= 50; number start_date ---------- ---------- 45 2020-08-18 48 2020-10-02 sqlite> |
Оба варианта могут использоваться на практике, но синтаксис с BETWEEN выглядит более компактным и наглядным.
Поиск по списку значений, IN
Если есть список значений для поиска, применяется логическое «ИЛИ», как мы делали в примере выше. Найдём количество уроков по курсам «Linux. Рабочая станция» и «Основы Python»:
sqlite> SELECT lessons_amount FROM courses WHERE name = 'Linux. Рабочая станция' OR name = 'Основы Python'; lessons_amount -------------- 8 8 sqlite> |
Но со списками удобнее работать, используя ключевое слово IN, для которого в скобках мы перечисляем все искомые значения:
sqlite> SELECT lessons_amount FROM courses WHERE name IN('Linux. Рабочая станция', 'Основы Python'); lessons_amount -------------- 8 8 sqlite> |