Zmiana danych w tabeli

All lectures for PL purposes
Poziom 1 , Lekcja 267
Dostępny

4.1 Instrukcja UPDATE SET

Jeśli chcesz zmienić istniejące rekordy w tabeli, użyjemy do tego operatora UPDATE.

Z jednej strony operator UPDATEjest podobny do operatora INSERT, ponieważ musimy podać nowe wartości dla kolumn. A z drugiej strony na operatorze SELECT, ponieważ pozwala on na natychmiastową pracę z grupami danych.

Ważny! Celem operatora UPDATEjest zmiana danych nie w jednym wierszu tabeli, ale we wszystkich wierszach spełniających określony warunek. A jeśli popełnisz mały błąd, możesz łatwo stracić wszystkie dane w tabeli.

Ogólny widok wniosku:

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

Napiszmy zapytanie, które zwiększy pensję wszystkich naszych pracowników o 100. Nasze zapytanie będzie wyglądać tak:

UPDATE employee SET
  	salary = salary+100;

A teraz dla każdego , kto ma pensję mniejszą niż 50 000, zwiększymy ją również o 20%. Przykład żądania:

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

I oczywiście podniesiemy pensję dyrektora 2 razy, jak by to było bez niego:

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

4.2 Złożone scenariusze modyfikacji danych

Jeśli zdecydujesz się na zmianę danych w kilku tabelach jednocześnie lub gdy zmienisz dane w jednej tabeli, musisz wypełnić ją danymi z innej tabeli lub po prostu w jakiś sposób wykorzystać dane z innej tabeli w procesie zmiany pierwszej, potem czekają na nas niespodzianki.

Spróbujmy zmienić poziom wszystkich użytkowników w tabeli użytkowników, którzy istnieją w tabeli pracowników. Dla uproszczenia sprawdzimy zbieżność użytkowników według nazwy.

Jak chcielibyśmy napisać to zapytanie:

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

Cóż, dodajmy listę nazwisk z tabeli pracowników do tego zapytania:

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

Ciekawy! Samo zapytanie SQL w celu uzyskania nazw okazało się nawet krótsze niż opis zadania. Twórcy SQL nie jedli chleba na próżno.

Zmuszony cię zdenerwować -takie podejście nie zadziała. Najpierw musisz dołączyć do tych tabel, będzie to wyglądać mniej więcej tak:

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;

Utrudnijmy to trochę. Poziom 80 musisz ustawić tylko dla dobrych pracowników, których pensja przekroczy 50 tys. Kompletne rozwiązanie będzie wyglądać następująco:

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

Takie łączenie tabel jest w rzeczywistości INNER JOIN, tak że ostatecznie pozostaną tylko użytkownicy, którzy mają dopasowanie według nazwy w drugiej tabeli.

Ale nadal musimy jakoś wybrać dobrych pracowników, więc dodajmy trochę więcej kodu:

SELECT * FROM employee WHERE salary >= 50000

A teraz zastępujemy tę tabelę w naszym ostatnim zapytaniu:

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

Żyj z tym teraz.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION