Ćwiczenia z baz danych
Ćwiczenie 1: Tworzenie nowej tabeli
CREATE DATABASE sklep;
USE sklep;
CREATE TABLE klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50),
email VARCHAR(100),
telefon VARCHAR(15)
);
Ćwiczenie 2: Tworzenie tabeli zamówienia i relacji
CREATE TABLE zamowienia (
id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
id_klienta INT,
data_zamowienia DATE,
wartosc_zamowienia DECIMAL(10,2),
FOREIGN KEY (id_klienta) REFERENCES klienci(id_klienta)
);
Ćwiczenie 3: Modyfikowanie struktury bazy danych
ALTER TABLE klienci ADD COLUMN adres VARCHAR(255);
ALTER TABLE zamowienia ADD COLUMN status ENUM('Nowe', 'Realizacja', 'Zakończone');
ALTER TABLE klienci MODIFY COLUMN telefon VARCHAR(20);
Ćwiczenie 4: Usuwanie elementów struktury
DROP TABLE zamowienia;
CREATE TABLE zamowienia (
id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
id_klienta INT,
data_zamowienia DATE,
wartosc_zamowienia DECIMAL(10,2),
metoda_platnosci ENUM('Gotówka', 'Karta', 'Przelew'),
FOREIGN KEY (id_klienta) REFERENCES klienci(id_klienta)
);
Ćwiczenie 5: Analiza i optymalizacja
CREATE INDEX idx_email ON klienci(email);
SELECT id_klienta, SUM(wartosc_zamowienia) AS suma_wydatkow FROM zamowienia GROUP BY id_klienta ORDER BY suma_wydatkow DESC;
Kolejne ćwiczenia
Ćwiczenie 6: Dodanie tabeli produktów
CREATE TABLE produkty (
id_produktu INT AUTO_INCREMENT PRIMARY KEY,
nazwa VARCHAR(100),
cena DECIMAL(10,2),
kategoria VARCHAR(50)
);
Ćwiczenie 7: Dodanie relacji zamówienia - produkty
CREATE TABLE szczegoly_zamowienia (
id_szczegolu INT AUTO_INCREMENT PRIMARY KEY,
id_zamowienia INT,
id_produktu INT,
ilosc INT,
FOREIGN KEY (id_zamowienia) REFERENCES zamowienia(id_zamowienia),
FOREIGN KEY (id_produktu) REFERENCES produkty(id_produktu)
);
Ćwiczenie 8: Dodanie klientów VIP
ALTER TABLE klienci ADD COLUMN vip BOOLEAN DEFAULT 0;
Ćwiczenie 9: Aktualizacja statusów zamówień
UPDATE zamowienia SET status = 'Zakończone' WHERE data_zamowienia < '2024-01-01';
Ćwiczenie 10: Usunięcie klientów bez zamówień
DELETE FROM klienci WHERE id_klienta NOT IN (SELECT id_klienta FROM zamowienia);
Ćwiczenie 11: Tworzenie widoku aktywnych zamówień
CREATE VIEW aktywne_zamowienia AS
SELECT * FROM zamowienia WHERE status != 'Zakończone';
Ćwiczenie 12: Grupowanie klientów według liczby zamówień
SELECT id_klienta, COUNT(*) AS liczba_zamowien FROM zamowienia GROUP BY id_klienta;
Ćwiczenie 13: Dodanie kolumny rabat
ALTER TABLE klienci ADD COLUMN rabat DECIMAL(5,2) DEFAULT 0.00;
Ćwiczenie 14: Tworzenie procedury dodającej zamówienie
DELIMITER //
CREATE PROCEDURE DodajZamowienie(IN klient_id INT, IN wartosc DECIMAL(10,2))
BEGIN
INSERT INTO zamowienia (id_klienta, data_zamowienia, wartosc_zamowienia) VALUES (klient_id, NOW(), wartosc);
END //
DELIMITER ;
Ćwiczenie 15: Tworzenie triggera aktualizującego status
DELIMITER //
CREATE TRIGGER AktualizujStatus BEFORE UPDATE ON zamowienia
FOR EACH ROW
BEGIN
IF NEW.wartosc_zamowienia > 500 THEN
SET NEW.status = 'VIP';
END IF;
END //
DELIMITER ;