SQLShack (Polski)
Ten artykuł dotyczy instrukcji SQL INSERT INTO SELECT wraz z jego składnią, przykładami i przypadkami użycia.
W moim wcześniejszym artykule Instrukcja SQL SELECT INTO zbadaliśmy następujące zadania.
- Utwórz tabelę SQL w locie, wstawiając rekordy z odpowiednimi typami danych
- Użyj SQL SELECT INTO, aby wstawić rekordy w określonej grupie plików
- Nie możemy go użyć do wstawienia danych do istniejącej tabeli
Instrukcja INSERT INTO SELECT
Chcemy wstawiać rekordy jako zwykłą aktywność w bazie danych. Dane możemy wstawiać bezpośrednio za pomocą narzędzi klienckich takich jak SSMS, Azure Data Studio lub bezpośrednio z aplikacji. W SQL używamy instrukcji SQL INSERT INTO do wstawiania rekordów.
Składnia instrukcji INSERT INTO
Po wstawieniu danych do tabeli możemy użyć następującej składni dla naszego Instrukcja SQL INSERT INTO.
1
2
|
INSERT INTO nazwa_tabeli (kolumna1, kolumna 2 ….)
VALUES (wartość1, wartość2, …);
|
Jeśli określiliśmy wszystkie wartości kolumn zgodnie z kolumną tabeli zamówień, nie musimy podawać nazw kolumn. Możemy bezpośrednio wstawiać rekordy do tabeli.
1
2
|
INSERT INTO nazwa_tabeli
VALUES (wartość1, wartość2, …);
|
Utwórzmy przykładową tabelę i wstawimy do niej dane .
1
2
3
4
|
CREATE TABLE Pracownicy
(ID INT,
Imię VARCHAR (20)
);
|
Możemy wstawiać dane za pomocą następujących zapytań. Oba zapytania są prawidłowe do wstawiania danych.
1
2
|
Wstaw do wartości pracowników (identyfikator, imię) (1, „raj”)
Wstaw do wartości pracowników (2, „raj”)
|
Nie możemy wstawiać danych bez określenia nazw kolumn, jeśli istnieje niezgodność między wstawieniem danych a kolejnością wartości kolumn jest inna. Możemy otrzymać następujący komunikat o błędzie.
- Msg 213, Level 16, State 1, Line 6
Nazwa kolumny lub liczba podanych wartości nie definicja tabeli odpowiedników.
- Msg 245, poziom 16, stan 1, wiersz 6
Konwersja nie powiodła się podczas konwersji wartości varchar „raj” na typ danych int.
W tym przykładzie użyjemy instrukcji SQL INSERT INTO do podania wartości bezpośrednio w instrukcji. Załóżmy, że chcemy wstawić dane z innej tabeli. Nadal możemy używać instrukcji SQL INSERT INTO z instrukcją select. Zbadajmy to w następnej sekcji.
Składnia instrukcji INSERT INTO SELECT
Możemy wstawić dane z innych tabel SQL do tabeli za pomocą następującej instrukcji INSERT INTO SELECT.
1
2
3
|
INSERT INTO table1 (col1, col2, col3,…)
SELECT col1, col2, col3,…
FROM table2
|
To zapytanie wykonuje następujące zadania:
- Najpierw wybiera rekordy z tabeli (instrukcja Select)
- Następnie wstawia do tabeli określonej poleceniem INSERT INTO
- Uwaga: Struktura kolumny powinna być zgodna między kolumną zwróconą przez instrukcję SELECT a tabelą docelową.
INSERT INTO SELECT przykłady
Przykład 1: wstaw dane ze wszystkich kolumn tabeli źródłowej do tabeli docelowej
Mamy następujące rekordy w istniejąca tabela pracowników.
Utwórzmy kolejną tabelę Klienci z następującym zapytaniem.
1
2
3
4
|
CREATE TABLE Klienci
(ID INT,
Nazwa VARCHAR (20)
);
|
Chcemy wstawić wszystkie rekordy z tabeli Pracownicy do tabela Klienci. W tym celu możemy użyć instrukcji SQL INSERT INTO SELECT.
1
2
3
|
INSERT INTO Client
SELECT *
FROM Employees;
|
Wstawia wszystkie rekordy do tabeli Klienci. Możemy sprawdzić, czy rekordy w tabeli Klienci są podobne do tabeli Pracownicy.
W tym przykładzie wstawiliśmy rekordy dla wszystkich kolumny do tabeli Klienci.
Przykład 2: Wstaw wiersze ze źródła do tabeli docelowej, określając nazwy kolumn
Usuńmy istniejącą tabelę Klienci, zanim przejdziemy dalej. Teraz chcemy utworzyć tabelę z jedną dodatkową kolumną IDENTITY. Kolumna TOŻSAMOŚĆ automatycznie wstawia wartości tożsamości do tabeli. Dodaliśmy również kolumnę Miasto, która dopuszcza wartości NULL.
1
2
3
4
5
6
|
UTWÓRZ TABELA Klienci
(ID INT IDENTITY (1, 1),
Emp_ID INT,
Imię VARCHAR (20),
Miasto VARCHAR (20) NULL,
);
|
Nie możemy użyć instrukcji INSERT INTO SELECT podobnej do powyższy przykład. Jeśli spróbujemy uruchomić ten kod, otrzymujemy komunikat o błędzie.
1
2
3
|
WSTAWIĆ DO klientów
WYBIERZ *
OD pracowników ;
|
W tym przypadku musimy określić nazwę kolumny za pomocą instrukcji INSERT INTO.
1
2
3
|
INSERT INTO klientów (Emp_ID, Name)
SELECT *
FROM Employees;
|
W tabeli Klienci mamy dodatkową kolumnę z dopuszcza wartości NULL. Uruchommy tabelę Select on Customers. Na poniższym zrzucie ekranu widzimy wartości NULL w kolumnie Miasto.
Załóżmy, że masz inną kolumnę w tabeli źródłowej. Nadal można wstawiać rekordy do tabeli docelowej, określając nazwy kolumn w instrukcji INSERT INTO SELECT. Powinniśmy mieć odpowiedni typ danych, aby wstawić dane. Nie możesz wstawić danych kolumny varchar do kolumny INT.
Dodaj nową kolumnę w tabeli Employees za pomocą instrukcji ALTER TABLE.
1
2
|
ALTER TABLE Pracownicy
DODAJ kraj varchar (50);
|
Zaktualizuj rekordy tabeli o wartość kraju dla Indii.
1
|
Aktualizuj zestaw pracowników Country = „Indie”
|
Teraz ponownie uruchom INSERT INTO Instrukcja SELECT. Możesz zauważyć, że używamy SELECT * zamiast określania nazw kolumn.
1
2
3
|
INSERT INTO Klienci (Emp_ID, Name)
SELECT *
OD pracowników;
|
Otrzymujemy następujący komunikat o błędzie. Ten błąd występuje z powodu niezgodności kolumn między tabelą źródłową a tabelą docelową.
Możemy zmapować kolumnę między tabelą źródłową i docelową za pomocą następującego zapytania.
1
2
3
4
5
6
|
WSTAWIĆ DO Klientów
(Emp_ID,
Nazwa
)
SELECT ID, Name
FROM Employees;
|
Przykład 3: Wstaw górne wiersze za pomocą polecenia INSERT INTO SELECT instrukcja
Załóżmy, że chcemy wstawić N wierszy z tabeli źródłowej do tabeli docelowej. Możemy użyć klauzuli Top w instrukcji INSERT INTO SELECT. W poniższym zapytaniu wstawia pierwszy wiersz z tabeli Employees do tabeli Customers.
1
2
3
4
5
6
|
INSERT TOP (1) INTO Customers
(Emp_ID,
Name
)
SELECT ID, nazwisko
OD pracowników;
|
Przykład 4: Wstaw używając obu kolumn i zdefiniowanych wartości w instrukcja SQL INSERT INTO SELECT
W poprzednich przykładach albo określiliśmy określone wartości w instrukcji INSERT INTO, albo użyliśmy INSERT INTO SELECT, aby pobrać rekordy z tabeli źródłowej i wstawić je do tabeli docelowej.
W instrukcji SQL INSERT INTO SELECT możemy łączyć zarówno kolumny, jak i zdefiniowane wartości.
W tabeli Klienci i pracownicy mamy następujące kolumny. Wcześniej nie wstawialiśmy żadnych wartości w kolumnie Miasto. Nie mamy również wymaganych wartości w tabeli Employee. Musimy podać jawną wartość dla kolumny City.
W poniższym zapytaniu określiliśmy wartość City kolumna, podczas gdy pozostałe wartości wstawiliśmy z tabeli Pracownicy.
1
2
|
INSERT TOP (1) INTO Klienci (Emp_ID, Name, City)
SELECT ID, Name, „Delhi” OD pracowników;
|
W poniższym zapytaniu widzimy, że wstawia jeden wiersz (ze względu na klauzulę Top (1)) wraz z wartością w kolumnie Miasto.
Przykład 5: INSERT INTO SELECT instrukcja z klauzulą Join, aby uzyskać dane z wielu tabel
Możemy użyć klauzuli JOIN, aby uzyskać dane z wielu tabel. Tabele te są łączone z warunkami określonymi w klauzuli ON. Załóżmy, że chcemy pobrać dane z wielu tabel i wstawić je do tabeli.
W tym przykładzie używam bazy danych AdventureWorks2017. Najpierw utwórz nową tabelę z odpowiednimi typami danych.
Ta tabela powinna zawierać rekordy z wyniku zapytania sprzężenia wielu tabel. Wykonaj następujące zapytanie, aby wstawić dane do tabeli HumanResources.EmployeeData.
Przykład 6: INSERT INTO SELECT instrukcja z wspólne wyrażenie tabelowe
Używamy wspólnych wyrażeń tabelowych (CTE), aby uprościć złożone sprzężenie z wielu kolumn. W poprzednim przykładzie użyliśmy JOINS w instrukcji Select do wstawiania danych do tabeli SQL. W tej części przepiszemy zapytanie za pomocą CTE.
W CTE możemy podzielić kod na dwie części.
- Definiujemy CTE za pomocą klauzuli WITH przed instrukcją SELECT, INSERT, UPDATE, DELETE.
- Po zdefiniowaniu CTE możemy wziąć odniesienie do CTE podobnie do relacyjnej tabeli SQL
Wykonaj następujący kod, aby wstawić dane za pomocą CTE.
Przykład 7 : Instrukcja INSERT INTO SELECT ze zmienną tabeli
Zmiennych tabeli używamy podobnie jak tabeli tymczasowej. Możemy je zadeklarować przy użyciu typu danych tabeli. Ta tabela może być używana do wykonywania działań w SQL Server, gdzie nie wymagamy stałej tabeli. Poniższe zapytanie można podzielić na trzy części.
- Utwórz zmienną tabeli SQL z odpowiednimi typami danych kolumn. Musimy użyć typu danych TABLE dla zmiennej tabeli
- Wykonaj instrukcję INSERT INTO SELECT, aby wstawić dane do zmiennej tabeli.
- Wyświetl zestaw wyników zmiennej tabeli
Podsumowanie
W tym artykule omówimy przypadki użycia instrukcji INSERT INTO SELECT. Mam nadzieję, że ten artykuł okazał się pomocny. Zachęcamy do wyrażania opinii w komentarzach poniżej.
- Autor
- Najnowsze posty
Jest twórcą jednej z największych bezpłatnych kolekcji artykułów online na jeden temat, w tym 50-częściowej serii na temat grup dostępności SQL Server Always On. Dzięki swojemu wkładowi w społeczność SQL Server, został wyróżniony różnymi nagrodami, w tym prestiżową nagrodą „Najlepszy autor roku” nieprzerwanie w 2020 i 2021 roku w SQLShack.
Rajmund zawsze interesują nowe wyzwania, więc jeśli potrzebujesz konsultacji pomoc w każdym temacie poruszonym w jego pismach, można się z nim skontaktować pod adresem [email protected]
Wyświetl wszystkie posty Rajendry Gupty
- Wykonywanie drobnych i głównych aktualizacji wersji AWS RDS SQL Server – 29 stycznia 2021
- Wdrażanie wystąpień AWS RDS PostgreSQL – 27 stycznia 2021
- Migracja lokalnych baz danych SQL do AWS RDS SQL Server przy użyciu AWS DMS – 25 stycznia , 2021