CodeGym /Java tanfolyam /All lectures for HU purposes /Adatok módosítása táblázatban

Adatok módosítása táblázatban

All lectures for HU purposes
Szint , Lecke
Elérhető

4.1 UPDATE SET utasítás

Ha módosítani kell a táblában meglévő rekordokat, akkor ehhez az operátort használjuk UPDATE.

Egyrészt az operátor UPDATEhasonló az operátorhoz INSERT, mert új értékeket kell megadnunk az oszlopokhoz. Másrészt pedig az operátoron SELECT, mert lehetővé teszi az adatcsoportokkal való azonnali munkát.

Fontos! Az operátor célja, UPDATEhogy ne a táblázat egy sorában, hanem minden olyan sorban módosítsa az adatokat, amelyek egy adott feltételnek megfelelnek. Ha pedig egy kis hibát követ el, könnyen elveszítheti a táblázat összes adatát.

A kérelem általános nézete:

UPDATE table SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE condition;

Írjunk egy lekérdezést, amivel az összes alkalmazottunk fizetése 100-zal emelkedik. Lekérdezésünk így fog kinézni:

UPDATE employee SET
  	salary = salary+100;

És most mindenkinek , akinek 50 ezer alatti a fizetése, azt is emeljük 20%-kal. Példa kérésre:

UPDATE employee SET
  	salary = salary*1.2
WHERE salary<50000;

És persze 2-szeresére emeljük az igazgató fizetését, hogy is lehetne nélküle:

UPDATE employee SET
  	salary = salary*2
WHERE id=4;

4.2 Összetett adatváltozási forgatókönyvek

Ha úgy dönt, hogy egyidejűleg több tábla adatait módosítja, vagy ha egy táblában módosítja az adatokat, akkor azt ki kell töltenie egy másik táblából származó adatokkal, vagy egyszerűen valamilyen módon fel kell használnia egy másik tábla adatait az első módosítása során, akkor meglepetések várnak ránk.

Próbáljuk meg megváltoztatni az alkalmazotti táblában létező összes felhasználó szintjét a felhasználói táblában. Az egyszerűség kedvéért ellenőrizzük a felhasználók név szerinti egybeesését.

Hogyan szeretnénk megírni ezt a lekérdezést:

UPDATE user SET
  	level = 80,
WHERE user . name IN ( list of names from employee table );

Nos, adjunk hozzá egy névlistát az alkalmazottak táblájából ehhez a lekérdezéshez:

UPDATE user SET
  	level = 80,
WHERE user.name IN (select name from employee);

Érdekes! Maga az SQL lekérdezés a nevek lekéréséhez még a feladat leírásánál is rövidebbnek bizonyult. Az SQL megalkotói nem hiába ették a kenyerüket.

kénytelen voltam felzaklatni -ez a megközelítés nem fog működni. Először csatlakoznia kell ezekhez a táblázatokhoz, így fog kinézni:

UPDATE table 1, table 2 SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE table 1.id = table 2.ref_id;

Nehezítsük meg egy kicsit. A szintet 80-ra kell beállítani csak a jó alkalmazottaknál, akiknek a fizetése meghaladja az 50 ezret. A teljes megoldás így fog kinézni:

UPDATE user, good_employees SET
  	user.level = 80
WHERE user.name = good_employees.name;

A táblák ilyen összekapcsolása valójában INNER JOIN, így végül csak azok a felhasználók maradnak meg, akiknek a második táblában van egyezése név szerint.

De még mindig ki kell választanunk a jó alkalmazottakat, ezért adjunk hozzá még néhány kódot:

SELECT * FROM employee WHERE salary >= 50000

És most ezt a táblázatot helyettesítjük az utolsó lekérdezésünkben:

UPDATE user,
    (SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
    user.level = 80
WHERE user.name = good_emps.name;

Élj vele most.

Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION