Základy T-SQL. DML. Transact-SQL - vkládání dat Demoverze databáze

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 vkládání hodnot do nový řádek. 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ě je podán požadavek na výběr čísel a jmen oddělení umístěných v Moskvě a výsledná sada výsledků je načtena do nový stůl, 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.

Ahoj všichni! Tento článek bude diskutovat o tom, jak můžete přidat data do tabulky ve společnosti Microsoft SQL Server Pokud se již alespoň trochu orientujete v jazyce T-SQL, pak vám pravděpodobně došlo, že nyní budeme mluvit o příkazu INSERT a také o tom, jak jej lze použít k přidává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ů. Tento pokyn 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 jste pochopili, čtení tohoto materiálu znamená mít určité znalosti jazyk T-SQL, takže pokud vám není něco jasné, doporučuji 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 tým 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 v tomto příkladu psali jsme VYBRAT dotaz, která vrací data z tabulky TestTable, ale ne všechna, ale pouze ta s identifikátorem 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


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

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. Použitím tuto syntaxi, můžeme některé sloupce přeskočit. 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.

Poslední aktualizace: 13.07.2017

Chcete-li přidat data, použijte příkaz INSERT, který má následující formální syntaxi:

INSERT název_tabulky [(seznam_sloupců)] VALUES (hodnota1, hodnota2, ... hodnotaN)

Nejprve přichází na řadu výraz INSERT INTO, pak v závorkách můžete zadat čárkami oddělený seznam sloupců, do kterých mají být přidána data, a na konci, za slovem VALUES, jsou hodnoty, které se mají pro sloupce přidat, uvedeny v závorky.

Předpokládejme například, že dříve byla vytvořena následující databáze:

CREATE DATABASE productsdb; GO USE productsdb; CREATE TABLE Products (Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL)

Přidáme k němu jeden řádek pomocí příkazu INSERT:

INSERT Products VALUES ("iPhone 7", "Apple", 5, 52000)

Po úspěšném spuštění v SQL Server Management Studio by se v poli zprávy měla objevit zpráva „1 dotčený řádek“:

Stojí za zvážení, že hodnoty pro sloupce v závorkách za klíčové slovo VALUES jsou předávány v pořadí, ve kterém jsou deklarovány. Například ve výše uvedeném příkazu CREATE TABLE můžete vidět, že první sloupec je Id. Ale protože je pro něj zadán atribut IDENTITY, je hodnota tohoto sloupce generována automaticky a lze ji vynechat. Druhý sloupec představuje ProductName, takže do tohoto sloupce bude předána první hodnota, řetězec „iPhone 7“. Druhá hodnota - řetězec "Apple" bude předán do třetího sloupce Výrobce a tak dále. To znamená, že hodnoty jsou předány do sloupců následovně:

    Název produktu: "iPhone 7"

    Výrobce: "Apple"

Při zadávání hodnot můžete také určit okamžité sloupce, do kterých budou hodnoty přidány:

INSERT INTO Products (ProductName, Price, Manufacturer) VALUES ("iPhone 6S", 41000, "Apple")

Zde je uvedena hodnota pouze pro tři sloupce. Navíc se nyní hodnoty přenášejí v pořadí sloupců:

    Název produktu: "iPhone 6S"

    Výrobce: "Apple"

Pro nespecifikované sloupce (v tomto případě ProductCount) bude přidána výchozí hodnota, pokud je zadán atribut DEFAULT, nebo hodnota NULL. Nespecifikované sloupce však musí mít hodnotu null nebo mít atribut DEFAULT.

Můžeme také přidat několik řádků najednou:

INSERT INTO Products VALUES ("iPhone 6", "Apple", 3, 36000), ("Galaxy S8", "Samsung", 2, 46000), ("Galaxy S8 Plus", "Samsung", 1, 56000)

V tomto případě budou do tabulky přidány tři řádky.

Při přidávání také můžeme určit, že sloupec by měl mít výchozí hodnotu pomocí klíčového slova DEFAULT nebo hodnotu NULL:

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ("Mi6", "Xiaomi", DEFAULT, 28000)

V tomto případě bude použita výchozí hodnota pro sloupec ProductCount (pokud je nastavena, pokud není, pak NULL).

Pokud mají všechny sloupce atribut DEFAULT, který určuje výchozí hodnotu, nebo mají-li povolenou hodnotu Null, můžete vložit výchozí hodnoty pro všechny sloupce:

VLOŽTE DO VÝCHOZÍCH HODNOT produktů

Ale pokud vezmeme tabulku Produkty, pak takový příkaz selže s chybou, protože několik polí nemá atribut DEFAULT a zároveň neumožňuje hodnotu NULL.

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ů".