Windows.  Vírusy.  Prenosné počítače.  internet.  Kancelária.  Verejné služby.  Vodiči

príkaz UPDATE— vykoná zmeny v existujúcom zázname alebo viacerých záznamoch v tabuľke SQL. Upravuje existujúce hodnoty v tabuľke alebo v hlavnej tabuľke zobrazenia.

Syntax príkazu UPDATE

Syntax príkazu UPDATE

príkaz UPDATE. Základné kľúčové slová a parametre príkazu UPDATE

  • schéma - identifikátor povolenia, zvyčajne rovnaký ako niektoré používateľské meno
  • pohľad na tabuľku - názov tabuľky SQL, v ktorom dochádza k zmene údajov; ak je definovaný pohľad, údaje sa upravia v hlavnej tabuľke SQL podania
  • poddotaz_1 - poddotaz, s ktorým server zaobchádza rovnako ako s pohľadom
  • sstĺpec - stĺpec tabuľky SQL alebo podania SQL, ktorých hodnota sa mení; ak je stĺpec tabuľky z vety SET sa vynechá, hodnota stĺpca zostane nezmenená
  • expr - ; tento výraz môže obsahovať hlavné premenné a voliteľné ukazovatele
  • poddotaz_2 - nová hodnota priradená príslušnému stĺpcu
  • poddotaz_3 - nová hodnota priradená príslušnému stĺpcu

KDE- definuje rozsah riadkov, ktoré sa majú upraviť tými, pre ktoré platí určitá podmienka PRAVDA; ak je táto fráza vynechaná, upravia sa všetky riadky v tabuľke alebo zobrazení.
Pri vydaní súhlasu akékoľvek spúšťač AKTUALIZÁCIE, definované na tabuľke.
Poddotazy. Ak ponuka SET obsahuje poddotaz, vráti presne jeden riadok pre každý upravený riadok. Každá hodnota vo výsledku poddotazu je priradená k zodpovedajúcim stĺpcom zoznamu v zátvorkách. Ak poddotaz nevracia žiadne riadky, priradí sa stĺpec NULL. Poddotazy môže vybrať údaje z upravenej tabuľky. Ponuka SET vie kombinovať výrazy a poddotazy.

Príklad príkazu UPDATE 1
Zmena hodnotenia pre všetkých kupujúcich na hodnotu rovnajúcu sa 200:

zákazníkov SET hodnotenie = 200;

Príklad príkazu UPDATE 2
Nahradenie hodnoty stĺpca vo všetkých riadkoch tabuľky sa vo všeobecnosti používa zriedka. Preto v tíme, ako v tíme VYMAZAŤ, môžete použiť predikát. Ak chcete vykonať určenú výmenu hodnôt stĺpca hodnotenia pre všetkých zákazníkov, ktorých obsluhuje predajca Giovanni (snum = 1003), mali by ste zadať:

zákazníkov SET hodnotenie = 200 WHERE snum = 1001;

Príklad príkazu SQL UPDATE 3
Vo vete SET Pre stĺpce môžete zadať ľubovoľný počet hodnôt oddelených čiarkami:

Emp SET job = 'MANAGER', sal = sal + 1000, deptno = 20 WHERE ename = 'JONES';

Príklad príkazu UPDATE 4
Vo vete SET môžete zadať hodnotu NULL bez použitia špeciálnej syntaxe (napríklad IS NULL). Ak teda chcete nastaviť všetky hodnotenia zákazníkov z Londýna (mesto = 'Londýn') na NULL, zadali by ste:

zákazníkov SET hodnotenie = NULL WHERE mesto = 'Londýn';

Príklad príkazu UPDATE 5
Vysvetľuje použitie nasledujúcej syntaxe príkazu:

  • Obidve vetné formy SET spolu v jednom vyhlásení.
  • Poddotaz.
  • Klauzula WHERE, ktorá obmedzuje rozsah riadkov, ktoré je možné upraviť.

Emp a SET deptno =
(VYBRAŤ deptno FROM dept WHERE loc = 'BOSTON'), (sal, comm) = ( VYBRAŤ 1.1*AVG(sal), 1.5*AVG(comm) OD emp b KDE a.deptno = b.deptno) KDE deptno IN ( VYBRAŤ deptno FROM dept WHERE loc = 'DALLAS' ALEBO loc = 'DETROIT');

Vyššie uvedené vyhlásenie robí nasledovné:

  • Upravuje iba tých zamestnancov, ktorí pracujú v Dallase alebo Detroite
  • Nastaví hodnotu stĺpca deptno pre zamestnancov z Bostonu
  • Stanoví mzdu každého zamestnanca na 1,1-násobok priemernej mzdy celého oddelenia
  • Stanovuje províziu každého zamestnanca na 1,5-násobok priemernej provízie pre celé oddelenie

Platforma SQL Server podporuje väčšinu základných komponentov príkazu ANSI UPDATE, ale nepodporuje kľúčové slová ONLY a ARRAY a nepodporuje možnosť aktualizácie polí. SQL Server rozšíril funkčnosť príkazu UPDATE tak, aby zahŕňal rady pre tabuľky pomocou klauzuly WITH, rady pre dopyty pomocou klauzuly OPTION a robustnejšie spracovanie premenných. Syntax je nasledovná.

AKTUALIZÁCIA (názov_tabuľky | názov_zobrazenia | sada riadkov)] SET (názov_stĺpca=(PREDVOLENÉ | NULL | skalárny_výraz) |

názov strmeňa=skalárny_výraz| názov_premennej=názov_stĺpca=skalárny_výraz) [, ...] ]

WHERE (podmienky | CURRENT OFcurrent_name)]

Prvky syntaxe príkazu UPDATE v SQL Server sú nasledovné.

S nápovedou

Umožňuje vám použiť rady tabuliek, ktoré prepíšu predvolené správanie optimalizátora dotazov. Pretože optimalizátor dotazov je veľmi dobrý pri výbere plánov spracovania, rady používajte iba vtedy, ak veľmi dobre rozumiete tabuľkám, indexom a údajom ovplyvneným operáciou. Ak toto pochopenie neexistuje, používanie rád môže viesť skôr k zníženiu ako zvýšeniu produktivity.

názov_premennej

Premenné SQL Servera musia byť deklarované pred použitím príkazu UPDATE vo forme DECLARE @variable. Konštrukčná SET @variable=stĺpec!=výraz! nastaví premennú na konečnú hodnotu aktualizovaného stĺpca a SET @variable -stĺpec!, stĺpec!=výraz nastaví premennú na hodnotu v stĺpci pred vykonaním príkazu UPDATE.

Poskytuje možnosť vytvoriť vysoko selektívne kritérium založené na spojení na špecifikovanie riadkov, ktoré sa majú aktualizovať. Klauzula FROM nie je potrebná, ak sa pri zadávaní riadkov používa iba jedna tabuľka – cieľová tabuľka. Funkcie množiny riadkov na serveri SQL Server sú popísané v časti SELECT Statement.

AS alias

Umožňuje priradiť jednoducho použiteľný alias tabuľke, zobrazeniu, poddotazu vnorenej tabuľky alebo funkcii sady riadkov.

Poskytuje možnosť použiť štandardnú syntax ANSI pre spojenia tabuliek v spojení s klauzulou FROM.

Mierna variácia klauzuly ANSI WHERE CURRENT OF. Klauzula názvu kurzora WHERE CURRENT OF, používaná v kombinácii s kurzorom, spôsobí, že SQL Server aktualizuje iba jeden záznam, na ktorom sa aktuálne nachádza kurzor. Kurzor sa považuje za lokálny, ale môžete zadať globálny kurzor pomocou kľúčového slova GLOBAL.

Tip MOŽNOSTI

Umožňuje vám použiť tipy na dotazy prepísaním predvoleného správania optimalizátora dotazov. Rovnako ako v prípade klauzuly WITH používajte rady iba vtedy, ak veľmi dobre rozumiete tabuľkám, indexom a údajom ovplyvneným operáciou. Ak toto pochopenie neexistuje, používanie rád môže viesť skôr k zníženiu ako zvýšeniu produktivity.

Hlavným rozšírením, ktoré Microsoft SQL Server zavádza do príkazu ANSI UPDATE, je klauzula FROM. Klauzula FROM vám umožňuje použiť klauzulu JOIN, ktorá výrazne zjednodušuje aktualizáciu riadkov cieľovej tabuľky priradením riadkov špecifikovaných v klauzule FROM k riadkom aktualizovaným komponentom table_name UPDATE. Nasledujúci príklad aktualizuje výsledok spojenia tabuľky pomocou štýlu ANSI a pomerne ťažkopádneho poddotazu a potom sa aktualizuje pomocou klauzuly SQL Server FROM. Oba dotazy vykonávajú rovnakú akciu, ale úplne odlišnými spôsobmi.

Vykonanie takejto aktualizácie pomocou štýlu Transact-SQL zahŕňa spojenie dvoch tabuliek, autorov a autora názvu, s tabuľkou názvov. Ak chcete vykonať rovnakú operáciu pomocou kódu ANSI, musíte najprv vyhľadať hodnotu au_id v tabuľke autorov a odovzdať ju tabuľke titleauthor a potom musíte vyhľadať hodnotu title_id a odovzdať ju hlavnému príkazu UPDATE.

Nasledujúci príklad aktualizuje stĺpec stavu pre prvých desať riadkov tabuľky autorov.

AKTUALIZÁCIA NASTAVENIA autorov state="ZZ" OD (VYBERTE NAJLEPŠÍCH 10 * OD autorov ORDER BY au_lname) AS t1 WHERE authors.au_id=t1.au_.id

V tomto príklade je dôležité poznamenať, že vo všeobecnosti je dosť ťažké aktualizovať prvých n riadkov pomocou príkazu UPDATE, pokiaľ neexistuje nejaká explicitná postupnosť riadkov, ktorú možno určiť pomocou klauzuly WHERE. Vnorený poddotaz tabuľky v klauzule FROM, ktorý používa kľúčové slovo TOP na získanie prvých 10 riadkov, však pomáha eliminovať dodatočné programovacie úsilie, ktoré by inak bolo potrebné.

príkaz UPDATE— vykoná zmeny v existujúcom zázname alebo viacerých záznamoch v tabuľke SQL. Upravuje existujúce hodnoty v tabuľke alebo v hlavnej tabuľke zobrazenia.

Syntax príkazu UPDATE

Syntax príkazu UPDATE

príkaz UPDATE. Základné kľúčové slová a parametre príkazu UPDATE

  • schéma - identifikátor povolenia, zvyčajne rovnaký ako niektoré používateľské meno
  • pohľad na tabuľku - názov tabuľky SQL, v ktorom dochádza k zmene údajov; ak je definovaný pohľad, údaje sa upravia v hlavnej tabuľke SQL podania
  • poddotaz_1 - poddotaz, s ktorým server zaobchádza rovnako ako s pohľadom
  • sstĺpec - stĺpec tabuľky SQL alebo podania SQL, ktorých hodnota sa mení; ak je stĺpec tabuľky z vety SET sa vynechá, hodnota stĺpca zostane nezmenená
  • expr - ; tento výraz môže obsahovať hlavné premenné a voliteľné ukazovatele
  • poddotaz_2 - nová hodnota priradená príslušnému stĺpcu
  • poddotaz_3 - nová hodnota priradená príslušnému stĺpcu

KDE- definuje rozsah riadkov, ktoré sa majú upraviť tými, pre ktoré platí určitá podmienka PRAVDA; ak je táto fráza vynechaná, upravia sa všetky riadky v tabuľke alebo zobrazení.
Pri vydávaní súhlasu AKTUALIZOVAŤ ktorýkoľvek sa zapne spúšťač AKTUALIZÁCIE, definované na tabuľke.
Poddotazy. Ak ponuka SET obsahuje poddotaz, vráti presne jeden riadok pre každý upravený riadok. Každá hodnota vo výsledku poddotazu je priradená k zodpovedajúcim stĺpcom zoznamu v zátvorkách. Ak poddotaz nevracia žiadne riadky, priradí sa stĺpec NULL. Poddotazy môže vybrať údaje z upravenej tabuľky. Ponuka SET vie kombinovať výrazy a poddotazy.

Príklad príkazu UPDATE 1
Zmena hodnotenia pre všetkých kupujúcich na hodnotu rovnajúcu sa 200:

AKTUALIZOVAŤ zákazníkov SET hodnotenie = 200;

Príklad príkazu UPDATE 2
Nahradenie hodnoty stĺpca vo všetkých riadkoch tabuľky sa vo všeobecnosti používa zriedka. Preto v tíme AKTUALIZOVAŤ, ako v tíme VYMAZAŤ, môžete použiť predikát. Ak chcete vykonať určenú výmenu hodnôt stĺpca hodnotenia pre všetkých zákazníkov, ktorých obsluhuje predajca Giovanni (snum = 1003), mali by ste zadať:

AKTUALIZOVAŤ zákazníkov SET hodnotenie = 200 WHERE snum = 1001;

Príklad príkazu SQL UPDATE 3
Vo vete SET Pre stĺpce môžete zadať ľubovoľný počet hodnôt oddelených čiarkami:

AKTUALIZOVAŤ emp SET job = 'MANAGER', sal = sal + 1000, deptno = 20 WHERE ename = 'JONES';

Príklad príkazu UPDATE 4
Vo vete SET môžete zadať hodnotu NULL bez použitia špeciálnej syntaxe (napríklad IS NULL). Ak teda chcete nastaviť všetky hodnotenia zákazníkov z Londýna (mesto = 'Londýn') na NULL, zadali by ste:

AKTUALIZOVAŤ zákazníkov SET hodnotenie = NULL WHERE mesto = 'Londýn';

Príklad príkazu UPDATE 5
Vysvetľuje použitie nasledujúcej syntaxe príkazu AKTUALIZOVAŤ:

  • Obidve vetné formy SET spolu v jednom vyhlásení.
  • Poddotaz.
  • Klauzula WHERE, ktorá obmedzuje rozsah riadkov, ktoré je možné upraviť.

AKTUALIZOVAŤ emp a SET deptno =
(VYBRAŤ deptno FROM dept WHERE loc = 'BOSTON'), (sal, comm) = ( VYBRAŤ 1.1*AVG(sal), 1.5*AVG(comm) OD emp b KDE a.deptno = b.deptno) KDE deptno IN ( VYBRAŤ deptno FROM dept WHERE loc = 'DALLAS' ALEBO loc = 'DETROIT');

Vyššie uvedené vyhlásenie AKTUALIZOVAŤ vykonáva nasledujúce operácie:

  • Upravuje iba tých zamestnancov, ktorí pracujú v Dallase alebo Detroite
  • Nastaví hodnotu stĺpca deptno pre zamestnancov z Bostonu
  • Stanoví mzdu každého zamestnanca na 1,1-násobok priemernej mzdy celého oddelenia
  • Stanovuje províziu každého zamestnanca na 1,5-násobok priemernej provízie pre celé oddelenie

Operátory manipulácie s údajmi (jazyk DML).

Príkazy DML fungujú v databáze a používajú sa na úpravu údajov a získanie požadovaných informácií.

SELECT – výber riadkov, ktoré spĺňajú zadané podmienky. Operátor implementuje najmä také operácie relačnej algebry ako „výber“ a „projekcia“.

UPDATE – zmena hodnôt určitých polí v riadkoch tabuľky, ktoré spĺňajú zadané podmienky.

INSERT – vloží do tabuľky nové riadky.

DELETE – vymazanie riadkov tabuľky, ktoré spĺňajú zadané podmienky. Príklad tohto operátora zohľadňuje princípy integrity, takže sa nemusí vždy vykonať správne.

12.2 Interaktívny režim práce s SQL (interaktívny SQL)

Zodpovedajúci režim zabezpečuje priamu prácu používateľa s databázou podľa nasledujúceho algoritmu: pomocou aplikačného programu (klientskej aplikácie) alebo štandardnej pomôcky, ktorá je súčasťou DBMS, používateľ:

· nadviaže spojenie s databázou (potvrdí dostupnosť prístupových práv);

· zadá príslušný príkaz SQL, v prípade potreby zadá ďalšie informácie v dialógovom režime;

· spustí vykonávanie príkazu.

Text požiadavky sa odošle do DBMS, ktorý:

· analyzuje požiadavku (skontroluje, či je žiadosť správna);

· skontroluje, či má používateľ právo vykonať takúto požiadavku (napríklad používateľ, ktorý má práva len na čítanie, sa pokúša niečo vymazať);

· zvolí spôsob vykonania požiadavky – plán realizácie požiadavky;

· vykoná požiadavku;

· výsledok vykonania sa odošle používateľovi.

Schéma interakcie medzi používateľom a DBMS pomocou interaktívneho SQL

je znázornené na obr. 12.1.

Ryža. 12.1. Ako funguje interaktívny SQL

12.3. Použitie SQL na výber informácií z tabuľky

Údaje sa získavajú pomocou príkazu SELECT, ktorý je najčastejšie používaným príkazom v jazyku SQL. Syntax príkazu SELECT je nasledovná:

VYBRAŤ<список атрибутов>/*

OD<список таблиц>

Hranaté zátvorky označujú prvky, ktoré sa v žiadosti nemusia nachádzať.

Kľúčové slovo ALL znamená, že výsledkom budú všetky riadky, ktoré spĺňajú podmienku dopytu, vrátane identických riadkov.

DISTINCT znamená, že v množine výsledkov nie sú zahrnuté žiadne duplicitné riadky. Ďalej je uvedený zoznam atribútov zdrojovej tabuľky, ktoré budú zahrnuté do výsledkovej tabuľky. Symbol * znamená, že výsledná tabuľka obsahuje všetky atribúty zdrojovej tabuľky.

Požadované kľúčové slovo je FROM, za ktorým nasledujú názvy tabuliek, na ktoré sa dopytuje.

Klauzula s kľúčovým slovom WHERE špecifikuje podmienky pre výber riadkov tabuľky. Tabuľka výsledkov obsahuje iba tie riadky, pre ktoré sa podmienka špecifikovaná v klauzule WHERE vyhodnotí ako pravdivá.

Kľúčové slovo ORDER BY špecifikuje operáciu zoradenia riadkov výsledkovej tabuľky podľa zadaného zoznamu atribútov.

Klauzula kľúčového slova GROUP BY špecifikuje zoznam atribútov zoskupenia (toto a nasledujúce kľúčové slovo budú vysvetlené o niečo neskôr).

Klauzula HAVING špecifikuje podmienky, ktoré sa majú aplikovať na každú skupinu.

Samostatne si všimneme, že kľúčové slová FROM, WHERE ORDER BY sa používajú podobným spôsobom v iných operátoroch manipulácie s údajmi SQL.

Pozrime sa na implementáciu dotazov pre konkrétny príklad uvedený v prednáške 8 (pozri obr.

Dopyt SQL - AKTUALIZÁCIA

Uveďte všetkých študentov.

SELECT id_st, priezvisko

Upozorňujeme, že ak do tohto dopytu pridáte doložku ORDER BY priezvisko, zoznam bude zoradený podľa priezviska. V predvolenom nastavení sa predpokladá, že triedenie je vo vzostupnom poradí. Ak sa požaduje zostupné zoradenie, za názov atribútu sa pridá slovo DESC.

Zobrazte zoznam známok, ktoré študent dostal s kódom „1“.

SELECT id_st, značka

Poskytnite zoznam kódov pre študentov, ktorí na skúškach dostali aspoň jedno D alebo C.

V klauzule WHERE môžete napísať výraz pomocou operátorov aritmetického porovnávania (<, >, atď.) a logické operátory (AND, OR, NOT) ako v bežných programovacích jazykoch.

SELECT id_st, značka

KDE (OZNAČIŤ >= 2) A (OZNAČIŤ<= 3)

Popri porovnávacích operátoroch a logických operátoroch na vytváranie podmienok v jazyku SQL (vzhľadom na špecifický rozsah použitia) existuje množstvo špeciálnych operátorov, ktoré spravidla nemajú v iných jazykoch obdobu. Toto sú operátori:

IN – vstup do určitého súboru hodnôt;

MEDZI – vstup do určitého rozsahu hodnôt;

LIKE – test zhody vzorov;

IS NULL – kontrola nedefinovanej hodnoty.

Operátor IN sa používa na kontrolu, či je hodnota zahrnutá v množine. Áno, žiadosť

SELECT id_st, značka

WHERE mark IN (2,3)

dáva rovnaký výsledok ako vyššie uvedený dotaz (zobrazí identifikátory všetkých uchádzačov, ktorí na skúškach získali aspoň jedno D alebo C).

Rovnaký výsledok možno dosiahnuť pomocou operátora BETWEEN:

SELECT id_st, značka

KDE značka MEDZI 2 A 3

Vytlačte zoznam všetkých študentov, ktorých priezviská začínajú na písmeno A.

V tomto prípade je vhodné použiť operátor LIKE.

Operátor LIKE sa vzťahuje výlučne na polia znakov a umožňuje vám určiť, či sa hodnota poľa zhoduje so vzorom. Vzor môže obsahovať špeciálne znaky:

_ (podčiarkovník) – nahrádza akýkoľvek jeden znak;

% (znak percenta) – nahrádza sekvenciu ľubovoľného počtu znakov.

SELECT id_st, priezvisko

KDE priezvisko LIKE „A%“

Veľmi často je potrebné vypočítať minimálne, maximálne alebo priemerné hodnoty v stĺpcoch. Možno budete musieť napríklad vypočítať svoju GPA. Na vykonanie takýchto výpočtov poskytuje SQL špeciálne agregačné funkcie:

MIN – minimálna hodnota v stĺpci;

MAX – maximálna hodnota v stĺpci;

SUM – súčet hodnôt v stĺpci;

AVG – priemerná hodnota v stĺpci;

COUNT – počet hodnôt, ktoré nie sú NULL v stĺpci.

Nasledujúci dotaz počíta priemer všetkých skóre získaných študentmi na skúškach.

VYBRAŤ AVG (značka)

Prirodzene, môžete použiť agregačné funkcie v spojení s klauzulou WHERE:

VYBRAŤ AVG (značka)

WHERE id_st = 100

Tento dotaz vypočíta priemerné skóre študenta s kódom 100 na základe výsledkov všetkých skúšok, ktoré absolvoval.

VYBRAŤ AVG (značka)

WHERE id_ex = 10

Tento dotaz vypočíta priemerné skóre študentov na základe výsledkov úspešného absolvovania skúšky s kódom 10.

Okrem vyššie uvedených mechanizmov poskytuje jazyk SQL výkonný prístroj na výpočet agregovaných funkcií nie pre celú tabuľku výsledkov dotazu, ale pre rôzne hodnoty podľa skupiny. Na tento účel má SQL špeciálny konštrukt GROUP BY, navrhnutý na označenie stĺpca, ktorého hodnoty sa použijú na zoskupenie. Môžeme teda napríklad vypočítať priemerné skóre zo všetkých skúšok pre každého študenta. Ak to chcete urobiť, stačí spustiť nasledujúci dotaz:

SELECT id_st, AVG(značka)

To všetko, ako obvykle, možno kombinovať s doložkou WHERE. Zároveň, bez toho, aby sme zachádzali do zložitosti vykonávania dotazov v DBMS, môžeme predpokladať, že najskôr sa vyberú tie riadky tabuľky, ktoré spĺňajú podmienky z klauzuly WHERE, a potom sa vykoná zoskupenie a agregácia.

Tu je dotaz, ktorý vypočítava priemerné skóre na základe známok získaných v skúške s kódom 100 pre každého študenta.

SELECT id_st, AVG(značka)

WHERE id_ex = 100

Všimnite si, že zoskupenie možno vykonať podľa viacerých polí.

Pre dotazy obsahujúce klauzulu GROUP BY existuje dôležité obmedzenie: takéto dotazy môžu obsahovať ako výsledky stĺpce, podľa ktorých sa zoskupovanie vykonáva, a stĺpce, ktoré obsahujú skutočné výsledky agregácie.

Existujú rôzne možnosti SQL na formátovanie výstupu. Napríklad je prijateľné zahrnúť text do požiadavky. Pozrime sa na príklad, ako sa to robí:

SELECT ‘Priemerné skóre=’, AVG (značka)

WHERE id_ex = 10

V dôsledku tejto požiadavky sa používateľovi nezobrazí len určité číslo, ale aj číslo sprevádzané vysvetľujúcim textom.

12.4. Použitie SQL na výber informácií z viacerých tabuliek

Doteraz sme sa zaoberali výberom informácií z jednej tabuľky. Môžete sa dotazovať na informácie z niekoľkých tabuliek implementáciou relačných operácií popísaných v príslušnej časti učebnice. Stojí za zmienku, že úplná diskusia na túto tému presahuje rámec tejto učebnice. Túto problematiku je možné podrobne naštudovať napríklad pomocou . Pozrime sa na niekoľko príkladov, ako sa to robí.

Spravidla v prípadoch, keď je potrebné vybrať informácie z rôznych tabuliek, sú navzájom spojené tak či onak, napríklad vzťahom jedna k mnohým alebo jedna k jednej pre určitú pole.

Vráťme sa ešte raz k príkladu z prednášky 8. Uvažujme zodpovedajúci ER diagram (obr. 12.2.).

Ryža. 12.2. Príklad prepojených tabuliek

Tento príklad obsahuje aj súvisiace tabuľky. Pozrime sa na tabuľky študent, známka_st a skúška_št.

Tabuľka mark_st je prepojená s tabuľkou exam_st pomocou poľa id_ex.

Tabuľka mark_st je prepojená s tabuľkou študentov pomocou poľa id_st.

Povedzme, že chcete vytlačiť zoznam študentov so známkami, ktoré získali na skúškach. Ak to chcete urobiť, musíte spustiť nasledujúci dotaz:

SELECT študent.priezvisko, mark_st.id_ex, mark_st.mark

OD študenta, známka_st

WHERE student.id_st = mark_st.id_st

Všimnite si nasledujúce zmeny v porovnaní s dopytmi na jednu tabuľku.

1. Časť FROM obsahuje dve tabuľky.

2. Keďže existovalo viacero tabuliek, pri uvádzaní polí sa vyskytli určité nejasnosti. Takže v mnohých prípadoch nie je známe, z ktorej tabuľky zo zoznamu FROM vybrať pole. Na odstránenie nejednoznačnosti sú názvy polí špecifikované s predponou – názvom tabuľky. Názov tabuľky je oddelený od názvu poľa bodkou.

3. Klauzula WHERE špecifikuje podmienku spájania tabuliek.

Je ľahké vidieť, že použitie predpôn názvov tabuliek značne komplikuje dopyt. Aby sa predišlo takémuto neporiadku, používajú sa pseudonymy. Takže predchádzajúci dotaz môžete prepísať takto:

SELECT E.priezvisko, M.id_ex, M.mark

OD študenta E, mark_st M

KDE E.id_st = M.id_st

12.5. Používanie SQL na vkladanie, úpravu a mazanie údajov
v tabuľkách

Ak chcete pridať údaje do tabuľky, štandard SQL poskytuje príkaz INSERT.

Pozrime sa na niekoľko príkladov dopytov.

INSERT INTO mark_st

VALUES (1, 2, 5)

Tento dotaz vloží riadok do tabuľky mark_st obsahujúci hodnoty uvedené v zozname VALUES. Ak nepotrebujete zadať hodnotu poľa, môžete mu priradiť NULL:

INSERT INTO značka

VALUES (1, 2, NULL)

Ak potrebujete použiť predvolené hodnoty pre niektoré polia, SQL vám umožňuje explicitne určiť, ktoré polia je potrebné vyplniť konkrétnymi údajmi a ktoré predvolenými hodnotami:

INSERT INTO mark_st (id_st, id_ex)

Na vymazanie údajov z tabuľky existuje príkaz DELETE:

Tento dotaz vymaže všetky údaje z tabuľky študentov.

Rozsah vymazaných informácií môžete obmedziť takto:

WHERE priezvisko > „AND“

Na aktualizáciu údajov sa používa príkaz UPDATE.

SET značka = '5'

KDE id_st = 100 A id_ex = 10

Pomocou tejto požiadavky sa známka študenta s kódom 100 na skúške s kódom 10 zmení na „5“.

12.5. Jazyk SQL a operácie relačnej algebry

Jazyk SQL je prostriedkom na vyjadrenie výkonnej matematiky teórie množín a relačnej algebry. Táto časť skúma vzťah medzi príkazmi SQL a operáciami relačnej algebry a teórie množín.

Operácia únie

Pomocou jazyka SQL je operácia spojenia reprezentovaná takto:

Rozdielová operácia

Pomocou jazyka SQL je operácia rozdielu znázornená takto:

Prevádzka projekcie

SELECT Field i1, …, Field in

Operácia výberu

KDE( )

Prevádzka križovatky

Predchádzajúci78910111213141516171819202122Ďalší

4.6.5.DML: Príkazy na úpravu údajov.

Táto skupina zahŕňa operátory na pridávanie, zmenu a odstraňovanie záznamov. VLOŽIŤ DO<имя_таблицы> [ (<имя_столбца>,<имя_столбца>,…) ] HODNOTY (<значение>,<значение>,..) Zoznam stĺpcov v tomto príkaze nie je povinný parameter. V tomto prípade musia byť hodnoty pre všetky polia tabuľky špecifikované v poradí, v akom boli stĺpce uvedené v príkaze, napríklad: Príklad špecifikujúci zoznam stĺpcov: AKTUALIZOVAŤ<имя_таблицы>SET<имя_столбца>=<значение>,… Ak je zadané kľúčové slovo a podmienka, príkaz sa použije len na tie záznamy, pre ktoré sa vykoná. Ak podmienka nie je určená, platí pre všetky záznamy. Príklad: Ako podmienky sa používajú logické výrazy nad konštantami a poliami. Podmienky umožňujú:

  • porovnávacie operácie: . V SQL možno tieto operácie aplikovať nielen na číselné hodnoty, ale aj na reťazce (čo znamená skôr a neskôr v abecednom poradí) a dátumy (skôr a neskôr v chronologickom poradí).
  • operácie na kontrolu hodnoty v poli:
  • operácie kontroly dosahu: a.
  • zoznam kontrolných operácií: a
  • operácie kontroly výskytu podreťazca: a
  • jednotlivé operácie sú spojené odkazmi a zoskupené pomocou zátvoriek.

Všetky tieto kľúčové slová budú podrobne popísané a znázornené v odseku venovanom operátorovi. Tu sa obmedzíme na jednoduchý príklad: Tento príkaz nájde v tabuľke vydavateľov všetky nedefinované hodnoty stĺpcov url a nahradí ich riadkom „url nie je definovaná“. VYMAZAŤ Z<имя_таблицы>[KDE<условие> ] Všetky záznamy, ktoré spĺňajú zadanú podmienku, sú vymazané. Ak kľúčové slovo a podmienka chýbajú, z tabuľky sa odstránia všetky záznamy. Príklad: Tento príkaz vymaže záznam Super Computer Publishing.

4.6.6.DML: Vzorkovanie údajov.

Na získanie záznamov z tabuliek je operátor definovaný v SQL VYBRAŤ. Pomocou tohto príkazu sa vykoná nielen operácia relačnej algebry „výber“ (horizontálna podmnožina), ale aj predbežné spojenie dvoch alebo viacerých tabuliek. Toto je najsofistikovanejší a najvýkonnejší nástroj SQL s úplnou syntaxou príkazov VYBRAŤ má tvar: VYBRAŤ<список_выбора>OD<имя_таблицы>, …[ KDE<условие>] [ GROUP BY<имя_столбца>,…] [MAJÚ<условие> ] ,… ] Poradie doložiek vo vyhlásení VYBRAŤ musia byť striktne dodržané (napr. musia byť vždy predradené), inak spôsobí chyby.

Začneme recenzovať VYBRAŤ od svojich najjednoduchších foriem. Všetky nižšie uvedené príklady týkajúce sa databázy publikácií je možné vykonať nezávisle na tejto stránke, takže výsledky dopytov sa tu nezobrazujú.

Toto vyhlásenie vždy začína kľúčovým slovom. Konštrukt určuje stĺpec alebo stĺpce, ktoré sa majú zahrnúť do výsledku. Môže pozostávať z názvov jedného alebo viacerých stĺpcov alebo jedného znaku (hviezdičky), ktorý identifikuje všetky stĺpce. Prvky zoznamu sú oddelené čiarkami.

získať zoznam všetkých polí tabuľky autorov: V prípade, že nás nezaujímajú všetky záznamy, ale iba tie, ktoré spĺňajú určitú podmienku, možno túto podmienku uviesť za kľúčové slovo.

Napríklad, nájdime všetky knihy vydané po roku 1996: Povedzme teraz, že potrebujeme nájsť všetky publikácie za obdobie 1995 - 1997. Túto podmienku možno zapísať ako: Ďalšiu verziu tohto príkazu je možné získať pomocou logickej operácie testovania na výskyt v rozsahu: Pri použití konštrukcie sa nájdu všetky riadky, ktoré nie sú zahrnuté v špecifikovanom rozsahu.

Iná verzia tohto príkazu môže byť vytvorená pomocou logickej operácie kontroly zahrnutia do zoznamu:

Tu sme výslovne špecifikovali zoznam hodnôt, ktoré nás zaujímajú. Konštrukcia umožňuje nájsť linky, ktoré nespĺňajú podmienky uvedené v zozname.

Výhody kľúčového slova sú najzreteľnejšie vo vnorených dopytoch, ktoré sa tiež nazývajú poddotazy. Povedzme, že potrebujeme nájsť všetky publikácie vydané vydavateľstvom Oracle Press. Názvy vydavateľských spoločností sú uvedené v tabuľke vydavateľov, názvy kníh v tabuľke titulov. Kľúčové slovo vám umožňuje spojiť obe tabuľky (bez získania spoločného vzťahu) a extrahovať potrebné informácie:

Pri vykonávaní tohto príkazu DBMS najskôr spracuje vnorený dotaz v tabuľke vydavateľov a potom sa jeho výsledok odovzdá vstupu hlavného dotazu v tabuľke titulov.

Niektoré problémy nie je možné vyriešiť iba pomocou porovnávacích operátorov. Chceme napríklad nájsť webovú stránku vydavateľstva Wiley, no nepoznáme jej presný názov. Kľúčové slovo je určené na vyriešenie tohto problému, jeho syntax je:

Vzor je uzavretý v úvodzovkách a musí obsahovať vzor podreťazca, ktorý sa má hľadať. Vo vzoroch sa zvyčajne používajú dva znaky:

  • % (znak percenta) - nahradí ľubovoľný počet znakov
  • _ (podčiarkovník) – nahrádza jeden znak.

Pokúsme sa nájsť požadovanú webovú stránku: V súlade so šablónou DBMS nájde všetky riadky, ktoré obsahujú podreťazec „Wiley“. Ďalší príklad: nájdite všetky knihy, ktorých názvy začínajú slovom „SQL“: V prípade, že potrebujete nájsť hodnotu, ktorá sama obsahuje jeden zo znakov vzoru, použite kľúčové slovo a<ключевой_символ>. Doslov za kľúčovým znakom vo vzore sa považuje za bežný znak, všetky nasledujúce znaky majú pravidelný význam. Potrebujeme napríklad nájsť odkaz na webovú stránku, o ktorej je známe, že vo svojej adrese URL obsahuje podreťazec „my_works“: Na záver si všimnite, že keď sa spustí operátor, výsledný vzťah môže mať niekoľko záznamov s rovnakými hodnotami pre všetky polia. Na vylúčenie duplicitných záznamov z výberu sa používa kľúčové slovo. Kľúčové slovo určuje, že do výsledku by mali byť zahrnuté všetky riadky.

4.6.7.DML: Výber z viacerých tabuliek.

Veľmi často nastáva situácia, keď je potrebné vzorkovať údaje zo vzťahu, ktorý je výsledkom spojenia dvoch iných vzťahov. Napríklad potrebujeme získať z databázy publikácií informácie o všetkých tlačených publikáciách vo forme nasledujúcej tabuľky: Na tento účel musí DBMS najprv zlúčiť tabuľky titulov A vydavateľov, a až potom urobte vzorku z výsledného vzťahu.

Na vykonanie operácie tohto druhu operátor za kľúčovým slovom špecifikuje zoznam tabuliek, cez ktoré sa budú dáta vyhľadávať. Po kľúčovom slove je uvedená podmienka, za ktorej sa zlúčenie vykoná. Ak chcete vykonať túto požiadavku, musíte zadať príkaz:

A tu je príklad, kde sú podmienky pre zlúčenie aj výber špecifikované súčasne (výsledok predchádzajúceho dotazu je obmedzený na publikácie po roku 1996): Upozorňujeme, že ak rôzne tabuľky obsahujú polia s rovnakým názvom, potom, aby sa odstránila nejednoznačnosť, názov tabuľky je uvedený pred názvom poľa a znakom "." (bodka). (Dobrým pravidlom je vždy uviesť názov tabuľky!)

Prirodzene je možné zlúčiť viac ako dve tabuľky. Ak chcete napríklad vyššie popísaný výber doplniť o mená autorov kníh, musíte vytvoriť operátor nasledujúceho formulára:

4.6.8.DML: Výpočty v SELECT.

umožňuje vykonávať rôzne aritmetické operácie na stĺpcoch výsledného vzťahu. V dizajne<список_выбора>Môžete použiť konštanty, funkcie a ich kombinácie s aritmetickými operáciami a zátvorkami. Ak chcete napríklad zistiť, koľko rokov uplynulo od roku 1992 (rok prijatia štandardu SQL-92) do vydania konkrétnej knihy, môžete spustiť príkaz: V aritmetických rovniciach sú povolené operácie sčítania (+) , odčítanie (-), delenie (/), násobenie ( *), ako aj rôzne funkcie (COS, SIN, ABS - absolútna hodnota atď.).

Do dotazu môžete pridať aj reťazcovú konštantu: Definované sú aj takzvané agregačné funkcie, ktoré vykonávajú akcie na množine identických polí v skupine záznamov. Medzi nimi:

  • AVG(<имя поля>) — priemer zo všetkých hodnôt tohto poľa
  • COUNT(<имя поля>) alebo COUNT (*)— počet záznamov
  • MAX(<имя поля>) — maximum zo všetkých hodnôt tohto poľa
  • MIN(<имя поля>) — minimum všetkých hodnôt tohto poľa
  • SUM(<имя поля>) — súčet všetkých hodnôt tohto poľa

Upozorňujeme, že každá funkcia agregácie sa vráti jediná vec význam. Príklady: určiť dátum vydania najstaršej knihy v našej databáze spočítať počet kníh v našej databáze: Rozsah týchto funkcií je možné obmedziť pomocou logickej podmienky; Napríklad počet kníh so slovom „SQL“ v názve:

4.6.9.DML: Zoskupovanie údajov.

Zoskupovanie údajov vo výpise sa realizuje pomocou kľúčového slova a kľúčového slova, pomocou ktorého sa nastavujú podmienky delenia záznamov do skupín.

je neoddeliteľne spojený s agregačnými funkciami, bez nich sa prakticky nepoužíva; rozdelí tabuľku do skupín a agregačná funkcia vypočíta celkovú hodnotu pre každú z nich. Ako príklad určme počet kníh od každého vydavateľa v našej databáze:

Kľúčové slovo funguje nasledovne: najprv rozdelí riadky do skupín, potom sa na výsledné množiny uložia podmienky. Vylúčme napríklad z predchádzajúceho dotazu tie vydavateľstvá, ktoré majú len jednu knihu: Ďalším prípadom použitia je zahrnúť do výsledku len tie vydavateľstvá, ktorých názov končí podreťazcom „Press“: Aký je rozdiel medzi týmito dvoma prípadmi použitia ? V druhej možnosti by sme mohli umiestniť podmienku výberu záznamov v sekcii kľúčových slov do prvej možnosti, to by nebolo možné, keďže neumožňuje použitie agregačných funkcií.

4.6.10.DML: Triedenie údajov.

Na triedenie údajov získaných pomocou operátora sa používa kľúčové slovo. Umožňuje vám triediť výsledky podľa ľubovoľného stĺpca alebo výrazu špecifikovaného v<списке_выбора>. Údaje je možné triediť vzostupne alebo zostupne. Príklad: zoraďte zoznam autorov podľa abecedy: Zložitejší príklad: získajte abecedne zoradený zoznam autorov a zoznam ich publikácií a pre každého autora je zoznam kníh zoradený podľa času vydania v opačnom poradí (t. j. novšie knihy najprv, potom stále viac „starobylé“): Kľúčové slovo tu určuje opačné poradie triedenia podľa poľa ročná krčma, kľúčové slovo (môže byť vynechané) - priame triedenie podľa poľa autora.

4.6.11.DML: Operácia zlúčenia.

SQL poskytuje schopnosť vykonávať operáciu relačnej algebry UNION na vzťahoch, ktoré sú výsledkom príkazu SELECT. Prirodzene, tieto vzťahy musia byť definované podľa rovnakej schémy. Príklad: všetky internetové odkazy sú uložené v databáze publikácií. Tieto prepojenia sú uložené v tabuľkách vydavateľov A www stránky. Aby sme ich dostali do jednej tabuľky, musíme zostaviť nasledujúci dotaz:

4.6.12.Používanie pohľadov.

Doteraz sme hovorili o tabuľkách, ktoré naozaj sú uložené v databáze. Ide o takzvané základné tabuľky. Existuje ďalší typ tabuľky nazývaný „zobrazenia“ (niekedy nazývané „zobraziteľné tabuľky“).

Keď sa obsah základných tabuliek zmení, DBMS automaticky znova vykoná dotazy, ktoré vytvárajú pohľad, čo vedie k zodpovedajúcim zmenám v pohľadoch.

Pohľad sa definuje pomocou príkazu

VYTVORIŤ ZOBRAZENIE<имя_представления> [<имя_столбца>,…] AS<запрос> Musia sa dodržiavať tieto obmedzenia:

  • zobrazenie musí byť založené na jedinom dopyte (nie je povolené)
  • výstup dotazu, ktorý generuje zobrazenie, musí byť neusporiadaný (nie je povolené)

Vytvorme zobrazenie, v ktorom budú uložené informácie o autoroch, ich knihách a vydavateľoch týchto kníh: Teraz môže každý používateľ, ktorý má dostatočné práva na prístup k tomuto zobrazeniu, získavať údaje z knihy. Napríklad: (Prístupové práva používateľov k zobrazeniam sa prideľujú aj pomocou príkazov.)

Z vyššie uvedeného príkladu je celkom jasný význam použitia pohľadov. Ak sa otázky ako „vyberte všetky knihy od daného autora s uvedením vydavateľov“ vykonávajú pomerne často, potom sa vytvorí prezentovaná tabuľka knihy výrazne zníži réžiu spájania štyroch základných stolov autorov, titulov, vydavateľov A titulných autorov. Okrem toho môže pohľad prezentovať informácie, ktoré nie sú explicitne uložené v žiadnej zo základných tabuliek. Napríklad jeden zo stĺpcov zobrazenia možno vypočítať:

Tu používame ďalšiu, predtým nepopísanú, funkciu - priraďovanie nových názvov stĺpcom zobrazenia.

V uvedenom príklade by bol počet publikácií vytvorených každým vydavateľom uložený v stĺpci s názvom books_count. Upozorňujeme, že ak chceme stĺpcom zobrazenia priradiť nové názvy, musíme zadať názvy pre všetci stĺpci. Typ údajov stĺpca zobrazenia a jeho nulový stav vždy závisia od toho, ako bol definovaný v základnej tabuľke (tabuľkách).

Dotaz na výber údajov pre zobrazenie vyzerá úplne rovnako ako dotaz pre akúkoľvek inú tabuľku. Existujú však obmedzenia týkajúce sa zmeny údajov v zobrazení. Stručne o nich môžeme povedať nasledovné:

  • Ak je zobrazenie založené na jedinej tabuľke, zmeny údajov v nej sú povolené. Tým sa zmenia údaje v priradenej tabuľke.
  • Ak je zobrazenie založené na viacerých tabuľkách, zmeny údajov v ňom nie sú povolené, pretože Vo väčšine prípadov DBMS nedokáže správne rekonštruovať schému základných tabuliek z prezentačnej schémy.

Odstránenie zobrazenia sa vykonáva pomocou operátora:

ZOBRAZIŤ POHĽAD<имя_представления>

4.6.13. Ďalšie funkcie SQL.

Možnosti opísané nižšie ešte neboli štandardizované, ale sú prezentované v tej či onej miere takmer vo všetkých moderných DBMS.

  • Uložené procedúry. Praktické skúsenosti s tvorbou aplikácií na spracovanie údajov ukazujú, že je vhodné presunúť na server množstvo operácií s údajmi, ktoré implementujú logiku spoločnú pre všetkých používateľov a nesúvisia s používateľským rozhraním. Na písanie procedúr, ktoré tieto operácie implementujú, však štandardné schopnosti nestačia, pretože tu sú potrebné operátory na spracovanie vetiev, slučiek atď. Preto veľa predajcov DBMS ponúka svoje vlastné procedurálne rozšírenia (PL/SQL od Oracle atď.). Tieto rozšírenia obsahujú logické operátory (IF ... THEN ... ELSE), operátory podmieneného prechodu (SWITCH ... CASE ...), operátory slučky (FOR, WHILE, UNTIL) a operátory prenášajúce riadenie na procedúry (CALL, RETURN ). Pomocou týchto nástrojov sa vytvárajú funkčné moduly, ktoré sú uložené na serveri spolu s databázou. Zvyčajne sa takéto moduly nazývajú uložené procedúry. Môžu byť volané s parametrami odovzdanými ktorýmkoľvek používateľom, ktorý má príslušné práva. V niektorých systémoch môžu byť uložené procedúry implementované aj ako moduly externe voči DBMS vo všeobecných jazykoch, ako napr. C alebo Pascal.

    SQL - dotaz AKTUALIZÁCIE

    Príklad pre PostgreSQL DBMS: VYTVORIŤ FUNKCIU<имя_функции> ([<тип_параметра1>,…<тип_параметра2>]) RETURNS <return_types> AS [ | <имя_объектного_модуля>] JAZYK 'SQL' | 'C' | 'interné' Vytvorená funkcia sa volá z príkazu SELECT (rovnakým spôsobom, ako sa volajú agregačné funkcie). Ďalšie informácie o uložených procedúrach nájdete v článku E. Eisenberga, New Standard for Stored Procedures in the SQL Language, DBMS N 5-6, 1996.

  • Spúšťače. Ku každej tabuľke možno priradiť uloženú procedúru bez parametrov, ktorá sa volá pri vykonaní príkazu na úpravu tejto tabuľky (INSERT, UPDATE, DELETE). Takéto uložené procedúry sa nazývajú spúšťače. Spúšťače sa vykonávajú automaticky bez ohľadu na to, či je zmena údajov spôsobená činnosťou ľudského operátora alebo aplikačného programu. „Priemerná“ syntax operátora vytvorenia spúšťača je: VYTVORIŤ SPÚŠŤAČ<имя_триггера>ON<имя_таблицы>PRE (VLOŽIŤ | AKTUALIZOVAŤ | VYMAZAŤ) [, INSERT | AKTUALIZÁCIA | VYMAZAŤ ]… AS Kľúčové slovo určuje názov tabuľky, pre ktorú je definovaný spúšťač, kľúčové slovo určuje, ktorý príkaz (príkazy) na úpravu údajov spúšťa spúšťač. Príkazy za kľúčovým slovom popisujú akcie, ktoré spúšťač vykonáva, a podmienky na vykonanie týchto akcií. Tu je možné uviesť ľubovoľný počet príkazov, volaní uložených procedúr atď. Použitie spúšťačov je veľmi vhodné na vykonávanie operácií kontroly integritných obmedzení (pozri kapitolu 4.3).
  • Monitory udalostí. Množstvo DBMS umožňuje vytváranie uložených procedúr, ktoré nepretržite skenujú jednu alebo viacero tabuliek, aby zisťovali určité udalosti (napríklad priemerná hodnota stĺpca dosiahne určený limit). Keď nastane udalosť, môže sa spustiť spúšťač, uložená procedúra, externý modul atď. Príklad: Nech je naša databáza súčasťou automatizovaného systému riadenia procesov. V poli jednej z tabuliek sa zadávajú hodnoty snímača teploty inštalovaného na fréze sústruhu. Keď táto hodnota prekročí zadaný limit, spustí sa externý program, ktorý zmení prevádzkové parametre stroja.

Otázka je stará, ale mal som pocit, že lepšia odpoveď ešte nebola poskytnutá.

Existuje syntax UPDATE... bez uvedenia názvov stĺpcov ?

Všeobecné riešenie s dynamickým SQL

Nemusíte poznať názvy stĺpcov, s výnimkou niektorých jedinečných stĺpcov na spojenie (v príklade). Funguje dobre pre každý možný rohový prípad, na ktorý si spomeniem.

Toto je špecifické pre PostgreSQL. Vytváram dynamický kód na základe schema_info, konkrétne tabuľky, ktorá je definovaná v ANSI SQL a podporovaná väčšinou moderných DBMS (okrem Oracle). Ale príkaz s kódom PL/pgSQL, ktorý robí dynamické SQL, je úplne neštandardná syntax PostgreSQL.

AKTUALIZÁCIA SQL

Za predpokladu, že príslušný stĺpec je v pre všetci stĺpec v, ale nie naopak.

môže mať ďalšie stĺpce.

je voliteľné, ak chcete aktualizovať iba vybratý riadok.

SQL Fiddle.

Podobné odpovede s ďalšími vysvetleniami:

Čiastočné riešenia s jednoduchým SQL

So zoznamom zdieľaných stĺpcov

Stále potrebujete poznať zoznam názvov stĺpcov, ktoré zdieľajú obe tabuľky. So skratkou syntaxe na aktualizáciu viacerých stĺpcov - kratšia ako ostatné doteraz ponúkané odpovede.

SQL Fiddle.

Táto syntax bola predstavená s Postgres 8.2 v decembri 2006, dlho predtým, ako bola položená otázka.
Ďalšie podrobnosti sú uvedené v príručke a zodpovedajúcej odpovedi na dba.SE:

So zoznamom stĺpcov v

Ak všetky stĺpce sú definované (ale nie sú povinné),
A vy vieš názvy stĺpcov (nie sú však povinné).

pripojí sa k riadku, odkiaľ majú všetky stĺpce s rovnakým názvom rovnakú hodnotu. V tomto prípade nemusíme aktualizovať (nič sa nemení) a môžeme tieto riadky odstrániť na začiatku procesu process().
Stále musíme nájsť zodpovedajúci reťazec, takže vo vonkajšom dotaze.

SQL Fiddle.

Toto je štandardný SQL, okrem klauzuly.
Funguje to bez ohľadu na to, v ktorom stĺpci je skutočne prítomný, ale dotaz nedokáže rozlíšiť medzi skutočnými hodnotami NULL a chýbajúcimi stĺpcami, takže je spoľahlivý iba vtedy, ak sú definované všetky stĺpce v.

Existuje niekoľko možných možností, v závislosti od toho, čo máte vieš o oboch stoloch.

Mám dve tabuľky:

bude vždy podmnožinou (to znamená, že všetky stĺpce sú tiež in).

Chcem aktualizovať záznam s konkrétnym in s ich údajmi z pre všetky stĺpce Toto existuje v in aj v

Existuje syntax alebo nejaký iný spôsob, ako to urobiť bez zadania názvov stĺpcov, len povedať "nastaviť všetky stĺpce A" ?

Používam PostgreSQL, takže špecifický neštandardný príkaz je tiež akceptovaný (neodporúča sa však).

Tieto pojmy sa týkajú databáz.

DDL - Data Definition Language. Pomocou tohto jazyka sú dáta definované špecifikovaním dátového typu a prezentačných štruktúr. V skutočnosti je to súčasť jazyka. SQL. Ale len jeden. Sú to operátory, ktoré sú spojené napríklad s príkazmi na vytváranie VYTVORIŤ TABUĽKU. Výsledok týchto operácií sa zapíše do systémového adresára, v ktorom sú uložené informácie o tabuľkách.

DML - Data Manipulation Language. Je to jazyk správy údajov, ktorý možno použiť na získavanie a úpravu údajov. Existujú dva druhy týchto jazykov.

Procedurálny procedurálne Neprocedurálne neprocesné

Rozdiel medzi nimi nie je taký, ako sa na prvý pohľad zdá. Pre programátora je to tak, že existujú postupy, neexistujú žiadne postupy. V skutočnosti procedurálne jazyky spracovávajú údaje postupne. Teda záznam po zázname a tie neprocedurálne fungujú na celých súpravách naraz. A rozdiel je tu jasný: v procedurálnych jazykoch je uvedené, ako získať údaje, a v neprocedurálnych jazykoch, čo chceme dostávať. Proces v neprocedurálnom jazyku sa nás netýka a je pred vývojárom skrytý. Najbežnejším neprocedurálnym jazykom je SQL. A tu by malo byť jasné, čo to znamená, keď nenaznačíme cestu, ale výsledok. Operátor SQL typu VYBERTE * Z TABUĽKY hovorí o výsledku, ktorý chceme. A v tomto prípade chceme získať všetky záznamy a stĺpce z tabuľky.

AKTUALIZOVAŤ OPERÁTORA

Existuje ďalší neprocedurálny jazyk QBE. Pozrime sa na to zvonku SQL. takže, SQL ide o dve časti, prvá časť je určená na vytváranie objektov v databáze DDL a druhá časť je určená na manipuláciu s údajmi v týchto objektoch DML. Prečo takéto rozdelenie? Návrh databázy nie je jednoduchá úloha a vyžaduje si serióznu prácu. Existujú špeciálne programy, ktoré pomáhajú vybudovať dátovú štruktúru, kontrolovať spojenia a eliminovať rozpory vo fáze návrhu. V dôsledku činnosti týchto programov sa vytvorí súbor príkazov DDL(vo forme operátorov SQL), ktoré sú spustené na databázovom serveri a všetky štruktúry sú pripravené na prácu. Potom začne plnenie, už používam DML a potom pracujte znova pomocou DML(vo forme operátorov SQL).

Predchádzajúci krok | Ďalší krok | Obsah
Autor Kaev Artem.

Tento tutoriál SQL vysvetľuje, ako používať príkaz SQL UPDATE so syntaxou, príkladmi a praktickými cvičeniami.

Syntax

Syntax pre príkaz UPDATE pri aktualizácii tabuľky v SQL je:

UPDATE table SET stĺpec1 = výraz1, stĺpec2 = výraz2, ... ;

Syntax pre príkaz SQL UPDATE pri aktualizácii tabuľky údajmi z inej tabuľky je:

UPDATE table1 SET stĺpec1 = (SELECT výraz1 FROM tabuľka2 WHERE podmienky) ;

Syntax pre príkaz SQL UPDATE pri aktualizácii viacerých tabuliek (nie je povolená v Oracle) je:

UPDATE tabuľka1, tabuľka2, ... SET stĺpec1 = výraz1, stĺpec2 = výraz2, ... WHERE tabuľka1.stĺpec = tabuľka2.stĺpec ;

Parametre alebo argumenty

stĺpec1, stĺpec2 Stĺpce, ktoré chcete aktualizovať. výraz1, výraz2 Toto sú nové hodnoty, ktoré sa majú priradiť, stĺpec1 stĺpec2 výraz1, výraz2 Toto sú nové hodnoty, ktoré sa majú priradiť . Takže, stĺpec1 výraz1 bude priradená hodnota výraz2

, a tak ďalej.

KDE podmienky Voliteľné. Podmienky, ktoré musia byť splnené, aby sa aktualizácia vykonala. Ak nie sú zadané žiadne podmienky, aktualizujú sa všetky záznamy v tabuľke.

Príklady DDL/DML

Ak chcete postupovať podľa tohto návodu, získajte DDL na vytvorenie tabuliek a DML na vyplnenie údajov. Potom vyskúšajte príklady vo vlastnej databáze!

Príklad – Aktualizujte jeden stĺpec Pozrime sa na príklad, ktorý ukazuje, ako použiť príkaz SQL UPDATE na aktualizáciu jedného stĺpca v tabuľke.

zákazníkov s nasledujúcimi údajmi: customer_id priezvisko
4000 krstné_meno obľúbená_webová stránka Jackson
5000 Joe webovej stránky Smith
6000 Jane digminecraft.com Ferguson
7000 Samantha bigactivities.com Reynolds
8000 Allen checkyourmath.com NULL
9000 Anderson Paige Jackson

Teraz ukážme, ako funguje príkaz UPDATE aktualizáciou jedného stĺpca v Príklad – Aktualizujte jeden stĺpec

Skúste to AKTUALIZOVAŤ SET zákazníkov first_name = "Judy" WHERE customer_id = 8000;

Príklad – Aktualizujte jeden stĺpec opäť tabuľka:

VYBERTE * OD zákazníkov;

zákazníkov s nasledujúcimi údajmi: customer_id priezvisko
4000 krstné_meno obľúbená_webová stránka Jackson
5000 Joe webovej stránky Smith
6000 Jane digminecraft.com Ferguson
7000 Samantha bigactivities.com Reynolds
8000 Allen Judy NULL
9000 Anderson Paige Jackson

V tomto príklade UPDATE je customer_id pole je nastavené na "Judy" v poli Príklad – Aktualizujte jeden stĺpec tabuľka, kde je zákazníkov sa rovná 8000.

Príklad – Aktualizácia viacerých stĺpcov

Pozrime sa na príklad UPDATE, ktorý ukazuje, ako aktualizovať viac ako jeden stĺpec v tabuľke.

TIP: Keď aktualizujete viacero stĺpcov v príkaze UPDATE, musíte oddeliť páry stĺpec/hodnota v klauzule SET čiarkou.

V tomto príklade UPDATE máme tabuľku tzv dodávateľov Pozrime sa na príklad, ktorý ukazuje, ako použiť príkaz SQL UPDATE na aktualizáciu jedného stĺpca v tabuľke.

dodávateľ_id meno_dodávateľa mesto štátu
100 Microsoft Redmond Washington
200 Google Mountain View Kalifornia
300 Oracle Redwood City Kalifornia
400 Kimberly-Clark Irving Texas
500 Tyson Foods Springdale Arkansas
600 SC Johnson Racine Wisconsin
700 Spoločnosť Dole Food Company Westlake Village Kalifornia
800 Kvetinové potraviny Thomasville Gruzínsko
900 Electronic Arts Redwood City Kalifornia

Teraz si ukážme, ako použiť príkaz UPDATE na aktualizáciu viac ako jednej hodnoty stĺpca naraz. Zadajte nasledujúci príkaz UPDATE:

Skúste to AKTUALIZÁCIA SET dodávateľov id_dodávateľa = 150, názov_dodávateľa = "Apple", mesto = "Cupertino" WHERE Supplier_name = "Google";

Bude aktualizovaný 1 záznam. Vyberte údaje z dodávateľov opäť tabuľka:

VYBERTE * OD dodávateľov;

Toto sú výsledky, ktoré by ste mali vidieť:

dodávateľ_id meno_dodávateľa mesto štátu
100 Microsoft Redmond Washington
150 Apple Cupertino Kalifornia
300 Oracle Redwood City Kalifornia
400 Kimberly-Clark Irving Texas
500 Tyson Foods Springdale Arkansas
600 SC Johnson Racine Wisconsin
700 Spoločnosť Dole Food Company Westlake Village Kalifornia
800 Kvetinové potraviny Thomasville Gruzínsko
900 Electronic Arts Redwood City Kalifornia

Tento príklad UPDATE by aktualizoval súbor dodávateľ_id na 150, meno_dodávateľa na "Apple" a mesto do "Cupertina", kde meno_dodávateľa je „Google“.

Príklad - Aktualizácia tabuľky údajmi z inej tabuľky

Pozrime sa na príklad UPDATE, ktorý ukazuje, ako aktualizovať tabuľku údajmi z inej tabuľky.

V tomto príklade UPDATE máme tabuľku tzv produktov Pozrime sa na príklad, ktorý ukazuje, ako použiť príkaz SQL UPDATE na aktualizáciu jedného stĺpca v tabuľke.

product_id názov_produktu category_id
1 Hruška 50
2 Banán 50
3 Oranžová 50
4 Apple 50
5 Chlieb 75
6 Nakrájaná šunka 25
7 Kleenex NULL

A stolík tzv súhrnné_údaje Pozrime sa na príklad, ktorý ukazuje, ako použiť príkaz SQL UPDATE na aktualizáciu jedného stĺpca v tabuľke.

product_id aktuálna_kategória
1 10
2 10
3 10
4 10
5 10
8 10

Teraz poďme aktualizovať súhrnné_údaje tabuľka s hodnotami z produktov tabuľky. Zadajte nasledujúci príkaz UPDATE:

UPDATE SET súhrnných_údajov current_category = (SELECT category_id FROM products WHERE products.product_id = súhrnné_údaje.product_id) WHERE EXISTS (SELECT category_id FROM products WHERE products.product_id = súhrnné_údaje.product_id);

Aktualizovaných bude 5 záznamov. Vyberte údaje z súhrnné_údaje opäť tabuľka:

SELECT * FROM súhrnné_údaje;

Toto sú výsledky, ktoré by ste mali vidieť:

product_id aktuálna_kategória
1 50
2 50
3 50
4 50
5 75
8 10

Tento príklad by aktualizoval aktuálna_kategória poli v súhrnné_údaje stôl s category_id z produktov tabuľka, kde je product_id hodnoty sa zhodujú. Prvých 5 záznamov v súhrnné_údaje tabuľka bola aktualizovaná.

TIP: Všimnite si, že náš príkaz UPDATE obsahoval podmienku EXISTS v klauzule WHERE, aby sme sa uistili, že existuje zhoda product_id v oboch produktov a súhrnné_údaje pred aktualizáciou záznamu.

Ak by sme nezahrnuli podmienku EXISTS, dopyt UPDATE by ju aktualizoval aktuálna_kategória pole na NULL v 6. riadku súhrnné_údaje stôl (pretože produktov tabuľka nemá záznam kde product_id=8).

Cvičenie

Ak si chcete otestovať svoje schopnosti pomocou príkazu SQL UPDATE, vyskúšajte niektoré z našich praktických cvičení.

Tieto cvičenia vám umožnia vyskúšať si svoje zručnosti pomocou príkazu UPDATE. Dostanete otázky, ktoré musíte vyriešiť. Po každom cvičení poskytujeme riešenie, aby ste si mohli skontrolovať svoju odpoveď. Skúste to!

Čo keby som sa spýtal: "Sú všetky aktualizácie nainštalované na vašom serveri SQL?"

Ako na takúto otázku odpovedať? Skontrolovať službu Windows Update? Je nepravdepodobné, že by to pomohlo. S najväčšou pravdepodobnosťou uvidíte niečo takéto:

Ale napodiv to neznamená, že SQL Server má nainštalované najnovšie aktualizácie!

Na sledovanie aktualizácií špeciálne pre server SQL spoločnosť Microsoft vytvorila špeciálnu stránku - . Uložiť ako záložku:

Predtým, ako tam pôjdeme, však musíme zistiť, ktorú verziu máme práve nainštalovanú. Potrebujeme presné číslo vrátane čísla zostavy. Môžete to získať pohľadom na systémovú premennú @@Verzia:

Zapamätajte si tieto čísla – len podľa nich budeme vedieť určiť, ktoré aktualizácie už máme nainštalované a ktoré nie. SQL server nás na rozdiel od samotného operačného systému neinformuje o každej nainštalovanej aktualizácii. Preto budete musieť pracovať s číslom @@Verzia.

Teraz prejdeme do centra aktualizácií servera SQL a tam vidíme pohodlný znak:

Tu potrebujeme tri veci:

  • Najprv si zapamätajte číslo zostavy zodpovedajúce tejto aktualizácii. Po dokončení postupu aktualizácie @@Verzia náš SQL server by mal udávať presne toto číslo.
  • Po druhé, určite by ste sa mali pozrieť na históriu čísel zostavení zodpovedajúcich aktualizáciám z najnovšieho balíka služieb. Je to dôležité, pretože kumulatívna aktualizácia sa nainštaluje iba na balík service pack, ktorý jej predchádza.
  • A po tretie, je užitočné pozrieť sa na zoznam opráv obsiahnutých v súhrnnom balíku. Administrátor si musí byť vedomý zmien, ktoré prináša tento balík.

Pri pohľade na čísla zostavení predchádzajúcich aktualizácií uvidíme, že rozdiel v číslach v porovnaní s našou aktuálnou verziou je podozrivo veľký:

Je to spôsobené tým, že nemáme nainštalovaný SP1. Najprv ho budete musieť nainštalovať.

A teraz máme akčný plán:

  1. Nainštalujte balík služieb SP1.
  2. Nainštalujte balík kumulatívnej aktualizácie CU4.

Poďme konať! Po inštalácii SP1 skontrolujte číslo @@Verzia. Z pôvodných 2100,60 sa zvýšil na 3000,0.



Ak si všimnete chybu, vyberte časť textu a stlačte Ctrl+Enter
ZDIEĽAŤ: