Зарегистрируйтесь, чтобы продолжить обучение

Множества Множественные операции в SQL

Работая с IT-системами, мы обычно имеем дело с базами данных, состоящими из большого количества таблиц. Хранить данные в таблицах довольно удобно — по сути, это множества строк. В математике даже есть теория множеств — специальный раздел, который рассматривает различные операции над множествами. В этом уроке мы начнем знакомство с этой темой и базовыми операциями.

Операции над множествами

Сам термин множество обозначает совокупность каких-то элементов. В работе с данными это набор строк, которые возвращает запрос SELECT. В таком случае каждая строка — это элемент множества.

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

Для примера рассмотрим два множества:

A = {a,b,c,d}
B = {c,d,e,f}

С ними можно провести три операции. Первая — это объединение. Это просто набор всех элементов двух множеств:

01

При объединении мы получим набор всех элементов из обоих множеств:

A ∪ B = {a,b,c,d,e,f}

Вторая — это пересечение двух множеств. Так называют поиск общих элементов двух множеств:

02

В наших множествах A и B есть два общих элемента — это c и d:

A ∩ B = {c,d}

Третья операция — это разность:

03

С ее помощью можно найти элементы множества A, которые не встречаются в B:

A \ B = {a,b}

Для всех трех операций в языке SQL существуют специальные операторы. Мы подробно разберем их в этом курсе на практике — мы применим их к этой базе данных.

Типы объединения таблиц

Объединения таблиц можно разбить на два вида. Написав запрос, в обоих случаях мы получаем таблицу, но есть одна важная разница:

Виды операций Результирующая таблица Примеры операций
Множественные операции Состоит из исходных строк других таблиц в неизменном виде UNION, INTERSECT, EXCEPT
Разновидности операции JOIN Состоит из новых строк, полученных из исходных таблиц CROSS JOIN, INNER JOIN, OUTER JOIN, FULL JOIN

Приведем примеры обоих видов на примере двух множеств из начала урока:

A = {a,b,c,d}
B = {c,d,e,f}

Начнем с множественной операции UNION. Если мы ее сделаем, то получим таблицу из всех строк исходных таблиц в неизменном виде. Даже если в двух таблицах были одинаковые строки, в итоговой таблице они будут в единственном экземпляре:

04

Применив UNION, мы получим объединение A и B, в которое войдут все элементы этих множеств:

A ∪ B = {a,b,c,d,e,f}

Множества A и B удобно визуализировать в виде окружностей:

05

Два множества содержат одинаковые элементы, поэтому можно наложить окружности друг на друга и получить диаграмму Эйлера:

06

В результате объединения получим множество:

07

Сопоставим элементы множества со строками в таблице. Так мы подтвердим, что результат операции UNION совпадает с результатом объединения двух множеств:

08

Приведем пример операции JOIN. Есть две таблицы:

09

Представим, что нам нужно собрать общую таблицу и добавить информацию о скидке к каждой строчке первой таблицы. В этом случае таблицы связаны столбцом «Категория». Возьмем операцию JOIN и применим ее к столбцу «Категория» этих таблиц. В итоге получим такой результат:

10

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

Выводы

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


Дополнительные материалы

  1. Теория множеств: основы и базовые операции над множествами

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff