Adatmanipuláció az SQL oktatóprogramban

Köszöntöm Önt az SQL oktatóprogram kilencedik leckéjénél, a ‘Manipulálja az adatait’ című leckénél, amely az SQL tanfolyam részét képezi. Ebben a leckében az SQL INSERT, UPDATE és DELETE utasításairól lesz szó.

Célkitűzések

A lecke végére képes lesz arra, hogy:

  • Magyarázza az INSERT utasítást és annak felhasználási módjait

  • Magyarázza az UPDATE lekérdezést példákkal

  • Magyarázza a DELETE utasítást példákkal

Az INSERT utasítás

Az INSERT utasítás az egyik a három utasítás közül, amely a so.SQL úgynevezett “adatmanipulációs nyelv” részéhez tartozik – ez az INSERT, UPDATE és DELETE.

Mindhárom utasítás lehetővé teszi az adatok megváltoztatását az adatbázisban, nem a struktúra, hanem a tartalom megváltoztatását. Ezek különböznek a SELECT utasítástól, amely csak az adatok kiolvasását teszi lehetővé az adatbázisból.

Az INSERT utasítás tehát új rekordok hozzáadását teszi lehetővé az adatbázis táblájához. Általában a táblázat végén lévő rekordok hozzáadására használják. Az egyik dolog, ami fontos minden INSERT végrehajtásakor, hogy az adatoknak meg kell felelniük az adatbázisban lévő összes szabálynak.

Megnézzük az alábbi képet:

Először nézzük meg példaként a Person táblát. Itt megvan az elsődleges kulcs. Ebben az adatbázisban az elsődleges kulcsokat korábban automatikus inkrementálásra állítottuk be az SQL-ünkben.

Az elsődleges kulcsot soha nem mi magunk szúrjuk be, ezt az adatbázisra bízzuk. Ezután van egy firstname és egy lastname, amelyek NOT NULL flaggel rendelkeznek. A tömör rombusz jelzi, hogy ezek a mezők kötelezőek, nem hagyhatjuk ki őket.

Az utolsó az időbélyeg, ami NOT NULL, ugyanakkor az alapértelmezett érték az aktuális időbélyeg. Tehát ez ismét automatikusan az aktuális időbélyeget állítja be, ha nem teszünk oda semmilyen dátumot.

Ha rekordokat kell beszúrnunk egy másik táblába, akkor meg kell győződnünk arról, hogy az adatok valóban léteznek. Tehát az ilyen típusú végponttól végpontig táblázatokban vagy bármilyen idegen kulcsos helyzetben mindig meg kell győződnünk arról, hogy az oda beszúrt adatok valóban érvényes értékeket képviselnek a hivatkozott táblákban.

Még egyszer használjuk kiindulópontként a Person táblánkat.

A Person tábla az elején az ábrán látható módon néz ki.

Lássuk az alábbi példát:

select * from person

insert into person

values (7, ‘Martin’, ‘Holzke’, ‘1980-05-05’, ‘xxx’, now());

Egyszerre csak egy táblázatba tudunk beszúrni. A SELECT függvénnyel összekapcsolhatjuk az adatokat, de hagyományosan egyszerre csak egy táblán végezhetünk adatmanipulációt.

Azt, amit a fenti példában figyelembe vettünk, az az ‘implicit insert’. Ez azt jelenti, hogy nem említjük meg azokat az oszlopokat, amelyeket fel akarunk tölteni, az összeset pontosan abban a sorrendben kell elhelyeznünk, ahogyan a táblázat létezik.

A beszúrás automatikusan illeszti az új értékeket a táblázat oszlopaihoz.

Megjegyzés: A beszúrási, frissítési és törlési utasításnál szem előtt kell tartanunk, hogy az adatbázisokban nincs visszavonás gomb. Tehát ha egyszer elküldtünk bármilyen értéket, az elraktározódik az adatbázisban.

Mivel az implicit beszúrást tanuljuk, meg kell adnunk az egyes oszlopok értékeit. Így az adatbázis táblázatának egy képernyőn való megtekintése óriási segítséget jelent.

Most, ha lefuttatjuk a fenti kódot, láthatjuk, hogy a táblázat frissült, és a beillesztett rekord a 7. pozícióban látható.

Az insert utasítás nem ad vissza semmit, ellentétben a SELECT utasítással. Ezért a képernyő utána üres lesz.

Következik. lássuk az explicit változatot, amelynek használata erősen ajánlott.

select * from person

insert into person (firstname, lastname, managerid, dob)

values (‘Martin’, ‘Holzke’, 5, ‘1980-05-05’);

A fenti példában csak a táblázat 4 értékét említettük. A többit alapértelmezés szerint feltöltjük. Amikor lefuttatjuk a lekérdezést, azt látjuk, hogy az új értékek bekerültek a táblázatba.

Az elsődleges kulcs értéke 9 és nem 8, mert ez az érték, mivel azt már használták valamikor az adatbázisban.

Ez biztonsági szempontból előnyös, mivel az elsődleges kulcs nem használható újra, és a hibák azonosíthatók.

Azt is látjuk, hogy a ‘created’ oszlop értéke az aktuális időbélyeggel kerül beállításra, amikor ezt kifejezetten nem említjük.

A továbbiakban, ha többszörös beszúrást szeretnénk végezni, akkor a fenti lekérdezést lefuttathatjuk, újra és újra, különböző értékekkel.

A többszörös beszúrást csak egy insert utasítással tudjuk elvégezni. Hozzáadjuk az új értékkészletet, amelyek vesszővel vannak elválasztva.

select * from person

insert into person (firstname, lastname, managerid, dob)

values (‘Martin’, ‘Holzke’, 5, ‘1980-05-05’),

(‘Fred’, ‘Flintstone’, 5, ‘1987-06-02’);

A következő kép a többszörös beszúrás esetén frissített táblázatot mutatja.

A következőkben egy beszúrást akarunk végezni az adatok kiválasztásával ugyanabból a táblából, így az adatokat másolhatjuk, ami igen hasznosnak bizonyul egy adatbázis feltöltéséhez. Például az adatmigráció során tulajdonképpen adatokat akarunk másolni egy adatbázison belül vagy különböző adatbázisok/táblák között.

A következő kód mutatja be az adatok másolását.

select * from person

insert into person (firstname, lastname, managerid, dob)

select concat(‘copy of’, firstname), lastname, managerid, dob

from person

where id>=10

A következő kép a táblázat értékeit mutatja, ha csak a select utasítást futtatjuk.

Most futtatjuk a lekérdezést az insert utasítással együtt. Ezt egyszerűen úgy tehetjük meg, hogy kiválasztjuk a futtatni kívánt utasításokat, és végrehajtjuk az adott lekérdezést.

A következő kép azt mutatja, hogyan változott a táblázat a fenti lekérdezés futtatása után.

Azt láthattuk tehát, hogy az értékek másolása az insert utasítással hogyan tölti fel az adatbázist. Általában akkor töltjük fel az adatbázist, amikor tesztkörnyezetben futtatjuk a lekérdezéseket.

SQL – Update Query

A frissítési lekérdezés vagy utasítás a második a három adatmanipulációs nyelvi utasítás közül, amelyek az INSERT, UPDATE és DELETE. Az UPDATE lekérdezéssel tehát egy táblázatban meglévő rekordokat módosíthatunk.

Mivel az SQL-ről mint halmazalapú nyelvről beszélünk, az UPDATE lekérdezés nem egy rekordra, hanem egy rekordhalmazra fog működni (attól függően, hogy hogyan futtatjuk az UPDATE-t).

Hogyan végezzük tehát a frissítéseket?

Nézzük meg az alábbi lekérdezést:

select * from person

where id = 10

update person

set dob = ‘1990-01-01’

where id = 10

A fenti lekérdezésben először a Person táblából választjuk ki azokat a rekordokat, amelyek id értéke egyenlő 10. A következő képen látható a kiválasztott érték.

Ezután a Frissítés lekérdezéssel beállítjuk a DOB-t annak a rekordnak, amelynek az id értéke 10. Ha nem használjuk a where utasítást, akkor a táblázatunk minden egyes rekordját frissíti a beállított értékre.

A fenti lekérdezés végrehajtásakor látjuk, hogy a táblázat 10. bejegyzésének dob értéke frissült.

Most, ha egy rekordban több dolgot szeretnénk frissíteni, használhatjuk a vesszővel elválasztott listát.

Nézzük meg az alábbiakban látható lekérdezést:

select * from person

where id = 10

update person

set dob = ‘1990-01-01’, firstname = ‘Mike’

where id = 10

A fenti lekérdezés végrehajtásakor az alábbi módon frissített táblázatot kapunk:

A következőkben, ha egynél több rekordot szeretnénk módosítani, a következőket tehetjük:

select * from person

where firstname = ‘Martin’

update person

set firstname = ‘Mike’

where firstname = ‘Martin’

A fenti lekérdezésben a keresztnév értékét Martinról Mike-ra változtattuk, bárhol is volt korábban a Person táblában.

Lássunk egy másik példát:

A Person táblában nem volt lehetőségünk egy kicsit több numerikus dologra, ezért nézzük a Project táblát.

Itt megpróbálunk egy olyan forgatókönyvet venni, ahol a teljes tábla kezelése kívánatos lehet.

A projekt tábla jelenleg három rekordot tartalmaz, ahogy a képen látható.

Minden rekordnak van egy költségvetési értéke. Tegyük fel, hogy mindegyiket körülbelül 20%-kal szeretnénk feljavítani. Ezt az alábbi lekérdezéssel tehetjük meg:

select * from project

update project

set budget = budget*1.2

A fenti lekérdezéssel tehát most a projekt táblában lévő összes rekordot húsz százalékkal növelnénk.

A frissített rekordok az alábbiakban láthatóak:

Az értékeken tehát számos matematikai műveletet végezhetünk, mint a fenti példában.

Az UPDATE utasítás használata során érdemes megjegyezni, hogy mindenhol használjuk a ‘where’ záradékot. Ellenkező esetben a táblázat összes bejegyzésének értékét frissíti.

SQL DELETE utasítás

Vizsgáljuk meg most a DELETE utasítást, amely a három adatmanipulációs nyelvi utasítás közül az utolsó. A DELETE utasítás egy vagy több rekord teljes törlésére képes. Nem beszélünk az egyes oszlopok tartalmának törléséről, mert azt nem tehetjük meg.

Ha ezt szeretnénk megtenni, akkor az UPDATE utasítással kell megváltoztatnunk az egyes oszlopok tartalmát. A DELETE tehát egy teljes rekord vagy több teljes rekord törlését jelenti.

Az INSERT és UPDATE utasításhoz hasonlóan, ha egyszer törölünk egy sor rekordot, akkor azok eltűnnek, és nincs mód arra, hogy visszakapjuk őket.

Arra is ügyelnünk kell, hogy amikor bármely rekordot törölünk a táblázatból, az adott bejegyzést (vagy annak értékét) ne használja más táblázat.

A személy tábla a következő kezdeti bejegyzéseket tartalmazza.

A DELETE utasítás a következő lekérdezésben látható módon használható:

select * from person

where id = 10

delete from person

where id = 10

A fenti lekérdezésben azt a rekordot töröltük, amelynek az id értéke 10 volt.

Megjegyzés: Ne feledje, hogy a DELETE utasítással együtt használja a ‘where’ záradékot. Ellenkező esetben az utasítás a ‘where’-záradék nélkül gyorsan kiüríti a személy táblát.

Amikor a fenti lekérdezést végrehajtjuk, azt látjuk, hogy a 10-es id értékű bejegyzést töröltük, és a frissített táblázat az ábrán látható. Minden más megmarad, kivéve a tízes elsődleges kulccsal rendelkező egyedet.

Vannak olyan helyzetek, amikor egy egész tömbtől szeretnénk megszabadulni. Például az összes másolati bejegyzést törölni szeretnénk a person táblából az ábrán látható módon.

A személy táblából az összes másolt bejegyzést törlő lekérdezés az alábbiakban látható:

select * from person

where firstname like ‘copy%’

delete from person

where firstname like ‘copy%’

A fenti lekérdezésben a ‘copy%’ a copy-val kezdődő és bármely további szóval folytatódó utasításokat jelöli.

A fenti lekérdezés végrehajtásakor láthatjuk, hogy az összes ‘Copy’-vel kezdődő rekord törlődött a person táblából.

Megjegyzés: A DELETE utasítást mindig csak egy-egy táblára ajánlott használni. Közös táblák esetén nem ajánlott az utasítás használata.

Következtetés

Mivel az ‘Adatkezelés az SQL-ben’ című lecke végére értünk. A következő lecke a tranzakcióvezérléssel foglalkozik.

{{lectureCoursePreviewTitle}} Átirat megtekintése Videó megtekintése

Továbbképzés

SQL Training Certification Training

13535 Learners

Go to Course

To learn more, vegyen részt a tanfolyamon

SQL Training Certification Training Go to Course

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.