PUNKT KONTROLNY 05
Sprawdzian: Bazy danych (DDL, DML, agregacja)
Za Tobą trzy kluczowe części bazodanowe: definiowanie tabel (Część 13), modyfikacja danych z formularzy (Część 14) oraz analityczne podsumowania i raporty (Część 15). Ten test sprawdzi, czy potrafisz unikać najczęstszych błędów kosztujących punkty na egzaminie zawodowym INF.03.
Zakres sprawdzianu
- Definicja danych (DDL):
CREATE TABLE IF NOT EXISTS,dobór typów danych (INT,VARCHAR,TEXT,DECIMAL,DATE), klucz głównyAUTO_INCREMENT,ograniczeniaNOT NULLi poleceniaALTER TABLE - Modyfikacja danych (DML): wstawianie danych z formularzy (
INSERT), odczyt nowego ID (mysqli_insert_id), edycja (UPDATE), usuwanie (DELETE) oraz kontrola liczby zmienionych wierszy (mysqli_affected_rows) - Agregacja i raporty: funkcje
COUNT,SUM,AVG,MIN,MAX,grupowanieGROUP BY,filtrowanie grupHAVINGoraz raporty tabelaryczne ze złączeniamiJOIN
Quiz diagnostyczny — sprawdź swoją wiedzę bazodanową
Wybierz odpowiedzi i sprawdź swój wynik. Przy błędnych odpowiedziach otrzymasz podpowiedź wskazującą konkretne ćwiczenia do powtórki.
1. Dlaczego w bazach danych do przechowywania cen produktów i kwot pieniężnych zaleca się typ
DECIMAL(10,2), a odradza FLOAT?
2. Co się stanie, jeśli skrypt PHP wykona zapytanie
CREATE TABLE uzytkownicy (...) bez klauzuli IF NOT EXISTS, a tabela o tej nazwie już istnieje w bazie?
3. Tworzysz tabelę ogłoszeń w arkuszu INF.03. Który dobór typów dla kolumn
tytul oraz tresc_ogloszenia jest najbardziej optymalny i zgodny z dobrą praktyką?
4. Do czego służy zapytanie SQL:
ALTER TABLE pracownicy MODIFY telefon VARCHAR(20) NOT NULL;?
5. Programista omyłkowo wykonał zapytanie:
mysqli_query($conn, "UPDATE produkty SET cena = 50");. Jaki będzie skutek tej operacji w bazie?
6. Jak w PHP po wykonaniu zapytania
INSERT INTO zgloszenia ... odczytać automatycznie nadany numer nowego zgłoszenia (klucz AUTO_INCREMENT)?
7. Uczeń wykonał zapytanie usuwające:
$wynik = mysqli_query($conn, "DELETE FROM wpisy WHERE id = 10");, a następnie wywołał mysqli_num_rows($wynik), co wywołało błąd krytyczny. Dlaczego?
8. Z formularza edycji przychodzi pole
$_POST['id']. Dlaczego przed wstawieniem go do zapytania UPDATE ... WHERE id = ... należy wykonać intval($_POST['id'])?
9. Kiedy w zapytaniu SQL z klauzulą
GROUP BY należy zastosować klauzulę HAVING zamiast WHERE?
10. Które zapytanie SQL poprawnie obliczy średnią cenę towarów i zwróci ją zaokrągloną do dwóch miejsc po przecinku bezpośrednio z bazy?
11. Tabela
kategorie jest złączona przez LEFT JOIN z tabelą produkty. Kategoria „Sport” nie ma żadnych produktów. Dlaczego zapytanie z COUNT(*) zwróciło dla niej wynik 1, zamiast 0?
12. W tabeli
zamowienia klienci powtarzają się przy wielu zakupach. Które zapytanie pobierze listę klientów z usunięciem wszelkich duplikatów?
Matryca powtórek
Jeśli po kliknięciu sprawdzenia któreś pytanie zaznaczyło się na czerwono, poniższa tabela wskazuje dokładne ćwiczenie, które pozwoli Ci to przećwiczyć w praktyce:
| Pytania | Obszar wiedzy | Rekomendowane ćwiczenie |
|---|---|---|
| Pytania 1–2 | Typy danych (DECIMAL kontra FLOAT) oraz CREATE TABLE IF NOT EXISTS | m13-5 (DECIMAL dla kwot) oraz m13-2 (IF NOT EXISTS) |
| Pytania 3–4 | Dobór VARCHAR i TEXT oraz modyfikacja kolumny przez ALTER TABLE | m13-4 (VARCHAR vs TEXT) oraz m13-13 (ALTER TABLE MODIFY) |
| Pytania 5–6 | Brak WHERE w UPDATE oraz identyfikator nowego rekordu | m14-11 (pułapka braku WHERE) oraz m14-5 (mysqli_insert_id) |
| Pytania 7–8 | num_rows kontra affected_rows oraz rzutowanie danych z formularza | m14-14 (kontrola usuwania) oraz m14-9 (intval identyfikatora) |
| Pytania 9–10 | HAVING kontra WHERE oraz zaokrąglanie średniej w SQL | m15-11 (WHERE i HAVING razem) oraz m15-4 (ROUND AVG) |
| Pytania 11–12 | COUNT(*) kontra COUNT(kolumna) przy LEFT JOIN oraz DISTINCT | m15-14 (puste grupy przy LEFT JOIN) oraz m15-12 (DISTINCT) |