Lekcja: IN, EXISTS, ANY/SOME oraz ALL w MySQL
1. Tworzenie tabel i dane testowe
Tabela produkty
CREATE TABLE produkty (
id_produktu INT AUTO_INCREMENT PRIMARY KEY,
nazwa_produktu VARCHAR(50),
cena DECIMAL(10, 2),
kategoria VARCHAR(30)
);
INSERT INTO produkty (nazwa_produktu, cena, kategoria) VALUES
('Laptop', 3000.00, 'Elektronika'),
('Lodówka', 1500.00, 'AGD'),
('Smartfon', 2500.00, 'Elektronika'),
('Mikrofalówka', 500.00, 'AGD'),
('Klawiatura', 150.00, 'Akcesoria');
Tabela zamowienia
CREATE TABLE zamowienia (
id_zamowienia INT AUTO_INCREMENT PRIMARY KEY,
id_produktu INT,
cena DECIMAL(10, 2),
data_zamowienia DATE,
FOREIGN KEY (id_produktu) REFERENCES produkty(id_produktu)
);
INSERT INTO zamowienia (id_produktu, cena, data_zamowienia) VALUES
(1, 2900.00, '2024-01-10'),
(2, 1400.00, '2024-02-15'),
(3, 2600.00, '2024-03-20'),
(4, 480.00, '2024-04-10');
Tabela pracownicy
CREATE TABLE pracownicy (
id_pracownika INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(30),
wynagrodzenie DECIMAL(10, 2),
dzial VARCHAR(30)
);
INSERT INTO pracownicy (imie, wynagrodzenie, dzial) VALUES
('Anna', 4000.00, 'HR'),
('Jan', 5000.00, 'IT'),
('Piotr', 3000.00, 'Sprzedaż'),
('Maria', 4500.00, 'HR'),
('Tomasz', 6000.00, 'IT');
Tabela klienci
CREATE TABLE klienci (
id_klienta INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(30),
miasto VARCHAR(30)
);
INSERT INTO klienci (imie, miasto) VALUES
('Krzysztof', 'Warszawa'),
('Magdalena', 'Kraków'),
('Ewa', 'Poznań'),
('Paweł', 'Gdańsk');
2. Wyjaśnienie słów kluczowych i ćwiczenia
IN
Słowo kluczowe IN sprawdza, czy wartość znajduje się na liście lub w wyniku podzapytania.
Ćwiczenia z IN:
-
Wybierz produkty, które mają kategorię 'Elektronika' lub 'AGD'.
-
Wybierz zamówienia, które zostały złożone na produkty z kategorii 'Elektronika'.
EXISTS
Słowo kluczowe EXISTS sprawdza, czy podzapytanie zwróci jakikolwiek wynik.
Ćwiczenia z EXISTS:
-
Wybierz pracowników, którzy mają przypisane zamówienia.
-
Wybierz produkty, które mają jakiekolwiek zamówienia.
ANY/SOME
ANY/SOME sprawdzają, czy warunek jest spełniony dla przynajmniej jednego wiersza wyniku podzapytania.
Ćwiczenia z ANY/SOME:
-
Wybierz pracowników, którzy zarabiają więcej niż jakikolwiek pracownik z działu "HR".
-
Wybierz produkty, których cena jest mniejsza niż jakakolwiek cena w tabeli
zamowienia
.
ALL
Słowo kluczowe ALL sprawdza, czy warunek jest spełniony dla wszystkich wierszy wyniku podzapytania.
Ćwiczenia z ALL:
-
Wybierz pracowników, którzy mają wynagrodzenie większe niż wszyscy pracownicy działu "Sprzedaż".
-
Znajdź produkty, których cena jest mniejsza niż wszystkie ceny zamówień.
SELECT nazwa_produktu, cena FROM produkty WHERE cena < ALL ( SELECT cena FROM zamowienia );
Podsumowanie
Dzięki powyższym tabelom i danym można przetestować działanie słów kluczowych IN, EXISTS, ANY/SOME i ALL. Rozwiązując ćwiczenia, utrwalisz umiejętności związane z podzapytaniami w MySQL.