W budowie
Punkt kontrolny · Diagnostyka Sprawdź opanowanie operacji bazodanowych SQL przed wejściem w moduły bezpieczeństwa

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łówny AUTO_INCREMENT, ograniczenia NOT NULL i polecenia ALTER 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, grupowanie GROUP BY, filtrowanie grup HAVING oraz raporty tabelaryczne ze złączeniami JOIN

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:

PytaniaObszar wiedzyRekomendowane ćwiczenie
Pytania 1–2Typy danych (DECIMAL kontra FLOAT) oraz CREATE TABLE IF NOT EXISTSm13-5 (DECIMAL dla kwot) oraz m13-2 (IF NOT EXISTS)
Pytania 3–4Dobór VARCHAR i TEXT oraz modyfikacja kolumny przez ALTER TABLEm13-4 (VARCHAR vs TEXT) oraz m13-13 (ALTER TABLE MODIFY)
Pytania 5–6Brak WHERE w UPDATE oraz identyfikator nowego rekordum14-11 (pułapka braku WHERE) oraz m14-5 (mysqli_insert_id)
Pytania 7–8num_rows kontra affected_rows oraz rzutowanie danych z formularzam14-14 (kontrola usuwania) oraz m14-9 (intval identyfikatora)
Pytania 9–10HAVING kontra WHERE oraz zaokrąglanie średniej w SQLm15-11 (WHERE i HAVING razem) oraz m15-4 (ROUND AVG)
Pytania 11–12COUNT(*) kontra COUNT(kolumna) przy LEFT JOIN oraz DISTINCTm15-14 (puste grupy przy LEFT JOIN) oraz m15-12 (DISTINCT)