Ćwiczenia z SQL i PHP

Ćwiczenia 1-5: Tworzenie Tabel i Operacje Podstawowe

Ćwiczenie 1: Tworzenie Bazy Danych i Tabeli

Utwórz bazę danych sklep i tabelę produkty z kolumnami id, nazwa, cena oraz opis.

            CREATE DATABASE sklep;
            USE sklep;
            CREATE TABLE produkty (
                id INT AUTO_INCREMENT PRIMARY KEY,
                nazwa VARCHAR(100),
                cena DECIMAL(10, 2),
                opis TEXT
            );
        

Ćwiczenie 2: Dodawanie Produktów

Dodaj kilka produktów do tabeli, w tym nazwę, cenę i opis.

            INSERT INTO produkty (nazwa, cena, opis) VALUES ('Produkt A', 50.00, 'Opis produktu A');
            INSERT INTO produkty (nazwa, cena, opis) VALUES ('Produkt B', 75.00, 'Opis produktu B');
        

Ćwiczenie 3: Dodawanie Kolumn do Tabeli

Dodaj kolumnę kategoria do tabeli produktów.

            ALTER TABLE produkty ADD COLUMN kategoria VARCHAR(50);
        

Ćwiczenie 4: Aktualizacja Danych

Zaktualizuj cenę i opis produktu 'Produkt A'.

            UPDATE produkty SET cena = 55.00, opis = 'Nowy opis produktu A' WHERE nazwa = 'Produkt A';
        

Ćwiczenie 5: Usuwanie Danych

Usuń produkt 'Produkt B' z tabeli.

            DELETE FROM produkty WHERE nazwa = 'Produkt B';
        

Ćwiczenia 6-10: Formularze i Interakcje z PHP

Ćwiczenie 6: Tworzenie Formularza Dodawania Produktu

Stwórz formularz do dodawania nowych produktów do bazy danych (z formularza HTML).
Skorzystaj z PHP do obsługi formularza i zapisywania danych w tabeli.

            



Ćwiczenie 7: Obsługa Formularza w PHP

Stwórz plik add_product.php, który odbiera dane z formularza i dodaje je do bazy danych.

            prepare('INSERT INTO produkty (nazwa, cena, opis) VALUES (?, ?, ?)');
                $stmt->execute([$nazwa, $cena, $opis]);
            }
            ?>
        

Ćwiczenie 8: Formularz do Aktualizacji Produktu

Stwórz formularz, który umożliwi aktualizację danych produktów (np. ceny, opisu).

            



Ćwiczenie 9: Wyświetlanie Produktów

Stwórz stronę, która wyświetla listę produktów z bazy danych.

            query('SELECT * FROM produkty');
            while ($row = $stmt->fetch()) {
                echo $row['nazwa'] . ' - ' . $row['cena'] . ' zł
'; } ?>

Ćwiczenie 10: Formularz Usuwania Produktu

Stwórz formularz do usuwania produktów po ID.

            

Ćwiczenie 6: Selekcja danych z warunkiem

Zadanie: Wybierz produkty, których cena jest wyższa niż 100.

Rozwiązanie
SELECT * FROM produkty
    WHERE cena > 100;

Ćwiczenie 7: Łączenie tabel

Zadanie: Załóżmy, że masz tabelę zamowienia z kolumnami id, produkt_id, data. Połącz tabelę zamowienia z tabelą produkty na podstawie produkt_id i wybierz nazwę produktu oraz datę zamówienia.

Rozwiązanie
SELECT produkty.nazwa, zamowienia.data
    FROM zamowienia
    JOIN produkty ON zamowienia.produkt_id = produkty.id;

Ćwiczenie 8: Agregacja danych (Funkcje agregujące)

Zadanie: Oblicz średnią cenę produktów w tabeli produkty.

Rozwiązanie
SELECT AVG(cena) AS srednia_cena
    FROM produkty;

Ćwiczenie 9: Grupowanie danych

Zadanie: Pogrupuj produkty w tabeli produkty po cenach, licząc ile produktów znajduje się w danej grupie cenowej.

Rozwiązanie
SELECT cena, COUNT(*) AS liczba_produktow
    FROM produkty
    GROUP BY cena;

Ćwiczenie 10: Tworzenie widoku

Zadanie: Stwórz widok, który będzie zawierał tylko produkty o cenie powyżej 100.

Rozwiązanie
CREATE VIEW drogie_produkty AS
    SELECT * FROM produkty
    WHERE cena > 100;

Testowanie PHP i Formularzy

Zadanie: Stwórz formularz w PHP, który pozwala na dodanie nowego produktu do tabeli produkty i wyświetli wprowadzone dane.

Nazwa:
Cena:
Rozwiązanie
<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "sklep";
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $nazwa = $_POST['nazwa'];
        $cena = $_POST['cena'];
    
        $conn = new mysqli($servername, $username, $password, $dbname);
        
        if ($conn->connect_error) {
            die("Błąd połączenia: " . $conn->connect_error);
        }
    
        $stmt = $conn->prepare("INSERT INTO produkty (nazwa, cena) VALUES (?, ?)");
        $stmt->bind_param("sd", $nazwa, $cena);
        $stmt->execute();
    
        echo "Produkt dodany!";
        
        $conn->close();
    }
    ?>

Ćwiczenia 11-15: Zaawansowane Zapytania SQL

Ćwiczenie 11: Zapytanie z Warunkiem WHERE

Wyświetl wszystkie produkty, których cena jest wyższa niż 50 zł.

            SELECT * FROM produkty WHERE cena > 50;
        

Ćwiczenie 12: Sortowanie wyników

Posortuj produkty według ceny w porządku rosnącym.

            SELECT * FROM produkty ORDER BY cena ASC;
        

Ćwiczenie 13: Zapytanie z Grupowaniem

Policz, ile produktów jest w każdej kategorii.

            SELECT kategoria, COUNT(*) FROM produkty GROUP BY kategoria;
        

Ćwiczenie 14: Podzapytanie w WHERE

Znajdź produkty, których cena jest wyższa niż średnia cena wszystkich produktów.

            SELECT * FROM produkty WHERE cena > (SELECT AVG(cena) FROM produkty);
        

Ćwiczenie 15: Zastosowanie JOIN

Dołącz tabelę kategorii i wyświetl produkty wraz z nazwą kategorii.

            SELECT produkty.nazwa, produkty.cena, kategorie.nazwa
            FROM produkty
            JOIN kategorie ON produkty.kategoria_id = kategorie.id;
        

Ćwiczenia 16-20: Raporty i Procedury

Ćwiczenie 16: Raport - Łączna Suma Ceny Produktów

Oblicz łączną cenę wszystkich produktów.

            SELECT SUM(cena) AS suma_cen FROM produkty;
        

Ćwiczenie 17: Procedura do Dodawania Produktu

Stwórz procedurę, która doda nowy produkt do bazy.

            DELIMITER //
            CREATE PROCEDURE add_product(IN p_nazwa VARCHAR(100), IN p_cena DECIMAL(10,2), IN p_opis TEXT)
            BEGIN
                INSERT INTO produkty (nazwa, cena, opis) VALUES (p_nazwa, p_cena, p_opis);
            END //
            DELIMITER ;
        

Ćwiczenie 18: Wyzwalacz do Logowania Operacji

Stwórz wyzwalacz, który zapisuje operacje w tabeli logi.

            CREATE TABLE logi (
                id INT AUTO_INCREMENT PRIMARY KEY,
                operacja VARCHAR(255),
                data TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            );
            
            DELIMITER //
            CREATE TRIGGER after_insert_product
            AFTER INSERT ON produkty
            FOR EACH ROW
            BEGIN
                INSERT INTO logi (operacja) VALUES ('Dodano nowy produkt: ' + NEW.nazwa);
            END //
            DELIMITER ;
        

Ćwiczenie 19: Funkcja Do Obliczania Zniżki

Stwórz funkcję, która obliczy cenę po zastosowaniu zniżki na produkt.

            DELIMITER //
            CREATE FUNCTION oblicz_znizke(p_cena DECIMAL(10,2), p_znizka DECIMAL(5,2)) 
            RETURNS DECIMAL(10,2)
            BEGIN
                RETURN p_cena - (p_cena * p_znizka / 100);
            END //
            DELIMITER ;
        

Ćwiczenie 20: Procedura Zmiany Ceny Produktu

Stwórz procedurę do zmiany ceny produktu na podstawie ID.

            DELIMITER //
            CREATE PROCEDURE update_price(IN p_id INT, IN p_cena DECIMAL(10,2))
            BEGIN
                UPDATE produkty SET cena = p_cena WHERE id = p_id;
            END //
            DELIMITER ;