WHERE (условия в запросах)
Синтаксис
Для того, чтобы выбрать (для получения, изменения или удаления) из таблицы не все записи, а удовлетворяющие определенному условию, используется конструкция WHERE. Далее указывается набор из одного или нескольких условий, по которым нужно "отфильтровать" строки таблицы. Поддерживаются:
- арифметические операции - сложение
+
, вычитание-
, умножение*
, деление/
, остаток от деления%
, возведение в степень^
- логические операции -
AND
,OR
,NOT
- битовые операции -
&
,|
,~
- операции сравнения - строгое неравенство
>
<
, нестрогое неравенство<=
>=
, равенство/неравенство=
,<>
- различные функции (справа от оператора) - для строк, чисел и т. д, некоторые конструкции и функции будут приведены ниже
Примеры:
SELECT * FROM students WHERE id = 4;
SELECT * FROM students WHERE name = 'John' AND age > 15;
SELECT * FROM students WHERE (age >= 15 AND age <= 17) OR (age > 19 AND name <> 'John');
Сравнение с NULL
Если нужно выбрать записи, определенные поля которых содержат (или не содержат) значение NULL, то обычные операторы сравнения не сработают. Для этого нужно использовать конструкцию IS. Примеры:
SELECT * FROM students WHERE bio IS NULL;
SELECT * FROM students WHERE bio IS NOT NULL;
BETWEEN
Для компактности записи, когда нужно отыскать поля, имеющие значение в определенном диапазоне, используется конструкция BETWEEN. Она может использоваться как для числовых, так и для текстовых полей. Пример:
SELECT * FROM students WHERE age BETWEEN 15 AND 17;
SELECT * FROM students WHERE age >= 15 AND age <= 17;
Эти запросы эквивалентны. Приведем еще несколько примеров:
SELECT * FROM students WHERE age NOT BETWEEN 15 AND 17;
SELECT * FROM students WHERE name BETWEEN 'Ann' AND 'Frog';
IN
Для компактности записи, когда нужно отыскать поля, имеющие значение из определенного множества, используется конструкция IN. Далее указывается список возможных значений. Примеры:
SELECT * FROM students WHERE age IN (15, 17, 19);
SELECT * FROM students WHERE age NOT IN (15, 17) AND name IN ('John', 'Peter');
LIKE
Конструкция LIKE используется для строковых атрибутов, когда нужно найти записи по маске:
- % - на месте этого символа могут быть 0 или более любых символов
- _ - на месте этого символа может быть 1 любой символ
Если в искомой строке должны содержаться символы %
или _
, то их нужно экранировать обратным слешем: \%
\_
.
Примеры:
SELECT * FROM students WHERE name LIKE 'John';
SELECT * FROM students WHERE name LIKE 'J%';
SELECT * FROM students WHERE name LIKE '%o%';
SELECT * FROM students WHERE name LIKE '_o%n';