SQLShack (Čeština)

Tento článek popisuje příkaz SQL INSERT INTO SELECT spolu s jeho syntaxí, příklady a případy použití.

V mém dřívějším článku Příkaz SQL SELECT INTO jsme prozkoumali následující úkoly.

  • Vytvořte tabulku SQL za běhu při vkládání záznamů s příslušnými datovými typy
  • Použijte SQL SELECT INTO k vložení záznamů do konkrétní FileGroup
  • Nemůžeme jej použít k vložení dat do existující tabulky

Příkaz INSERT INTO SELECT

Chceme vložit záznamy jako běžnou aktivitu databáze. Data můžeme vložit přímo pomocí klientských nástrojů, jako je SSMS, Azure Data Studio nebo přímo z aplikace. V SQL používáme k vkládání záznamů příkaz SQL INSERT INTO.

Syntaxe INSERT INTO

Jakmile vložíme data do tabulky, můžeme použít následující syntaxi pro naši Příkaz SQL INSERT INTO.

1
2

INSERT INTO table_name (Sloupec1, Sloupec 2 ….)
HODNOTY (hodnota1, hodnota2, …);

Pokud jsme zadali všechny hodnoty sloupců podle sloupce tabulky objednávek, nemusíme specifikovat názvy sloupců. Můžeme přímo vložit záznamy do tabulky.

1
2

INSERT INTO table_name
VALUES (hodnota1, hodnota2, …);

Vytvořme ukázkovou tabulku a vložte do ní data .

1
2
3
4

VYTVOŘIT TABULKU Zaměstnanci
(ID INT,
Název VARCHAR (20)
);

Data můžeme vložit pomocí následujících dotazů. Oba dotazy jsou platné pro vkládání dat.

1
2

Vložit do hodnoty zaměstnanců (ID, jméno) (1, „raj“)
vložit do hodnoty zaměstnanců (2, „raj“)

Nelze vložit data bez zadání názvů sloupců, pokud existuje nesoulad mezi vložením dat a pořadí hodnot sloupců se liší. Můžeme obdržet následující chybovou zprávu.

  • Zpráva 213, úroveň 16, stav 1, řádek 6

    Název sloupce nebo počet zadaných hodnot není definice identifikační tabulky.

  • Zpráva 245, úroveň 16, stav 1, řádek 6

    Převod se nezdařil při převodu hodnoty varchar raj na datový typ int.

V tomto příkladu použijeme příkaz SQL INSERT INTO s dodáním hodnot přímo v příkazu. Předpokládejme, že chceme vložit data z jiné tabulky. Stále můžeme používat příkaz SQL INSERT INTO s příkazem select. Pojďme to prozkoumat v další části.

Syntaxe příkazu INSERT INTO SELECT

Data z jiných tabulek SQL můžeme vložit do tabulky s následujícím příkazem INSERT INTO SELECT.

1
2
3

INSERT INTO table1 (col1, col2, col3,…)
SELECT col1, col2, col3,…
FROM table2

Tento dotaz provádí následující úkoly:

  • Nejprve vybere záznamy z tabulky (příkaz Select)
  • Dále vloží do tabulky zadané pomocí INSERT INTO

  • Poznámka: Struktura sloupce by se měla shodovat mezi sloupcem vráceným příkazem SELECT a cílovou tabulkou.

INSERT INTO SELECT examples

Příklad 1: vkládání dat ze všech sloupců zdrojové tabulky do cílové tabulky

Máme následující záznamy v stávající tabulka zaměstnanců.

Vytvořme další zákazníky tabulky s následujícím dotazem.

1
2
3
4

CREATE TABLE Customers
(ID INT,
Název VARCHAR (20)
);

Chceme vložit všechny záznamy z tabulky Zaměstnanci do tabulka Zákazníci. K tomu můžeme použít příkaz SQL INSERT INTO SELECT.

1
2
3

INSERT INTO Customers
SELECT *
OD zaměstnanců;

Vloží všechny záznamy do tabulky Zákazníci. Můžeme ověřit, že záznamy v tabulce Zákazníci jsou podobné tabulce Zaměstnanci.

V tomto příkladu jsme vložili záznamy pro všechny sloupce do tabulky Zákazníci.

Příklad 2: Vložte řádky ze zdrojové do cílové tabulky zadáním názvů sloupců

Předtím, než se přesuneme vpřed, zrušíme stávající tabulku Zákazníci. Nyní chceme vytvořit tabulku s jedním dalším sloupcem IDENTITY. Sloupec IDENTITY automaticky vloží hodnoty identity do tabulky. Přidali jsme také sloupec Město, který umožňuje hodnoty NULL

1
2
3
4
5
6

VYTVOŘIT TABLE Zákazníci
(ID INT IDENTITY (1, 1),
Emp_ID INT,
název VARCHAR (20),
město VARCHAR (20) NULL,
);

Nemůžeme použít příkaz INSERT INTO SELECT podobný příkazu výše uvedený příklad. Pokud se pokusíme tento kód spustit, zobrazí se chybová zpráva.

1
2
3

INSERT INTO Customers
SELECT *
OD zaměstnanců ;

V tomto případě musíme zadat název sloupce pomocí příkazu INSERT INTO.

1
2
3

INSERT INTO Customers (Emp_ID, Name)
SELECT *
OD OD zaměstnanců;

V tabulce Zákazníci máme další sloupec s umožňuje hodnoty NULL. Spustíme tabulku Select on Customers. Na následujícím snímku obrazovky vidíme ve sloupci Město hodnoty NULL.

Předpokládejme, že máte ve zdrojové tabulce jiný sloupec. Stále můžete vkládat záznamy do cílové tabulky se zadáním názvů sloupců v příkazu INSERT INTO SELECT. K vložení dat bychom měli mít vhodný datový typ. Data sloupce varchar nelze vložit do sloupce INT.

Přidejte nový sloupec do tabulky Zaměstnanci pomocí příkazu ALTER TABLE.

1
2

ALTER TABLE Zaměstnanci
PŘIDAT zemi varchar (50);

Aktualizujte záznamy tabulky o hodnotu země Indie.

1

Aktualizovat sadu zaměstnanců Country = „India“

Nyní znovu spusťte INSERT INTO Příkaz SELECT. Můžete si všimnout, že místo zadání názvů sloupců používáme SELECT *.

1
2
3

INSERT INTO Customers (Emp_ID, Name)
SELECT *
OD OD zaměstnanců;

Zobrazí se následující chybová zpráva. K této chybě dochází kvůli neshodě sloupců mezi zdrojovou a cílovou tabulkou.

Sloupec mezi zdrojovou a cílovou tabulkou můžeme namapovat pomocí následujícího dotazu.

1
2
3
4
5
6

INSERT INTO Customers
(Emp_ID,
Jméno
)
VÝBĚR ID, název
OD OD zaměstnanců;

Příklad 3: Vložte horní řádky pomocí INSERT INTO SELECT prohlášení

Předpokládejme, že chceme vložit prvních N řádků ze zdrojové tabulky do cílové tabulky. Můžeme použít klauzuli Top v příkazu INSERT INTO SELECT. V následujícím dotazu vloží první řádek z tabulky Zaměstnanci do tabulky Zákazníci.

1
2
3
4
5
6

VLOŽIT NAHORU (1) DO ZÁKAZNÍKŮ
(Emp_ID,
Název
)
VYBRAT ID, jméno
OD OD zaměstnanců;

Příklad 4: Vložení pomocí obou sloupců a definovaných hodnot v příkaz SQL INSERT INTO SELECT

V předchozích příkladech jsme buď zadali konkrétní hodnoty v příkazu INSERT INTO, nebo jsme použili INSERT INTO SELECT k získání záznamů ze zdrojové tabulky a vložení do cílové tabulky.

Můžeme kombinovat oba sloupce a definované hodnoty v příkazu SQL INSERT INTO SELECT.

V tabulce Zákazníci a zaměstnanci máme následující sloupce. Dříve jsme do sloupce Město nevkládali žádné hodnoty. Nemáme také požadované hodnoty v tabulce Zaměstnanec. Musíme zadat explicitní hodnotu pro sloupec Město.

V následujícím dotazu jsme zadali hodnotu pro město sloupec, zatímco zbytek hodnot jsme vložili z tabulky Zaměstnanci.

1
2

INSERT TOP (1) INTO Customers (Emp_ID, Name, City)
SELECT ID, Name, „Delhi“ OD zaměstnanců

V následujícím dotazu vidíme, že vloží jeden řádek (kvůli klauzuli Top (1)) spolu s hodnotou pro sloupec Město.

Příklad 5: VLOŽTE DO VÝBĚRU příkaz s klauzulí Join pro získání dat z více tabulek

Můžeme použít klauzuli JOIN k získání dat z více tabulek. Tyto tabulky jsou spojeny s podmínkami určenými klauzulí ON. Předpokládejme, že chceme získat data z více tabulek a vložit je do tabulky.

V tomto příkladu používám databázi AdventureWorks2017. Nejprve vytvořte novou tabulku s příslušnými datovými typy.

Tato tabulka by měla obsahovat záznamy z výstupu dotazu na připojení více tabulek. Proveďte následující dotaz a vložte data do tabulky HumanResources.EmployeeData.

Příklad 6: INSERT INTO SELECT statement with společný tabulkový výraz

Společné tabulkové výrazy (CTE) používáme ke zjednodušení komplexního spojení z více sloupců. V předchozím příkladu jsme použili JOINS v příkazu Select pro vložení dat do tabulky SQL. V této části přepíšeme dotaz pomocí CTE.

V CTE můžeme rozdělit kód na dvě části.

  1. Definujeme CTE klauzulí WITH před příkazem SELECT, INSERT, UPDATE, DELETE
  2. Jakmile definujeme CTE, můžeme vzít odkaz na CTE podobný relační tabulce SQL.

Proveďte následující kód a vložte data pomocí CTE.

Příklad 7 : Příkaz INSERT INTO SELECT s proměnnou Table

Proměnné Table používáme podobně jako dočasná tabulka. Můžeme je deklarovat pomocí datového typu tabulka. Tuto tabulku lze použít k provádění činností na serveru SQL Server, kde nepotřebujeme trvalou tabulku. Následující dotaz můžete rozdělit na tři části.

  1. Vytvořte proměnnou tabulky SQL s příslušnými datovými typy sloupců. Musíme použít datový typ TABLE pro proměnnou tabulky
  2. Provést příkaz INSERT INTO SELECT pro vložení dat do proměnné tabulky
  3. Zobrazit sadu výsledků proměnné tabulky

Závěr

V tomto článku prozkoumáme případy použití příkazu INSERT INTO SELECT. Doufám, že vám tento článek pomohl. Neváhejte nám poskytnout zpětnou vazbu v níže uvedených komentářích.

  • autor
  • poslední příspěvky
Jako certifikovaný MCSA a Microsoft Certified Trainer v Gurgaonu v Indii, se 13 lety zkušeností, pracuje Rajendra pro řadu velkých společností zaměřených na optimalizaci výkonu, monitorování, vysokou dostupnost a strategie a implementaci zotavení po katastrofě. Je autorem stovek autoritativních článků o SQL Serveru, Azure, MySQL, Linuxu, Power BI, ladění výkonu, AWS / Amazon RDS, Git a souvisejících technologiích, které si dosud prohlédlo více než 10 milionů čtenářů.
Je tvůrcem jedné z největších bezplatných online sbírek článků na jedno téma se svou 50dílnou sérií pro skupiny dostupnosti na serveru SQL Server. Na základě svého příspěvku pro komunitu SQL Server byl oceněn různými oceněními, včetně prestižního ocenění „Nejlepší autor roku“ průběžně v letech 2020 a 2021 na serveru SQLShack.
Raj se vždy zajímá o nové výzvy, takže pokud potřebujete poradit pomoc s jakýmkoli tématem obsaženým v jeho spisech, lze ho kontaktovat na adrese [email protected]
Zobrazit všechny příspěvky od Rajendra Gupta

Poslední příspěvky od Rajendry Gupty (zobrazit všechny)
  • Provádění drobných a hlavních upgradů verzí pro AWS RDS SQL Server – 29. ledna 2021
  • Nasazení instancí AWS RDS PostgreSQL – 27. ledna 2021
  • Migrace místních databází SQL na AWS RDS SQL Server pomocí AWS DMS – 25. ledna , 2021

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *