Paweł Łukasiewicz
2020-12-05
Paweł Łukasiewicz
2020-12-05
Udostępnij Udostępnij Kontakt
Wprowadzenie

Przechodząc przez poprzednie wpisy może wydawać się oczywistym, że następny powinien dotyczyć słowa kluczowego UNION. W poprzednim dokonaliśmy łączenia różnych tabel – teraz powinniśmy sprawdzić jak wygląda sumowanie zbiorów w praktyce. Ta operacja wymaga jednak przygotowania kopii istniejącej tabeli – tylko w taki sposób będę w stanie dokładnie pokazać jak działania UNION oraz UNION ALL.

Kopiowanie/klonowanie

Problem o którym napisałem powyżej to tylko jeden z przykładów. Wyobraźcie sobię sytuację w której napisaliście niezwykle skomplikowaną procedurę składowaną, która wymaga przetestowania. Zamiast wykonywać ją na oryginalnej tabeli możecie w prosty i szybki sposób utworzyć kopię celem weryfikacji poprawności działania Waszego kodu.

W takiej sytuacji możemy zastosować różne podejścia, które są powiązane z konkretnym system zarządzania bazami danych. W ramach tego (i innych wpisów) używamy SQL Server Management Studio - ten przykład omówimy szczegółowo. Jeżeli jesteś jednak użytkownikiem baz danych Oracle lub MySQL nie zostawię Cię samego
W przypadku MySQL możecie użyć poniższego polecenia:

CREATE TABLE nowa_tabela LIKE oryginalna_tabela; -- tworzenie nowej tabeli
INSERT INTO nowa_tabela SELECT * FROM oryginalna_tabela; -- kopiowanie rekordów z oryginalnej tabeli
------------------- lub zapis skrócony -------------------
CREATE TABLE nowa_tabela SELECT * FROM oryginalna_tabela;
Dla użytkowników baz danych Oracle powyższe zapytanie przyjmuje postać:
CREATE TABLE nowa_tabela
  AS (SELECT * FROM oryginalna_tabela);

Użytkownicy SQL Server mogą posłużyć się poniższym zapytaniem:

SELECT * INTO nowa_tabela FROM oryginalna_tabela

W naszym przypadku dokonamy kopiowania na bazie tabeli HumanResources.Department:

SELECT * INTO HumanResources.DepartmentV2 FROM HumanResources.Department

Kolejny krok to dodanie kilku rekordów, które nie znajdują się w oryginalnej tabeli celem porówniania działania klauzuli UNION oraz UNION ALL:

INSERT INTO HumanResources.DepartmentV2(Name, GroupName, ModifiedDate) VALUES ('Konstruktor', 'Dzial R&D', GETDATE())
INSERT INTO HumanResources.DepartmentV2(Name, GroupName, ModifiedDate) VALUES ('Projektent', 'Dzial Techniczny', GETDATE())
INSERT INTO HumanResources.DepartmentV2(Name, GroupName, ModifiedDate) VALUES ('Produkcja', 'Dzial Produkcji', GETDATE())

Porównaniem zajmiemy się jednak w osobnym wpisie, który możecie znaleźć tutaj -> SQL - UNION