MySQL CROSS JOIN використовується для об’єднання всіх можливостей двох або більше таблиць і повертає результат, який містить кожен рядок з усіх допоміжних таблиць. CROSS JOIN також відомий як CARTESIAN JOIN, який забезпечує декартовий добуток усіх пов’язаних таблиць. Декартовий добуток можна пояснити як усі рядки, присутні в першій таблиці, помножені на всі рядки, присутні в другій таблиці. Це подібно до внутрішнього об’єднання, де умова об’єднання недоступна з цим пунктом.
Ми можемо зрозуміти це за допомогою наступного візуального представлення, де CROSS JOIN повертає всі записи з table1 і table2, і кожен рядок є комбінацією рядків обох таблиць.
Синтаксис MySQL CROSS JOIN
Ключове слово CROSS JOIN завжди використовується з інструкцією SELECT і має бути написано після пропозиції FROM. Наступний синтаксис отримує всі записи з обох об’єднаних таблиць:
SELECT column-lists FROM table1 CROSS JOIN table2;
У наведеному вище синтаксисі стовпці-списки — це ім’я стовпця або поля, яке потрібно повернути, а table1 і table2 — це ім’я таблиці, з якої ви отримуєте записи.
MySQL CROSS JOIN Приклад
Розглянемо кілька прикладів, щоб зрозуміти, як працює речення Left Join або Left Outer Join:
Речення CROSS JOIN для з’єднання двох таблиць
Тут ми створимо дві таблиці 'клієнти' і 'контакти' який містить такі дані:
Таблиця: клієнти
Таблиця: контакти
Щоб отримати всі записи з обох таблиць, виконайте такий запит:
SELECT * FROM customers CROSS JOIN contacts;
Після успішного виконання запиту він видасть наступний результат:
Під час виконання оператора CROSS JOIN ви побачите, що він відображає 42 рядки. Це означає, що сім рядків із таблиці клієнтів помножено на шість рядків із таблиці контактів.
ПРИМІТКА. Щоб уникнути повторення стовпців двічі, рекомендується використовувати назви окремих стовпців замість оператора SELECT *.
Проблема неоднозначних стовпців у MySQL CROSS JOIN
Іноді нам потрібно отримати вибрані записи стовпців із кількох таблиць. Ці таблиці можуть містити схожі назви стовпців. У цьому випадку оператор MySQL CROSS JOIN видає помилку: назва стовпця неоднозначна. Це означає, що назва стовпця присутня в обох таблицях, і MySQL заплутається щодо того, який стовпець ви хочете відобразити. Наступні приклади пояснюють це більш чітко:
SELECT customer_id, cust_name, income, order_id, price FROM customer CROSS JOIN orders;
Наведене вище CROSS JOIN видає помилку, як показано на зображенні нижче:
Цю проблему можна вирішити, використовуючи назву таблиці перед назвою стовпця. Наведений вище запит можна переписати так:
SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders;
Після виконання наведеного вище запиту ми отримаємо наступний результат:
LEFT JOIN з реченням WHERE
Речення WHERE використовується для повернення фільтр результат з табл. Наступний приклад ілюструє це з пропозицією CROSS JOIN:
SELECT customers.customer_id, customers.cust_name, customers.income, orders.order_id, orders.price FROM customers CROSS JOIN orders USING(customer_id) WHERE price>1500 AND price<5000; < pre> <p>This statement gives the below result:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-7.webp" alt="MySQL CROSS JOIN"> <h3>MySQL CROSS JOIN Multiple Tables</h3> <p>We have already created two tables named ' <strong>customers'</strong> and ' <strong>orders'</strong> . Let us create one more table and name it as ' <strong>contacts' that contains the following data:</strong> </p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-8.webp" alt="MySQL CROSS JOIN"> <p>Here, we are going to explain CROSS JOIN with LEFT JOIN using three tables. Execute the following statement to join the three table customers, orders, and contacts. In this statement, first CROSS JOIN completed between orders and contacts, and then LEFT JOIN executes according to the specified condition.</p> <pre> SELECT * FROM customer LEFT JOIN(orders CROSS JOIN contacts) ON customer.customer_id=contact_id ORDER BY income; </pre> <p>After successful execution of the above query, it will give the following output:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-9.webp" alt="MySQL CROSS JOIN"> <hr></5000;>
Після успішного виконання наведеного вище запиту він видасть наступний результат:
5000;>