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;>