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 Neve | A kapcsolattartó személy | Cím | város | Irányítószám | Orszá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ám | teljes_nevek | neme | születési dátum | valódi cím | postázási cím | kapcsolati_szám | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Női | 21-07-1980 | 4. számú első utcai telek | Privát táska | 0759 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 Jones | Női | 23-06-1980 | Melrose 123 | NULLA | NULLA | Ez az e-mail cím a spamrobotok elleni védelem alatt áll. A megtekintéséhez engedélyezni kell a JavaScriptet. |
3 | Robert Phil | Férfi | 12-07-1989 | 3. utca 34 | NULLA | 12345 | Ez az e-mail cím a spamrobotok elleni védelem alatt áll. A megtekintéséhez engedélyezni kell a JavaScriptet. |
4 | Gloria Williams | Női | 14-02-1984 | 2. utca 23 | NULLA | NULLA | NULLA |
5 | Leonard Hofstadter | Férfi | NULLA | Woodcrest | NULLA | 845738767 | NULLA |
6 | Sheldon Cooper | Férfi | NULLA | Woodcrest | NULLA | 976736763 | NULLA |
7 | Rajesh Koothrappali | Férfi | NULLA | Woodcrest | NULLA | 938867763 | NULLA |
8 | Leslie Winkle | Férfi | 14-02-1984 | Woodcrest | NULLA | 987636553 | NULLA |
9 | Howard Wolowitz | Férfi | 24-08-1981 | déli Park | P.O. 4563. doboz | 987786553 | 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ója | kategória név | megjegyzések |
---|---|---|
1 | Komédia | Filmek humorral |
2 | Romantikus | szerelmi történetek |
3 | epikus | történet ókori filmek |
4 | Borzalom | NULLA |
5 | tudományos-fantasztikus | NULLA |
6 | Krimi | NULLA |
7 | akció | NULLA |
8 | romantikus komédia | NULLA |
9 | Rajzfilmek | NULLA |
10 | Rajzfilmek | NULLA |
Ö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ő:
| ( ALAPÉRTELMEZETT ÉRTÉKEK )
INSERT INTO[(,...)]
(É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.