Ć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 ;