Фильтрация данных в 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
и т.д. Это позволяет получить новый результат с сохранением исходной таблицы, в то время как сам запрос не изменяет данные в исходной таблице.