logo

MySQL CROSS JOIN

A MySQL CROSS JOIN a két vagy több tábla összes lehetőségének kombinálására szolgál, és az eredményt adja vissza, amely tartalmazza az összes közreműködő tábla minden sorát. A CROSS JOIN néven KARTESIAN JOIN néven is ismert, amely az összes kapcsolódó tábla derékszögű szorzatát adja. A derékszögű szorzat úgy magyarázható, hogy az első táblázatban szereplő összes sort meg kell szorozni a második táblázat összes sorával. Hasonló a belső összekapcsoláshoz, ahol az összekapcsolási feltétel nem érhető el ezzel a záradékkal.

Megérthetjük a következő vizuális megjelenítéssel, ahol a CROSS JOIN az 1. és 2. tábla összes rekordját adja vissza, és minden sor mindkét tábla sorainak kombinációja.

MySQL CROSS JOIN

MySQL CROSS JOIN szintaxis

A CROSS JOIN kulcsszót mindig a SELECT utasítással együtt használjuk, és a FROM záradék után kell írni. A következő szintaxis lekéri az összes rekordot mindkét összekapcsoló táblából:

 SELECT column-lists FROM table1 CROSS JOIN table2; 

A fenti szintaxisban az oszloplisták annak az oszlopnak vagy mezőnek a neve, amelyet vissza szeretne adni, a tábla1 és táblázat2 pedig az a táblanév, amelyből a rekordokat lekéri.

MySQL CROSS JOIN Példa

Vegyünk néhány példát, hogy megértsük a Left Join vagy a Left Outer Join záradék működését:

CROSS JOIN záradék két tábla összekapcsolására

Itt két táblázatot fogunk létrehozni 'vevők' és 'kapcsolatok' amely a következő adatokat tartalmazza:

Táblázat: vásárlók

MySQL CROSS JOIN

Táblázat: elérhetőségek

MySQL CROSS JOIN

Az összes rekord mindkét táblából való lekéréséhez hajtsa végre a következő lekérdezést:

 SELECT * FROM customers CROSS JOIN contacts; 

A lekérdezés sikeres végrehajtása után a következő kimenetet adja:

MySQL CROSS JOIN

Amikor a CROSS JOIN utasítás végrehajtódik, azt fogja látni, hogy 42 sort jelenít meg. Ez azt jelenti, hogy hét sor az ügyfelek táblájából megszorozva a kapcsolattartó táblázat hat sorával.

MEGJEGYZÉS: Annak elkerülése érdekében, hogy az oszlopok kétszer ismétlődnek, ajánlatos az egyes oszlopneveket használni a SELECT * utasítás helyett.

Kétértelmű oszlopok probléma a MySQL-ben CROSS JOIN

Néha több táblából kell lekérnünk a kiválasztott oszloprekordokat. Ezek a táblázatok tartalmazhatnak néhány hasonló oszlopnevet. Ebben az esetben a MySQL CROSS JOIN utasítás hibát jelez: az oszlop neve nem egyértelmű. Ez azt jelenti, hogy az oszlop neve mindkét táblában megtalálható, és a MySQL összezavarodik azzal kapcsolatban, hogy melyik oszlopot szeretné megjeleníteni. A következő példák érthetőbben magyarázzák ezt:

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

A fenti CROSS JOIN az alábbi képen látható hibát okoz:

MySQL CROSS JOIN

Ez a probléma megoldható, ha a tábla nevét az oszlopnév előtt használja. A fenti lekérdezés a következőképpen írható át:

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

A fenti lekérdezés végrehajtása után a következő kimenetet kapjuk:

MySQL CROSS JOIN

LEFT CSATLAKOZÁS a WHERE záradékkal

A WHERE záradék visszaadja a szűrő táblázat eredménye. A következő példa ezt szemlélteti a CROSS JOIN záradékkal:

savas tulajdonságok
 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;>

A fenti lekérdezés sikeres végrehajtása után a következő kimenetet adja:

MySQL CROSS JOIN