SQL - UNION и JOIN: Полное руководство для начинающих

Здравствуйте, начинающие энтузиасты SQL! Я рад быть вашим проводником в этом захватывающем путешествии по миру SQL. Сегодня мы развеем тайны UNION и JOIN, двух мощных операций SQL, которые могут показаться запутанными в начале, но вскоре станут вашими лучшими друзьями в манипулировании данными. Так что возьмите杯 кофе, устройтесь поудобнее и погружайтесь с нами!

SQL - Union vs Join

Понимание основ

Прежде чем мы углубимся вintricacies UNION и JOIN, давайте начнем с простого аналога. Представьте, что вы организовываете вечеринку и у вас есть два списка гостей: один для друзей и другой для семьи. Теперь у вас есть два варианта:

  1. Объедините оба списка в один большой список (это как UNION)
  2. Узнайте, кто из ваших друзей также приходится вам родственником (это как JOIN)

Интересно? Замечательно! Давайте рассмотрим каждую из этих операций подробнее.

Работа с UNION

Что такое UNION?

UNION - это как мастер-составитель списков в SQL. Он берет два или более SELECT-запроса и объединяет их результаты в один результат. Это идеально, когда вы хотите объединить данные из разных таблиц, имеющих аналогичную структуру.

UNION в действии

Давайте представим, что у нас есть две таблицы: employees_usa и employees_uk. Мы хотим получить список всех сотрудников, независимо от их местоположения.

SELECT first_name, last_name, country
FROM employees_usa
UNION
SELECT first_name, last_name, country
FROM employees_uk;

Этот запрос даст нам объединенный список всех сотрудников из офисов США и Великобритании. Круто, правда?

UNION ALL: Включающий cousin

А что, если мы хотим включить дублирующиеся записи? Тогда на помощь приходит UNION ALL.

SELECT product_name, category
FROM products_2021
UNION ALL
SELECT product_name, category
FROM products_2022;

Этот запрос перечислит все продукты как 2021, так и 2022 годов, включая дублирующиеся, если продукт был доступен в оба года.

Основные моменты, которые стоит запомнить

  1. UNION по умолчанию удаляет дублирующиеся строки
  2. UNION ALL сохраняет все строки, включая дублирующиеся
  3. Количество и порядок столбцов должны быть одинаковыми во всех SELECT-запросах
  4. Типы данных соответствующих столбцов должны быть совместимыми

Работа с JOIN

Что такое JOIN?

Если UNION - это список-составитель, то JOIN - это как matchmaker. Он объединяет строки из двух или более таблиц на основе-related column между ними. Это идеально, когда вы хотите retrieve data, который рассредоточен по нескольким таблицам.

Типы JOIN

Давайте рассмотрим различные типы JOIN с помощью забавного аналога. Представьте, что вы на танцевальной вечеринке:

  1. INNER JOIN: Объединяет танцоров, которые знают один и тот же танец
  2. LEFT JOIN: Объединяет всех танцоров с левой стороны, даже если у них нет партнера
  3. RIGHT JOIN: Объединяет всех танцоров с правой стороны, даже если у них нет партнера
  4. FULL JOIN: Объединяет всех танцоров, даже если некоторые из них танцуют в одиночку

JOIN в действии

Давайте посмотрим, как работают эти JOIN в реальных SQL-запросах:

INNER JOIN

SELECT customers.name, orders.order_date
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;

Этот запрос покажет нам всех клиентов, которые сделали заказы, вместе с датами их заказов.

LEFT JOIN

SELECT employees.name, departments.dept_name
FROM employees
LEFT JOIN departments ON employees.dept_id = departments.id;

Этот запрос перечислит всех сотрудников, даже тех, кто не назначен ни в один отдел.

RIGHT JOIN

SELECT products.name, categories.category_name
FROM products
RIGHT JOIN categories ON products.category_id = categories.id;

Этот запрос покажет все категории, даже те, у которых нет ни одного продукта.

FULL JOIN

SELECT students.name, courses.course_name
FROM students
FULL JOIN enrollments ON students.id = enrollments.student_id
FULL JOIN courses ON enrollments.course_id = courses.id;

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

UNION vs JOIN: Сравнение

Теперь, когда мы рассмотрели и UNION, и JOIN, давайте сравним их рядом:

Аспект UNION JOIN
Цель Объединяет строки из аналогичных таблиц Объединяет столбцы из связанных таблиц
Результат Вертикальное объединение (больше строк) Горизонтальное объединение (больше столбцов)
Структура таблиц Должны иметь одинаковое количество столбцов Могут иметь разное количество столбцов
Обработка дубликатов Удаляет дубликаты (если не используется UNION ALL) Сохраняет все совпавшие строки
Производительность Обычно быстрее для больших наборов данных Может быть медленнее для сложных join
Пример использования Объединение аналогичных данных из разных источников Получение связанных данных по таблицам

Заключение: Выбор между UNION и JOIN

Так когда же использовать UNION, а когда - JOIN? Вот простое правило:

  • Используйте UNION, когда вы хотите объединить аналогичные данные из разных таблиц в один список.
  • Используйте JOIN, когда вы хотите получить связанные данные, рассредоточенные по нескольким таблицам.

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

Надеюсь, это руководство помогло вам развеять тайны UNION и JOIN. Continue practicing, stay curious, and before you know it, you'll be dancing through SQL queries like a pro! Happy coding!

Credits: Image by storyset