Powtórzenie wiadomości z widoków, podzapytań i sposobów ich tworzenia

Nowe dane do zaimportowania

-- Tworzenie nowych tabel

CREATE TABLE dzialy (
    id_dzialu INT AUTO_INCREMENT PRIMARY KEY,
    nazwa_dzialu VARCHAR(50)
);

CREATE TABLE pracownicy (
    id_pracownika INT AUTO_INCREMENT PRIMARY KEY,
    imie VARCHAR(50),
    nazwisko VARCHAR(50),
    id_dzialu INT,
    pensja DECIMAL(10, 2),
    FOREIGN KEY (id_dzialu) REFERENCES dzialy(id_dzialu)
);

CREATE TABLE projekty (
    id_projektu INT AUTO_INCREMENT PRIMARY KEY,
    nazwa_projektu VARCHAR(50),
    budzet DECIMAL(10, 2)
);

CREATE TABLE pracownicy_projekty (
    id_pracownika INT,
    id_projektu INT,
    FOREIGN KEY (id_pracownika) REFERENCES pracownicy(id_pracownika),
    FOREIGN KEY (id_projektu) REFERENCES projekty(id_projektu),
    PRIMARY KEY (id_pracownika, id_projektu)
);

-- Wstawianie danych

-- Działy
INSERT INTO dzialy (nazwa_dzialu) VALUES
('HR'),
('IT'),
('Sales'),
('Finance');

-- Pracownicy
INSERT INTO pracownicy (imie, nazwisko, id_dzialu, pensja) VALUES
('Alice', 'Smith', 1, 5000.00),
('Bob', 'Johnson', 2, 7000.00),
('Charlie', 'Brown', 2, 7500.00),
('David', 'Davis', 3, 4500.00),
('Eve', 'Miller', 4, 6000.00);

-- Projekty
INSERT INTO projekty (nazwa_projektu, budzet) VALUES
('Project Alpha', 100000.00),
('Project Beta', 50000.00),
('Project Gamma', 150000.00);

-- Pracownicy-Projekty
INSERT INTO pracownicy_projekty (id_pracownika, id_projektu) VALUES
(2, 1),
(3, 1),
(4, 2),
(5, 3),
(2, 3);

Ćwiczenia

1. Tworzenie widoków

  1. Utwórz widok widok_pracownicy_dzialy, który łączy dane pracowników i ich działów (imie, nazwisko, nazwa_dzialu).
  2. Utwórz widok widok_projekty_pracownicy, który pokazuje nazwy projektów oraz pracowników przydzielonych do każdego projektu.

2. UNION / UNION ALL

  1. Zwróć listę wszystkich nazwisk pracowników, którzy zarabiają powyżej 6000 lub pracują w dziale "HR". Wykorzystaj UNION do połączenia dwóch zapytań.
  2. Zwróć listę wszystkich nazw projektów i nazwisk pracowników pracujących nad projektami. Użyj UNION ALL do połączenia danych z różnych tabel.

3. INTERSECT

  1. Znajdź pracowników, którzy pracują w dziale "IT" i jednocześnie uczestniczą w projektach. Wybierz tylko ich imiona i nazwiska. (Symuluj INTERSECT, korzystając z podzapytania w IN).

4. EXCEPT

  1. Znajdź pracowników z działu "Sales", którzy nie uczestniczą w żadnym projekcie. (Symuluj EXCEPT, korzystając z podzapytania i operatora NOT IN).

5. Podzapytania

  1. Znajdź nazwiska pracowników, którzy zarabiają więcej niż średnia pensja wszystkich pracowników w dziale "Finance".
  2. Wyświetl nazwę działu, w którym żaden pracownik nie pracuje nad projektem "Project Alpha".