Tworzenie zapytań ze słowami kluczowymi IN, EXISTS, ANY/SOME i ALL

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:

  1. Wybierz produkty, które mają kategorię 'Elektronika' lub 'AGD'.

  2. 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:

  1. Wybierz pracowników, którzy mają przypisane zamówienia.

  2. 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:

  1. Wybierz pracowników, którzy zarabiają więcej niż jakikolwiek pracownik z działu "HR".

  2. 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:

  1. Wybierz pracowników, którzy mają wynagrodzenie większe niż wszyscy pracownicy działu "Sprzedaż".

  2. 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.