Что такое where в sql
Нередко при получении данных из БД выбираются только те данные, которые соответствуют некоторому определенному условию. Для фильтрации данных в команде SELECT применяется оператор WHERE , после которого указывается условие:
WHERE условие
Если условие истинно, то строка попадает в результирующую выборку. В качестве можно использовать операции сравнения, которые сравнивают два выражения:
- = : сравнение на равенство
- != : сравнение на неравенство
- <> : сравнение на неравенство
- < : меньше чем
- > : больше чем
- >= : больше чем или равно
К примеру, возьмем следующую таблицу products, которая хранит некоторый набор товаров:
CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, company TEXT NOT NULL, product_count INTEGER DEFAULT 0, price INTEGER ); INSERT INTO products (name, company, product_count, price) VALUES ('iPhone 13', 'Apple', 3, 76000), ('iPhone 12', 'Apple', 2, 51000), ('Galaxy S21', 'Samsung', 2, 56000), ('Galaxy S20', 'Samsung', 1, 41000), ('P40 Pro', 'Huawei', 5, 36000);
Выберем из этой таблицы все товары, производителем которых является компания Samsung:
SELECT * FROM products WHERE company = 'Samsung';
Стоит отметить, что для SQLite важен регистр символов, и, к примеру, строка «Samsung» НЕ будет эквивалентна строке «SAMSUNG» или «samSunG».
Другой пример — найдем все товары, количество которых меньше 3:
SELECT * FROM products WHERE product_count < 3;
Критерий фильтрации может представлять и более сложное составное выражение. Например, найдем все товары, у которых совокупная стоимость больше 100 000:
SELECT * FROM products WHERE product_count * price > 100000;
Логические операторы
Логические операторы позволяют объединить несколько условий. В SQLite можно использовать следующие логические операторы:
-
AND : операция логического И. Она объединяет два выражения:
выражение1 AND выражение2
выражение1 OR выражение2
NOT выражение
Например, выберем все товары, у которых производитель Samsung и одновременно цена больше 50000:
SELECT * FROM products WHERE company = 'Samsung' AND price > 50000;
Теперь изменим оператор на OR . То есть выберем все товары, у которых либо производитель Samsung, либо цена больше 50000:
SELECT * FROM products WHERE company = 'Samsung' OR price > 50000;
Применение оператора NOT - выберем все товары, у которых производитель не Samsung:
SELECT * FROM products WHERE NOT company = 'Samsung';
Приоритет операций
В одном условии при необходимости мы можем объединять несколько логических операций. При этом следует учитывать, что самой приоритетной операцией, которая выполняется в первую очередь, является NOT, менее приоритетная - AND и операция с наименьшим приоритетом - OR. Например:
SELECT * FROM products WHERE company ='Samsung' OR NOT price > 30000 AND product_count > 2;
В данном случае сначала вычисляется выражение NOT Price > 30000 , то есть цена должна быть НЕ больше 30000 (то есть меньше или равна 30000).
Затем вычисляется выражение NOT Price > 30000 AND ProductCount > 2 , то есть цена должна быть меньше или равна 30000 и одновременно количество товаров должно быть больше 2.
В конце вычисляется оператор OR - либо цена должна быть меньше или равна 30000 и одновременно количество товаров должно быть больше 2, либо производителем должен быть Samsung.
С помощью скобок можно переопределить приоритет операций:
SELECT * FROM products WHERE company ='Samsung' OR NOT (price > 30000 AND product_count > 2);
В данном случае находим товары, у которых либо производитель Samsung, либо одновременно цена товара НЕ больше 30000 (то есть меньше или равна 30000) и количество товаров НЕ больше 2 (то есть 2 или меньше).
SQL-Урок 4. Фильтрация данных (WHERE)
В большинстве случаев необходимо получать не все записи, а только соответствующие определенным критериям. Поэтому для осуществления фильтрации выборки в SQL имеется специальный оператор WHERE.
1. Простая фильтрация оператором WHERE.
Давайте из нашей таблицы, например, отберем записи, относящиеся только к определенному товару. Для этого мы укажем дополнительный параметр отбора, который будет фильтровать значение по колонке Product.
Пример запроса для отбора текстовых значений:
Run SQLSELECT * FROM Sumproduct WHERE Product = 'Bikes'
Try it Yourself
Как видим, условие отбора взято в одинарные кавычки, что является обязательным при фильтрации текстовых значений. При фильтрации числовых значений кавычки не требуются.
Пример запроса для отбора числовых значений:
Run SQLSELECT * FROM Sumproduct WHERE Amount > 40000 ORDER BY Amount
Try it Yourself
В этом примере мы отобрали записи, в которых выручка от реализации составляла более 40 тыс.$ и, вдобавок, все записи рассортировали по росту по полю Amount.
В таблице ниже указан перечень условных операторов, поддерживаемых SQL:
Знак операции | Значение |
---|---|
= | Равняется |
<> | Не равно |
Больше | |
>= | Большее или ровное |
BETWEEN | Между двумя значениями |
IS NULL | Отсутствует запись |
2. Фильтрация по диапазону значений (BETWEEN)
Для отбора данных, лежащих в определенном диапазоне, используется оператор BETWEEN. В следующем запросе будут отобраны все значения, лежащие в пределах от $1000 до $2000 включительно, в поле Amount.
Run SQLSELECT * FROM Sumproduct WHERE Amount BETWEEN 1000 AND 2000
Try it Yourself
Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount, а затем по City.
3. Выборка пустых записей (IS NULL)
В SQL существует специальный оператор для выборки пустых записей (называется NULL). Пустой записью считается любая ячейка в таблице, в которую не введен ни один символ. Если в ячейку введено 0 или пробел, то считается, что поле заполнено.
SELECT * FROM Sumproduct WHERE Amount IS NULL
В примере выше мы умышленно удалили два значения в поле Amount, чтобы продемонстрировать работу оператора NULL.
4. Расширенная фильтрация (AND, OR)
Язык SQL не ограничивается фильтрацией по одному условию, для собственных целей вы можете использовать достаточно сложные конструкции для выборки данных одновременно по многим критериям. Для этого в SQL есть дополнительные операторы, расширяющие возможности оператора WHERE. Такими операторами являются: AND, OR, IN, NOT. Приведем несколько примеров работы данных операторов.
Run SQLSELECT * FROM Sumproduct WHERE Amount > 40000 AND City = 'Toronto'
Try it Yourself
Run SQLSELECT * FROM Sumproduct WHERE Month = 'April' OR Month = 'March'
Try it Yourself
Давайте объединим операторы AND и OR. Для этого произведем выборку велосипедов (Bikes) и коньков (Skates), проданных в марте (March).
Run SQLSELECT * FROM Sumproduct WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'
Try it Yourself
Видим, что в нашу выборку попало много значений (кроме марта (March), также январь (January), февраль (February) и апрель (April)). В чем причина? А в том, что SQL имеет приоритеты выполнения команд. То есть оператор AND имеет более приоритет, чем оператор OR, поэтому сначала были отобраны записи с коньками, проданными в марте, а затем все записи, касающиеся велосипедов.
Итак, чтобы получить правильную выборку, нам нужно изменить приоритеты выполнения команд. Для этого используем скобки, как в математике. Тогда, сначала будут проработаны операторы в скобках, а затем – все остальные.
Run SQLSELECT * FROM Sumproduct WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'
Оператор SQL WHERE: синтаксис и примеры
Разобрали SQL запрос WHERE, объяснили его синтаксис и расписали примеры использования оператора WHERE с одним и сразу несколькими условиями.
SQL WHERE оператор позволяет задавать дополнительные условия для выборки, редактирования, удаления и других операций, производимых с записями БД.
- Синтаксис SQL WHERE
- Примеры использования SQL WHERE
Синтаксис SQL WHERE
Рассматриваемый оператор WHERE имеет следующий синтаксис:
SELECT column1, column2, . FROM table_name WHERE condition;
Как видим, SQL запрос WHERE задаёт некоторое условие, которое позволяет отфильтровать записи в колонках таблицы table_name . При этом, когда в SQL несколько WHERE — это нормальная история, ведь так задаётся сразу несколько условий.
Рассмотрим оператор WHERE на примерах.
Примеры использования SQL WHERE
С помощью следующего SQL запроса мы виберем всех клиентов, которых зовут Иван:
SELECT * FROM Customers WHERE Name = 'Иван';
А так мы сможем выбрать клиентов по ID, за которым они закреплены в нашей таблице:
SELECT * FROM Customers WHERE data-v-801cb1c0>
Теперь давайте усложним задачу, задав сразу несколько условий. Здесь мы также используем оператор SQL LIKE, о котором писали ранее.
Например, выведем название планеты, год её открытия, а также имя её первооткрывателя. Выбирать будем из тех планет, чьё название не начинается или не заканчивается на букву S :
SELECT PlanetName, OpeningYear, Opener FROM Planets WHERE PlanetName NOT LIKE '%s' AND PlanetName NOT LIKE 'S%'
И вот такое, казалось бы, сложное условие легко реализовывается с помощью оператора WHERE.
Больше SQL команд и информации о них вы найдёте здесь.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Оператор SQL WHERE
Оператор SQL WHERE служит для задания дополнительного условия выборки, операций вставки, редактирования и удаления записей.
Оператор SQL WHERE имеет следующий синтаксис:
WHERE condition
Условие (condition) может включать в себя предикаты AND, OR, NOT, LIKE, BETWEEN, IS, IN, ключевое слово NULL, операторы сравнения и равенства (, =).
Примеры оператора SQL WHERE. Имеется следующая таблица Planets :
ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
1 | Mars | 3396 | 687 | 1659 | No | Christiaan Huygens |
2 | Saturn | 60268 | 10759.22 | — | Yes | — |
3 | Neptune | 24764 | 60190 | 1846 | Yes | John Couch Adams |
4 | Mercury | 2439 | 115.88 | 1631 | No | Nicolaus Copernicus |
5 | Venus | 6051 | 243 | 1610 | No | Galileo Galilei |
Пример 1. Используя оператор SQL WHERE вывести записи, значение радиуса (Radius) которых находится в пределах от 3000 до 9000:
SELECT * FROM Planets WHERE Radius BETWEEN 3000 AND 9000
ID | PlanetName | Radius | SunSeason | OpeningYear | HavingRings | Opener |
1 | Mars | 3396 | 687 | 1659 | No | Christiaan Huygens |
5 | Venus | 6051 | 243 | 1610 | No | Galileo Galilei |
Пример 2. Используя оператор SQL WHERE вывести название планеты (PlanetName), год ее открытия (OpeningYear) и имя первооткрывателя (Opener), планет, чье название не начинается или не заканчивается на букву «s»:
SELECT PlanetName, OpeningYear, Opener FROM Planets WHERE PlanetName NOT LIKE '%s' AND PlanetName NOT LIKE 'S%'
PlanetName | OpeningYear | Opener |
Neptune | 1846 | John Couch Adams |
Mercury | 1631 | Nicolaus Copernicus |