logo

MySQL CROSS JOIN

MySQL CROSS JOIN s'utilitza per combinar totes les possibilitats de les dues o més taules i retorna el resultat que conté cada fila de totes les taules contribuents. El CROSS JOIN també es coneix com a CARTESIAN JOIN, que proporciona el producte cartesià de totes les taules associades. El producte cartesià es pot explicar com totes les files presents a la primera taula multiplicades per totes les files presents a la segona taula. És similar a la unió interna, on la condició d'unió no està disponible amb aquesta clàusula.

Ho podem entendre amb la següent representació visual on CROSS JOIN retorna tots els registres de la taula1 i la taula2, i cada fila és la combinació de files d'ambdues taules.

MySQL CROSS JOIN

Sintaxi de MySQL CROSS JOIN

La paraula clau CROSS JOIN sempre s'utilitza amb la instrucció SELECT i s'ha d'escriure després de la clàusula FROM. La sintaxi següent recupera tots els registres de les dues taules d'unió:

python bytes a cadena
 SELECT column-lists FROM table1 CROSS JOIN table2; 

A la sintaxi anterior, les llistes de columnes són el nom de la columna o del camp que voleu retornar i la taula1 i la taula2 són el nom de la taula de la qual obteniu els registres.

Exemple de MySQL CROSS JOIN

Prenguem alguns exemples per entendre el funcionament de la clàusula Left Join o Left Outer Join:

Clàusula CROSS JOIN per unir dues taules

Aquí, anem a crear dues taules 'clients' i 'contactes' que conté les dades següents:

Taula: clients

MySQL CROSS JOIN

Taula: contactes

mètodes abstractes
MySQL CROSS JOIN

Per obtenir tots els registres d'ambdues taules, executeu la consulta següent:

 SELECT * FROM customers CROSS JOIN contacts; 

Després d'executar correctament la consulta, donarà la següent sortida:

MySQL CROSS JOIN

Quan s'executi la instrucció CROSS JOIN, observareu que mostra 42 files. Significa que set files de la taula de clients es multipliquen per les sis files de la taula de contactes.

NOTA: Per evitar el resultat de columnes repetides dues vegades, es recomana utilitzar noms de columnes individuals en comptes de la instrucció SELECT *.

Problema de columnes ambigües a MySQL CROSS JOIN

De vegades, hem d'obtenir els registres de columna seleccionats de diverses taules. Aquestes taules poden contenir alguns noms de columnes similars. En aquest cas, la instrucció MySQL CROSS JOIN genera un error: el nom de la columna és ambigu. Significa que el nom de la columna està present a les dues taules i MySQL es confon sobre quina columna voleu mostrar. Els exemples següents ho expliquen amb més claredat:

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

El CROSS JOIN anterior genera un error tal com es mostra a la imatge següent:

MySQL CROSS JOIN

Aquest problema es pot resoldre utilitzant el nom de la taula abans del nom de la columna. La consulta anterior es pot tornar a escriure com:

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

Després d'executar la consulta anterior, obtindrem la següent sortida:

comentari multilínia powershell
MySQL CROSS JOIN

LEFT JOIN amb la clàusula WHERE

La clàusula WHERE s'utilitza per retornar el filtre resultat de la taula. L'exemple següent ho il·lustra amb la clàusula 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;>

Després d'executar correctament la consulta anterior, donarà la següent sortida:

MySQL CROSS JOIN