Oferty pracy dla inżynierów
  • StrefaInzyniera.pl (current)
  • Oferty pracy
  • Automatyka
    • Uprawnienia elektryczne SEP
    • Elektrotechnika
    • Elektronika
    • Automatyka
    • Robotyka
  • Przemysł
    • Przemysł
    • Obróbka metali
    • CAD
    • CATIA
    • Autodesk Inventor
  • IT
    • JAVA
    • C++
    • Sieci
  • Firmy
  • Dla firm
    • Rejestracja - profil firmy
    • Dodaj ofertę pracy - bezpłatnie
    • Publikacja artykułów
    • Kontakt
  • Zaloguj się
  • STREFA INŻYNIERA
  • Oferty pracy
  • Automatyka
    • Uprawnienia elektryczne SEP
    • Elektrotechnika
    • Elektroniki
    • Automatyki
    • Robotyka
  • Przemysł
    • Przemysł
    • Obróbka metali
    • CAD
    • CATIA
    • Autodesk Inventor
  • IT
    • JAVA
    • C++
    • Sieci
  • Firmy
  • Dla firm
    • Rejestracja - profil firmy
    • Dodaj ofertę pracy - bezpłatnie
    • Publikacja artykułów
    • Kontakt
  • Logowanie
  • Zaloguj się
Categories SQL

Złączenia krzyżowe CROSS JOIN

Ostatnim rodzajem złączenia jest złączenie krzyżowe (ang. cross join). Na początek warto zaznaczyć, że nie jest to typ złączenia wewnętrznego czy zewnętrznego. Jest ono bowiem stosowane do złączenia dwóch tabel bez określenia relacji występującej między nimi. Wskutek tego w wyniku zapytania z klauzulą CROSS JOIN znajdą się wszystkie możliwe kombinacje wartości, jakie znalazły się w wierszach obu łączonych ze sobą tabel. W języku technicznym takie działanie nosi nazwę iloczynu kartezjańskiego (ang. Cartesian product). Jeśli na przykład w jednej tabeli znajdują się trzy wiersze, a w drugiej są cztery rekordy, w wyniku zastosowania złączenia krzyżowego otrzymamy dwanaście wierszy. Złączenie to ma zatem dość specyficzny charakter, dlatego rzadko jest ono stosowane w praktyce.

Przyjrzyjmy się teraz dwóm przykładom zastosowania złączenia krzyżowego. Najpierw wyobraźmy sobie, że produkujemy koszulki w trzech rozmiarach i czterech kolorach. W tabeli RozmiaryKoszulek przechowywane są informacje o oferowanych przez nas rozmiarach:

IDRozmiaru Rozmiar
1 Mały
2 Średni
3 Duży

 

KoloryKoszulek przechowywane są natomiast informacje o dostępnych kolorach naszych produktów:

IDKoloru Kolor
1 Czerwony
2 Niebieski
3 Zielony
4 Żółty

 

Powiedzmy, że chcielibyśmy ustalić wszystkie możliwe kombinacje wielkości koszulek i ich kolorów, które moglibyśmy wyprodukować. W tym celu posłużylibyśmy się poniższą instrukcją SELECT, zawierającą złączenie krzyżowe:

SELECT
Rozmiar,
Kolor
FROM RozmiaryKoszulek
CROSS JOIN KoloryKoszulek

Jej wynik to:

Rozmiar Kolor
Mały Czerwony
Mały Niebieski
Mały Zielony
Mały Żółty
Średni Czerwony
Średni Niebieski
Średni Zielony
Średni Żółty
Duży Czerwony
Duży Niebieski
Duży Zielony
Duży Żółty

 

Jak widać, wskutek użycia w zapytaniu złączenia krzyżowego otrzymaliśmy zestaw wszystkich możliwych kombinacji wartości znajdujących się w wierszach pochodzących z obu tabel. Zauważ ponadto, że w definicji tego złączenia nie ma słowa kluczowego ON. Powodem tego jest brak określonego związku między tabelami wymienionymi w naszej instrukcji. Nie mają one wspólnej kolumny, która mogłaby posłużyć do złączenia. Dane w nich zawarte są od siebie niezależne.

Co ciekawe, złączenie krzyżowe można zapisać także, stosując znany nam już z poprzedniego rozdziału format, mianowicie z pominięciem w tym przypadku słowa kluczowego CROSS JOIN. Wystarczy wymienić w klauzuli FROM, po przecinku, nazwy tabel będących przedmiotem tego rodzaju złączenia. Po uruchomieniu poniższej instrukcji SELECT otrzymamy zatem ten sam wynik co w przypadku użycia klauzuli CROSS JOIN:

SELECT
Rozmiar,
Kolor
FROM RozmiaryKoszulek, KoloryKoszulek

Powyższy przykład zastosowania złączenia krzyżowego dotyczy sytuacji, która rzadko ma miejsce w realnym świecie. Przejdźmy zatem do drugiego przykładu, prezentującego dość powszechne wykorzystanie omawianego przez nas typu złączenia. Wyobraźmy sobie, że mamy tabelę, w której znajduje się tylko jeden wiersz zawierający istotne dla nas, choć niepełne,
informacje. Ponieważ jest to pojedynczy wiersz, możemy dokonać złączenia krzyżowego naszej tabeli z inną tabelą, dzięki czemu w wyniku otrzymamy również tylko jeden wiersz. Pokażmy to zatem na przykładzie i skorzystajmy z tabeli KluczoweDaty, w której
znalazły się informacje dotyczące dat istotnych z punktu widzenia przedsiębiorstwa:

OstatniaDataPrzetwarzania BieżącyRokPodatkowy BieżącyKwartałPodatkowy
2016-09-15 2016 Q3

 

W naszym przykładzie chcemy wyświetlić dane z tabeli Zamówienia, jednak interesować nas będą wyłącznie te wiersze, w przypadku których data zamówienia jest taka jak wartość w kolumnie OstatniaDataPrzetwarzania z tabeli KluczoweDaty. Warto nadmienić, że ostatnia data przetwarzania często się zmienia. Wskazuje ona bowiem moment, w którym w systemie miało miejsce ostatnie przetwarzanie określonego zestawu danych. Mogą się jednak zdarzyć pewne opóźnienia, wskutek czego data ta nie będzie najbardziej aktualna. Poniżej znajduje się instrukcja SELECT ze złączeniem krzyżowym, za pomocą której uzyskamy interesujące nas informacje:

SELECT
IDZamówienia AS 'ID zamówienia',
DataZamówienia AS 'Data zamówienia',
KwotaZamówienia AS 'Kwota zamówienia'
FROM Zamówienia
CROSS JOIN KluczoweDaty
WHERE DataZamówienia = OstatniaDataPrzetwarzania

Jej wynik jest następujący:

ID zamówienia Data zamówienia Kwota zamówienia
4 2016-09-15 20,00

 

Tym samym otrzymaliśmy tylko jeden wiersz z danymi z tabeli Zamówienia. Stało się tak, ponieważ w kryteriach selekcji odnieśliśmy się do wartości znajdującej się w kolumnie Ostatnia DataPrzetwarzania. Ponieważ w tabeli KluczoweDaty znajduje się tylko jeden wiersz, wskutek zastosowania złączenia krzyżowego otrzymaliśmy również tylko jeden rekord, nie zaś zwielokrotnioną ich liczbę. Użycie klauzuli CROSS JOIN nie miało zatem wpływu na liczbę wierszy wyświetlanych w wyniku.

 

Język SQL. Przyjazny podręcznik. Wydanie II Autor: Larry Rockoff Wydawnictwo: Helion

Zaloguj się aby dodać komentarz

Podobne artykuły

« Operator EXISTSZłączenia pełne »

Podziel się ze znajomymi tym artykułem - udostępnij na FB lub wyślij e-maila korzystając z poniższych opcji:

Oferty pracy dla inżynierów
Oferty pracy dla inżynierów

Elektryk automatyk

Guz Technika Piekarnicza
Siemianowice Śląskie, śląskie
4500-6500 PLN

Product Engineer

SPX Flow Inc.
Bydgoszcz, kujawsko-pomorskie

Inżynier ds. Rozwoju Platform i Aplikacji Telewizyjnych

Play (P4 sp. zo.o.)
Warszawa, mazowieckie

Starszy Inżynier ds. Rozwoju Platform Strumieniowania i Dystrybucji Wideo

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

Inżynier ds. Rozwoju Urządzeń Abonenckich – Smartfony, Tablety, Urządzenia Wearables

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

Ekspert ds. Rozwoju Urządzeń Abonenckich STB

Play (P4 sp. zo.o.)
Warszawa, dowolny Region

wszystkie oferty
PracaTechniczna.pl

Strefainzyniera.pl - rynek, praca, rozwój - wszystko co ważne dla inżynierów

  • Dla pracodawcy
  • Artykuły
  • Praca
  • Publikacje
  • Popularne stanowiska
  • Offer in English
  • Regulamin
  • Regulamin dla klientów
  • Polityka prywatności
  • Polityka cookies
  • Kontakt

© 2011 - 2021 NetPortal

Mapa strony Letnisko blisko