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.

  1. Definiujemy CTE za pomocą klauzuli WITH przed instrukcją SELECT, INSERT, UPDATE, DELETE.
  2. 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.

  1. Utwórz zmienną tabeli SQL z odpowiednimi typami danych kolumn. Musimy użyć typu danych TABLE dla zmiennej tabeli
  2. Wykonaj instrukcję INSERT INTO SELECT, aby wstawić dane do zmiennej tabeli.
  3. 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
Jako certyfikat MCSA i Microsoft Certified Trainer w Gurgaon w Indiach, z 13-letnim doświadczeniem, Rajendra pracuje dla różnych dużych firm, koncentrując się na optymalizacji wydajności, monitorowaniu, wysokiej dostępności oraz strategiach i wdrażaniu odzyskiwania po awarii. Jest autorem setek autorytatywnych artykułów na temat SQL Server, Azure, MySQL, Linux, Power BI, Performance Tuning, AWS / Amazon RDS, Git i powiązanych technologii, które do tej pory obejrzało ponad 10 milionów czytelników.
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

Najnowsze posty Rajendry Gupty (zobacz wszystkie)
  • 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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *