INF.03 · Bazy danych i SQL

Wypożyczalnia rowerów miejskich: obliczenia na datach

Miejski system wypożyczalni rowerów rejestruje start i koniec każdej trasy. Zadanie uczy liczenia czasu z dwóch kolumn daty i godziny, szukania wypożyczeń niezakończonych (NULL) oraz sprawdzania spójności danych.

  • około 45 minut
  • zadanie w stylu egzaminacyjnym
  • baza: wypozyczalnia_rowerow

Po tej lekcji: wykonasz komplet zapytań w warunkach egzaminacyjnych i udokumentujesz każde zrzutem ekranu.

1 · Sytuacja

Scenariusz i przygotowanie

Zaimportuj bazę wypozyczalnia_rowerow (Stacje, Rowery, Klienci, Wypozyczenia). Wypożyczenie bez czas_koniec jest jeszcze w trakcie.

2 · Do wykonania

Zapytania do wykonania

Dla każdego zapytania zrób zrzut ekranu. Oczekiwane liczby wierszy podano przy zadaniach, a pełne rozwiązania znajdziesz dopiero po wykonaniu pracy samodzielnie.

  1. Pokaż wszystkie wypożyczenia, które nie zostały jeszcze zakończone (czas_koniec IS NULL).
    Oczekiwany wynik1 wiersz
  2. Dla zakończonych wypożyczeń oblicz czas trwania w minutach (TIMESTAMPDIFF). Pokaż numer wypożyczenia i minuty, od najmniejszego numeru.
    Oczekiwany wynik7 wierszypierwszy wiersz: 1 · 25
  3. Pokaż wypożyczenia zakończone, które trwały dłużej niż 40 minut.
    Oczekiwany wynik2 wiersze
  4. Pokaż liczbę wypożyczeń z każdej stacji (nazwa stacji i liczba), łącząc Rowery, Wypozyczenia i Stacje.
    Oczekiwany wynik4 wiersze
  5. Sprawdź spójność: znajdź rowery oznaczone jako „uszkodzony”, które mimo to mają zarejestrowane wypożyczenie.Pusty wynik oznacza, że dane są spójne.
    Oczekiwany wynik0 wierszy
  6. Pokaż liczbę wypożyczeń rowerów elektrycznych według stacji (nazwa stacji i liczba).
    Oczekiwany wynik2 wiersze

3 · Sprawdź się

Czy Twoje wyniki się zgadzają?

To szybka kontrola, a nie ocena. Liczba wierszy jest pierwszym sygnałem, że warunek albo złączenie działa tak, jak trzeba.

Ta interakcja wymaga włączonego JavaScriptu.

4 · Zanim się pomylisz

Trzy pułapki w tym zadaniu

Rozwiń każdą z nich.

Odejmowanie dat zamiast TIMESTAMPDIFF
Tak nie
SELECT czas_koniec - czas_start FROM Wypozyczenia;

Wynik to dziwna liczba (sklejone cyfry daty i godziny), a nie minuty.

Tak
TIMESTAMPDIFF(MINUTE, czas_start, czas_koniec)

Różnicę dat liczy się funkcją, a nie odejmowaniem.

NULL w obliczeniach
Tak nie
TIMESTAMPDIFF(MINUTE, czas_start, czas_koniec)  -- dla wypożyczenia bez końca

Dla wypożyczenia w toku wynik to NULL. Nie wolno zastępować go zerem, bo oznaczałoby to wypożyczenie trwające zero minut.

Tak
Dodaj `WHERE czas_koniec IS NOT NULL`.

NULL to „nieznane”, a nie „zero”.

Remis przy pytaniu „najdłuższe”
Tak nie
ORDER BY minut DESC LIMIT 1

Dwa wypożyczenia trwały po 45 minut, więc LIMIT 1 wskaże jedno z nich przypadkowo.

Tak
Pytaj o wypożyczenia dłuższe niż próg albo pokaż wszystkie remisy.

Sprawdzaj jednoznaczność pytania.

5 · Sprawdź sam siebie

Zanim oddasz pracę

Ta lista odpowiada temu, co sprawdza komisja egzaminacyjna: poprawną bazę, poprawne wyniki i dokumentację.

Podsumowanie

Co warto zapamiętać

  1. Czytaj polecenie jak opis wyniku: kolumny, tabele, warunek, kolejność.
  2. Złączenia buduj po jednym i kontroluj liczbę wierszy.
  3. Pusty wynik też może być poprawny, więc sprawdź go kontrolnym zapytaniem.
  4. Dokumentuj pracę zrzutami i zapisanym plikiem.

Dalej na swoim koncie

Rozgrzewki, quiz i zadania są w biurku ucznia.

Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.

Zaloguj się →
Źródła i dalsza nauka