itthon / Windows oktatóanyagok / Transact-SQL - adatok beszúrása. SQL lekérdezés INSERT INTO - az adatbázis kitöltése információkkal Beszúrás a szintaxisba

Transact-SQL - adatok beszúrása. SQL lekérdezés INSERT INTO - az adatbázis kitöltése információkkal Beszúrás a szintaxisba

Az elõzõ részekben az elõre elkészített táblákból történõ adatszerzési munkával foglalkoztunk. Itt az ideje, hogy kitaláljuk, hogyan hozhatunk létre/törölhetünk táblákat, hogyan adhatunk hozzá új rekordokat és törölhetjük a régieket. Ezekre a célokra be SQL Vannak olyan operátorok, mint: TEREMT- létrehoz egy táblázatot VÁLTOZTAT- megváltoztatja a táblázat szerkezetét, CSEPP- töröl egy táblázatot vagy mezőt, BESZÁLLÍTÁS- adatokat ad a táblázathoz. Kezdjük az ismerkedést ezzel az operátorcsoporttal az operátortól BESZÁLLÍTÁS.

1. Egész sorok hozzáadása

Ahogy a neve is sugallja, az operátor BESZÁLLÍTÁS sorok beszúrására (hozzáfűzésére) használják egy adatbázistáblába. A hozzáadás többféleképpen is elvégezhető:

  • - adjunk hozzá egy teljes sort
  • - egy karakterlánc egy részének hozzáadása
  • - Lekérdezési eredmények hozzáadása.

Tehát egy új sor hozzáadásához a táblázathoz meg kell adnunk a tábla nevét, listáznunk kell az oszlopneveket, és meg kell adnunk minden oszlop értékét a konstrukció segítségével. INSERT INTO táblázat_neve (mező1, mező2...) ÉRTÉKEK (érték1, érték2...). Nézzünk egy példát.

INSERT INTO Eladók (azonosító, cím, város, eladó_neve, ország) ÉRTÉKEI("6", "1st Street", "Los Angeles", "Harry Monroe", "USA")

Módosíthatja az oszlopnevek sorrendjét is, ugyanakkor módosítania kell az értékek sorrendjét a paraméterben ÉRTÉKEK.

2. A sorok egy részének hozzáadása

Az előző példában az operátor használatakor BESZÁLLÍTÁS kifejezetten megjelöltük a táblázat oszlopneveit. Ezzel a szintaxissal kihagyhatunk néhány oszlopot. Ez azt jelenti, hogy egyes oszlopokhoz értéket ad meg, másokhoz viszont nem. Például:

INSERT INTO Eladók (azonosító, város, eladó_neve) VALUES("6", "Los Angeles", "Harry Monroe")

NÁL NÉL ezt a példát nem adtunk meg értéket két oszlophoz Címés Ország. Néhány oszlopot kizárhat az utasításból INSERT INTO, ha lehetővé teszi a tábla meghatározását. Ebben az esetben az alábbi feltételek egyikének teljesülnie kell: ez az oszlop az értéket engedélyezőként van definiálva NULLA(érték hiánya) vagy a táblázat definíciójában a megadott alapértelmezett értéket. Ez azt jelenti, hogy ha nincs megadva érték, akkor a rendszer az alapértelmezett értéket használja. Ha kihagy egy olyan oszlopot a táblázatban, amely nem engedélyez értékeket a soraiban NULLAés nincs megadva alapértelmezett érték, a DBMS hibaüzenetet ad ki, és ez a sor nem lesz hozzáadva.

3. A kiválasztott adatok hozzáadása

Az előző példákban úgy szúrtuk be az adatokat táblákba, hogy azokat manuálisan írtuk be a lekérdezésbe. Az üzemeltető azonban INSERT INTO lehetővé teszi ennek a folyamatnak a automatizálását, ha egy másik táblából szeretnénk adatokat beszúrni. Ehhez az SQL felépítése a következő: BESZÁLLÍTÁS... KIVÁLASZTÁS.... Ez a kialakítás lehetővé teszi az adatok egyidejű kiválasztását az egyik táblából és beillesztését egy másikba. Tegyük fel, hogy van egy másik asztalunk Sellers_EUáruink európai eladóinak listájával, és fel kell adnunk őket az általános táblázathoz Eladók. Ezeknek a tábláknak a felépítése megegyezik (ugyanannyi oszlop és azonos nevek), de eltérő adatok. Ehhez a következő lekérdezést írhatjuk:

INSERT INTO Eladók (azonosító, cím, város, eladó_neve, ország) SELECTID, Cím, Város, Eladó_neve, Ország FROM Eladók_EU

Ügyelni kell arra, hogy a belső kulcsok értéke ne ismétlődjön (mező ID), különben hiba történik. Operátor KIVÁLASZTÁS javaslatokat is tartalmazhat AHOL adatok szűrésére. Azt is meg kell jegyezni, hogy a DBMS nem figyeli az utasításban szereplő oszlopok nevét. KIVÁLASZTÁS, csak az elrendezésük sorrendje a fontos számára. Ezért az első megadott oszlopban lévő adatok, amelyek miatt lett kiválasztva KIVÁLASZTÁS, úgyis a táblázat első oszlopában lesz kitöltve Eladók az operátor után megadva INSERT INTO, a mező nevétől függetlenül.

4. Adatok másolása egyik táblából a másikba

Az adatbázisokkal végzett munka során gyakran szükségessé válik a táblák másolatainak létrehozása biztonsági mentés vagy módosítás céljából. Egy tábla teljes másolatának elkészítéséhez SQL-ben külön utasítást biztosítunk VÁLASZTÁS BE. Például létre kell hoznunk a táblázat másolatát Eladók, akkor a következőképpen kell megírnia a kérelmet:

SELECT * INTO Sellers_new FROM Eladók

Az előző kiviteltől eltérően BESZÁLLÍTÁS... KIVÁLASZTÁS... Amikor egy meglévő táblához adatot adunk, a konstrukció az adatokat az új táblába másolja. Azt is mondhatjuk, hogy az első konstrukció adatokat importál, míg a második konstrukció exportál. A szerkezet használatakor KIVÁLASZTÁS... BE... AZ... a következőket kell figyelembe venni:

  • - bármilyen mondatot használhat az operátorban KIVÁLASZTÁS, úgymint CSOPORTOSÍTés HAVING
  • - A join segítségével több táblából is hozzáadhatunk adatokat
  • - adatok csak egy táblához adhatók hozzá, függetlenül attól, hogy hány táblából lettek átvéve.

Az SQL használatával információkat másolhat egyik táblából a másikba.

Az INSERT INTO SELECT utasítás egy táblából másolja az adatokat, és beszúrja egy meglévő táblába.

SQL INSERT INTO SELECT utasítás,

INSERT INTO SELECT utasítás kiválasztja az adatokat egy táblából, és beilleszti egy meglévő táblába. A céltábla egyetlen sora sem módosul.

SQL INSERT INTO SELECT, Szintaxis

Az összes oszlopot átmásolhatjuk egyik táblából egy másik meglévő táblába:

INSERT INTO táblázat2
VÁLASSZON Asztal 1;

Vagy csak a kívánt oszlopokat másolhatjuk át egy másik, meglévő táblába:

INSERT INTO táblázat2
(oszlop_neve(i))
KIVÁLASZTÁS oszlop_neve(i)
TÓL TŐL Asztal 1;

Demo adatbázis

Ebben az oktatóanyagban a jól ismert Northwind adatbázist fogjuk használni.

Az alábbiakban egy válogatás található a „Vásárlók” táblázatból:

Felhasználói azonosítóÜgyfél NeveA kapcsolattartó személyCímvárosIrányítószámOrszág
1 Alfred Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Németország
2 Ana Trujillo Emparedados és helados Ana Trujillo Avda. de la Constitucion 2222 Mexikó D.F. 05021 Mexikó
3 Antonio Moreno Taqueria Antonio Moreno Mataderos 2312 Mexikó D.F. 05023 Mexikó

És egy válogatás a "Beszállítók" táblázatból:

SQL INSERT INTO SELECT, Példák

Csak néhány oszlop átmásolása a „Beszállítók” közül a „Vásárlók” közé:

Csak német beszállítókat másoljon az „Ügyfelek” mappába.

Mi az INSERT INTO?

Az adatbázis-rendszerek fő célja az adatok tárolása a táblákban. Az adatokat általában az adatbázis tetején futó alkalmazási programok szolgáltatják. Ennek érdekében az SQL rendelkezik az INSERT paranccsal, amely az adatok táblában való tárolására szolgál. Az Az INSERT parancs új sort hoz létre táblázatban az adatok tárolására.

Alapszintaxis

Nézzük meg az SQL INSERT parancs alapvető szintaxisát az alábbiakban.

INSERT INTO `tábla_neve`(oszlop_1,oszlop_2,...) ÉRTÉKEK (érték_1,érték_2,...);

  • INSERT INTO `tábla_neve` az a parancs, amely utasítja a MySQL szervert, hogy adjon hozzá új sort a `tábla_neve` nevű táblához.
  • (oszlop_1, oszlop_2,...) megadja az új sorban frissítendő oszlopokat
  • ÉRTÉKEK (érték_1,érték_2,...) megadja az új sorba hozzáadandó értékeket

Az új táblázatba beillesztendő adatértékek megadásakor a különböző adattípusok kezelésekor a következőket kell figyelembe venni.

  • Karakterlánc adattípusok- az összes karakterlánc-értéket idézőjelek közé kell tenni.
  • Numerikus adattípusok- minden numerikus értéket közvetlenül kell megadni anélkül, hogy szimpla vagy dupla idézőjelek közé kellene tenni őket.
  • Dátum adattípusok- a dátumértékeket idézőjelbe helyezze "ÉÉÉÉ-HH-NN" formátumban.

Példa:

Tegyük fel, hogy a következő listánk van azokról az új könyvtári tagokról, amelyeket fel kell venni az adatbázisba.

Teljes nevek Születési dátum neme valódi cím postázási cím elérhetőség Email cím
Leonard Hofstadter Férfi Woodcrest 0845738767
Sheldon Cooper Férfi Woodcrest 0976736763
Rajesh Koothrappali Férfi fairview 0938867763
Leslie Winkle 14/02/1984 Férfi 0987636553
Howard Wolowitz 24/08/1981 Férfi déli Park P.O. 4563. doboz 0987786553

Lets" INSERT adatokat egyesével. Kezdjük Leonard Hofstadterrel. A kapcsolati számot numerikus adattípusként kezeljük, és nem teszünk idézőjelbe.

INSERT INTO `tagok` (`teljes_nevek`,`nem`,`fizikai_cím`,`kapcsolati_szám`) ÉRTÉKEK ("Leonard Hofstadter","Férfi","Woodcrest",0845738767);

A fenti parancsfájl végrehajtása kidobja a 0-t Leonard kapcsolati számából, mivel az értéket a rendszer numerikus értékként kezeli, és az elején lévő nullát (0) kihagyja, mivel nem szignifikáns.

Az ilyen problémák elkerülése érdekében az értéket idézőjelek közé kell tenni az alábbiak szerint -

INSERT INTO `tagok` (`teljes_nevek`,`nem`,`fizikai_cím`,`kapcsolati_szám`) VALUES ("Sheldon Cooper", "Férfi", "Woodcrest", "0976736763");

A fenti esetben a nulla(0) nem kerül eldobásra

Az oszlopok sorrendjének megváltoztatása nincs hatással az INSERT lekérdezésre, amíg a megfelelő értékeket a megfelelő oszlopokhoz rendelték hozzá.

Az alább látható lekérdezés a fenti pontot szemlélteti.

INSERT INTO `tagok` (`kapcsolati_szám`,`nem`,`teljes_nevek`,`fizikai_cím`)VALUES ("0938867763","Férfi","Rajesh Koothrappali","Woodcrest");

A fenti lekérdezések kihagyták a születési dátum oszlopot, alapértelmezés szerint a MySQL NULL értékeket szúr be az INSERT lekérdezésben kihagyott oszlopokba.

Most illesszük be Leslie rekordját, amely tartalmazza a születési dátumot. A dátum értékét idézőjelek közé kell tenni az „ÉÉÉÉ-HH-NN” formátumban.

INSERT INTO `tagok` (`teljes_nevek`,`születési_dátum`,`nem`,`fizikai_cím`,`kapcsolati_szám`) ÉRTÉKEK ("Leslie Winkle","1984-02-14","Férfi","Woodcrest", " 0987636553");

A fenti lekérdezések mindegyike megadta az oszlopokat, és leképezte azokat az insert utasításban szereplő értékekre. Ha a táblázat ÖSSZES oszlopához megadunk értékeket, akkor az oszlopokat kihagyhatjuk a beszúrási lekérdezésből.

INSERT IN TO `members` VALUES (9 "Howard Wolowitz", "Férfi", "1981-08-24", "SouthPark", "P.O. Box 4563", "0987786553", "lwolowitzemail.me");

Használjuk most a SELECT utasítást a Members tábla összes sorának megtekintéséhez. SELECT * FROM `members`;

Tagsági számteljes_neveknemeszületési dátumvalódi címpostázási címkapcsolati_számemail
1 Janet JonesNői21-07-1980 4. számú első utcai telekPrivát táska0759 253 542 Ez az e-mail cím a spamrobotok elleni védelem alatt áll. A megtekintéséhez engedélyezni kell a JavaScriptet.
2 Janet Smith JonesNői23-06-1980 Melrose 123NULLANULLAEz az e-mail cím a spamrobotok elleni védelem alatt áll. A megtekintéséhez engedélyezni kell a JavaScriptet.
3 Robert PhilFérfi12-07-1989 3. utca 34NULLA12345 Ez az e-mail cím a spamrobotok elleni védelem alatt áll. A megtekintéséhez engedélyezni kell a JavaScriptet.
4 Gloria WilliamsNői14-02-1984 2. utca 23NULLANULLANULLA
5 Leonard HofstadterFérfiNULLAWoodcrestNULLA845738767 NULLA
6 Sheldon CooperFérfiNULLAWoodcrestNULLA976736763 NULLA
7 Rajesh KoothrappaliFérfiNULLAWoodcrestNULLA938867763 NULLA
8 Leslie WinkleFérfi14-02-1984 WoodcrestNULLA987636553 NULLA
9 Howard WolowitzFérfi24-08-1981 déli ParkP.O. 4563. doboz987786553 Ez az e-mail cím a spamrobotok elleni védelem alatt áll. A megtekintéséhez engedélyezni kell a JavaScriptet.

Figyelje meg, hogy Leonard Hofstadter telefonszáma nullát (0) csökkent a kapcsolati számból. A többi telefonszámon az elején nem esett a nulla (0).

Beszúrás egy másik táblázatból egy táblázatba

Az INSERT paranccsal egy másik táblából is beszúrhatunk adatokat egy táblába. Az alapvető szintaxis az alábbiak szerint látható.

INSERT INTO tábla_1 SELECT * FROM tábla_2;

Lássunk most egy gyakorlati példát, bemutatás céljából létrehozunk egy áltáblázatot a filmkategóriákhoz. Az új kategóriák táblázatát kategóriák_archívumnak nevezzük. Az alább látható szkript hozza létre a táblázatot.

TÁBLÁZAT LÉTREHOZÁSA `categories_archive` (`category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`)

A táblázat létrehozásához futtassa a fenti szkriptet.

Most illesszük be a kategóriatáblázat összes sorát a kategóriaarchívum táblájába. Az alábbi szkript segít ebben.

INSERT INTO `categories_archive` SELECT * FROM `kategóriák`;

A fenti parancsfájl végrehajtása a kategóriatáblázat összes sorát beszúrja a kategóriaarchívum táblájába. Vegye figyelembe, hogy a táblaszerkezeteknek azonosaknak kell lenniük ahhoz, hogy a szkript működjön. Robusztusabb szkript az, amely a beszúrási táblában lévő oszlopneveket leképezi az adatokat tartalmazó táblázat oszlopneveire.

Az alább látható lekérdezés a használatát mutatja be.

INSERT INTO `categories_archive`(kategória_azonosítója,kategória_neve,megjegyzések) SELECT category_id,category_name,remarks FROM `categories`;

A SELECT lekérdezés végrehajtása

SELECT * FROM `categories_archive`

az alábbi eredményeket adja.

kategória_azonosítójakategória névmegjegyzések
1 KomédiaFilmek humorral
2 Romantikusszerelmi történetek
3 epikustörténet ókori filmek
4 BorzalomNULLA
5 tudományos-fantasztikusNULLA
6 KrimiNULLA
7 akcióNULLA
8 romantikus komédiaNULLA
9 RajzfilmekNULLA
10 RajzfilmekNULLA

Összegzés

  • Az INSERT parancs új adatok hozzáadására szolgál egy táblához
  • A dátumot és a karakterlánc értékeit idézőjelek közé kell tenni.
  • A számértékeket nem kell idézőjelbe tenni.
  • Az INSERT paranccsal adatok szúrhatók be egyik táblából a másikba.

Az INSERT utasítás új rekordokat szúr be egy táblába. Ebben az esetben az oszlopértékek lehetnek szó szerinti konstansok, vagy lehetnek egy segédlekérdezés eredménye. Az első esetben külön INSERT utasítást használunk az egyes sorok beszúrására; a második esetben annyi sor kerül beszúrásra, amennyit az allekérdezés visszaadott.

Az operátor szintaxisa a következő:

    INSERT INTO[(,...)]

    (ÉRTÉKEK(,…) )

  1. | ( ALAPÉRTELMEZETT ÉRTÉKEK )

Amint az a bemutatott szintaxisból látható, az oszlopok listája nem kötelező (a szintaxisleírásban a szögletes zárójelek jelzik ezt). Ha hiányzik, a beszúrt értékek listájának teljesnek kell lennie, azaz a táblázat összes oszlopához meg kell adni az értékeket. Az értékek sorrendjének meg kell egyeznie a CREATE TABLE utasításban megadott sorrenddel ahhoz a táblázathoz, amelybe a sorokat beilleszti. Ezenkívül ezeknek az értékeknek ugyanolyan adattípusúaknak kell lenniük, mint az oszlopoknak, amelyekbe be vannak írva. Példaként fontolja meg egy sor beszúrását a terméktáblázatba, amelyet a következő CREATE TABLE utasítás hozott létre:

    CREATE TABLE termék

    készítő karakter (1) NOT NULL,

    model varchar(4) NOT NULL,

    írja be a varchar(7)-et NOT NULL

Ehhez a táblázathoz legyen kötelező hozzáadni a B gyártó 1157-es PC-modelljét. Ezt a következő utasítással tehetjük meg:

    INSERT INTO Product

    ÉRTÉKEK ("B" , 1157 , "PC" );

Ha megadja az oszlopok listáját, megváltoztathatja azok sorrendjének „természetes” sorrendjét:

    INSERT INTO Termék (típus, modell, gyártó)

    ÉRTÉKEK ("PC" , 1157 , "B" );

Úgy tűnik, hogy ez egy teljesen felesleges funkció, ami csak még bonyolultabbá teszi a tervezést. Azonban akkor nyer, ha az oszlopok alapértelmezett értékekkel rendelkeznek. Tekintsük a következő táblázatszerkezetet:

    TÁBLÁZAT LÉTREHOZÁSA termék_D

    készítő karakter (1) NULL,

    modell varchar(4) NULL ,

    típus varchar (7) NOT NULL ALAPÉRTELMEZETT "PC"

Vegye figyelembe, hogy itt az összes oszlop értéke alapértelmezett értékkel rendelkezik (az első kettő NULL, az utolsó oszlop pedig a PC típusa). Most írhatnánk:

    INSERT INTO Product_D(modell, gyártó)

    ÉRTÉKEK(1157 , "B" );

Ebben az esetben egy sor beszúrásakor a hiányzó értéket az alapértelmezett érték, a PC helyettesíti. Vegye figyelembe, hogy ha nincs alapértelmezett érték megadva egy oszlophoz a CREATE TABLE utasításban, és nincs megadva NOT NULL megszorítás, amely tiltja a NULL használatát az adott táblázatoszlopban, akkor a NULL alapértelmezett értékét feltételezi.

Felmerül a kérdés: lehetséges-e nem megadni az oszlopok listáját, és ennek ellenére az alapértelmezett értékeket használni? A válasz igen. Ehhez ahelyett, hogy kifejezetten megadna egy értéket, használja a lefoglalt DEFAULT szót:

    INSERT INTO Product_D

    ÉRTÉKEK ("B" , 1158 , ALAPÉRTÉKELÉS );

Mivel minden oszlopnak alapértelmezett értéke van, egy sor alapértelmezett értékekkel történő beszúrásához a következőt írhatja:

    INSERT INTO Product_D

    ÉRTÉKEK (ALAPÉRTELMEZETT , ALAPÉRTELMEZETT , ALAPÉRTELMEZETT ) ;

Van azonban erre az esetre egy speciális DEFAULT VALUES konstrukció (lásd az operátor szintaxisát), amellyel a fenti operátor átírható a következőre:

    INSERT INTO Product_D ALAPÉRTELMEZETT ÉRTÉKEK ;

Vegye figyelembe, hogy amikor beszúr egy sort a táblázatba, minden korlátozás érvényesül ezt a táblázatot. Ezek lehetnek elsődleges kulcs kényszerek ill egyedi index, ellenőrizze a CHECK típusú megszorításokat, a hivatkozási integritási megszorításokat. Bármely korlátozás megsértése esetén a sor beillesztése elutasításra kerül. Tekintsük most egy segédlekérdezés használatának esetét. Tegyük fel, hogy a Termék_D táblába szeretnénk beszúrni a Termék tábla összes modelljéhez kapcsolódó sorát személyi számítógépek(type='PC'). Mivel a szükséges értékek már megtalálhatók néhány táblázatban, a beszúrt sorok manuális kialakítása egyrészt nem hatékony, másrészt beviteli hibákat is megengedhet. Egy segédlekérdezés az alábbi problémákat oldja meg:

Ebben az esetben indokolt a "*" szimbólum használata a részlekérdezésben, mivel az oszlopok sorrendje mindkét tábla esetében azonos. Ha ez nem így lenne, akkor vagy az INSERT utasításban, vagy az allekérdezésben, vagy mindkettőben egy oszloplistát kell alkalmazni, amely megfelel az oszlopok sorrendjének:

Itt, mint korábban, nem minden oszlopot adhat meg, ha a meglévő alapértelmezett értékeket szeretné használni, például:

Ebben az esetben a Product_D tábla típusoszlopa az összes beszúrt sornál az alapértelmezett PC értékre lesz beállítva.

Ne feledje, hogy predikátumot tartalmazó részlekérdezés használatakor csak azok a sorok kerülnek beszúrásra, amelyeknél az állítmány értéke IGAZ (nem UNKNOWN !). Más szóval, ha a Termék tábla típusoszlopa nullázható lenne, és ez az érték több sorban szerepel, akkor ezek a sorok nem kerülnek be a Product_D táblába.

Az egyetlen sor INSERT utasításba történő beszúrásának korlátozása érdekében, amikor sorkonstruktort használunk egy VALUES záradékban, egy mesterséges trükk az, ha olyan allekérdezést használunk, amely egy sort alkot UNION ALL záradékkal. Tehát ha több sort kell beszúrnunk egyetlen INSERT utasítással, a következőket írhatjuk:

    INSERT INTO Product_D

    SELECT "B" AS gyártó, 1158 AS modell, "PC" AS típus

    UNION ALL

    SELECT "C", 2190, "Laptop"

    UNION ALL

    KIVÁLASZTÁS "D" , 3219 , "Nyomtató" ;

Az UNION ALL használata előnyösebb, mint az UNION, még akkor is, ha garantált, hogy nem lesznek ismétlődő sorok, mert ebben az esetben nem történik meg a duplikációk ellenőrzése.

Megjegyzendő, hogy több sor beszúrása a string konstruktor segítségével már megvalósult A Microsoft Corporation által kifejlesztett relációs adatbázis-kezelő rendszer (DBMS).A strukturált lekérdezési nyelv egy általános célú számítógépes nyelv, amelyet relációs adatbázisokban lévő adatok létrehozására, módosítására és kezelésére használnak. SQL szerver 2008. Ennek a lehetőségnek a birtokában az utolsó lekérdezés átírható a következőképpen:

    INSERT A termék_D ÉRTÉKEIBE

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

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

A korábban tárgyalt SELECT utasításon kívül a Data Manipulation Language (DML) további három utasítást tartalmaz: INSERT, UPDATE és DELETE. A SELECT utasításhoz hasonlóan ez a három utasítás táblákon vagy nézeteken működik. Ez a cikk az INSERT utasítással foglalkozik, a másik két utasítás pedig a következő cikkben lesz tárgyalva.

INSERT nyilatkozat sorokat (vagy sorrészeket) szúr be egy táblázatba. Van két különböző formák ezt az utasítást:

BESZÁLLÍTÁS tab_name [(col_list)] ALAPÉRTELMEZETT ÉRTÉKEK | ÉRTÉKEK (( ALAPÉRTELMEZETT | NULL | kifejezés ) [ ,...n]) INSERT INTO lap_neve | view_name [(col_list)] (select_statement | execute_statement) Szintaxis konvenciók

Az utasítás első formája lehetővé teszi egy sor (vagy annak egy részének) beszúrását a táblázatba. Az INSERT utasítás második formája pedig lehetővé teszi egy SELECT utasítás eredményhalmazának vagy egy EXECUTE utasítással végrehajtott tárolt eljárásnak a táblába történő beszúrását. A tárolt eljárásnak vissza kell adnia a táblázatba beillesztendő adatokat. Az INSERT utasítással együtt használva a SELECT utasítás választhat értékeket egy másik vagy ugyanabból a táblából, amelybe az adatokat beszúrja, amennyiben a megfelelő oszlopok adattípusai kompatibilisek.

Mindkét űrlap esetében az egyes beszúrt értékek adattípusának kompatibilisnek kell lennie a megfelelő táblázatoszlop adattípusával. Minden karakterláncot és ideiglenes adatot idézőjelbe kell tenni; A numerikus értékeket nem kell idézőjelbe tenni.

Egysoros betét

Az INSERT utasítás mindkét formája esetén az oszlopok explicit listája nem kötelező. Az oszloplista hiánya egyenértékű a táblázat összes oszlopának megadásával.

DEFAULT VALUES paraméter beszúrja az alapértelmezett értékeket az összes oszlophoz. A TIMESTAMP adattípussal vagy IDENTITY tulajdonsággal rendelkező oszlopok alapértelmezés szerint a rendszer által automatikusan generált értékekkel kerülnek beszúrásra. Más adattípusok oszlopai esetén a megfelelő nem nulla alapértelmezett érték kerül beillesztésre, ha van ilyen, vagy NULL, ha van ilyen. Ha a null értékek nem engedélyezettek egy oszlophoz, és nincs alapértelmezett érték megadva az oszlophoz, az INSERT utasítás meghiúsul, és megjelenik egy megfelelő üzenet.

A következő példa sorokat szúr be a SampleDb adatbázis Employee táblájába, bemutatva, hogyan lehet az INSERT utasítással kis mennyiségű adatot beszúrni az adatbázisba:

HASZNÁLATA SampleDb; INSERT INTO Munkavállalói ÉRTÉKEK(34990, "Andrey", "Batonov", "d1"); INSERT INTO Munkavállalói ÉRTÉKEK(38640, "Aleksej", "Vasin", "d3");

Van két különböző utakértékek beszúrása egy új sorba. Az alábbi példában az INSERT utasítás kifejezetten használja kulcsszó NULL és beszúrja a NULL értéket a megfelelő oszlopba:

HASZNÁLATA SampleDb; INSERT INTO Munkavállalói ÉRTÉKEK(34991, "Andrey", "Batonov", NULL);

Ha értékeket szeretne beszúrni egy táblázat egyes (de nem az összes) oszlopába, általában kifejezetten meg kell adnia ezeket az oszlopokat. A meg nem adott oszlopoknak NULL értékeket kell engedélyezniük, vagy alapértelmezett értékkel kell rendelkezniük.

HASZNÁLATA SampleDb; INSERT INTO Munkavállaló(Id, Keresztnév, Vezetéknév) ÉRTÉKEK (34992, "Andrey", "Batonov");

Az előző két példa egyenértékű. Az Employee táblában az egyetlen oszlop, amely null értékeket engedélyez, a DepartmentNumber oszlop, és az összes többi oszlop esetében ezt az értéket a NOT NULL záradék tiltotta a CREATE TABLE utasításban.

Értékrend ben mondat ÉRTÉKEK Az INSERT utasítások eltérhetnek a CREATE TABLE utasításban megadott sorrendtől. Ebben az esetben a sorrendjüknek meg kell egyeznie az oszloplistában a megfelelő oszlopok sorrendjével. A következő példa az adatok eredetitől eltérő sorrendben történő beszúrására:

HASZNÁLATA SampleDb; INSERT INTO Employee(Részlegszám, Vezetéknév, Id, Keresztnév) ÉRTÉKEK ("d1", "Batonov", 34993, "Andrey");

Több sor beszúrása

Az INSERT utasítás második formája beszúr egy vagy több, az allekérdezés által kiválasztott sort a táblába. Az alábbi példa bemutatja, hogyan lehet sorokat beszúrni egy táblázatba az INSERT utasítás második formájával. Ebben az esetben egy lekérdezést hajtanak végre a Moszkvában található részlegek számának és nevének kiválasztásához, és a kapott készlet betöltését egy korábban létrehozott új táblázatba.

A fenti példában létrehozott új MoscowDepartment tábla oszlopai ugyanazok, mint meglévő táblázat Osztály, kivéve a hiányzó Hely oszlopot. Az INSERT utasításban található részlekérdezés kijelöli a Department tábla összes sorát, amelynél a Hely oszlop értéke Moszkva, majd beszúródik a lekérdezés elején létrehozott új táblába.

Az alábbi példa egy másik módot mutat be sorok beszúrására egy táblázatba az INSERT utasítás második formájával. Ebben az esetben egy lekérdezés kerül végrehajtásra a személyzeti számok, a projektszámok és a projekt kezdési dátumának kiválasztásához a p2 projekten dolgozó összes "menedzser" beosztású alkalmazott számára, majd betölti a kapott halmazt egy új, az elején létrehozott táblába. a lekérdezésről:

HASZNÁLATA SampleDb; CREATE TABLE Manager Team(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";

Mielőtt az INSERT utasítással beszúrta volna a sorokat, a MoscowDepartment és a ManagerTeam táblák (a fenti példákban) üresek voltak. Ha a tábla már létezett és adatsorokat tartalmazott, akkor új sorok kerülnek hozzáadásra.