Archiwa tagu: select

SQL SELECT INTO

W tym wpisie opiszę Wam zastosowanie składni SELECT INTO, która służy do kopiwania danych (kolumn) z jednej tabeli do drugiej tabeli. Bez zbędnych wstępów poniżej prezentuję Wam składnię takiej konstrukcji. Dobrą rzeczą jest to, że nie musimy mieć utworzonej tabeli_docelowej, zostanie ona utworzona automatycznie w chwili uruchomienia zapytania.


    


Składnia SELECT INTO

SELECT
    * — * oznacza wszystkie kolumny
INTO
    nowa_tabela
FROM
    tabela_źródłowa
— opcjonalnie warunek po WHERE
WHERE
    warunek(-ki)


Przykład zastosowania SELECT INTO (baza: Adventureworks2008R2)

No to przechodzimy do przykładu i na warsztat bieżemy bazę AdventureWorks2008R2.

Będziemy kopiowali dane z tabeli "Person.Person" (osoby o typie EM czyli Employees/Pracownicy) do tabeli "Person_tmp". W tym celu zbudujemy zapytanie.

SELECT
    *
INTO
    Person_tmp
FROM
    Person.Person
WHERE
    PersonType = 'EM'

Uruchamiamy zapytanie (F5) i powinniśmy otrzymać informację, że wszystko wykonało się poprawnie.

SQL SELECT INTO1

Widzimy, że konsturkcja wykonała się poprawnie i w tym momencie powinniśmy mieć nową tabelę o nazwie "Person_tmp" (najprawdopodobniej żeby ją zobaczyć musisz odświeżyć, strukturę bazy AdventureWorks2008R2 w drzewie baz danych, w tym celu klikasz prawym przyciskiem myszy na bazie AdventureWorks2008R2 i z menu wybierasz opcję Refresh) w której powinno znajdować się 273 rekordów które zostały do niej skopiowane.

Sprawdzamy to zapytaniem

SELECT
    *
FROM
    Person_tmp

Wynik


SQL SELECT INTO

Wszystko się zgadza w tabeli "Person_tmp" znajduje się 273 rekordy.


    

SQL INSERT INTO SELECT

Chciałbym Wam dzisiaj opisać działanie składni INSERT INTO SELECT. Jak już widzimy po słowach kluczowych coś wstawiamy (INSERT) i określamy skąd i co wrzucamy (SELECT). Żeby jakieś dane wziąć i gdzieś dodać musimy określić dwie rzeczy źródło i zakres danych do pobrania oraz cel, czyli gdzie te pobrane dane chcemy "wrzucić". To gdzie chcemy "wrzucić" określamy po słówkach INSERT INTO, a to co i skąd chcemy pobrać określamy po słówku SELECT, tutaj będziemy konstruowali po prostu zapytanie. Składnia całej konstrukcji poniżej. PAMIĘTAJ, że struktura danych kopiowanych i struktura danych do której te dane kopiujemy muszą być zgodne.


    


Składnia SQL INSERT INTO SELECT

INSERT INTO tabela_cel(nazwy_kolumn_po_przecinkach)
SELECT nazwy_kolumn_po_przecinkach FROM tabela_źródło
— opcjonalnie możemy dodać "sekcję" WHERE


Przykład zastosowania INSERT INTO SELECT (baza: Northwind)

Do przykładu wykorzystamy treningową bazę Northwind. Dodamy do niej nową tabelę "Customers_tmp" z kolumnami (CustomersID, CompanyName, City). Zrzut z tworzenia tabeli poniżej.

sql-insert-into-select

Teraz "skopiujemy" rekord o CustomersID = 'ALFKI' z tabeli Customers (ale tylko dane z kolumn: CustomersID, CompanyName, City) do tabeli "Customers_tmp" z takimi samymi kolumnami. Zapytanie poniżej.

INSERT INTO Customers_tmp
SELECT CustomerID, CompanyName, City FROM Customers WHERE CustomerID = 'ALFKI'

czyli do tabeli "Customers_tmp" wrzucimy dane z rekordu o CustomersID = 'ALFKI z tabeli "Customers", ale tylko dane z kolumn: CustomerID, CompanyName, City.
Uruchamiamy zapytanie i o poprawności wykonania zapytania mówi nam komunikat poniżej.

sql-insert-into-select

teraz żeby sprawdzić czy wszystko zadziałało musimy odpytać tabelę "Customers_tmp" o wszystkie rekordy.

SELECT
    *
FROM
    Customers_tmp

wynik zapytania poniżej

sql-insert-into-select

Na zrzucie widzimy, że w tabeli "Customers_tmp" znajdują się nowe dane, co potwiedza poprawność działania naszego zapytani.


Przykład zastosowania INSERT INTO SELECT (baza: Adventureworks)

W poprzednim przykładzie kopiowaliśmy tylko jeden rekord. Teraz spóbujmy skopiować więcej rekordow i do tego celu wykorzystam bazę AdventureWorks2008R2.

Tworzymy nową tabelę o nazwie "Person_SP" (skrót SP od Sales Person) do której będziemy kopiowali osoby z tabeli "Person.Person" ale tylko takie którę są sprzedawcami. Zakres kopiowanych danych to: BusinessEntityID, FirstName, LastName.

Tworzymy nową tabelę "Person_SP"

sql-insert-into-select

Teraz tworzymy strukturę z INSERT INTO SELECT gdzie w części SELECT zbudujemy zapytanie które pobierze nam dane (BusinessEntityID, FirstName, LastName) o osobach które sa sprzedawcami.

INSERT INTO Person_SP
SELECT BusinessEntityID, FirstName, LastName FROM Person.Person WHERE PersonType = 'SP'

W tabeli "Person.Person" takich osób jest 17 więc dane tylu osób powinny być skopiowane do tabeli "Person_SP"

Uruchamiamy zapytanie (F5).
Powinniśmy otrzymać komunikat o poprawnym wykonaniu naszej konstrukcji.

sql-insert-into-select

Teraz żeby sprawdzić czy w tabeli "Person_SP" jest 17 rekordów z danymi budujemy zapytanie.

SELECT
    *
FROM
    Person_SP

Wynikiem zapytanie powinno wyć wygenerowanie 17-tu rekordow, co widzimy na zrzucie poniżej.

sql-insert-into-select