Фильтрация данных в SQL позволяет выбрать только те строки из таблицы, которые удовлетворяют определенным условиям.

Для фильтрации данных в SQL используется оператор WHERE.
Таблица movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 4 | The Dark Knight | 2008 | Action | 9 |
| 5 | 12 Angry Men | 1957 | Drama | 8 |
| 6 | Schindlers List | 1993 | Biography | 8 |
| 7 | Pulp Fiction | 1994 | Crime | 8 |
| 8 | The Lord of the Rings: The Return of the King | 2003 | Adventure | 8 |
| 9 | Fight Club | 1999 | Drama | 8 |
| 10 | The Good, the Bad and the Ugly | 1966 | Western | 8 |
Например, если мы хотим выбрать фильмы, выпущенные после 2000 года, мы можем использовать следующий запрос:
SELECT *
FROM movies
WHERE release_year > 2000;
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 4 | The Dark Knight | 2008 | Action | 9 |
| 8 | The Lord of the Rings: The Return of the King | 2003 | Adventure | 8 |
Если мы хотим выбрать фильмы с рейтингом выше 8 и жанром Action, мы можем использовать следующий запрос:
SELECT *
FROM movies
WHERE rating > 8
AND genre = 'Action';
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 4 | The Dark Knight | 2008 | Action | 9 |
С помощью оператора WHERE можно составлять сложные запросы с несколькими условиями, используя логические операторы AND, OR и NOT.
Например, если мы хотим выбрать фильмы с жанром Biography или Drama, с рейтингом более 7 и выпущенные после 1990 года, мы можем использовать следующий запрос:
SELECT *
FROM movies
WHERE (genre = 'Biography'
OR genre = 'Drama')
AND rating > 7
AND release_year > 1990;
В данном запросе, мы использовали скобки для обозначения приоритета логических операций.
Сначала будет выполняться условие внутри скобок (genre = 'Biography' OR genre = 'Drama'), затем с помощью AND будет добавляться условия rating > 7 и release_year > 1990.
Результат
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 6 | Schindlers List | 1993 | Biography | 8 |
| 9 | Fight Club | 1999 | Drama | 8 |
Если использовать NOT в условии, оно будет отрицать условие. Является эквивалентом операции инверсии в математической логике и может применяется только для булевых значений.
Например, если мы хотим выбрать фильмы, которые не выпущены в 2000 и 2003 году, мы можем использовать следующий запрос:
SELECT *
FROM movies
WHERE release_year NOT IN ( 2000, 2003 );
Здесь мы дополнительно используем оператор IN , который позволяет определить, совпадает ли значение поля release_year со значением в списке.
Результат movies
| id | title | release_year | genre | rating |
|---|---|---|---|---|
| 1 | The Shawshank Redemption | 1994 | Drama | 9 |
| 2 | The Godfather | 1972 | Crime | 9 |
| 3 | The Godfather: Part II | 1974 | Crime | 9 |
| 5 | 12 Angry Men | 1957 | Drama | 8 |
| 6 | Schindlers List | 1993 | Biography | 8 |
| 7 | Pulp Fiction | 1994 | Crime | 8 |
| 9 | Fight Club | 1999 | Drama | 8 |
| 10 | The Good, the Bad and the Ugly | 1966 | Western | 8 |
В SQL, оператор WHERE может использоваться с различными операторами для фильтрации данных в таблице.
=, <> (не равно)Например:
SELECT *
FROM movies
WHERE rating = 9;
SELECT *
FROM movies
WHERE genre <> 'Action';
>, <, >=, <=Например:
SELECT *
FROM movies
WHERE release_year >= 2000;
SELECT *
FROM movies
WHERE rating < 8;
AND, OR, NOTНапример:
SELECT *
FROM movies
WHERE genre = 'Action'
AND release_year > 2000;
SELECT *
FROM movies
WHERE rating > 8
OR release_year < 2000;
SELECT *
FROM movies
WHERE NOT (genre = 'Drama'
OR genre = 'Crime');
IN и NOT INНапример:
SELECT *
FROM movies
WHERE genre IN ('Drama', 'Action');
SELECT *
FROM movies
WHERE release_year NOT IN (2010, 2011, 2012);
LIKE, NOT LIKEНапример:
SELECT *
FROM movies
WHERE title LIKE '%father%';
SELECT *
FROM movies
WHERE title NOT LIKE '%father%';
BETWEEN..ANDНапример:
SELECT *
FROM movies
WHERE rating BETWEEN 8 AND 10;
IS NULL, IS NOT NULLНапример:
SELECT *
FROM movies
WHERE title IS NULL;
SELECT *
FROM movies
WHERE rating IS NOT NULL;
В SQL, арифметические операторы могут быть использованы в комбинации с оператором SELECT при фильтрации данных в таблице.
+Например:
SELECT id,
title,
release_year + 1 AS release_year_next
FROM movies
WHERE release_year > 2000;
-Например:
SELECT id,
title,
release_year - 10 AS release_year_prev
FROM movies
WHERE release_year > 2010;
*Например:
SELECT id,
title,
rating * 2 AS rating_double
FROM movies
WHERE rating > 8;
/Например:
SELECT id,
title,
release_year / 10 AS release_year_decade
FROM movies
WHERE release_year > 1990;
%Например:
SELECT id,
title,
release_year % 100 AS release_year_cent
FROM movies
WHERE release_year > 1800;
Обратите внимание, что в запросах мы использовали псевдонимы для вычисляемых полей, как release_year_next, rating_double, release_year_prev и т.д. Это позволяет получить новый результат с сохранением исходной таблицы, в то время как сам запрос не изменяет данные в исходной таблице.