INF.03 · Bazy danych i SQL

Sklep komputerowy, część 2: wypełnij bazę danymi

Pusta struktura niewiele Ci powie. Dopiero z danymi w środku możesz ćwiczyć prawdziwe zapytania w kolejnych zadaniach. W tym zadaniu dostajesz gotowe zestawienie danych sklepu i zamieniasz je na polecenia INSERT. Na końcu sprawdzasz, czy wpisałeś wszystko dokładnie, bo błąd w jednej cenie zepsuje wyniki kilku następnych zadań.

  • około 40 minut
  • INSERT · kolejność tabel
  • kontrola sumami

Po tej lekcji: wypełnisz cztery tabele danymi w kolejności zgodnej z kluczami obcymi i sprawdzisz poprawność wpisu sumami kontrolnymi.

1 · Sytuacja

Dane do wpisania

Masz gotową strukturę z części 1. Teraz wypełniasz ją danymi z tabel poniżej. Wpisuj dokładnie te wartości, bo wyniki zadań 3–5 opierają się na tych danych.

Kolejność: najpierw Kategorie i Producenci, potem Produkty (potrzebują ich numerów), na końcu Klienci. Po każdym INSERT obejrzyj tabelę przez SELECT *.

Kategorie

id_kategoriinazwa
1Procesory
2Karty graficzne
3Pamięci RAM
4Dyski SSD
5Monitory
5 wierszy.

Producenci

id_producentanazwakraj
1IntelUSA
2AMDUSA
3NVIDIAUSA
4KingstonUSA
5SamsungKorea Południowa
5 wierszy.

Produkty

id_produktunazwacenailosc_magazynid_kategoriiid_producenta
1Procesor Core i5-14600K1499.001211
2Procesor Ryzen 7 7800X3D1899.00812
3Procesor Core i9-14900K2599.00311
4Karta graficzna RTX 40703299.00523
5Karta graficzna RTX 40601599.00923
6Karta graficzna RTX 4080 SUPER5399.00223
7Pamięć RAM 16GB DDR5299.004034
8Pamięć RAM 32GB DDR5549.002534
9Pamięć RAM 64GB DDR51099.00634
10Dysk SSD 500GB SATA219.006045
11Dysk SSD 1TB NVMe389.003545
12Dysk SSD 2TB NVMe799.00445
13Monitor 24" FHD599.001855
14Monitor 27" QHD1199.00755
15Monitor 32" 4K1999.00355
15 wierszy. W nazwach monitorów jest znak cudzysłowu: w SQL zapisz tekst w apostrofach, na przykład 'Monitor 24" FHD'.

Klienci

id_klientaimienazwiskoemailtelefon
1JanKowalskijan.kowalski@gmail.com600100200
2AnnaNowakanna.nowak@onet.pl600100201
3PiotrWiśniewskipiotr.w@gmail.com600100202
4EwaZielińskaewa.z@wp.pl600100203
5TomaszWójciktomasz.wojcik@gmail.com600100204
6KatarzynaLewandowskak.lewandowska@outlook.com600100205
7MarekKamińskimarek.k@gmail.com600100206
8OlgaMazurolga.mazur@onet.pl600100207
8 wierszy. Polskie znaki zapisz poprawnie (kodowanie utf8mb4).

2 · Do wykonania

Zadania do wykonania

Przy każdej kontroli wpisz w polu poniżej to, co zwróciło zapytanie. Sumy kontrolne są po to, żeby błąd w jednej cenie nie przeszedł niezauważony.

  1. Wpisz dane do Kategorie i sprawdź SELECT COUNT(*) FROM Kategorie;.
    Oczekiwany wynik1 wierszpierwszy wiersz: 5
  2. Wpisz dane do Producenci i sprawdź liczbę wierszy.
    Oczekiwany wynik1 wierszpierwszy wiersz: 5
  3. Wpisz dane do Produkty (jednym poleceniem INSERT z piętnastoma krotkami) i sprawdź liczbę wierszy.
    Oczekiwany wynik1 wierszpierwszy wiersz: 15
  4. Wpisz dane do Klienci i sprawdź liczbę wierszy.
    Oczekiwany wynik1 wierszpierwszy wiersz: 8
  5. Kontrola cen: SELECT SUM(cena) FROM Produkty; Jeśli suma się nie zgadza, któraś cena jest błędna.
    Oczekiwany wynik1 wierszpierwszy wiersz: 23445.00
  6. Kontrola stanów: SELECT SUM(ilosc_magazyn) FROM Produkty;
    Oczekiwany wynik1 wierszpierwszy wiersz: 237
  7. Kontrola kluczy obcych: produkty bez przypisanej kategorii lub producenta nie mogą istnieć. Sprawdź SELECT COUNT(*) FROM Produkty WHERE id_kategorii IS NULL OR id_producenta IS NULL;
    Oczekiwany wynik1 wiersz
  8. Kontrola duplikatów: czy któryś adres e-mail występuje dwa razy? SELECT email, COUNT(*) FROM Klienci GROUP BY email HAVING COUNT(*) > 1;
    Oczekiwany wynik0 wierszy

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

Cztery pomyłki przy wypełnianiu bazy

Rozwiń każdą z nich.

Dane do Produkty przed Kategorie
Tak nie
INSERT INTO Produkty (nazwa, cena, ilosc_magazyn, id_kategorii, id_producenta)
VALUES ('Procesor Core i5-14600K', 1499.00, 12, 1, 1);
-- Kategorie i Producenci są jeszcze puste

Błąd klucza obcego: Cannot add or update a child row. Kategoria 1 jeszcze nie istnieje.

Tak
INSERT INTO Kategorie ...;
INSERT INTO Producenci ...;
INSERT INTO Produkty ...;

Tabele nadrzędne wypełniaj przed podrzędnymi.

Cudzysłów w nazwie monitora
Tak nie
INSERT INTO Produkty (nazwa, ...)
VALUES ("Monitor 24" FHD", ...);

Błąd składni: cudzysłów w środku tekstu kończy tekst przedwcześnie.

Tak
INSERT INTO Produkty (nazwa, ...)
VALUES ('Monitor 24" FHD', ...);

Tekst zapisuj w apostrofach. Wtedy cudzysłów w środku jest zwykłym znakiem.

Przecinek zamiast kropki w cenie
Tak nie
VALUES ('Procesor Core i5-14600K', 1499,00, 12, 1, 1)

Błąd: Column count doesn't match value count. Przecinek rozdziela wartości, więc „1499,00” to dwie wartości.

Tak
VALUES ('Procesor Core i5-14600K', 1499.00, 12, 1, 1)

W SQL ułamek ma kropkę.

Dwa razy ten sam klient
Tak nie
INSERT INTO Klienci (imie, nazwisko, email)
VALUES ('Jan', 'Kowalski', 'jan.kowalski@gmail.com');  -- drugi raz

Błąd: Duplicate entry 'jan.kowalski@gmail.com' for key 'email'. Pilnuje tego UNIQUE.

Tak
Wykonaj SELECT * FROM Klienci; i sprawdź, czy rekord już istnieje.

Przy każdym INSERT najpierw upewnij się, że rekordu jeszcze nie ma.

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. Wypełniaj tabele w kolejności zgodnej z kluczami obcymi.
  2. Po każdym INSERT sprawdzaj tabelę i liczbę wierszy.
  3. Sumy kontrolne wychwytują błędne wartości.
  4. Tekst w apostrofach, ułamki z kropką.
  5. Dokładne dane są podstawą wszystkich następnych zadań.

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