logo

MySQL CROSS JOIN

MySQL CROSS JOIN се използва за комбиниране на всички възможности на две или повече таблици и връща резултата, който съдържа всеки ред от всички допринасящи таблици. CROSS JOIN е известен също като CARTESIAN JOIN, който предоставя декартовия продукт на всички свързани таблици. Декартовото произведение може да се обясни като всички редове, присъстващи в първата таблица, умножени по всички редове, присъстващи във втората таблица. Подобно е на вътрешното свързване, където условието за свързване не е налично с тази клауза.

Можем да го разберем със следното визуално представяне, където CROSS JOIN връща всички записи от table1 и table2, а всеки ред е комбинация от редове от двете таблици.

MySQL CROSS JOIN

Синтаксис на 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 за свързване на две таблици

Тук ще създадем две таблици 'клиенти' и 'Контакти' който съдържа следните данни:

Маса: клиенти

MySQL CROSS JOIN

Таблица: контакти

MySQL CROSS JOIN

За да извлечете всички записи от двете таблици, изпълнете следната заявка:

 SELECT * FROM customers CROSS JOIN contacts; 

След успешното изпълнение на заявката, тя ще даде следния резултат:

MySQL CROSS JOIN

Когато командата 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 хвърля грешка, както е дадено на изображението по-долу:

MySQL CROSS JOIN

Този проблем може да бъде решен чрез използване на името на таблицата преди името на колоната. Горната заявка може да бъде пренаписана като:

 SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders; 

След като изпълним горната заявка, ще получим следния резултат:

MySQL CROSS JOIN

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&gt;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 &apos; <strong>customers&apos;</strong> and &apos; <strong>orders&apos;</strong> . Let us create one more table and name it as &apos; <strong>contacts&apos; 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;>

След успешното изпълнение на горната заявка, тя ще даде следния резултат:

MySQL CROSS JOIN