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

Глава 6. Работа с множествами

SQL Lab in JupyterLab

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

Основы теории множеств

  • A union B – объединение

  • A intersect B – пересечение; удаляет все повторяющиеся строки, обнаруженные в области перекрытия наборов данных.

  • А except B – исключение; возвращает первый результирующий набор за вычетом любого перекрытия со вторым результирующим набором.

Теория множеств на практике

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

Операторы для работы с множествами

Оператор union

  • union – сортирует объединенный набор и удаляет дубликаты

  • union all – этого не делает, оставляет перекрывающиеся данные

3.0.5
Loading...
Loading...

Запрос возвращает 799 строк: 599 строк из таблицы customer и 200 строк из таблицы actor.

Loading...
Loading...

200 строк из таблицы actor включаются в результирующий набор дважды.

Loading...
Loading...

Из пяти строк одна является дубликатом JENNIFER DAVIS. Чтобы исключить повторяющиеся строки воспользуемся UNION вместо UNION ALL:

Loading...
Loading...

Оператор intersect

Удаляет все повторяющиеся строки, обнаруженные в области перекрытия наборов данных.

Loading...
Loading...

Пересечение двух запросов дает единственное имя JENNIFER DAVIS, имеющееся в результирующих наборах обоих запросов.

Loading...

Оператор except

Возвращает первый результирующий набор за вычетом любого перекрытия со вторым результирующим набором.

Loading...
Loading...

Правила применения операторов для работы с множествами

Сортировка результатов составного запроса

При указании имен столбцов в предложении order by нужно выбирать одно из имен столбцов в первом запросе составного запроса.

Loading...
Loading...

Если в предложении order by указать имя столбца из второго запроса, будет выведено сообщение об ошибке:

RuntimeError: (pymysql.err.OperationalError) (1054, "Unknown column 'last_name' in 'order clause'")
[SQL: SELECT a.first_name fname, a.last_name lname
FROM actor a
WHERE a.first_name LIKE 'J%%' AND a.last_name LIKE 'D%%'
UNION ALL
SELECT c.first_name, c.last_name
FROM customer c
WHERE c.first_name LIKE 'J%%' AND c.last_name LIKE 'D%%'
ORDER BY last_name, first_name;]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
Loading...
Loading...
Loading...
Loading...

Приоритеры операций над множествами

Loading...
Loading...

Размещение операторов имеет значение.
Вот тот же составной запрос с обратным размещением операторов:

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

Упражнения

Упражнение 6.1

Пусть множество А = {L, M, N, O, P}, а множество В = {P, Q, R, S, T}. Какие множества будут сгенерированы следующими операциями?

  • A union B

  • A union all B

  • A intersect B

  • A except B

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

Упражнение 6.2

Напишите составной запрос, который находит имена и фамилии всех актеров и клиентов, чьи фамилии начинаются с буквы L.

Loading...
Loading...

Упражнение 6.3

Отсортируйте результаты выполнения упражнения 6.2 по столбцу last_name.

Loading...
Loading...