SQL - vkládáme, měníme a mažeme data!

V předchozích dílech našeho seriálu jsme se zajímali pouze o to, jak data z tabulek získat. Menším tajemstvím pro nás zůstávalo, kde se tam vlastně vzala. Dnes si tedy ukážeme, jak data do tabulek vložit, jak je změnit a smazat.
V předchozích dílech našeho seriálu jsme se zajímali pouze o to, jak data z tabulek získat. Menším tajemstvím pro nás zůstávalo, kde se tam vlastně vzala. Dnes si tedy ukážeme, jak data do tabulek vložit, jak je změnit a smazat.

Zmíněné tři operace mají v SQL ekvivalent v příkazech INSERT, UPDATE a DELETE. Zjednodušená syntaxe prvního z nich má následující tvar:

INSERT INTO jméno_tabulky
[(položky)]
VALUES
(hodnoty)

Příkazu lze, ostatně jako v SQL u každého, použít v několika variantách. První možností je vynechat seznam položek, které chceme do tabulky vkládat. V takovém případě musíme ovšem zajistit, aby za klauzulí VALUES následovaly hodnoty všech položek ve stejném pořadí, jak jsou v tabulce nadefinovány. Příkaz

INSERT INTO osoby
VALUES (`Petra`,`Nováčková`,`585522/8789`,`11.5.1988`)
založí do nám dobře známé tabulky osoby záznam pro Petru Nováčkovou. Tabulka osoby pak bude obsahovat následující řádky (zde byl nový záznam přidán na konec, fyzické umístění však závisí na konkrétním systému):
jméno příjmení rodné_číslo datum
Karel Smolný 580815/8777 3.12.1992
Marek Jurda 650404/8956 2.11.1992
Martin Pavlásek 720303/5511 28.3.1990
Pavel Jirásek 551212/7877 26.3.1989
Pavla Nováková 785308/4569 28.6.1997
Pavla Nováková 555111/3042 28.5.1990
Romana Bourková 745226/8820 3.5.1995
Petra Nováčková 585522/8785 11.5.1988

Ještě jednou si všimněme, že pořadí hodnot za klauzulí VALUES je shodné s pořadím definicí položek v tabulce. Tento požadavek je pochopitelný - systém se musí rozhodnout, která hodnota patří jaké položce. Zapíšeme-li tento příkaz ve tvaru

INSERT INTO osoby
VALUES (`Nováčková`,`Petra`,`585522/8789`,`11.5.1988`)
tak sice systém nenahlásí žádnou chybu, ale bude přehozen význam položek jméno a příjmení. Může ovšem nastat situace, kdy se pokusíme vložit například řetězec znaků do položky nadefinované jako číselné - další chování pak záleží na vlastním systému. Může (a s největší pravděpodobností se o to pokusí) provést automatickou konverzi. Pokud se nezdaří, provádění příkazu skončí s chybou (nekompatibilita typů). Příkaz INSERT zapsaný v tomto tvaru má ještě jednu podstatnou nevýhodu - musíme zadat hodnoty pro všechny položky. Ve většině reálných případů (vkládání záznamů do tabulky) však tento požadavek splněn není. Proto máme možnost příkazu INSERT říci, které položky chceme při vkládání záznamu hodnotou naplnit (zbylé jsou zpravidla naplněny tzv. NULL (případně DEFAULT) hodnotou - k bližšímu popisu NULL a DEFAULT se vrátíme v některém z příštích dílů).
INSERT INTO osoby
(jméno,příjmení)
VALUES (`Petra`,`Nováčková`)
Podmínkou opět je, aby hodnoty za klauzulí VALUES odpovídaly vybraným položkám. Podotýkám, že tuto variantu s vyjmenovanými položkami je vhodnější používat vždy - nenastanou problémy s již existujícím SQL kódem, pokud dojde ke změně v definici tabulky (přesněji pouze k přehození pořadí položek či přidání dalších - při odebrání položky, která je v INSERTu použita, musíme příkaz upravit).

Nyní již víme, jak si můžeme do tabulky data vložit. Co máme ale udělat, když musíme některý záznam v tabulce změnit? Ukažme si, jak se tento požadavek v SQL řeší pomocí příkazu UPDATE. Syntaxe tohoto příkazu má následující podobu:

UPDATE jméno_tabulky
SET položka=hodnota [,položka=hodnota] …
WHERE podmínka
Obdobně jako u příkazu INSERT je nutné pamatovat na typovou kompatibilitu. Podmínka za klauzulí WHERE se řídí stejnými pravidly jako u příkazu SELECT. Chceme-li například změnit datum nástupu do zaměstnání u Marka Jurdy a Martina Pavláska, může mít UPDATE tento tvar:
UPDATE osoby
SET datum=`23.6.1990`
WHERE rodné_číslo IN (`650404/8956`,`720303/5511`)
Podmínka mohla mít i jiný tvar, například omezení na jméno a příjmení, případně (vzhledem k jedinečnosti) na datum nástupu. Příkaz UPDATE umožňuje jedním krokem změnit více položek - stačí použít oddělovač (zpravidla čárku). Následující příklad ukazuje, jak vyřešit přejmenování osoby s vybraným rodným číslem.
UPDATE osoby
SET jméno=`Martin`, příjmení=`Nováček`
WHERE rodné_číslo=`650404/8956`
Připomínám, že na místě hodnot (i v případě příkazu INSERT) mohou být nejen konkrétní data, ale také funkce či dokonce tzv. poddotazy (tvořené příkazem SELECT). K této pokročilé technice se ještě vrátíme v některém z příštích pokračování.

Posledním příkazem, který nám dnes zbývá, je DELETE. Jak jeho název napovídá, slouží k výmazu záznamů z tabulky. Odstraněn je vždy celý záznam (či skupina záznam. - záleží na podmínce). Zrušení sloupce spadá do oblasti příkazů skupiny DDL (Data Definition Language). Syntaxe je nejjednodušší z dnes probíraných příkazů a má následující tvar

DELETE [FROM] jméno_tabulky
WHERE podmínka
Klauzule FROM předcházející jméno tabulky není nutná (v některých implementacích tomu může být jinak), podmínka za WHERE podléhá stejným pravidlům jako v předchozích příkazech. Pokud se rozhodneme z naší ukázkové tabulky smazat všechny osoby, které do firmy nastoupili před 1. lednem roku 1990, příkaz DELETE bude vypadat takto
DELETE FROM osoby
WHERE datum<`1.1.1990`
Některé systémy mají mazání realizováno tak, že záznam se sice smaže (někdy ani to nemusí být pravda - označí se pouze za zrušený), ale obsazené místo se neuvolní k novému použití. Důvod je prostý - snaha co nejvíce snížit režii systému na čas potřebný k provedení příkazu.

Závěrem dnešního dílu si uveďme způsob změny dat, který se někdy v praxi používá z důvodu větší rychlosti (problematika výkonnosti a optimalizace dotazů je složitou oblastí a bude ji věnován některý z příštích dílů). Pokud chceme updatovat větší množství položek v záznamu, vyplatí se (připomínám, že "tato pravda" je závislá na konkrétním systému) záznam nejprve smazat a poté vytvořit nový s již aktuálními hodnotami.

V této chvíli již známe základní příkazy jazyka SQL pro manipulaci s daty. Příště se podíváme, jak si můžeme tabulku založit (případně změnit její definici) a vysvětlíme si, jak se v SQL pracuje s indexy.

Předchozí díly
SQL - co jsou to ty agregace?

Nevíte si s SQL rady? Zeptejte se!

2. díl o SQL - začínáme s příkazem Select

Víte, co je SQL? Ne? Nevadí - dnes začínáme!

Váš názor Další článek: TweakUI – co všechno dovede s myší (III.)

Témata článku: Software, Programování, Petr, Select, Zjednodušený příklad, Update, Položka, Syntax, Složité pravidlo, SQL


Určitě si přečtěte

Velká podzimní aktualizace: Co nového teď najdete ve Windows 10

Velká podzimní aktualizace: Co nového teď najdete ve Windows 10

** Microsoft se opět snaží spojit telefony a počítače. ** Místo velkých novinek se zaměřil spíše na drobná vylepšení. ** Vyhledávání je konečně použitelné a hledá téměř všude.

Vladislav Kluska | 78

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

Dell XPS 13: Když vás ostatní doženou až za tři roky

Dell XPS 13: Když vás ostatní doženou až za tři roky

** XPS 13 nastartoval trend notebooků bez rámečků ** Letošní model kompletně přechází na USB-C ** Navzdory malému tělu se řadí výkon ke špičce

Tomáš Holčík | 34

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

Jak horko bude ve vašem městě, až vám bude 80 let? Podívejte se, jak se projeví klimatické změny!

** Srpen byl třetí nejteplejší za posledních více než sto let ** Bude to ale daleko horší, jak ukazuje aplikace NYT ** V Praze vzroste počet horkých dní na čtyřnásobek

Karel Kilián | 21


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku