Příkaz SQL INSERT INTO SELECT. Příkaz SQL INSERT INTO SELECT Přidání celých řádků

Kromě výše popsaného příkazu SELECT obsahuje jazyk DML (Data Manipulation Language) tři další příkazy: INSERT, UPDATE a DELETE. Stejně jako příkaz SELECT fungují tyto tři příkazy buď s tabulkami, nebo s pohledy. Tento článek popisuje příkaz INSERT a další dva příkazy jsou popsány v dalším článku.

příkaz INSERT vloží řádky (nebo části řádků) do tabulky. Existují dvě různé formy tohoto pokynu:

INSERT název_tabulky [(sloupec_seznam)] VÝCHOZÍ HODNOTY | HODNOTY (( DEFAULT | NULL | výraz ) [ ,...n]) INSERT INTO název_tabulky | jméno_zobrazení [(seznam_sloupec)] (výpis_výběr | příkaz_provedení) Konvence syntaxe

První forma instrukce umožňuje vložit do tabulky jeden řádek (nebo jeho část). A druhá forma příkazu INSERT umožňuje vložit do tabulky sadu výsledků příkazu SELECT nebo uloženou proceduru provedenou příkazem EXECUTE. Uložená procedura musí vrátit data, která mají být vložena do tabulky. Při použití s ​​příkazem INSERT může příkaz SELECT vybrat hodnoty z jiné nebo stejné tabulky, do které se data vkládají, pokud jsou datové typy odpovídajících sloupců kompatibilní.

U obou formulářů musí být datový typ každé vložené hodnoty kompatibilní s datovým typem odpovídajícího sloupce tabulky. Všechny řetězce a dočasná data musí být uzavřena v uvozovkách; Číselné hodnoty není nutné uzavírat do uvozovek.

Vložení jednoho řádku

U obou forem příkazu INSERT je explicitní uvedení seznamu sloupců volitelné. Neuvedení sloupců je stejné jako zadání všech sloupců v tabulce.

parametr DEFAULT VALUES vloží výchozí hodnoty pro všechny sloupce. Sloupce s datovým typem TIMESTAMP nebo vlastností IDENTITY jsou standardně vloženy s hodnotami, které jsou automaticky generovány systémem. Pro sloupce jiných datových typů se vloží odpovídající výchozí hodnota, která není null, pokud je k dispozici, nebo v opačném případě NULL. Pokud sloupec nepovoluje hodnoty null a nemá definovanou výchozí hodnotu, příkaz INSERT selže a zobrazí se zpráva.

Níže uvedený příklad vkládá řádky do tabulky Zaměstnanec v databázi SampleDb, což ukazuje použití příkazu INSERT k vložení malého množství dat do databáze:

USE SampleDb; INSERT INTO Employee VALUES (34990, "Andrey", "Batonov", "d1"); INSERT INTO Employee VALUES (38640, "Alexey", "Vasin", "d3");

Existují dva různé způsoby, jak vložit hodnoty do nového řádku. Příkaz INSERT v níže uvedeném příkladu explicitně používá klíčové slovo NULL a vkládá hodnotu NULL do odpovídajícího sloupce:

USE SampleDb; INSERT INTO Employee VALUES (34991, "Andrey", "Batonov", NULL);

Chcete-li vložit hodnoty do některých (ale ne všech) sloupců tabulky, musíte tyto sloupce obvykle explicitně určit. Nespecifikované sloupce musí povolovat hodnoty NULL nebo mít definovanou výchozí hodnotu.

USE SampleDb; INSERT INTO Employee(Id, First Name, LastName) VALUES (34992, "Andrey", "Batonov");

Předchozí dva příklady jsou ekvivalentní. V tabulce Employee je jediným sloupcem, který umožňuje hodnoty NULL, sloupec DepartmentNumber a všechny ostatní sloupce byly zakázány klauzuli NOT NULL v příkazu CREATE TABLE.

Pořadí hodnot v Nabídka VALUES Příkazy INSERT se mohou lišit od pořadí určeného v příkazu CREATE TABLE. V tomto případě se jejich pořadí musí shodovat s pořadím, ve kterém jsou odpovídající sloupce uvedeny v seznamu sloupců. Níže je uveden příklad vkládání dat v jiném pořadí, než bylo původní:

USE SampleDb; INSERT INTO Employee(DepartamentNumber, LastName, Id, First Name) VALUES ("d1", "Batonov", 34993, "Andrey");

Vkládání více řádků

Druhá forma příkazu INSERT vloží do tabulky jeden nebo více řádků vybraných poddotazem. Níže uvedený příklad ukazuje, jak vložit řádky do tabulky pomocí druhého formuláře příkazu INSERT. V tomto případě se provede dotaz na výběr čísel a jmen oddělení umístěných v Moskvě a výsledná sada výsledků se načte do nové tabulky vytvořené dříve.

Nová tabulka MoscowDepartment vytvořená ve výše uvedeném příkladu má stejné sloupce jako existující tabulka Department, s výjimkou chybějícího sloupce Location. Poddotaz v příkazu INSERT vybere všechny řádky v tabulce oddělení, pro které je hodnota sloupce Umístění "Moskva", které se pak vloží do nové tabulky vytvořené na začátku dotazu.

Níže uvedený příklad ukazuje další způsob, jak vložit řádky do tabulky pomocí druhého formuláře příkazu INSERT. V tomto případě se provede dotaz na výběr personálních čísel, čísel projektů a data zahájení projektu pro všechny zaměstnance na pozici „Manažer“, kteří pracují na projektu p2, a poté načte výslednou sadu výsledků do nové tabulky vytvořené na začátku roku dotaz:

USE SampleDb; CREATE TABLE ManagerTeam(EmpId INT NOT NULL, ProjectNumber CHAR (4) NOT NULL, EnterDate DATE); INSERT INTO ManagerTeam (EmpId, ProjectNumber, EnterDate) SELECT EmpId, ProjectNumber, EnterDate FROM Works_on WHERE Job = "Manager";

Před vložením řádků pomocí příkazu INSERT byly tabulky MoscowDepartment a ManagerTeam (ve výše uvedených příkladech) prázdné. Pokud by tabulka již existovala a obsahovala řádky s daty, byly by do ní přidány nové řádky.

V předchozích částech jsme se podívali na práci při získávání dat z předem vytvořených tabulek. Nyní je čas zjistit, jak můžeme vytvářet/mazat tabulky, přidávat nové záznamy a mazat staré. Pro tyto účely v SQL Existují operátoři jako: VYTVOŘIT- vytvoří stůl, ZMĚNIT- mění strukturu tabulky, POKLES- smaže tabulku nebo pole, VLOŽIT- přidá data do tabulky. Začněme se seznamovat s touto skupinou operátorů od operátora VLOŽIT.

1. Přidání celých řádků

Jak název napovídá, operátor VLOŽIT slouží k vkládání (připojování) řádků do databázové tabulky. Přidání lze provést několika způsoby:

  • - přidejte jeden celý řádek
  • - přidat část řádku
  • - přidat výsledky dotazu.

Abychom do tabulky přidali nový řádek, musíme zadat název tabulky, vypsat názvy sloupců a zadat hodnotu pro každý sloupec pomocí konstrukce VLOŽ DO název_tabulky (pole1, pole2 ...) HODNOTY (hodnota1, hodnota2...). Podívejme se na příklad.

INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Můžete také změnit pořadí názvů sloupců, ale zároveň musíte změnit pořadí hodnot v parametru HODNOTY.

2. Přidání části řádků

V předchozím příkladu při použití operátoru VLOŽIT explicitně jsme označili názvy sloupců tabulky. Pomocí této syntaxe můžeme přeskočit některé sloupce. To znamená, že zadáte hodnoty pro některé sloupce, ale neposkytnete je pro ostatní. Například:

INSERT INTO Sellers (ID, City, Seller_name) VALUES("6", "Los Angeles", "Harry Monroe")

V tomto příkladu jsme nezadali hodnotu pro dva sloupce Adresa A Země. Některé sloupce můžete z výpisu vyloučit VLOŽ DO, pokud to umožňuje definici tabulky. V tomto případě musí být splněna jedna z podmínek: tento sloupec je definován jako platný NULA(absence jakékoli hodnoty) nebo zadaná výchozí hodnota v definici tabulky. To znamená, že pokud není zadána žádná hodnota, použije se výchozí hodnota. Pokud v tabulce chybí sloupec, který neumožňuje zobrazení hodnot v řádcích NULA a nemá definovanou výchozí hodnotu, DBMS vygeneruje chybovou zprávu a řádek nebude přidán.

3. Přidání vybraných dat

V předchozím příkladu jsme vložili data do tabulek ručním zadáním do dotazu. Nicméně provozovatel VLOŽ DO nám umožňuje automatizovat tento proces, pokud chceme vložit data z jiné tabulky. Pro tento účel v SQL existuje taková konstrukce jako VLOŽIT DO... VYBRAT.... Tento design umožňuje současně vybírat data z jedné tabulky a vkládat je do jiné. Předpokládejme, že máme další stůl Prodejci_EU se seznamem prodejců našeho zboží v Evropě a potřebujeme je doplnit do obecné tabulky Prodejci. Struktura těchto tabulek je stejná (stejný počet sloupců a stejné názvy), ale odlišná data. K tomu můžeme napsat následující dotaz:

INSERT INTO Sellers (ID, adresa, město, prodejce_jméno, země) VYBERTEID, adresa, město, jméno prodejce, země FROM Sellers_EU

Musíte dávat pozor, aby se hodnoty interních klíčů neopakovaly (pole ID), jinak dojde k chybě. Operátor VYBRAT může také obsahovat návrhy KDE k filtrování dat. Je třeba také poznamenat, že DBMS nevěnuje pozornost názvům sloupců obsažených ve výpisu VYBRAT, důležité je pro ni pouze pořadí, ve kterém jsou uspořádány. Proto data v prvním zadaném sloupci, který byl vybrán kvůli VYBRAT, bude v každém případě vyplněn v prvním sloupci tabulky Prodejci, uvedené za provozovatelem VLOŽ DO, bez ohledu na název pole.

4. Kopírování dat z jedné tabulky do druhé

Často je při práci s databázemi potřeba vytvořit kopie libovolných tabulek za účelem zálohování nebo úpravy. Chcete-li vytvořit úplnou kopii tabulky, SQL poskytuje samostatný příkaz VYBERTE DO. Potřebujeme například vytvořit kopii tabulky Prodejci, budete muset napsat žádost takto:

SELECT * INTO Sellers_new FROM Sellers

Na rozdíl od předchozího designu VLOŽIT DO... VYBRAT... Když jsou data přidána do existující tabulky, návrh zkopíruje data do nové tabulky. Můžete také říci, že první konstrukce importuje data a druhá exportuje. Při použití designu VYBERTE ... DO ... Z ... Je třeba zvážit následující:

  • - v operátoru můžete použít libovolné věty VYBRAT, jako SKUPINA VYTVOŘENÁ A MÍT
  • - spojení můžete použít k přidání dat z více tabulek
  • - data lze přidat pouze do jedné tabulky, bez ohledu na to, z kolika tabulek byla převzata.

Tento příkaz přidá jeden nebo více záznamů do tabulky (provede připojovací dotaz).

Syntax

Žádost o přidání více záznamů:

VLOŽ DO konečný_objekt [(pole1[, pole2[, ...]])]
VYBERTE [ zdroj.]pole1[, pole2[, ...]
Z tabulkový_výraz

Žádost o přidání jednoho záznamu:

VLOŽ DO konečný_objekt [(pole1[, pole2[, ...]])]
HODNOTY ( pole1[, pole2[, ...])

Příkaz INSERT INTO se skládá z následujících prvků:

Část

Popis

konečný_objekt

Název tabulky nebo dotazu, kam se přidávají záznamy.

pole1, pole2

Po hádce konečný_objekt- názvy polí, do kterých se přidávají údaje; po hádce zdroj- názvy polí, ze kterých jsou data extrahována.

externí_databáze

Cesta k externí databázi. Popis cesty naleznete v článku o klauzuli IN.

zdroj

Název tabulky nebo dotazu, ze kterého se kopírují záznamy.

tabulkový_výraz

Jeden nebo více názvů tabulek, ze kterých chcete načíst záznamy. Tento argument může být název jednotlivé tabulky, výsledný výraz vytvořený pomocí INNER JOIN, LEFT JOIN nebo RIGHT JOIN nebo uložený dotaz.

hodnota1, hodnota2

Hodnoty, které budou přidány do konkrétních polí nového záznamu. Každá hodnota se vloží do pole odpovídající její pozici v seznamu: hodnota1 přidáno k pole1 nový záznam, hodnota2- V pole2 atd. Hodnoty musíte oddělit čárkou a textová pole uzavřít do uvozovek (" ").

Poznámky

Příkaz INSERT INTO může přidat jeden záznam do tabulky pomocí výše uvedené syntaxe. V tomto případě zadáte názvy a hodnoty pro každé pole v záznamu. Musíte zadat všechna pole v záznamu, ke kterým jsou přiřazeny hodnoty, a odpovídající hodnoty. Pokud nezadáte hodnotu pole, bude jí přiřazena výchozí hodnota nebo NULL. Záznamy se přidávají na konec tabulky.

Příkaz INSERT INTO lze také použít k přidání sady záznamů z jiné tabulky nebo dotazu pomocí klauzule SELECT... FROM, jak je uvedeno výše (viz Syntaxe dotazu pro přidávání více záznamů). V tomto případě klauzule SELECT určuje pole, která se mají přidat k zadanému konečný_objekt.

Zdroj nebo konečný_objekt může být tabulka nebo dotaz. Když je zadán dotaz, databázový stroj Microsoft Access přidá záznamy do všech tabulek, které vrátí.

Použití příkazu INSERT INTO je volitelné. Pokud je zadán, musí předcházet příkazu SELECT.

Pokud cílová tabulka obsahuje primární klíč, zajistěte, aby hodnoty, které přidáte do jednoho nebo více polí primárního klíče, byly jedinečné a odlišné od NULA; jinak nebudou položky přidány.

Pokud jsou záznamy přidány do tabulky s polem Čítač a chcete je přečíslovat, nezahrnujte pole Čítač do dotazu. Pokud chcete zachovat původní hodnoty z pole, zahrňte do dotazu pole Počítadlo.

Záznamy můžete přidat do tabulky v jiné databázi pomocí klauzule IN.

Chcete-li vytvořit tabulku, použijte příkaz SELECT... INTO k vytvoření tabulky.

Před spuštěním dotazu pro přidání použijte výběrový dotaz se stejnými kritérii výběru, abyste pomocí výsledků určili, které záznamy budou přidány.

Připojovací dotaz zkopíruje záznamy z jedné nebo více tabulek do jiné tabulky. V tomto případě zůstanou tabulky obsahující přidané záznamy nezměněny.

Místo přidávání záznamů z jiné tabulky můžete nastavit hodnotu každého pole v samostatném novém záznamu pomocí klauzule VALUES. Pokud je seznam polí vynechán, musí klauzule VALUES obsahovat odpovídající hodnoty pro každé pole tabulky; jinak se operace INSERT nezdaří. Pro každý další záznam, který chcete vytvořit, použijte příkaz INSERT INTO spolu s klauzulí VALUES.

Pomocí SQL můžete kopírovat informace z jedné tabulky do druhé.

Příkaz INSERT INTO SELECT zkopíruje data z jedné tabulky a vloží je do existující tabulky.

SQL příkaz INSERT INTO SELECT,

Příkaz INSERT INTO SELECT vybere data z jedné tabulky a vloží je do existující tabulky. Žádné existující řádky v cílové tabulce se nezmění.

SQL INSERT INTO SELECT, Syntaxe

Můžeme zkopírovat všechny sloupce z jedné tabulky do jiné existující tabulky:

VLOŽ DO tabulka2
VYBERTE * OD stůl 1;

Nebo můžeme zkopírovat pouze požadované sloupce do jiné existující tabulky:

VLOŽ DO tabulka2
(jméno_sloupců)
VYBRAT název_sloupce
Z stůl 1;

Demo verze databáze

V tomto tutoriálu použijeme dobře známou databázi Northwind.

Níže je uveden výběr z tabulky „Zákazníci“:

uživatelské IDJméno klientaKontaktní osobaAdresaměstoPSČZemě
1 Alfreds Futterkiste Marii Andersovou Obere Str. 57 Berlín 12209 Německo
2 Ana Trujillo Emparedados a helados Ana Trujillo Avda. de la Constitucion 2222 Mexiko D.F. 05021 Mexiko
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexiko D.F. 05023 Mexiko

A výběr z tabulky "Dodavatelé":

SQL INSERT DO SELECT, příklady

Kopírování pouze několika sloupců z "Dodavatelé" do "Zákazníci":

Kopírování pouze německých dodavatelů do "Zákazníků".

Ahoj všichni! Tento článek bude diskutovat o tom, jak můžete přidat data do tabulky v Microsoft SQL Server, pokud jste již alespoň trochu obeznámeni s jazykem T-SQL, pak jste si pravděpodobně uvědomili, že nyní budeme mluvit o příkazu INSERT a také o tom, jak jej lze použít k přidání dat do tabulky.

Začněme jako obvykle trochou teorie.

Příkaz INSERT v T-SQL

VLOŽIT je instrukce T-SQL, která je určena k přidávání dat do tabulky, tzn. vytváření nových záznamů. Tuto instrukci lze použít jak pro přidání jednoho řádku do tabulky, tak pro hromadné vkládání dat. Příkaz INSERT vyžaduje oprávnění k vložení dat ( VLOŽIT) do cílové tabulky.

Existuje několik způsobů, jak použít příkaz INSERT na část dat, která je třeba vložit:

  • Výpis konkrétních hodnot k vložení;
  • Zadání datové sady jako dotazu SELECT;
  • Zadání datové sady ve formě volání procedury, která vrací tabulková data.

Zjednodušená syntaxe

INSERT [tabulka] ( seznam sloupců...) HODNOTY ( seznam hodnot...) Nebo VYBRAT vzorová žádost Nebo EXECUTE postup

  • INSERT INTO je příkaz pro přidání dat do tabulky;
  • Tabulka je název cílové tabulky, do které chcete vložit nové záznamy;
  • Seznam sloupců je seznam názvů sloupců tabulky, do kterých budou data vložena, oddělených čárkami;
  • VALUES je konstruktor hodnot tabulky, pomocí kterého určujeme hodnoty, které budeme vkládat do tabulky;
  • Seznam hodnot jsou hodnoty, které budou vloženy, oddělené čárkami. Jsou uvedeny v pořadí, v jakém se sloupce objevují v seznamu sloupců;
  • SELECT je dotaz pro výběr dat pro vložení do tabulky. Sada výsledků, kterou dotaz vrátí, musí odpovídat seznamu sloupců;
  • EXECUTE je volání procedury k získání dat pro vložení do tabulky. Sada výsledků, kterou vrátí uložená procedura, musí odpovídat seznamu sloupců.

Zhruba takto vypadá zjednodušená syntaxe příkazu INSERT INTO, ve většině případů takto budete přidávat nové záznamy do tabulek.

Seznam sloupců, do kterých budete vkládat data, není třeba psát, v takovém případě se jejich pořadí určí na základě skutečného pořadí sloupců v tabulce. Toto pořadí si musíte zapamatovat, když zadáváte hodnoty pro vložení nebo píšete dotaz k výběru. Osobně doporučuji ještě uvést seznam sloupců, do kterých plánujete přidávat data.

Nezapomeňte také, že seznam sloupců a seznam hodnot musí obsahovat tzv. povinné sloupce, to jsou ty, které nemohou obsahovat hodnotu NULL. Pokud je nezadáte a sloupec nemá výchozí hodnotu, dojde k chybě.

Rád bych také poznamenal, že datový typ hodnot, které budete vkládat, musí odpovídat datovému typu sloupce, do kterého bude tato hodnota vložena, nebo alespoň podporovat implicitní převod. Ale radím vám, abyste kontrolovali typ dat ( formát) hodnoty, a to jak v seznamu hodnot, tak v dotazu SELECT.

Dost teorie, přejděme k praxi.

Počáteční údaje

Abychom do tabulky přidali data, potřebujeme samotnou tabulku, tak si ji vytvořte a zkusme do ní přidat záznamy.

Poznámka! Všechny příklady budou spuštěny v Microsoft SQL Server 2016 Express.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, (100) NOT NULL, NOT NULL)

Naše testovací tabulka bude obsahovat seznam produktů s cenami.

Také v příkladech použijeme proceduru, která vrací hodnotu tabulky pro přidání dat do tabulky, takže si ji vytvořte také.

CREATE PROCEDURE TestProcedure AS BEGIN SELECT ProductName, Price FROM TestTable END

Například vrátí data z nově vytvořené tabulky TestTable.

Poznámka!

Jak víte, čtení tohoto materiálu předpokládá určitou znalost jazyka T-SQL, takže pokud vám něco není jasné, doporučuji vám seznámit se s následujícími materiály:

Příklad 1 – Přidání nového záznamu do tabulky pomocí konstruktoru hodnoty tabulky

Nejprve zkusme přidat jeden záznam a hned se podíváme na výsledek, tzn. Napíšeme žádost o vzorek.

INSERT INTO TestTable (ProductName, Price) VALUES ("Computer", 100) GO SELECT * FROM TestTable

Vidíte, že za názvem tabulky jsme uvedli názvy sloupců, do kterých budeme data přidávat, oddělené čárkami, poté jsme uvedli klíčové slovo HODNOTY a v závorkách jsme také ve stejném pořadí, odděleni čárkami, napsali hodnoty, které chceme vložit.

Po příkazu INSERT jsem napsal příkaz SELECT a oddělil je příkazem GO.

Nyní si představme, že potřebujeme přidat pár řádků. K tomu sepíšeme následující žádost.

INSERT INTO TestTable(ProductName, Price) VALUES ("Počítač", 100), ("Klávesnice", 20), ("Monitor", 50) PŘEJÍT VYBRAT * Z TestTable


Příklad 2 – Přidání nových řádků do tabulky pomocí SELECT dotazu

Velmi často je potřeba do tabulky přidat spoustu dat například na základě výběrového dotazu, tzn. VYBRAT. K tomu stačí místo VALUES zadat požadavek.

INSERT INTO TestTable(ProductName, Price) SELECT ProductName, Price FROM TestTable WHERE Id >


V tomto příkladu jsme napsali SELECT dotaz, který vrací data z tabulky TestTable, ale ne všechna, ale pouze ta s ID větším než 2. A výsledek byl vložen do stejné tabulky TestTable.

Jako příklad toho, jak můžete přidat záznamy do tabulky bez uvedení seznamu sloupců, napíšeme další dotaz na vložení dat, který bude dělat přesně to samé jako dotaz výše, jen nebude vypisovat sloupce k vložení.

INSERT INTO TestTable SELECT ProductName, Price FROM TestTable WHERE Id > 2 GO SELECT * FROM TestTable


V tomto případě jsme si jisti, že v tabulce TestTable je první sloupec ProductName a druhý je Cena, takže si to můžeme dovolit takto napsat. V praxi je ale opět lepší zadat seznam sloupců.

Pokud jste si všimli, ve všech příkladech jsem neuvedl sloupec Id, ale máme jej, k žádné chybě nedošlo, jelikož tento sloupec má vlastnost IDENTITY, automaticky generuje identifikátory, takže vkládání dat do takového sloupce prostě nejde.

Příklad 3 - Přidání nových záznamů do tabulky pomocí uložené procedury

Nyní do tabulky vložíme data, která nám uložená procedura vrátí. Význam je zde stejný, místo VALUES a místo požadavku označujeme volání procedury. Ale jak víte, pořadí a počet sloupců vrácených procedurou musí přesně odpovídat seznamu sloupců, které mají být vloženy ( i když není uveden seznam sloupců).

INSERT INTO TestTable (ProductName, Price) EXEC TestProcedure GO SELECT * FROM TestTable


Doufám, že vám tento materiál pomohl pochopit pokyny. VLOŽ DO, a to je zatím vše, co mám!