Tworzenie tabel
CREATE TABLE produkty (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100) NOT NULL,
waga DECIMAL(6,2),
rozmiar INT,
data DATE,
kolor VARCHAR(30)
);CREATE TABLE stany_magazynowe (
id INT AUTO_INCREMENT PRIMARY KEY,
produkt_id INT,
ilosc INT,
magazyn_nr INT,
regal VARCHAR(10),
FOREIGN KEY (produkt_id) REFERENCES produkty(id)
);
Dane testowe
INSERT INTO produkty (nazwa, waga, rozmiar, data, kolor) VALUES
('Produkt A', 1.25, 38, '2024-01-15', 'czerwony'),
('Produkt B', 0.80, 36, '2024-02-10', 'niebieski'),
('Produkt C', 2.40, 42, '2024-03-05', 'zielony'),
('Produkt D', 1.10, 44, '2024-04-20', 'czarny');INSERT INTO stany_magazynowe (produkt_id, ilosc, magazyn_nr, regal) VALUES
(1, 50, 1, 'A1'),
(1, 20, 2, 'B3'),
(2, 0, 1, 'A2'),
(3, 15, 1, 'C1'),
(4, 100, 3, 'D4');
#10 – filtrowanie (jedna tabela)
SELECT *
FROM produkty
WHERE kolor IN ('czarny', 'zielony')
AND waga > 1;
#11 – filtrowanie po dacie (jedna tabela)
SELECT *
FROM produkty
WHERE data BETWEEN '2024-01-01' AND '2024-03-31';
#12 – JOIN podstawowy
SELECT p.nazwa, s.ilosc, s.magazyn_nr, s.regal
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id;
#13 – filtrowanie po ilości
SELECT p.nazwa, s.ilosc
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
WHERE s.ilosc > 0;
#14 – brak powiązania (LEFT JOIN)
SELECT p.nazwa
FROM produkty p
LEFT JOIN stany_magazynowe s ON p.id = s.produkt_id
WHERE s.id IS NULL;
#15 – suma stanów magazynowych
SELECT p.nazwa, SUM(s.ilosc) AS suma
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
GROUP BY p.nazwa;
#16 – HAVING
SELECT p.nazwa, SUM(s.ilosc) AS suma
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
GROUP BY p.nazwa
HAVING SUM(s.ilosc) > 30;
#17 – wiele warunków
SELECT p.nazwa, s.regal, s.ilosc
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
WHERE s.magazyn_nr = 1
AND s.regal LIKE 'A%';
#18 – sortowanie
SELECT p.nazwa, s.ilosc
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
ORDER BY s.ilosc DESC;
#19 – DISTINCT + GROUP BY
SELECT p.nazwa
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
GROUP BY p.nazwa
HAVING COUNT(DISTINCT s.magazyn_nr) > 1;
#20 – CASE (logika biznesowa)
SELECT
p.nazwa,
SUM(s.ilosc) AS suma,
CASE
WHEN SUM(s.ilosc) = 0 THEN 'brak'
WHEN SUM(s.ilosc) < 20 THEN 'niski stan'
ELSE 'dostępny'
END AS status
FROM produkty p
JOIN stany_magazynowe s ON p.id = s.produkt_id
GROUP BY p.nazwa;
Twój komentarz