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_kategorii | nazwa |
|---|---|
| 1 | Procesory |
| 2 | Karty graficzne |
| 3 | Pamięci RAM |
| 4 | Dyski SSD |
| 5 | Monitory |
Producenci
| id_producenta | nazwa | kraj |
|---|---|---|
| 1 | Intel | USA |
| 2 | AMD | USA |
| 3 | NVIDIA | USA |
| 4 | Kingston | USA |
| 5 | Samsung | Korea Południowa |
Produkty
| id_produktu | nazwa | cena | ilosc_magazyn | id_kategorii | id_producenta |
|---|---|---|---|---|---|
| 1 | Procesor Core i5-14600K | 1499.00 | 12 | 1 | 1 |
| 2 | Procesor Ryzen 7 7800X3D | 1899.00 | 8 | 1 | 2 |
| 3 | Procesor Core i9-14900K | 2599.00 | 3 | 1 | 1 |
| 4 | Karta graficzna RTX 4070 | 3299.00 | 5 | 2 | 3 |
| 5 | Karta graficzna RTX 4060 | 1599.00 | 9 | 2 | 3 |
| 6 | Karta graficzna RTX 4080 SUPER | 5399.00 | 2 | 2 | 3 |
| 7 | Pamięć RAM 16GB DDR5 | 299.00 | 40 | 3 | 4 |
| 8 | Pamięć RAM 32GB DDR5 | 549.00 | 25 | 3 | 4 |
| 9 | Pamięć RAM 64GB DDR5 | 1099.00 | 6 | 3 | 4 |
| 10 | Dysk SSD 500GB SATA | 219.00 | 60 | 4 | 5 |
| 11 | Dysk SSD 1TB NVMe | 389.00 | 35 | 4 | 5 |
| 12 | Dysk SSD 2TB NVMe | 799.00 | 4 | 4 | 5 |
| 13 | Monitor 24" FHD | 599.00 | 18 | 5 | 5 |
| 14 | Monitor 27" QHD | 1199.00 | 7 | 5 | 5 |
| 15 | Monitor 32" 4K | 1999.00 | 3 | 5 | 5 |
Klienci
| id_klienta | imie | nazwisko | telefon | |
|---|---|---|---|---|
| 1 | Jan | Kowalski | jan.kowalski@gmail.com | 600100200 |
| 2 | Anna | Nowak | anna.nowak@onet.pl | 600100201 |
| 3 | Piotr | Wiśniewski | piotr.w@gmail.com | 600100202 |
| 4 | Ewa | Zielińska | ewa.z@wp.pl | 600100203 |
| 5 | Tomasz | Wójcik | tomasz.wojcik@gmail.com | 600100204 |
| 6 | Katarzyna | Lewandowska | k.lewandowska@outlook.com | 600100205 |
| 7 | Marek | Kamiński | marek.k@gmail.com | 600100206 |
| 8 | Olga | Mazur | olga.mazur@onet.pl | 600100207 |
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.
-
Wpisz dane do
Kategoriei sprawdźSELECT COUNT(*) FROM Kategorie;.Oczekiwany wynik1 wierszpierwszy wiersz: 5 -
Wpisz dane do
Producencii sprawdź liczbę wierszy.Oczekiwany wynik1 wierszpierwszy wiersz: 5 -
Wpisz dane do
Produkty(jednym poleceniemINSERTz piętnastoma krotkami) i sprawdź liczbę wierszy.Oczekiwany wynik1 wierszpierwszy wiersz: 15 -
Wpisz dane do
Kliencii sprawdź liczbę wierszy.Oczekiwany wynik1 wierszpierwszy wiersz: 8 -
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 -
Kontrola stanów:
SELECT SUM(ilosc_magazyn) FROM Produkty;Oczekiwany wynik1 wierszpierwszy wiersz: 237 -
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 -
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.
4 · Zanim się pomylisz
Cztery pomyłki przy wypełnianiu bazy
Rozwiń każdą z nich.
Dane do Produkty przed Kategorie
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 pusteBłąd klucza obcego: Cannot add or update a child row. Kategoria 1 jeszcze nie istnieje.
INSERT INTO Kategorie ...;
INSERT INTO Producenci ...;
INSERT INTO Produkty ...;Tabele nadrzędne wypełniaj przed podrzędnymi.
Cudzysłów w nazwie monitora
INSERT INTO Produkty (nazwa, ...)
VALUES ("Monitor 24" FHD", ...);Błąd składni: cudzysłów w środku tekstu kończy tekst przedwcześnie.
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
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.
VALUES ('Procesor Core i5-14600K', 1499.00, 12, 1, 1)W SQL ułamek ma kropkę.
Dwa razy ten sam klient
INSERT INTO Klienci (imie, nazwisko, email)
VALUES ('Jan', 'Kowalski', 'jan.kowalski@gmail.com'); -- drugi razBłąd: Duplicate entry 'jan.kowalski@gmail.com' for key 'email'. Pilnuje tego UNIQUE.
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ć
- Wypełniaj tabele w kolejności zgodnej z kluczami obcymi.
- Po każdym
INSERTsprawdzaj tabelę i liczbę wierszy. - Sumy kontrolne wychwytują błędne wartości.
- Tekst w apostrofach, ułamki z kropką.
- 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ę →