SQLShack (Magyar)
Ez a cikk az SQL INSERT INTO SELECT utasítással foglalkozik szintaxisával, példáival és felhasználási eseteivel együtt.
Korábbi cikkemben az SQL SELECT INTO Statement a következő feladatokat tártuk fel.
- Hozzon létre egy SQL-táblát menet közben, miközben beilleszti a megfelelő adattípusú rekordokat
- Az SQL SELECT INTO használatával rekordokat illeszthet be egy adott FileGroupba
- Nem használhatjuk adatok beillesztésére egy meglévő táblába
Az INSERT INTO SELECT utasítás
A rekordokat rendszeres adatbázis-tevékenységként szeretnénk beszúrni. Adatokat közvetlenül beilleszthetünk olyan ügyféleszközökkel, mint az SSMS, az Azure Data Studio, vagy közvetlenül egy alkalmazásból. Az SQL-ben az SQL INSERT INTO utasítást használjuk rekordok beillesztésére.
Az INSERT INTO szintaxisa
Amint beillesztünk adatokat a táblába, a következő szintaxist használhatjuk SQL INSERT INTO utasítás.
1
2
|
INSERT INTO tábla_neve (1. oszlop, 2. oszlop ….)
ÉRTÉKEK (érték1, érték2, …);
|
Ha az összes oszlopértéket megadtuk a táblázat oszlopának megfelelően megrendeléseket, nem kell megadnunk az oszlopneveket. Közvetlenül beilleszthetünk rekordokat a táblába.
1
2
|
INSERT INTO tábla_neve
ÉRTÉKEK (érték1, érték2, …);
|
Hozzunk létre egy táblázatmintát, és adatot illesszünk bele .
1
2
3
4
|
Táblázat létrehozása Alkalmazottak
(ID INT,
Név VARCHAR (20)
);
|
Adatokat beszúrhatunk a következő lekérdezések segítségével. Mindkét lekérdezés érvényes az adatok beillesztésére.
1
2
|
Beszúrás az alkalmazottak (azonosító, név) értékek (1, “raj”)
Beszúrás az alkalmazottak értékei (2, “raj”)
|
Nem oszthatunk be adatokat oszlopnevek megadása nélkül, ha van az adatbeillesztés és az oszlopértékek sorrendje eltér. A következő hibaüzenetet kaphatjuk.
- Msg 213, 16. szint, 1. állapot, 6. sor
Az oszlop neve vagy a megadott értékek száma nem egyezési táblázat meghatározása.
- Msg 245, 16. szint, 1. állapot, 6. sor
Az átalakítás sikertelen volt, amikor a „raj” varchar értéket int adattípusra konvertálták.
Ebben a példában az SQL INSERT INTO utasítást használjuk az értékek közvetlen megadásával egy utasításban. Tegyük fel, hogy egy másik táblából szeretnénk adatokat beszúrni. Továbbra is használhatjuk az SQL INSERT INTO utasítást egy select utasítással. Fedezzük fel ezt a következő szakaszban.
INSERT INTO SELECT utasítás szintaxis
Más SQL táblákból származó adatokat beilleszthetünk egy táblába a következő INSERT INTO SELECT utasítással.
1
2
3
|
INSERT INTO1 táblázat (col1, col2, col3,…)
SELECT1, col2, col3,…
A 2. táblázatból
|
Ez a lekérdezés a következő feladatokat hajtja végre:
- Először kiválaszt egy rekordot egy táblából (utasítás kiválasztása).
- Ezután beszúr egy táblába, amelyet az INSERT INTO
- Megjegyzés: Az oszlopszerkezetnek meg kell egyeznie a SELECT utasítás által visszaadott oszlop és a céltábla között.
INSERT INTO SELECT példák
1. példa: adatot szúr be a forrástábla összes oszlopából a céltáblába
A következő rekordok vannak egy meglévő Employee tábla.
Hozzunk létre egy másik táblázatot az Ügyfelek számára a következő lekérdezéssel.
1
2
3
4
|
Táblázat létrehozása Ügyfelek
(ID INT,
Név VARCHAR (20)
);
|
Az Alkalmazottak tábla összes rekordját be akarjuk illeszteni a az Ügyfelek táblázat. Ehhez használhatjuk az SQL INSERT INTO SELECT utasítást.
1
2
3
|
INSERT INTO Customer
SELECT *
alkalmazottaktól;
|
Minden rekordot beszúr az Ügyfelek táblába. Ellenőrizhetjük, hogy az Ügyfelek táblázat rekordjai hasonlóak-e az Alkalmazottak táblához.
Ebben a példában rekordokat illesztettünk be oszlopok az Ügyfelek táblához.
2. példa: Sorok beszúrása forrásról céltáblára oszlopnevek megadásával
Eldobjuk a meglévő Ügyfelek táblázatot, mielőtt továbblépnénk. Most egy további IDENTITY oszlopot tartalmazó táblázatot szeretnénk létrehozni. Az IDENTITY oszlop automatikusan beszúrja az identitásértékeket egy táblázatba. Hozzáadtunk egy Város oszlopot is, amely megengedi a NULL értékeket
1
2
3
4
5
6
|
LÉTREHOZÁS TÁBLÁZAT Ügyfelek
(ID INT IDENTITÁS (1, 1),
Emp_ID INT,
Név VARCHAR (20),
Város VARCHAR (20) NULL,
);
|
Az INSERT INTO SELECT utasítást nem használhatjuk a fenti példa. Ha megpróbáljuk futtatni ezt a kódot, hibaüzenetet kapunk.
1
2
3
|
BEÉPÍTÉS Vevőkbe
SELECT *
az alkalmazottaktól ;
|
Ebben az esetben meg kell adnunk az oszlop nevét az INSERT INTO utasítással.
1
2
3
|
INSERT INTO vásárlók (Emp_ID, név)
SELECT *
FROM alkalmazottaktól;
|
Az Ügyfelek táblában van egy további oszlopunk a NULL értékeket engedélyez. Futtassunk egy Select on Customers táblát. A következő képernyőképen NULL értékeket láthatunk a Város oszlopban.
Tegyük fel, hogy egy másik oszlop van a forrás táblában. Az INSERT INTO SELECT utasítás oszlopneveinek megadásával továbbra is beilleszthet rekordokat a céltáblába. Az adatok beillesztéséhez megfelelő adattípusra van szükségünk. Nem illeszthet be varchar oszlopadatokat egy INT oszlopba.
Adjon hozzá új oszlopot az Alkalmazottak táblához az ALTER TABLE utasítás használatával.
1
2
|
ALTER TÁBLÁZAT Alkalmazottak
ADD Ország varchar (50);
|
Frissítse a táblázatrekordokat India országértékével.
1
|
Alkalmazottak frissítése Ország = “India”
|
Most futtassa újra az INSERT INTO SELECT utasítás. Észreveheti, hogy az oszlopnevek megadása helyett a SELECT * -t használjuk.
1
2
3
|
BEHELYEZÉS Vevőkbe (Emp_ID, Név)
SELECT *
FROM alkalmazottaktól;
|
A következő hibaüzenetet kapjuk. Ez a hiba a forrástábla és a céltábla közötti oszlopok eltérése miatt következik be.
A következő lekérdezés segítségével feltérképezhetjük az oszlopot a forrás és a cél táblázat között.
1
2
3
4
5
6
|
BEHELYEZÉS Vevőkbe
(Emp_ID,
Név
)
SELECT ID, Név
FROM alkalmazottaktól;
|
3. példa: Helyezzen felső sorokat az INSERT INTO SELECT használatával utasítás
Tegyük fel, hogy a Top N sort szeretnénk beszúrni a forrás táblából a céltáblába. Használhatjuk a Top záradékot az INSERT INTO SELECT utasításban. A következő lekérdezésbe beilleszti az Alkalmazottak tábla első 1 sorát az Ügyfelek táblába.
1
2
3
4
5
6
|
FELSŐ (1) SZúrja be az ügyfelek közé
(Emp_ID,
Név
)
SELECT Azonosító, név
FROM alkalmazottaktól;
|
4. példa: Beszúrás mindkét oszlop és definiált érték segítségével az SQL INSERT INTO SELECT utasítás
A korábbi példákban vagy meghatározott értékeket adtunk meg az INSERT INTO utasításban, vagy pedig az INSERT INTO SELECT parancsot használtuk a rekordok beolvasására a forrás táblából és a céltáblába való beillesztéshez.
Mind az oszlopokat, mind a megadott értékeket kombinálhatjuk az SQL INSERT INTO SELECT utasításban.
A következő oszlopok vannak az Ügyfelek és alkalmazottak táblában. Korábban nem illesztettünk be értékeket a Város oszlopba. Az Employee táblázatban sincsenek meg a szükséges értékek. Pontos értéket kell megadnunk a Város oszlop számára.
A következő lekérdezésben megadtuk a város értékét oszlopot, míg a többi értéket beillesztettük az Alkalmazottak táblából.
1
2
|
FELSŐ (1) BEÁLLÍTÁS Vevőkbe (Emp_ID, Név, Város)
SELECT ID, Név, “Delhi” Alkalmazottaktól;
|
A következő lekérdezésben láthatjuk, hogy beszúr egy sor (a Top (1) záradék miatt) a Város oszlop értékével együtt.
5. példa: INSERT INTO SELECT utasítás csatlakozási záradékkal több tábla adatainak megszerzéséhez
JOIN záradékot használhatunk adatokhoz több táblából. Ezeket a táblázatokat összekapcsoljuk az ON záradékban megadott feltételekkel. Tegyük fel, hogy több táblából szeretnénk adatokat szerezni és beilleszteni egy táblába.
Ebben a példában az AdventureWorks2017 adatbázist használom. Először hozzon létre egy új táblázatot a megfelelő adattípusokkal.
Ennek a táblának tartalmaznia kell egy több tábla összekapcsolási lekérdezés kimenetéből származó rekordokat. Hajtsa végre a következő lekérdezést az adatok beszúrásához a HumanResources.EmployeeData táblába.
6. példa: INSERT INTO SELECT utasítás common table kifejezés
A Common Table Expressions (CTE) használatával egyszerűsítjük a több oszlopból származó összetett összekapcsolást. Az előző példában a JOINS-t egy Select utasításban használtuk adatok beillesztésére egy SQL-táblába. Ebben a részben átírjuk a lekérdezést a CTE-vel.
A CTE-ben két részre oszthatjuk a kódot.
- A CTE-t egy WITH záradékkal definiáljuk a SELECT, INSERT, UPDATE, DELETE utasítás előtt
- Miután meghatároztuk a CTE-t, hivatkozhatunk a CTE-re, mint egy relációs SQL-táblára.
Hajtsa végre a következő kódot az adatok beszúrásához egy CTE használatával. : INSERT INTO SELECT utasítás tábla változóval
A tábla változókat hasonlóan használjuk, mint egy ideiglenes táblát. A tábla adattípusával deklarálhatjuk őket. Ez a tábla használható olyan tevékenységek végrehajtására az SQL Server rendszerben, ahol nincs szükségünk állandó táblára. A következő lekérdezést három részre oszthatja.
- Hozzon létre egy SQL táblázat változót a megfelelő oszlop adattípusokkal. A tábla változóhoz a TABLE adattípust kell használnunk. >
Következtetés
Ebben a cikkben az INSERT INTO SELECT utasítás felhasználási eseteit tárjuk fel. Remélem, hasznosnak találta ezt a cikket. Nyugodtan adjon visszajelzést az alábbi megjegyzésekben.
- Szerző
- Legutóbbi bejegyzések
MCSA tanúsítvánnyal és az indiai Gurgaonban lévő Microsoft Certified Trainer, 13 éves tapasztalattal, Rajendra különféle nagyvállalatoknál dolgozik, elsősorban a teljesítmény optimalizálására, a monitorozásra, a magas rendelkezésre állásra, valamint a katasztrófa utáni helyreállítási stratégiákra és megvalósításra. Több száz hiteles cikk szerzője az SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git és kapcsolódó technológiákról, amelyeket eddig több mint 10 millió olvasó nézett meg.
Az egyik legnagyobb ingyenes online cikkgyűjtemény létrehozója egyetlen témában, az SQL Server Always On Available Groups 50 részből álló sorozatával. Az SQL Server közösséghez való hozzájárulása alapján különféle díjakkal ismerték el, köztük a rangos “Az év legjobb szerzője” címet folyamatosan 2020-ban és 2021-ben az SQLShacknél.
Raj mindig érdekli az új kihívásokat, így ha tanácsadásra van szüksége segítséget nyújt az írásaiban szereplő témákban, a [email protected] címen érhető el. Rajendra Gupta összes bejegyzésének megtekintéseRajendra Gupta legújabb üzenetei (lásd az összeset)- Kisebb és nagyobb verzió frissítések az AWS számára RDS SQL Server – 2021. január 29. , 2021