Селект данных из двух несвязанных таблиц SQL: подробный способ

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для объединения результатов двух запросов SELECT используйте оператор UNION, который применяется для объединения и удаления дублирующихся записей. Если же требуется сохранить все записи, включая повторяющиеся, примените UNION ALL. Оператор JOIN также может быть использован для обращения к данным из различных таблиц в рамках одного запроса.

Пример с UNION:

SQL
Скопировать код
SELECT name FROM customers
UNION
SELECT email FROM subscribers; -- Объединяем имена клиентов и email'ы подписчиков

Пример с JOIN:

SQL
Скопировать код
SELECT customers.name, orders.amount
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id; -- Связываем клиентов с их заказами

При использовании UNION, типы данных и количество столбцов в запросах должны быть одинаковыми. Сортировка результатов осуществляется с помощью оператора ORDER BY, а фильтрация данных – через предикат WHERE.

Кинга Идем в IT: пошаговый план для смены профессии

Добавление к UNION фильтров и сортировок

Отбор необходимых данных

Как отобрать нужные данные из множества других, наподобие выбора блюд из разнообразного меню ресторана? В этом поможет оператор UNION:

SQL
Скопировать код
SELECT 'Customer' as Type, name, created_at FROM customers 
WHERE created_at > '2020-01-01'
UNION
SELECT 'Subscriber' as Type, name, sign_up_date FROM subscribers 
WHERE sign_up_date > '2020-01-01'
ORDER BY created_at; -- Результаты отсортированы по дате создания

Отношение к дубликатам

Если вы хотите сохранить дубликаты, примените UNION ALL:

SQL
Скопировать код
SELECT 'Blog' AS Source, title FROM blog_posts 
UNION ALL 
SELECT 'News' AS Source, headline FROM news_articles; -- Иногда важно сохранить дублирующиеся данные

Визуализация

В SQL объединение двух запросов SELECT можно представить как соединение двух разных меню:

Markdown
Скопировать код
Меню 1 (🍲): [Салат 🥗, Суп 🥣, Бургер 🍔]
Меню 2 (🍝): [Пицца 🍕, Паста 🍝, Стейк 🥩]

Выбор пищи похож на запросы SELECT:

SQL
Скопировать код
SELECT 'Salad 🥗' FROM Menu 1
UNION
SELECT 'Pizza 🍕' FROM Menu 2;

В итоге, объединив два меню, мы получаем: 🍽️ [Салат 🥗, Пицца 🍕]

Создание сложных запросов

Использование подзапросов с UNION может быть полезно для вывода определенных показателей:

SQL
Скопировать код
SELECT author, (SELECT COUNT(*) FROM books b WHERE b.author_id = a.id) as book_count
FROM authors a
UNION
SELECT editor, (SELECT COUNT(*) FROM articles c WHERE c.editor_id = e.id) as article_count
FROM editors e; -- Объединяем данные по количеству книг у каждого автора и статей с каждым редактором

Полезные материалы

  1. MySQL :: Справочное руководство по MySQL 8.0 :: 15.2.18 UNION — подробное описание использования UNION в среде MySQL.
  2. PostgreSQL: Документация: 9.26: Общие табличные выражения (WITH) — примеры использования Common Table Expressions (WITH) в PostgreSQL.
  3. SQL – Joins — обзор различных типов оператора JOIN в SQL.
  4. CASE (Transact-SQL) – SQL Server | Microsoft Docs — информация об операторах CASE в Transact-SQL.
  5. MySQL offset infinite rows – Stack Overflow — также обсуждение использования нескольких запросов SELECT в одном на Stack Overflow.