Jedną z największych zalet korzystania z relacyjnych baz danych, takich jak MySQL, jest to, że ich relacyjna struktura umożliwia łatwe przechowywanie informacji i wykonywanie zapytań w wielu tabelach.

Przyjrzyjmy się, jak pobrać dokładnie potrzebne dane z wielu tabel bazy danych i różne dostępne sprzężenia, które pozwalają uzyskać dokładne wyniki.

Zainicjuj przykładową bazę danych

Nie jest to wymagane, ale jeśli chcesz postępować zgodnie z przykładami w tym artykule, możesz zainicjować przykładową bazę danych lokalnie za pomocą poniższych poleceń terminala:

git clone https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> WYBIERZ LICZBĘ (*) OD klientów;

Powinieneś otrzymać wynik stwierdzający, że w pliku jest 2000 wierszy klienci stół.

Domyślnie / INNER Dołącz

Domyślne łączenie używane w Bazy danych MySQL nazywa się złączeniem WEWNĘTRZNYM i jest najbardziej powszechne i proste. To sprzężenie zwraca wszystkie rekordy, dla których istnieją zgodne rekordy w obu tabelach, i odrzuca wszystkie inne rekordy.

instagram viewer
Jak połączyć się z bazą danych MySQL za pomocą języka Java

Java udostępnia JDBC jako część Java SDK. W tym artykule przyjrzyjmy się szczegółom łączenia się z bazą danych MySQL i wykonywania z nią zapytań.

Na przykład, jeśli chcesz zobaczyć imię i nazwisko klienta oraz kwotę i datę zamówienia dla wszystkich zamówień większych niż 1000 USD, możesz użyć następującej instrukcji SQL:


WYBIERZ
c.id, c.first_name, c.last_name, o.amount, o.created_at
OD
klienci c, zamówienia o
GDZIE
o.customer_id = c.id AND o.amount> = 1000;

Kilka uwag dotyczących powyższego zapytania:

  • Wybieranych jest pięć różnych kolumn, trzy z tabeli klientów i dwie z tabeli zamówień.
  • W klauzuli FROM dwie tabele są zdefiniowane, ale zakończone są literami „c” i „o”. Te po prostu określają aliasy w SQL, mogą być dowolne i służą do skracania zapytania SQL.
  • Plik o.customer_id = c.id jest aspektem łączenia zapytania i zapewnia odpowiednią korelację między klientami a zamówieniami.

Poniżej przedstawiono inny i technicznie bardziej poprawny składniowo sposób pisania tego samego zapytania:


WYBIERZ
c.id, c.first_name, c.last_name, o.amount, o.created_at
OD
klienci c INNER JOIN zamówienia o
NA
customer_id = c.id
GDZIE
o.amount> = 1000;

Powyższe zapytanie wydaje się być trochę łatwiejsze do odczytania, ponieważ można łatwo zobaczyć połączenie między klientami a tabelą zamówień. Jednak pod każdym względem te dwa zapytania są takie same i dadzą dokładnie te same rekordy.

LEFT łączy

Łączenia po lewej stronie zwracają wszystkie rekordy z lewej tabeli, które również pasują do rekordów z prawej tabeli, i odrzucają wszystkie inne rekordy. Na przykład, jeśli chcesz zobaczyć łączną kwotę sprzedaży dla każdego produktu w bazie danych, możesz spróbować użyć zapytania takiego jak:


WYBIERZ
p.name, sum (item.amount) AS tamount
OD
zamowienia pozycja LEWA DOŁĄCZ produkty p
NA
item.product_id = p.id
GROUP BY item.product_id ZAMÓWIENIE PRZEZ tamount DESC

Daje to ładny widok z dwiema kolumnami, pokazujący nazwę produktu z całkowitą kwotą sprzedaży i działa zgodnie z oczekiwaniami. Zapytanie przeszło przez wszystkie produkty w tabeli order_items, połączyło je z rekordami w tabeli products i zwróciło całkowitą kwotę sprzedaży każdego z nich.

RIGHT łączy

Korzystając z powyższego przykładu, zwróć uwagę na fakt, że powyższe zapytanie zwróciło tylko 19 rekordów, podczas gdy w bazie danych znajdują się łącznie 22 produkty. Dzieje się tak, ponieważ zapytanie rozpoczęło się od tabeli orders_items i zostało połączone z tabelą products, a ponieważ niektóre produkty nigdy nie zostały zamówione, w pliku order_items nie ma zapisów dotyczących tych produktów stół.

Co się stanie, jeśli chcesz otrzymać listę wszystkich produktów z kwotami sprzedaży, w tym produkty, które nie zostały zamówione? Wypróbuj prawidłowe sprzężenie za pomocą następującego zapytania:


WYBIERZ
p.name, sum (item.amount) AS tamount
OD
order_items pozycja PRAWO DOŁĄCZ produkty p
NA
item.product_id = p.id
GROUP BY p.id ZAMÓWIENIE PRZEZ tamount DESC

Tak jest lepiej, a zapytanie zwraca teraz pełne 22 produkty, przy czym trzy z nich mają wartość zero. Dzieje się tak, ponieważ zamiast używać orders_items jako tabeli podstawowej, która łączy się z tabelą products, prawe sprzężenie odwraca zamówienie i łączy tabelę products z tabelą orders_items.

Wiele połączeń w zapytaniu

Czasami trzeba połączyć trzy lub więcej tabel, aby uzyskać określony zestaw wyników.

Na przykład, może potrzebujesz listy wszystkich klientów, którzy kupili kuchenkę mikrofalową (identyfikator produktu nr 1), wraz z ich nazwiskami i datą zamówienia. Wymaga to SELECT w trzech tabelach, które można wykonać za pomocą dwóch sprzężeń z następującym zapytaniem:


WYBIERZ
c.first_name, c.last_name, o.amount, o.created_at
OD
klienci c INNER JOIN zamówienia o
NA
c.id = o.customer_id INNER JOIN order_items item
NA
item.order_id = o.id
GDZIE
item.product_id = 1 ZAMÓWIENIE PRZEZ o.created_at;

To zapytanie zwraca wszystkie 426 zamówienia mikrofalówki i działa zgodnie z oczekiwaniami. Najpierw dopasowuje wszystkich klientów do ich odpowiednich zamówień, a następnie dalsze zapytania, które wynikają z dopasowywanie wszystkich zamówień tylko do tych w tabeli orders_items, które zawierają produkt mikrofalowy (id # 1).

Nigdy nie używaj zapytań podrzędnych z klauzulami IN

Na marginesie, należy za wszelką cenę unikać używania zapytań podrzędnych w zapytaniach SQL, takich jak:

SELECT first_name, last_name OD klientów WHERE id IN (SELECT customer_id FROM zamówienia WHERE status = 'zatwierdzone' ORAZ kwota <100);

Zapytania, takie jak powyższe, są bardzo nieefektywne, wymagają dużej liczby zasobów i należy ich unikać w miarę możliwości. Zamiast tego użyj odpowiednich połączeń, jak opisano w powyższych sekcjach. Na przykład powyższe zapytanie należy przepisać jako:

SELECT c.first_name, c.last_name OD klientów c LEFT JOIN zamówienia o ON o.customer_id = c.id WHERE o.status = 'Approved' AND o.amount <100;

Oszczędź czas dzięki połączeniom SQL

Mam nadzieję, że ten artykuł pomoże Ci pokazać moc relacyjnych baz danych, takich jak MySQL, i jak je budować Zapytania SQL które pobierają rekordy z wielu tabel w ramach jednego zapytania przy użyciu sprzężeń, umożliwiając uzyskanie dokładnych żądanych wyników.

Nauczyłeś się trzech różnych łączeń w SQL, jak tworzyć aliasy nazw kolumn i tabel, używać wielu łączeń w jednym zapytaniu i dlaczego należy unikać zapytań podrzędnych. Nigdy więcej nie próbuj ręcznie skompilować różnych zestawów danych w jeden i zacznij używać złączeń, aby zaimponować współpracownikom i zaoszczędzić czas.

E-mail
10 fajnych sposobów tworzenia pięknych dokumentów Google

Dokumenty Google to teraz potęga biurowa. Z pomocą tych dodatków możesz nadać swoim Dokumentom Google ładny i stylowy wygląd.

Powiązane tematy
  • Programowanie
  • SQL
  • Baza danych
O autorze
Matt Dizak (13 opublikowanych artykułów)Więcej od Matta Dizaka

Zapisz się do naszego newslettera

Dołącz do naszego biuletynu, aby otrzymywać wskazówki techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Jeszcze jeden krok…!

Potwierdź swój adres e-mail w wiadomości e-mail, którą właśnie wysłaliśmy.

.