Lekcja: Łączenie wyników zapytań słowami kluczowymi UNION
i UNION ALL
w MySQL
1. Wprowadzenie
W MySQL słowa kluczowe UNION
i UNION ALL
umożliwiają łączenie wyników dwóch lub więcej zapytań SQL w jeden zestaw wyników. Są one przydatne, gdy dane są przechowywane w różnych tabelach, ale chcemy połączyć je w jednym wyniku.
2. Różnica między UNION
i UNION ALL
UNION
: Łączy wyniki zapytań i automatycznie usuwa duplikaty. W wyniku otrzymamy unikalne wiersze.UNION ALL
: Łączy wyniki zapytań bez usuwania duplikatów. Wynik może zawierać powtarzające się wiersze.
Uwaga: W obu przypadkach liczba kolumn i ich typy muszą być zgodne w łączonych zapytaniach.
3. Składnia
-- UNION
SELECT kolumna1, kolumna2 FROM tabela1
UNION
SELECT kolumna1, kolumna2 FROM tabela2;
-- UNION ALL
SELECT kolumna1, kolumna2 FROM tabela1
UNION ALL
SELECT kolumna1, kolumna2 FROM tabela2;
4. Przykłady
Przykład 1: Łączenie danych z dwóch tabel
Mamy dwie tabele: pracownicy
i kontrahenci
, zawierające dane o osobach. Chcemy połączyć imiona i nazwiska wszystkich osób.
SELECT imie, nazwisko FROM pracownicy
UNION
SELECT imie, nazwisko FROM kontrahenci;
Przykład 2: Porównanie UNION
i UNION ALL
Gdy dane są zduplikowane:
SELECT 'Jan' AS imie, 'Kowalski' AS nazwisko
UNION
SELECT 'Jan', 'Kowalski';
-- Wynik (UNION): Jeden wiersz
SELECT 'Jan' AS imie, 'Kowalski' AS nazwisko
UNION ALL
SELECT 'Jan', 'Kowalski';
-- Wynik (UNION ALL): Dwa wiersze
Przykład 3: Łączenie tabel z różnymi warunkami
Chcemy połączyć listę pracowników z działu IT oraz listę kontrahentów z miasta "Warszawa".
SELECT imie, nazwisko FROM pracownicy WHERE dzial = 'IT'
UNION
SELECT imie, nazwisko FROM kontrahenci WHERE miasto = 'Warszawa';
Zadania dla uczniów
1. Tabele do ćwiczeń
Tworzenie tabel i wstawianie danych:
-- Tabela: pracownicy
CREATE TABLE pracownicy (
id INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50),
dzial VARCHAR(50),
pensja DECIMAL(10, 2)
);
INSERT INTO pracownicy (imie, nazwisko, dzial, pensja) VALUES
('Jan', 'Kowalski', 'IT', 6000.00),
('Anna', 'Nowak', 'Marketing', 4500.00),
('Piotr', 'Wiśniewski', 'IT', 7000.00),
('Katarzyna', 'Zielińska', 'Sprzedaż', 5000.00),
('Marek', 'Jankowski', 'HR', 4000.00);
-- Tabela: kontrahenci
CREATE TABLE kontrahenci (
id INT AUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50),
miasto VARCHAR(50)
);
INSERT INTO kontrahenci (imie, nazwisko, miasto) VALUES
('Jan', 'Kowalski', 'Warszawa'),
('Anna', 'Nowak', 'Kraków'),
('Tomasz', 'Lis', 'Warszawa'),
('Piotr', 'Wiśniewski', 'Gdańsk'),
('Monika', 'Adamska', 'Poznań');
2. Zadania
Zadanie 1
Wyświetl listę unikalnych imion i nazwisk wszystkich pracowników i kontrahentów.
Zadanie 2
Wyświetl listę imion i nazwisk wszystkich pracowników i kontrahentów, uwzględniając możliwe duplikaty.
Zadanie 3
Wyświetl listę unikalnych imion i nazwisk pracowników działu IT oraz kontrahentów z miasta "Warszawa".
Zadanie 4
Stwórz zapytanie, które wyświetli imiona i nazwiska wszystkich pracowników oraz kontrahentów, których nazwiska zaczynają się na literę "W".
Zadanie 5
Wyświetl listę wszystkich imion i nazwisk, dodając etykietę kolumny "Typ" z wartością "Pracownik" lub "Kontrahent", w zależności od źródła danych.
Podsumowanie
UNION
pozwala na usunięcie duplikatów, aUNION ALL
zachowuje wszystkie wiersze.- Można łączyć dane z różnych tabel pod warunkiem zgodności liczby i typu kolumn.
- Te techniki są użyteczne w sytuacjach, gdy dane muszą być agregowane z różnych źródeł.