CROSS JOIN — декартово произведение в SQL запросе
CROSS JOIN — декартово произведение в SQL запросе1. Введение
1.1 Синтаксис SQL запроса
1.2 Получение данных из таблицы
1.3 Вызов функции
1.4 Конкатенация строк
1.5 Арифметические операции
1.6 Исключение дубликатов
2. Отсечение строк и сортировка
2.1 Выражение WHERE
2.2 Логические операторы
2.3 Порядок условий
2.4 Операции сравнения
2.5 BETWEEN
2.6 IN
2.7 Поиск по шаблону
2.8 Обработка NULL значений
2.9 Сортировка
2.10 Ограничение количества строк LIMIT
2.11 Пропуск первых строк результата
3. Соединения
3.1 Соединение двух таблиц
3.2 Псевдонимы таблиц
3.3 Добавляем WHERE
3. 4 Несколько условий соединения
3.5 Использование таблицы несколько раз
3.6 Типы соединения
3.7 RIGHT JOIN
3.8 FULL JOIN
3.9 Декартово произведение
3.10 Синтаксис через WHERE
4. Агрегатные функции
4.1 Агрегатные функции
4.2 NULL значения в агрегатных функциях
4.3 Количество уникальных значений
4.4 Отсутствие строк
4.5 GROUP BY
4.6 Дополнительные столбцы в списке выборки с GROUP BY
4.7 GROUP BY и WHERE
4.8 GROUP BY по нескольким выражениям
4.9 NULL значения в GROUP BY
4.10 HAVING
4.11 ROLLUP
4.12 CUBE
4.13 GROUPING SETS
5. Операции над множествами
5.1 Доступные операции над множествами
5.2 Из какого запроса строка?
5.
3 Пересечение строк5.4 Исключение строк
5.5 Дубликаты строк
5.6 Совпадение типов данных столбцов
5.7 Сортировка
5.8 Несколько операций
6. Подзапросы
6.1 Подзапрос одиночной строки
6.2 Коррелированный подзапрос
6.3 Подзапрос вернул более одной строки
6.4 Подзапрос не вернул строк
6.5 Попадание в список значений
6.6 Отсутствие в списке значений
6.7 NULL значения в NOT IN
6.8 Проверка существования строки
6.9 Проверка отсутствия строки
7. Строковые функции
7.1 CONCAT — конкатенация строк
7.2 Преобразование регистра букв
7.3 LENGTH — определение длины строки
7.4 Извлечение подстроки
7.5 POSITION — поиск подстроки
7.6 Дополнение до определенной длины
7. !)
8.5 Получение числа из строки
8.6 ROUND — округление числа
8.7 TRUNC — усечение числа
8.8 CEIL — следующее целое число
8.9 FLOOR — предыдущее целое число
8.10 GREATEST — определение большего числа
8.11 LEAST — определение меньшего числа
8.12 ABS — модуль числа
8.13 TO_CHAR — форматирование числа
9. Рекурсивные подзапросы
9.1 Подзапрос во фразе FROM
9.2 Введение в WITH
9.3 Несколько подзапросов в WITH
9.4 Простейший рекурсивный запрос
9.5 Рекурсивный запрос посложнее
9.6 Строим иерархию объектов
9.7 Путь до элемента
9.8 Сортировка (плохая)
9.9 Сортировка (надежная)
9.10 Форматирование иерархии
9.11 Нумерация вложенных списков
9.12 Листовые строки CONNECT_BY_ISLEAF
10. Оконные функции
10.1 Получение номера строки
10.2 Номер строки в рамках группы
10.3 Составляем рейтинг — RANK
10.4 Несколько человек на место — DENSE_RANK
10.5 Разделение на группы — NTILE
10.6 Агрегатные оконные функции
10.7 Обработка NULL значений
10.8 Нарастающий итог SUM + ORDER BY
10.9 Неуникальные значения в нарастающем итоге SUM + ORDER BY
10.10 Собираем строки через разделитель — STRING_AGG
10.11 WITHIN GROUP
- Оглавление
- Соединения
CROSS JOIN
— перекрестное (или декартово) произведение. Каждая строка одной таблицы соединяется с каждой строкой второй таблицы, давая тем самым в результате все возможные сочетания строк двух таблиц.
Попробуем декартово произведение на таблицах:
SELECT * FROM table1
SELECT * FROM table2
Получим декартово произведение таблиц table1
и table2
:
SELECT t1.value as value_1, t2.value as value_2 FROM table1 t1 CROSS JOIN table2 t2 ORDER BY t1.value, t2.value
Аналогичного результата можно достичь просто перечислив таблицы в предложении FROM
через запятую:
SELECT t1.value as value_1, t2.value as value_2 FROM table1 t1, table2 t2 ORDER BY t1.value, t2.value
Практическое задание
Декартово произведение
3.8 FULL JOIN
3.10 Синтаксис через WHERE
Сделано ребятами из Сибири© 2023 LearnDB
SQL Server Cross Join иллюстрируется практическими примерами
Резюме : в этом руководстве вы узнаете, как использовать SQL Server CROSS JOIN
для объединения двух или более несвязанных таблиц.
Ниже показан синтаксис SQL Server CROSS JOIN
двух таблиц:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT select_list ОТ Т1 ПОПЕРЕЧНОЕ СОЕДИНЕНИЕ T2;
CROSS JOIN
соединяет каждую строку из первой таблицы (T1) с каждой строкой из второй таблицы (T2). Другими словами, перекрестное соединение возвращает декартово произведение строк из обеих таблиц.
В отличие от INNER JOIN
или LEFT JOIN
, перекрестное соединение не устанавливает связи между соединяемыми таблицами.
Предположим, что таблица T1 содержит три строки 1, 2 и 3, а таблица T2 содержит три строки A, B и C.
CROSS JOIN
получает строку из первой таблицы (T1), а затем создает новая строка для каждой строки во второй таблице (T2). Затем он делает то же самое для следующей строки в первой таблице (T1) и так далее.
На этом рисунке CROSS JOIN
создает всего девять строк. В общем, если в первой таблице n строк, а во второй таблице m строк, результатом перекрестного соединения будет n x m строк.
Следующий оператор возвращает комбинации всех продуктов и магазинов. Набор результатов можно использовать для процедуры инвентаризации при закрытии месяца и года:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT Код товара, наименование товара, store_id, 0 АС количество ОТ производство.продукция ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ СОРТИРОВАТЬ ПО наименование товара, store_id;
Вот частичный вывод:
Следующий оператор находит товары, которые не продаются в магазинах:
Язык кода: SQL (язык структурированных запросов) (sql)
SELECT s. store_id, p.product_id, ISNULL(продажи, 0) продажи ОТ продажи.магазины с ПОПЕРЕЧНОЕ СОЕДИНЕНИЕ производство.продукция p ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБИРАТЬ s.store_id, p.product_id, СУММА (количество * i.list_price) продаж ОТ продажи.заказы o ВНУТРЕННЕЕ СОЕДИНЕНИЕ sales.order_items i ON i.order_id = o.order_id ВНУТРЕННЕЕ СОЕДИНЕНИЕ sales.stores s ON s.store_id = o.store_id ВНУТРЕННЕЕ СОЕДИНЕНИЕ production.products p ON p.product_id = i.product_id ГРУППА ПО s.store_id, p.product_id ) c ON c.store_id = s.store_id И c.product_id = p.product_id ГДЕ продажи НЕ НУЛЕВЫЕ СОРТИРОВАТЬ ПО Код товара, store_id;
На следующем рисунке показан частичный набор результатов:
В этом руководстве вы узнали, как использовать SQL Server CROSS JOIN
для создания декартовых произведений. строк из соединяемых таблиц.
Работа с перекрестными соединениями в SQL
Действительно редко встречающееся, но важное соединение: перекрестное соединение. Большая часть вашей инженерно-аналитической работы потребует от вас объединения таблиц для создания надежных широких таблиц, которые в конечном итоге будут доступны конечным бизнес-пользователям. Эти модели обычно создаются с использованием в основном левых (и некоторых внутренних) соединений.
Перекрестное соединение, с другой стороны, обычно берет два столбца между двумя объектами базы данных и создает таблицу, формирующую комбинацию всех строк в соединенных таблицах, называемую декартовым произведением. Используйте эту страницу, чтобы понять, как использовать перекрестные соединения и где вы можете использовать их в своем проекте dbt.
В отличие от обычных соединений, перекрестные соединения не используют ключи для соединения объектов базы данных вместе:
выберите
<поля>
изкак t1
перекрестное соединениекак t2
Перекрестные соединения — это одна из тех концепций SQL, которую легче понять на конкретном примере, так что давайте перейдем к ней.
SQL Cross Join Пример
Таблица A DATE_SPINE
Дата |
---|
2022-01-01 |
2022-01-01-01 |
2022-01-01-01 |
2022-01-01-01 |
. |
Таблица B пользователей
user_id |
---|
1 |
3 |
4 |
select
users.user_id as user_id,
date.date as date
from {{ ref('users') }} as users
cross join {{ ref('date_spine') }} as dateorder by 1
Этот простой запрос вернет декартово пересечение всех пользователей и дат, по существу создавая уникальную комбинацию пользователей на дату в строке:
идентификатор_пользователя | type | ||||
---|---|---|---|---|---|
1 | 2022-01-01 | ||||
1 | 2022-01-02 | ||||
1 | 2022-01-03 | ||||
2 | 2022-01 -01 | ||||
2 | 2022-01-02 | ||||
2 | 2022-01-03 | ||||
3 | 2021001-01-0195 | ||||
99999999999999999991900 | 99999999999999999
|