Ćwiczenia SQL na XAMPP – produkty

Baza sklep, tabela produkty, PHP + MySQLi

Przepisz kod samodzielnie · testuj w phpMyAdmin i przeglądarce
Start – baza i tabela

1Tworzenie bazy danych i tabeli

Polecenie: Utwórz bazę danych sklep i tabelę produkty z kolumnami: id, nazwa, cena, ilość, data_dodania.

SQL · DDL
CREATE DATABASE sklep;

USE sklep;

CREATE TABLE produkty (
    id           INT AUTO_INCREMENT PRIMARY KEY,
    nazwa        VARCHAR(200),
    cena         DECIMAL(10, 2),
    ilosc        INT,
    data_dodania DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT

2Wstawianie danych

Polecenie: Dodaj przykładowe produkty do tabeli produkty.

SQL · DML
INSERT INTO produkty (nazwa, cena, ilosc)
VALUES
    ('Produkt A', 99.99, 10),
    ('Produkt B', 49.99, 5),
    ('Produkt C', 199.99, 2);
Sprawdzenie danych

3Wyświetlanie danych w phpMyAdmin

Polecenie: Sprawdź, czy dane zostały poprawnie wprowadzone.

SQL · SELECT
SELECT *
FROM produkty;
PHP + MySQLi

4Tworzenie strony PHP z tabelą produktów

Polecenie: Stwórz plik PHP w folderze htdocs/sql_exercises i wyświetl dane z tabeli produkty. Przepisz kod samodzielnie.

PHP
<?php
$servername = "localhost";
$username   = "root";
$password   = "";
$dbname     = "sklep";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Połączenie nieudane: " . $conn->connect_error);
}

$sql    = "SELECT * FROM produkty";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table border='1'>";
    echo "<tr><th>ID</th><th>Nazwa</th><th>Cena</th><th>Ilość</th><th>Data dodania</th></tr>";

    while ($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . $row["id"] . "</td>";
        echo "<td>" . $row["nazwa"] . "</td>";
        echo "<td>" . $row["cena"] . "</td>";
        echo "<td>" . $row["ilosc"] . "</td>";
        echo "<td>" . $row["data_dodania"] . "</td>";
        echo "</tr>";
    }

    echo "</table>";
} else {
    echo "Brak wyników";
}

$conn->close();
?>

To klasyczny przykład użycia MySQLi do pobrania i wyświetlenia danych w tabeli HTML.

Test w przeglądarce

5Testowanie strony

Polecenie: Otwórz przeglądarkę i wejdź na adres http://localhost/sql_exercises/. Sprawdź, czy wyświetla się tabela z danymi.

Podstawowe SELECT

6Podstawowe zapytania SELECT

Polecenie: Przepisz i uruchom poniższe zapytania (w phpMyAdmin lub w swojej stronie PHP).

SQL · SELECT
-- Wyświetl wszystkie produkty
SELECT * FROM produkty;

-- Wyświetl tylko nazwy produktów
SELECT nazwa FROM produkty;

-- Wyświetl produkty, których cena jest większa niż 50
SELECT * FROM produkty
WHERE cena > 50;

-- Posortuj produkty według ceny rosnąco
SELECT * FROM produkty
ORDER BY cena ASC;

-- Wyświetl produkty, których nazwa zawiera literę 'A'
SELECT * FROM produkty
WHERE nazwa LIKE '%A%';
Agregacje

7Funkcje agregujące

Polecenie: Przepisz i uruchom poniższe zapytania z funkcjami agregującymi.

SQL · AGG
-- Policz ile jest wszystkich produktów
SELECT COUNT(*) AS ilosc_produktow FROM produkty;

-- Znajdź najdroższy produkt
SELECT MAX(cena) AS najdrozszy_produkt FROM produkty;

-- Znajdź najtańszy produkt
SELECT MIN(cena) AS najtanszy_produkt FROM produkty;

-- Oblicz średnią cenę produktów
SELECT AVG(cena) AS srednia_cena FROM produkty;

-- Oblicz łączną wartość wszystkich produktów (cena * ilość)
SELECT SUM(cena * ilosc) AS laczna_wartosc FROM produkty;
ORDER BY + LIMIT

8Najdroższe produkty

Polecenie: Wyświetl 3 najdroższe produkty, pokazując ich nazwę, cenę i ilość.

SQL · SELECT
SELECT nazwa, cena, ilosc
FROM produkty
ORDER BY cena DESC
LIMIT 3;
UPDATE

9Podniesienie ceny wybranych produktów

Polecenie: Zwiększ cenę wszystkich produktów droższych niż 100 o 5%.

SQL · UPDATE
UPDATE produkty
SET cena = cena * 1.05
WHERE cena > 100;
DELETE

10Usuwanie produktów o zerowej ilości

Polecenie: Usuń wszystkie produkty, których ilość w magazynie wynosi 0.

SQL · DELETE
DELETE FROM produkty
WHERE ilosc = 0;
Druga tabela

11Tworzenie tabeli kategorii

Polecenie: Utwórz tabelę kategorie i dodaj kolumnę id_kategorii do tabeli produkty, a następnie powiąż je kluczem obcym.

SQL · DDL
CREATE TABLE kategorie (
    id_kategorii INT AUTO_INCREMENT PRIMARY KEY,
    nazwa        VARCHAR(100) NOT NULL
);

ALTER TABLE produkty
ADD COLUMN id_kategorii INT;

ALTER TABLE produkty
ADD CONSTRAINT fk_produkty_kategorie
FOREIGN KEY (id_kategorii)
REFERENCES kategorie(id_kategorii);
JOIN

12Produkty z kategoriami

Polecenie: Wstaw kilka kategorii, przypisz je produktom, a potem wyświetl listę produktów z nazwą kategorii (JOIN).

SQL · JOIN
-- Przykładowe kategorie
INSERT INTO kategorie (nazwa) VALUES
    ('Elektronika'),
    ('AGD'),
    ('Inne');

-- Przypisz kategorię do produktu (przykład)
UPDATE produkty
SET id_kategorii = 1
WHERE id = 1;

-- Lista produktów z kategoriami
SELECT p.nazwa,
       p.cena,
       k.nazwa AS kategoria
FROM produkty p
LEFT JOIN kategorie k
  ON p.id_kategorii = k.id_kategorii;
PHP – filtr

13Strona PHP filtrująca produkty po minimalnej cenie

Polecenie: Dodaj do strony PHP formularz, który pozwoli wpisać minimalną cenę. Po wysłaniu formularza wyświetl tylko produkty droższe niż podana wartość.

PHP + SQL
<form method="get">
    Minimalna cena:
    <input type="number" step="0.01" name="min_price">
    <input type="submit" value="Filtruj">
</form>

<?php
$min = isset($_GET['min_price']) ? (float)$_GET['min_price'] : 0;

$sql = "SELECT * FROM produkty WHERE cena > " . $min;
$result = $conn->query($sql);
/* dalsza część wyświetlania tabeli jak wcześniej */ ?>
PHP – INSERT z formularza

14Formularz dodawania produktu

Polecenie: Stwórz formularz HTML, który pozwoli dodać nowy produkt do tabeli produkty, a w PHP wykonaj zapytanie INSERT.

PHP + HTML
<form action="" method="post">
    Nazwa: <input type="text" name="nazwa" required><br>
    Cena:  <input type="number" step="0.01" name="cena" required><br>
    Ilość: <input type="number" name="ilosc" required><br>
    <input type="submit" name="dodaj" value="Dodaj produkt">
</form>

<?php
if (isset($_POST['dodaj'])) {
    $nazwa = $_POST['nazwa'];
    $cena  = (float)$_POST['cena'];
    $ilosc = (int)$_POST['ilosc'];

    $sql = "INSERT INTO produkty (nazwa, cena, ilosc)
            VALUES ('$nazwa', $cena, $ilosc)";
    $conn->query($sql);
}
?>