Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Technical Portfolio
GitHub & GitVerse Pages

Глава 4. Фильтрация

SQL Lab in JupyterLab

Data & BI Analyst

Abstract

В последнем запросе главы, в разделе Этот таинственный null, увидим причину, по которой для усечения строк в дальнейшем будет использоваться Pandas.

SQLAlchemy - подключение создано
JupySQL - успешно подключен через SQLAlchemy Engine!

Вычисление условий

-- Разделение условий оператором `AND`
WHERE first_name = 'STEVEN' AND create_date > '2006-01-01`

-- Разделение условий оператором `OR`
WHERE first_name = 'STEVEN' OR create_date > '2006-01-01`

-- Использование скобок
WHERE (first_name = 'STEVEN' OR last_name = 'YOUNG')
  AND create_date > '2006-01-01')

-- Использование оператора `NOT`
WHERE NOT (first_name = 'STEVEN' OR last_name = 'YOUNG')
  AND create_date > '2006-01-01')

-- Аналог без оператора `NOT`
WHERE first_name <> 'STEVEN' AND last_name <> 'YOUNG'    -- OR заменен на AND !
  AND create_date > '2006-01-01'

Построение условия

Условие состоит из одного или нескольких выражений в сочетании с одним или несколькими операторами.

Типы условий

Условия равенства

title = 'RIVER OUTLAW'
fed_id = '111-11-1111'
amount = 375.25
film_id = (SELECT film_id FROM film WHERE title = 'RIVER OUTLAW')
Loading...
CPU times: total: 0 ns
Wall time: 45 ms
Loading...

Условия неравенства

Polars ver. 1.43.1
Loading...
Loading...
-- Модификация условий равенства/неравенства

DELETE FROM rental
WHERE year(rental_date) = 2024;

DELETE FROM rental
WHERE year(rental_date) <> 2005 AND year(rental_date) <> 2006;

Условие диапазона

Loading...
Loading...
Loading...
Loading...

Оператор beetween

Loading...
Loading...

Поскольку не указываем компонент времени, а время по умолчанию полночь, то диапазон длится от 2005-06-14 00:00:00 до 2005-06-16 00:00:00 и включает все фильмы взятые напрокат 14 или 15 июня.

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

Loading...
Loading...
Loading...
Loading...

Строковые диапазоны

Loading...
Loading...

Фамилии начинающиеся с FR не попали в результат, т.к. находятся за пределами диапазона. Можем расширить диапазон:

Loading...
Loading...

Условия членства

Loading...
Loading...

Оператор in

Loading...
Loading...

Использование подзапросов

Loading...
Loading...
-- Пояснение подзапроса
SELECT title, rating FROM film WHERE title LIKE '%PET%';

| title           | rating |
| --------------- | ------ |
| "MALKOVICH PET" | "G"    |
| "MUPPET MILE"   | "PG"   |
| "PET HAUNTING"  | "PG"   |

Использование not in

Условия соответствия

Loading...
Loading...

Использование подстановочных знаков

Loading...
Loading...
Loading...
Loading...

Использование регулярных выражений

Loading...
Loading...

Этот таинственный null

Loading...
Loading...

Выражение может быть null, но оно никогда не может быть равным null:

Loading...
Loading...
Loading...
Loading...
Loading...

Polars выдал ошибку ComputeError. Очистил длинный вывод через Clear Cell Output и добавил заметку:

Pandas ver. 3.0.3
Loading...
Loading...

Упражнения

Предлагаемые упражнения призваны закрепить понимание условий фильтрации. В первых двух упражнениях потребуется подмножество строк из таблицы payment:

| payment_id | customer_id | amount | date(payment date) |
| ---------- | ----------- | ------ | ------------------ |
| 101        | 4           | 8.99   | 2005-08-19         |
| 102        | 4           | 1.99   | 2005-08-19         |
| 103        | 4           | 2.99   | 2005-08-20         |
| 104        | 4           | 6.99   | 2005-08-20         |
| 105        | 4           | 4.99   | 2005-08-21         |
| 106        | 4           | 2.99   | 2005-08-22         |
| 107        | 4           | 1.99   | 2005-08-23         |
| 108        | 5           | 0.99   | 2005-05-29         |
| 109        | 5           | 6.99   | 2005-05-31         |
| 110        | 5           | 1.99   | 2005-05-31         |
| 111        | 5           | 3.99   | 2005-06-15         |
| 112        | 5           | 2.99   | 2005-06-16         |
| 113        | 5           | 4.99   | 2005-06-17         |
| 114        | 5           | 2.99   | 2005-06-19         |
| 115        | 5           | 4.99   | 2005-06-20         |
| 116        | 5           | 4.99   | 2005-07-06         |
| 117        | 5           | 2.99   | 2005-07-08         |
| 118        | 5           | 4.99   | 2005-07-09         |
| 119        | 5           | 5.99   | 2005-07-09         |
| 120        | 5           | 1.99   | 2005-07-09         |

Упражнение 4.1

Какие из идентификаторов платежей будут возвращены при следующих условиях фильтрации?

customer_id <> 5
  AND (amount > 8 OR date(payment_date) = '2005-08-23')
| payment_id | customer_id | amount | date(payment date) |
| ---------- | ----------- | ------ | ------------------ |
| 101        | 4           | 8.99   | 2005-08-19         |
| 107        | 4           | 1.99   | 2005-08-23         |

Упражнение 4.2

Какие из идентификаторов платежей будут возвращены при следующих условиях фильтрации?

customer_id = 5 AND
  NOT (amount > 6 OR date(payment_date) = '2005-06-19')
| payment_id | customer_id | amount | date(payment date) |
| ---------- | ----------- | ------ | ------------------ |
| 108        | 5           | 0.99   | 2005-05-29         |
| 110        | 5           | 1.99   | 2005-05-31         |
| 111        | 5           | 3.99   | 2005-06-15         |
| 112        | 5           | 2.99   | 2005-06-16         |
| 113        | 5           | 4.99   | 2005-06-17         |
| 115        | 5           | 4.99   | 2005-06-20         |
| 116        | 5           | 4.99   | 2005-07-06         |
| 117        | 5           | 2.99   | 2005-07-08         |
| 118        | 5           | 4.99   | 2005-07-09         |
| 119        | 5           | 5.99   | 2005-07-09         |
| 120        | 5           | 1.99   | 2005-07-09         |

Упражнение 4.3

Создайте запрос, который извлекает из таблицы payments все строки, в которых сумма равна 1.98, 7.98 или 9.98.

Loading...
Loading...

Упражнение 4.4

Создайте запрос, который находит всех клиентов, в фамилиях которых содержится буква А во второй позиции и буква W – в любом месте после А.

Loading...
Loading...