awilum.ru
Статьи Курсы Об авторе

Фильтрация данных

Курсы / SQL Базовый уровень / Основы

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

Сортировка данных Комментарии
Записаться на курс