Vložit do vybrané syntaxe oracle. Základy T-SQL

Domov / Pevné disky

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ŽIT DO tabulka2
VYBERTE * OD tabulka1;

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

VLOŽIT DO tabulka2
(jméno_sloupců)
VYBRAT název_sloupce
Z tabulka1;

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“:

ID uživateleJmé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ů".

Tým přidá řádky do tabulky nebo pohled na hlavní tabulku.

Syntaxe příkazu SQL INSERT

Vložit syntaxi příkazu


Základní klíčová slova a parametry příkazu INSERT
  • schéma- identifikátor oprávnění, obvykle se shodující se jménem nějakého uživatele
  • pohled na stůl- název tabulky, do které mají být řádky vloženy; pokud je zadán pohled, řádky se vloží do hlavní tabulky pohledu
  • poddotaz_1- poddotaz, který server zpracovává stejným způsobem jako pohled
  • sloupec- sloupec tabulky nebo zobrazení, do kterého se pro každý vkládaný řádek zadává hodnota z fráze HODNOTY nebo poddotaz; pokud je jeden ze sloupců tabulky v tomto seznamu vynechán, je hodnota sloupce pro vložený řádek výchozí hodnotou sloupce definovanou při vytvoření tabulky. Pokud je seznam sloupců zcela vynechán, klauzule HODNOTY nebo dotaz musí určit hodnoty pro všechny sloupce v tabulce
  • HODNOTY- definuje řetězec hodnot, které budou vloženy do tabulky nebo pohledu; význam musí být definován ve větě HODNOTY pro každý sloupec v seznamu sloupců
  • poddotaz_2- poddotaz, který vrací řádky vložené do tabulky; výběrový seznam tohoto poddotazu musí mít stejný počet sloupců jako seznam sloupců příkazů

Prohlášení s frází HODNOTY přidá do tabulky jeden řádek. Tento řádek obsahuje hodnoty definované frází HODNOTY.
Prohlášení s poddotaz místo fráze HODNOTY přidá všechny řádky vrácené poddotazem do tabulky. Server zpracovává poddotaz a vloží každý vrácený řádek do tabulky. Pokud poddotaz nevybere žádné řádky, server do tabulky nevloží žádné řádky.
Poddotaz má přístup k jakékoli tabulce nebo pohledu, včetně cílové tabulky výrazů . Server přiřazuje hodnoty polím v nových řádcích na základě vnitřní pozice sloupců v tabulce a pořadí hodnot fráze HODNOTY nebo ve výběrovém seznamu dotazu. Pokud v seznamu sloupců chybí nějaké sloupce, server jim přiřadí výchozí hodnoty definované při vytvoření tabulky. Pokud má některý z těchto sloupců omezení NOT NULL, server vrátí chybu označující, že omezení bylo porušeno, a zruší příkaz INSERT.
Když je zadán příkaz INSERT, je povolen jakýkoli spouštěč INSERT definovaný v tabulce.

VLOŽIT DO Příklad 1

VLOŽIT DO odd HODNOTY(50, "PRODUKTY", "SAN FRANCISCO");

VLOŽIT DO Zákazníci (město, cname, cnum) HODNOTY('Londýn', 'Hoffman', 2001);

VLOŽIT DO Příklad 2
Následující příkaz zkopíruje do tabulky bonusů data zaměstnanců společnosti, jejichž provize přesahují 25 % příjmu:

VLOŽIT DO bonus SELECT ename, job, sal, comm FROM emp WHERE comm > 0,25 * sal;

VLOŽIT DO Příklad 3
Pokud potřebujete vložit NULL-hodnota, musíte ji zadat jako normální hodnotu takto:

VLOŽIT DO Prodejci VALUES (1001,'Slupka',NULL,12);

VLOŽIT DO Příklad 4
Příkaz lze použít k načtení hodnot z jedné tabulky a jejich umístění do jiné pomocí dotazu. K tomu stačí větu nahradit HODNOTY na příslušnou žádost:

VLOŽIT DO Londonstaff SELECT * FROM Prodejci WHERE city = 'Londýn';

VLOŽENÍ MySQL

Pro vložení nových řádků do databáze Data MySQL použitý příkaz INSERT, příklady příkazů jsou uvedeny níže:
VLOŽIT DO Příklad 1.
Vložení nového řádku do tabulky název_tabulky.

VLOŽIT DO

VLOŽIT DO Příklad 2.
Vložení nového řádku do tabulky název_tabulky označující vložení dat do sloupců, které potřebujeme.

VLOŽIT DO název_tabulky VALUES('1','165','0','název');

V databázi MySQL Pomocí jednoho příkazu je možné vložit více nových řádků.
VLOŽIT DO Příklad 3.
Vložení více řádků do tabulky název_tabulky.

VLOŽIT DO table_name (tbl_id, chislo, chislotwo, name) VALUES ('1′,'159′,'34','name1′), ('2′,'14','61','name2′), ('3 ','356','8','jméno3');

Příkaz INSERT vloží do tabulky nové záznamy. V tomto případě mohou být hodnoty sloupců doslovné konstanty nebo mohou být výsledkem provedení dílčího dotazu. V prvním případě se pro vložení každého řádku používá samostatný příkaz INSERT; ve druhém případě bude vložen tolik řádků, kolik jich vrátí poddotaz.

Syntaxe operátoru je následující:

    INSERT INTO [ (,...) ]

    (HODNOTY(,…))

  1. | (VÝCHOZÍ HODNOTY)

Jak můžete vidět z prezentované syntaxe, seznam sloupců je volitelný (toto naznačují hranaté závorky v popisu syntaxe). Pokud chybí, seznam vložených hodnot musí být úplný, to znamená poskytnout hodnoty pro všechny sloupce tabulky. V tomto případě musí pořadí hodnot odpovídat pořadí určenému příkazem CREATE TABLE pro tabulku, do které jsou řádky vloženy. Kromě toho musí být tyto hodnoty stejného datového typu jako sloupce, do kterých jsou zadány. Jako příklad zvažte vložení řádku do tabulky Produkt vytvořené následujícím příkazem CREATE TABLE:

    CREATE TABLE produkt

    maker char (1) NOT NULL,

    model varchar(4) NOT NULL,

    zadejte varchar(7) NOT NULL

Předpokládejme, že chcete přidat PC model 1157 od výrobce B do této tabulky.

    VLOŽTE DO produktu

    HODNOTY ("B" , 1157 , "PC" ) ;

Pokud zadáte seznam sloupců, můžete změnit jejich „přirozené“ pořadí:

    INSERT INTO Product (typ, model, výrobce)

    VALUES ("PC" , 1157 , "B" ) ;

Zdálo by se, že jde o zcela zbytečnou vlastnost, která design jen ztěžuje. Vyhraje však, pokud mají sloupce výchozí hodnoty. Zvažte následující strukturu tabulky:

    CREATE TABLE product_D

    maker char (1) NULL,

    model varchar(4) NULL,

    typ varchar (7) NOT NULL DEFAULT "PC"

Všimněte si, že zde mají hodnoty všech sloupců výchozí hodnoty (první dva jsou NULL a poslední sloupec je typ - PC). Nyní bychom mohli napsat:

    INSERT INTO Product_D (model, výrobce)

    VALUES(1157; "B");

V tomto případě bude chybějící hodnota při vkládání řádku nahrazena výchozí hodnotou - PC. Všimněte si, že pokud sloupci není zadána výchozí hodnota v příkazu CREATE TABLE a je zadáno omezení NOT NULL, které zakazuje použití hodnoty NULL v tento sloupec tabulky, výchozí hodnota je NULL .

Nabízí se otázka: je možné nespecifikovat seznam sloupců a přesto použít výchozí hodnoty? Odpověď je ano. Chcete-li to provést, místo explicitního zadání hodnoty použijte vyhrazené slovo DEFAULT :

    INSERT INTO Product_D

    HODNOTY ("B" , 1158 , VÝCHOZÍ ) ;

Protože všechny sloupce mají výchozí hodnoty, pro vložení řádku s výchozími hodnotami můžete napsat:

    INSERT INTO Product_D

    HODNOTY(VÝCHOZÍ, VÝCHOZÍ, VÝCHOZÍ);

Pro tento případ však existuje speciální konstrukce DEFAULT VALUES (viz syntaxe operátoru), pomocí které lze výše uvedený operátor přepsat do tvaru

    INSERT INTO Product_D DEFAULT VALUES ;

Všimněte si, že při vkládání řádku do tabulky platí všechna omezení tento stůl. Mohou to být omezení primárního klíče nebo jedinečného indexu, omezení CHECK nebo omezení referenční integrity. Pokud dojde k porušení jakéhokoli omezení, vložení řádku bude odmítnuto. Podívejme se nyní na případ použití poddotazu. Předpokládejme, že potřebujeme vložit do tabulky Product_D všechny řádky z tabulky Product související s modely osobní počítače(typ = 'PC'). Vzhledem k tomu, že hodnoty, které potřebujeme, jsou již v nějaké tabulce, ruční generování vložených řádků je zaprvé neefektivní a zadruhé může způsobit chyby ve vstupu. Použití poddotazu řeší tyto problémy:

Použití znaku „*“ v poddotazu je v tomto případě oprávněné, protože pořadí sloupců je pro obě tabulky stejné. Pokud by tomu tak nebylo, musel by být použit seznam sloupců buď v příkazu INSERT, poddotazu nebo v obou, což by odpovídalo pořadí sloupců:

Zde, stejně jako dříve, můžete zadat ne všechny sloupce, pokud chcete použít stávající výchozí hodnoty, například:

V tomto případě bude sloupec typu tabulky Product_D nahrazen výchozí hodnotou PC pro všechny vložené řádky.

Všimněte si, že při použití poddotazu obsahujícího predikát budou vloženy pouze ty řádky, pro které je hodnota predikátu PRAVDA (nikoli UNKNOWN!). Jinými slovy, pokud by sloupec typu v tabulce Produkt měl hodnotu NULL a tato hodnota byla přítomna v několika řádcích, pak by tyto řádky nebyly vloženy do tabulky Produkt_D.

Umělá technika použití poddotazu, který tvoří řádek s klauzulí UNION ALL, umožňuje překonat omezení vkládání jednoho řádku do příkazu INSERT při použití konstruktoru řádku v klauzuli VALUES. Pokud tedy potřebujeme vložit několik řádků pomocí jednoho příkazu INSERT, můžeme napsat:

    INSERT INTO Product_D

    SELECT "B" výrobce AS, model 1158 AS, typ "PC" AS

    UNION VŠECHNY

    SELECT "C", 2190, "Laptop"

    UNION VŠECHNY

    SELECT "D" , 3219 , "Tiskárna" ;

Použití UNION ALL je vhodnější než UNION, i když je zaručena absence duplicitních řádků, protože v tomto případě nebude provedena žádná kontrola k odstranění duplicit.

Je třeba poznamenat, že vkládání více n-tic pomocí konstruktoru řádků je již implementováno v Systém správy relačních databází (DBMS), vyvinutý společností Microsoft Corporation.Structured Query Language) je univerzální počítačový jazyk používaný k vytváření, úpravě a manipulaci s daty v relačních databázích. SQL Server 2008. Vzhledem k této možnosti lze poslední dotaz přepsat jako:

    INSERT INTO Product_D VALUES

    ("B", 1158, "PC"),

    ("C", 2190, "Laptop"),

Naučili jsme se, jak vytvořit databázi a tabulky v těchto databázích, ale ukázalo se, že tabulky jsou „prázdné“. A v tomto článku vás chci naučit zadávat data do těchto tabulek a SQL příkaz s názvem „INSERT“ nám s tím pomůže. Začněme:

VLOŽIT- SQL operátor, který umožňuje přidávat řádky do tabulky a plnit je hodnotami. Hodnoty lze vložit výčtem pomocí slova hodnoty a jejich uvedením v závorkách oddělených čárkami.

Příkaz SQL INSERT určující sloupce má následující syntaxi:

INSERT INTO ([, ... ]) hodnoty ​​(,...);

Hodnoty lze také zapsat bez zadání sloupců:

INSERT INTO values ​​​​(,...);

Hodnoty lze také zaznamenávat pomocí SQL příkaz SELECT (příkaz SELECT prostudujeme o něco později):

INSERT INTO SELECT Název sloupce,... FROM název tabulky

Pomocí operátora SQL SELECT Můžete vložit více než jeden záznam. V případě, že pro některá pole tabulky nejsou zadány žádné hodnoty, budou nahrazeny výchozí hodnotou null.

Příklad práce operátora

Je zde tabulka „Planety“. Pomocí příkazu SQL INSERT musíte přidat záznam a přiřadit následující hodnoty polím tabulky - ID: 4; Název planety: Venuše; Rádius: 6051; Nedělní sezóna: 243; Rok otevření: 1610; Mít prsteny: Ne; Otvírák: Galileo Galilei;

INSERT INTO Planets (ID, PlanetName, Radius, SunSeason, OpeningYear, HavingRings, Opener) VALUES (4, "Venuše", 6051, 243, 160, "Ne", "Galileo Galilei");

Po provedení příkazu bude tabulka Planets vypadat takto (jak můžete vidět, byl přidán nový řádek a je to velmi jednoduché):



Pravděpodobně jste si všimli, že jsem tento příklad ukázal na základě první syntaxe. Kde je třeba napsat název každého sloupce, ale stejný příklad lze napsat jinak:

INSERT INTO Planets VALUES (4, "Venuše", 6051, 243, 160, "Ne", "Galileo Galilei");

Tento příklad bude fungovat, pokud potřebujete vložit pod každý sloupec a znáte pořadí těchto sloupců. V opačném případě mohou data skončit ve špatném sloupci.

Zde přichází moje malá lekce o příkazu INSERT v SQL. Doufám, že je vám vše jasné, pokud máte nějaké dotazy, napište a já vám určitě odpoví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ŽIT 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ŽIT 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ý NULL(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 NULL 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ŽIT 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), V 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ŽIT 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. dělat úplná kopie tabulky v SQL existuje samostatný operátor 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 např GROUP BY A MÍT
  • - můžete použít spojení 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.

© 2024 ermake.ru -- O opravě PC - Informační portál