Czas na rozliczenie pojazdu pobranie danych z naszych tabel i wyświetlenie ich. Ten artykuł będzie trochę inny niż wcześniejszy z tej serii. Do tej pory robiliśmy zapytania do wszystkich tabel po kolei. Teraz stworzymy zapytania, które użyjemy w odpowiednich miejscach naszego projektu.
Rozliczenie pojazdu pobranie – wprowadzenie
Na samym początku trzeba podkreślić, że zapytanie SELECT jest bardzo rozbudowanym zapytaniem i daje bardzo duże możliwości. Dlatego pokaże przykłady podstawowej struktury i zajmiemy się tym jakie dane możemy wyciągnąć z naszej bazy danych.
Select * FROM [nazwa bazy].[nazwa tabeli]
Tyle wystarczy, aby pobrać dane z tabeli. Jednak my chcemy otrzymać bardziej przystosowane dane do naszych potrzeb dlatego możemy zastosować ograniczanie ilości wyświetlanych danych na przykład prze klauzule WHERE tak jak z zapytaniach UPDATE.
SELECT * FROM [nazwa bazy].[nazwa tabeli] WHERE id = [identyfikator]
Rozliczenie pojazdu pobranie – zapytania
Teraz zajmiemy się tworzeniem zapytań na wielu tabelach tak, aby uzyskać pewną ilość określonych danych, które później możemy zaprezentować użytkownikowi naszej aplikacji.
Lista pojazdów
Zastanówmy się, co tak naprawdę będziemy chcieli prezentować naszemu użytkownikowi. Na pewno będzie to lista pojazdów, które należą do niego.
SELECT registrationNumber, mark FROM transportMyBatis.Vehicle WHERE idPerson = 1
I ten sposób pobieramy wszystkie pojazdy dla użytkownika o identyfikatorze 1. Jednak jest pewien problem, co w przypadku gdy użytkownik będzie miał tylko jeden pojazd. Bez sensu jest mu pokazywanie listy z jednym pojazdem. Lepiej od razu przejść dalej. Tylko skąd będziemy wiedzieli, że w tym przypadku mamy właśnie taką sytuację. Musimy najpierw wykonać odpowiednie zapytanie, aby to sprawdzić.
SELECT COUNT(id) FROM transportMyBatis.Vehicle WHERE idPerson = 1
To zapytanie zwróci nam jedną wartość, czyli ilość pojazdów. Wtedy będziemy wiedzieli, który mamy przypadek i co należy wyświetlić. Przypadku są następujące:
- Zwracana wartość to zero – czyli informujemy, że nie masz jeszcze pojazdów.
- Otrzymana wartość to jeden – czyli przechodzimy do strony z przejazdami.
- Wartość większa od jedynki – czyli pokazujemy listę przejazdów.
Lista przejazdów
SELECT r.id, r.whence, r.`where`, r.rideKind, r.rideDate, SUM(s.fuel), f.price, SUM(s.fuel*f.price) FROM transportMyBatis.Ride r LEFT JOIN transportMyBatis.Settlement s on r.id = s.idRide LEFT JOIN transportMyBatis.Refuel f on f.id = s.idRefuel GROUP BY r.id, r.whence, r.`where`, r.rideKind, f.price ORDER BY r.id
Tak wygląda zapytanie, dzięki któremu pobierzemy potrzebne nam dane. Omówmy, co dokładnie ono robi. Zacznijmy od końca. Ostatni zapis każe wykonać sortowanie po identyfikatorach i wyświetlić w tej kolejności. Kolejny zapis to grupowanie kolumn. Jeżeli usuniemy ten zapis, to zapytanie się nie wykona. Dlatego że w pierwszej linii są dwa zapisy SUM. Te dwa zapisy mówią bazie, że wartości tych kolumn chcemy sumować w naszym zapytaniu. Jednak baza nie wiem, co chcemy zrobić z pozostałymi. Dlatego jest właśnie klauzula GROUP BY która informuje bazę, że wartości w tych kolumnach mają zostać bez zmian. Pozwala to na wyświetlenie każdego przejazdu z osobna.
Kolejnym zapisem jest LEFT JOIN. Jest to zapis informujący bazę, że chcemy połączyć nasze tabele, aby uzyskać dostęp do większej ilości kolumn. Dodatkową informacją jest to, w jaki sposób będziemy łączyć te tabele. Tabele są w relacji jeden do wielu, czyli jeden wiersz pierwszej tabeli i wszystkie pasujące drugiej, pasujące do wzorca. Wytłumaczmy to na naszym przykładzie. Jeden wpis do tabeli przejazd (Ride) i wszystkie pasujące z tabeli rozliczenie (Settlement). Drugą relacją jest relacją jeden do jednego, czyli jeden wpis w tabeli rozliczenie (Settlement) odpowiada jednemu wpisowi w tabeli Refuel. Dzięki takiemu powiązaniu można wyświetlić wszystkie potrzebne mam kolumny.
Łączenie tabel odbywa się na podstawie identyfikatorów. Są one zawsze zapisane po wartości on. W naszym przypadku łączymy kolumnę id z tabeli przejazd z kolumną idRide z tabeli rozliczenie. W drugiej relacji łączymy kolumnę id z tabeli tankowanie z kolumną idRefuel z tabeli rozliczenie.
Tak wyglądają główne zapytania, które później użyjemy w naszym projekcie. Pozostałymi zajmiemy się, gdy będziemy mieli potrzebę ich wykorzystania. Zapraszam do kolejnych artykułów rozliczenie pojazdu aplikacja.