Loading:


SQL JOIN - co to jest, kiedy używać oraz jak stosować?

7. Łączenie oraz grupowanie


Czy zastanawiałeś się kiedyś, który z klientów zamawia zawsze najwięcej produktów danego koloru?
Ładną i wygodną do tego celu, który klient zamówił ile produktów jest użycie słowa GROUP BY.


SELECT klienci.klient_id, klienci.klient_imie, COUNT(produkty.condom_kolor) AS wszystkie_zamowienia FROM klienci
JOIN produkty
ON klienci.klient_id = produkty.klient_id
GROUP BY klienci.klient_id;




Aby zobaczyć klientów którzy nie zamówili jeszcze nic, należy użyć umiłowanego LEFT JOINa:



SELECT klienci.klient_id, klienci.klient_imie, COUNT(produkty.condom_kolor) AS wszystkie_zamowienia FROM klienci
LEFT JOIN produkty
ON klienci.klient_id = produkty.klient_id
GROUP BY klienci.klient_id;

 

Oba przykłady różni tylko to, że w drugim zapytaniu dodaliśmy słowo LEFT.

 

Opiszmy więc może pierwszy przykład, dla którego wszukujemy ludzi, którzy złożyli lub też jeszcze nie złożyli jeszcze zamówienia.

 

Pierwsza linia informuje jakie kolumny będą wyświetlane, dzięki słowu COUNT oraz nazwie kolumny możemy ustalić ilość zamówień dla każdego klienta. Później następuje połączenie dwóch tabel, oraz warunek który powinien być spełniony. Na końcu grupujemy nasze wyniki według numer ID klientów, dzięki temu również nie będziemy mieli powtarzających się wpisów w liście.

 

Czyli wynik będzie następujący:

 

klient_id klient_imie wszystkie_zamowienia
1 Jan 3
2 Tomek 0
3 Dawid 2
4 Adam 1


Dalsza czê¶æ: 1 2 3 4 5 6 7
Napisz Artyku³






Dodano przez: divix
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
Pisząc kod lepiej unikać RIGHT JOIN - w razie konieczności obsługi SQLite będą problemy, bo SQLite ma tylko LEFT JOIN.
autor: freebox | 13031 | 2014-10-26 08:08:27


    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors