MySQL CROSS JOIN służy do łączenia wszystkich możliwości dwóch lub więcej tabel i zwraca wynik zawierający każdy wiersz ze wszystkich tabel składowych. Funkcja CROSS JOIN jest również znana jako CARTESIAN JOIN i zapewnia iloczyn kartezjański wszystkich powiązanych tabel. Iloczyn kartezjański można wytłumaczyć jako pomnożenie wszystkich wierszy znajdujących się w pierwszej tabeli przez wszystkie wiersze występujące w drugiej tabeli. Jest to podobne do łączenia wewnętrznego, gdzie warunek łączenia nie jest dostępny w tej klauzuli.
podkreśl w przecenie
Możemy to zrozumieć za pomocą następującej reprezentacji wizualnej, w której CROSS JOIN zwraca wszystkie rekordy z tabeli 1 i tabeli 2, a każdy wiersz jest kombinacją wierszy obu tabel.
Składnia MySQL CROSS JOIN
Słowo kluczowe CROSS JOIN jest zawsze używane z instrukcją SELECT i musi być zapisane po klauzuli FROM. Następująca składnia pobiera wszystkie rekordy z obu tabel łączących:
SELECT column-lists FROM table1 CROSS JOIN table2;
W powyższej składni lista-kolumn to nazwa kolumny lub pola, które chcesz zwrócić, a tabela1 i tabela2 to nazwy tabeli, z której pobierane są rekordy.
Przykład łączenia krzyżowego MySQL
Weźmy kilka przykładów, aby zrozumieć działanie klauzul Left Join lub Left Outer Join:
Klauzula CROSS JOIN służąca do łączenia dwóch tabel
Tutaj stworzymy dwie tabele 'klienci' I 'Łączność' który zawiera następujące dane:
Tabela: klienci
Tabela: kontakty
ciąg zastępuje Java
Aby pobrać wszystkie rekordy z obu tabel, wykonaj następujące zapytanie:
SELECT * FROM customers CROSS JOIN contacts;
Po pomyślnym wykonaniu zapytania wyświetli się następujący wynik:
Po wykonaniu instrukcji CROSS JOIN zauważysz, że wyświetla ona 42 wiersze. Oznacza to, że siedem wierszy z tabeli klientów pomnożono przez sześć wierszy z tabeli kontaktów.
UWAGA: Aby uniknąć podwójnego powtórzenia kolumn, zaleca się użycie pojedynczych nazw kolumn zamiast instrukcji SELECT *.
Niejednoznaczny problem z kolumnami w MySQL CROSS JOIN
Czasami musimy pobrać wybrane rekordy kolumn z wielu tabel. Tabele te mogą zawierać podobne nazwy kolumn. W takim przypadku instrukcja MySQL CROSS JOIN zgłasza błąd: nazwa kolumny jest niejednoznaczna. Oznacza to, że nazwa kolumny występuje w obu tabelach i MySQL nie wie, którą kolumnę chcesz wyświetlić. Poniższe przykłady wyjaśniają to jaśniej:
np. standardowe
SELECT customer_id, cust_name, income, order_id, price FROM customer CROSS JOIN orders;
Powyższe CROSS JOIN zgłasza błąd jak pokazano na obrazku poniżej:
Ten problem można rozwiązać, używając nazwy tabeli przed nazwą kolumny. Powyższe zapytanie można przepisać jako:
stół reakcji
SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders;
Po wykonaniu powyższego zapytania otrzymamy następujący wynik:
LEFT JOIN z klauzulą WHERE
Klauzula WHERE służy do zwracania filtr wynik z tabeli. Poniższy przykład ilustruje to za pomocą klauzuli 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;>
Po pomyślnym wykonaniu powyższego zapytania wyświetli się następujący wynik:
5000;>