+ All Categories
Home > Documents > Základní obeznámení s jazykem SQL

Základní obeznámení s jazykem SQL

Date post: 07-Jan-2016
Category:
Upload: ura
View: 30 times
Download: 2 times
Share this document with a friend
Description:
Základní obeznámení s jazykem SQL. Datab á zov é syst é my. Úvod. Structured Query Language standardní jazyk pro přístup k relačním databázím původně snaha o co nejpřirozenější formulace DB požadavků (např. příkaz SELECT je to v podstatě „věta“ – proto je tak složitý) - PowerPoint PPT Presentation
31
Základní obeznámení s jazykem SQL Databázové systémy
Transcript
Page 1: Základní obeznámení s jazykem  SQL

Zaacutekladniacute obeznaacutemeniacute s

jazykem SQL

Databaacutezoveacute

systeacutemy

Uacutevod Structured Query Language

standardniacute jazyk pro přiacutestup k relačniacutem databaacuteziacutem původně snaha o co nejpřirozenějšiacute formulace DB požadavků

(např přiacutekaz SELECT je to v podstatě bdquovětaldquo ndash proto je tak složityacute) je zaacuteroveň jazykem pro

definici dat (DDL) vytvaacuteřeniacutemodifikace scheacutemat resp tabulek

manipulaci s daty (DML) dotazovaacuteniacute vklaacutedaacuteniacute aktualizace mazaacuteniacute dat

definici integritniacutech omezeniacute moduly (programovaciacute jazyk) řiacutezeniacute transakciacute atd

Historie70-ta leacuteta ndash vznikl z vyacutezkumneacuteho projektu o relačniacutech databaacuteziacutech vedeneacuteho

v firmou IBM - Sequel1986 ndash byl přijat jako oficiaacutelniacute standard ANSI (označovaacuten SQL86)1989 ndash integritniacute dodatek (označovaacuten SQL89)1992 ndash opravenaacute verze označovaacutena jako SQL92 - je standardem dodnes ndash dalšiacute standardy X_OPEN SQL (Unix) SAA-SQL (IBM) 1996 ndash dodatek pro uloženeacute moduly1999 ndash posledniacute sada dokumentů SQL99

objektově-relačniacute rozšiacuteřeniacute typy STRING BOOLEAN REF ARRAY typy pro full-text obraacutezky

prostorovaacute data triggery role programovaciacute jazyk regulaacuterniacute vyacuterazy rekurzivniacute dotazy atd

2003 ndash dalšiacute rozšiacuteřeniacute např XML management autočiacutesla std sekvence nicmeacuteně zmizel např typ BIT

Dotazy v SQL

dotaz v SQL vs kalkuly a algebra přiacutekaz SELECT sdiacuteliacute prvky obou aparaacutetů

rozšiacuteřenyacute DRK (praacutece se sloupci kvantifikaacutetory agregačniacute funkce) algebra (některeacute operace ndash projekce selekce spojeniacute kartsoučin

množinoveacute operace) na rozdiacutel od striktniacute formulace relačniacuteho modelu jsou povoleny

duplikaacutetniacute řaacutedky a nuloveacute hodnoty atributů

validaacutetor syntaxe pro SQL 92 1999 2003 umožnuje zkontrolovat dotaz (nebo jinyacute SQL přiacutekaz) podle normy httpdevelopermimercomvalidatorindexhtm

SQL patři do kategorie tzv deklarativniacutech programovaciacutech jazyků - koacuted jazyka SQL nepiacutešeme v žaacutedneacutem samostatneacutem programu ale vklaacutedaacuteme jej do jineacuteho programovaciacuteho jazyka kteryacute je již proceduraacutelniacute

Se samotnyacutem jazykem SQL můžeme pracovat pouze v přiacutepadě že se terminaacutelem připojiacuteme na SQL server a na přiacutekazovyacute řaacutedek zadaacutevaacuteme přiacutemo přiacutekazy jazyka SQL

Pro řešeniacute probleacutemů různyacutech syntaxi SQL (použiacutevanyacutech před zavedeniacutem standardu) Microsoft formalizoval CLI ndash Common Language Interface pro pracovniacute stanice a oznaacutemil že jeho produkty by měli použiacutevat toto rozhraniacute ndash nazyacutevaacute ho ODBC ndash Open Databaze Connectivity

Kontexty použitiacute jazyka SQL1048766 přiacutemyacute (direct) SQL 1048766 hostitelskaacute verze (embedded) SQL 1048766 jazyk modulů

Hlavniacute kategorie přiacutekazů bull1048766 definice dat a pohledů (DDL ndash Data Definition Language) bull1048766 manipulace s daty (DML ndash Data Manipulation Language)

1048766 - pro přiacutemyacute SQL 1048766 - pro hostitelskou verzi

bull1048766 autorizace (řiacutezeniacute přiacutestupovyacutech praacutev) bull1048766 integrita dat bull1048766 řiacutezeniacute transakciacute

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 2: Základní obeznámení s jazykem  SQL

Uacutevod Structured Query Language

standardniacute jazyk pro přiacutestup k relačniacutem databaacuteziacutem původně snaha o co nejpřirozenějšiacute formulace DB požadavků

(např přiacutekaz SELECT je to v podstatě bdquovětaldquo ndash proto je tak složityacute) je zaacuteroveň jazykem pro

definici dat (DDL) vytvaacuteřeniacutemodifikace scheacutemat resp tabulek

manipulaci s daty (DML) dotazovaacuteniacute vklaacutedaacuteniacute aktualizace mazaacuteniacute dat

definici integritniacutech omezeniacute moduly (programovaciacute jazyk) řiacutezeniacute transakciacute atd

Historie70-ta leacuteta ndash vznikl z vyacutezkumneacuteho projektu o relačniacutech databaacuteziacutech vedeneacuteho

v firmou IBM - Sequel1986 ndash byl přijat jako oficiaacutelniacute standard ANSI (označovaacuten SQL86)1989 ndash integritniacute dodatek (označovaacuten SQL89)1992 ndash opravenaacute verze označovaacutena jako SQL92 - je standardem dodnes ndash dalšiacute standardy X_OPEN SQL (Unix) SAA-SQL (IBM) 1996 ndash dodatek pro uloženeacute moduly1999 ndash posledniacute sada dokumentů SQL99

objektově-relačniacute rozšiacuteřeniacute typy STRING BOOLEAN REF ARRAY typy pro full-text obraacutezky

prostorovaacute data triggery role programovaciacute jazyk regulaacuterniacute vyacuterazy rekurzivniacute dotazy atd

2003 ndash dalšiacute rozšiacuteřeniacute např XML management autočiacutesla std sekvence nicmeacuteně zmizel např typ BIT

Dotazy v SQL

dotaz v SQL vs kalkuly a algebra přiacutekaz SELECT sdiacuteliacute prvky obou aparaacutetů

rozšiacuteřenyacute DRK (praacutece se sloupci kvantifikaacutetory agregačniacute funkce) algebra (některeacute operace ndash projekce selekce spojeniacute kartsoučin

množinoveacute operace) na rozdiacutel od striktniacute formulace relačniacuteho modelu jsou povoleny

duplikaacutetniacute řaacutedky a nuloveacute hodnoty atributů

validaacutetor syntaxe pro SQL 92 1999 2003 umožnuje zkontrolovat dotaz (nebo jinyacute SQL přiacutekaz) podle normy httpdevelopermimercomvalidatorindexhtm

SQL patři do kategorie tzv deklarativniacutech programovaciacutech jazyků - koacuted jazyka SQL nepiacutešeme v žaacutedneacutem samostatneacutem programu ale vklaacutedaacuteme jej do jineacuteho programovaciacuteho jazyka kteryacute je již proceduraacutelniacute

Se samotnyacutem jazykem SQL můžeme pracovat pouze v přiacutepadě že se terminaacutelem připojiacuteme na SQL server a na přiacutekazovyacute řaacutedek zadaacutevaacuteme přiacutemo přiacutekazy jazyka SQL

Pro řešeniacute probleacutemů různyacutech syntaxi SQL (použiacutevanyacutech před zavedeniacutem standardu) Microsoft formalizoval CLI ndash Common Language Interface pro pracovniacute stanice a oznaacutemil že jeho produkty by měli použiacutevat toto rozhraniacute ndash nazyacutevaacute ho ODBC ndash Open Databaze Connectivity

Kontexty použitiacute jazyka SQL1048766 přiacutemyacute (direct) SQL 1048766 hostitelskaacute verze (embedded) SQL 1048766 jazyk modulů

Hlavniacute kategorie přiacutekazů bull1048766 definice dat a pohledů (DDL ndash Data Definition Language) bull1048766 manipulace s daty (DML ndash Data Manipulation Language)

1048766 - pro přiacutemyacute SQL 1048766 - pro hostitelskou verzi

bull1048766 autorizace (řiacutezeniacute přiacutestupovyacutech praacutev) bull1048766 integrita dat bull1048766 řiacutezeniacute transakciacute

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 3: Základní obeznámení s jazykem  SQL

Historie70-ta leacuteta ndash vznikl z vyacutezkumneacuteho projektu o relačniacutech databaacuteziacutech vedeneacuteho

v firmou IBM - Sequel1986 ndash byl přijat jako oficiaacutelniacute standard ANSI (označovaacuten SQL86)1989 ndash integritniacute dodatek (označovaacuten SQL89)1992 ndash opravenaacute verze označovaacutena jako SQL92 - je standardem dodnes ndash dalšiacute standardy X_OPEN SQL (Unix) SAA-SQL (IBM) 1996 ndash dodatek pro uloženeacute moduly1999 ndash posledniacute sada dokumentů SQL99

objektově-relačniacute rozšiacuteřeniacute typy STRING BOOLEAN REF ARRAY typy pro full-text obraacutezky

prostorovaacute data triggery role programovaciacute jazyk regulaacuterniacute vyacuterazy rekurzivniacute dotazy atd

2003 ndash dalšiacute rozšiacuteřeniacute např XML management autočiacutesla std sekvence nicmeacuteně zmizel např typ BIT

Dotazy v SQL

dotaz v SQL vs kalkuly a algebra přiacutekaz SELECT sdiacuteliacute prvky obou aparaacutetů

rozšiacuteřenyacute DRK (praacutece se sloupci kvantifikaacutetory agregačniacute funkce) algebra (některeacute operace ndash projekce selekce spojeniacute kartsoučin

množinoveacute operace) na rozdiacutel od striktniacute formulace relačniacuteho modelu jsou povoleny

duplikaacutetniacute řaacutedky a nuloveacute hodnoty atributů

validaacutetor syntaxe pro SQL 92 1999 2003 umožnuje zkontrolovat dotaz (nebo jinyacute SQL přiacutekaz) podle normy httpdevelopermimercomvalidatorindexhtm

SQL patři do kategorie tzv deklarativniacutech programovaciacutech jazyků - koacuted jazyka SQL nepiacutešeme v žaacutedneacutem samostatneacutem programu ale vklaacutedaacuteme jej do jineacuteho programovaciacuteho jazyka kteryacute je již proceduraacutelniacute

Se samotnyacutem jazykem SQL můžeme pracovat pouze v přiacutepadě že se terminaacutelem připojiacuteme na SQL server a na přiacutekazovyacute řaacutedek zadaacutevaacuteme přiacutemo přiacutekazy jazyka SQL

Pro řešeniacute probleacutemů různyacutech syntaxi SQL (použiacutevanyacutech před zavedeniacutem standardu) Microsoft formalizoval CLI ndash Common Language Interface pro pracovniacute stanice a oznaacutemil že jeho produkty by měli použiacutevat toto rozhraniacute ndash nazyacutevaacute ho ODBC ndash Open Databaze Connectivity

Kontexty použitiacute jazyka SQL1048766 přiacutemyacute (direct) SQL 1048766 hostitelskaacute verze (embedded) SQL 1048766 jazyk modulů

Hlavniacute kategorie přiacutekazů bull1048766 definice dat a pohledů (DDL ndash Data Definition Language) bull1048766 manipulace s daty (DML ndash Data Manipulation Language)

1048766 - pro přiacutemyacute SQL 1048766 - pro hostitelskou verzi

bull1048766 autorizace (řiacutezeniacute přiacutestupovyacutech praacutev) bull1048766 integrita dat bull1048766 řiacutezeniacute transakciacute

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 4: Základní obeznámení s jazykem  SQL

Dotazy v SQL

dotaz v SQL vs kalkuly a algebra přiacutekaz SELECT sdiacuteliacute prvky obou aparaacutetů

rozšiacuteřenyacute DRK (praacutece se sloupci kvantifikaacutetory agregačniacute funkce) algebra (některeacute operace ndash projekce selekce spojeniacute kartsoučin

množinoveacute operace) na rozdiacutel od striktniacute formulace relačniacuteho modelu jsou povoleny

duplikaacutetniacute řaacutedky a nuloveacute hodnoty atributů

validaacutetor syntaxe pro SQL 92 1999 2003 umožnuje zkontrolovat dotaz (nebo jinyacute SQL přiacutekaz) podle normy httpdevelopermimercomvalidatorindexhtm

SQL patři do kategorie tzv deklarativniacutech programovaciacutech jazyků - koacuted jazyka SQL nepiacutešeme v žaacutedneacutem samostatneacutem programu ale vklaacutedaacuteme jej do jineacuteho programovaciacuteho jazyka kteryacute je již proceduraacutelniacute

Se samotnyacutem jazykem SQL můžeme pracovat pouze v přiacutepadě že se terminaacutelem připojiacuteme na SQL server a na přiacutekazovyacute řaacutedek zadaacutevaacuteme přiacutemo přiacutekazy jazyka SQL

Pro řešeniacute probleacutemů různyacutech syntaxi SQL (použiacutevanyacutech před zavedeniacutem standardu) Microsoft formalizoval CLI ndash Common Language Interface pro pracovniacute stanice a oznaacutemil že jeho produkty by měli použiacutevat toto rozhraniacute ndash nazyacutevaacute ho ODBC ndash Open Databaze Connectivity

Kontexty použitiacute jazyka SQL1048766 přiacutemyacute (direct) SQL 1048766 hostitelskaacute verze (embedded) SQL 1048766 jazyk modulů

Hlavniacute kategorie přiacutekazů bull1048766 definice dat a pohledů (DDL ndash Data Definition Language) bull1048766 manipulace s daty (DML ndash Data Manipulation Language)

1048766 - pro přiacutemyacute SQL 1048766 - pro hostitelskou verzi

bull1048766 autorizace (řiacutezeniacute přiacutestupovyacutech praacutev) bull1048766 integrita dat bull1048766 řiacutezeniacute transakciacute

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 5: Základní obeznámení s jazykem  SQL

SQL patři do kategorie tzv deklarativniacutech programovaciacutech jazyků - koacuted jazyka SQL nepiacutešeme v žaacutedneacutem samostatneacutem programu ale vklaacutedaacuteme jej do jineacuteho programovaciacuteho jazyka kteryacute je již proceduraacutelniacute

Se samotnyacutem jazykem SQL můžeme pracovat pouze v přiacutepadě že se terminaacutelem připojiacuteme na SQL server a na přiacutekazovyacute řaacutedek zadaacutevaacuteme přiacutemo přiacutekazy jazyka SQL

Pro řešeniacute probleacutemů různyacutech syntaxi SQL (použiacutevanyacutech před zavedeniacutem standardu) Microsoft formalizoval CLI ndash Common Language Interface pro pracovniacute stanice a oznaacutemil že jeho produkty by měli použiacutevat toto rozhraniacute ndash nazyacutevaacute ho ODBC ndash Open Databaze Connectivity

Kontexty použitiacute jazyka SQL1048766 přiacutemyacute (direct) SQL 1048766 hostitelskaacute verze (embedded) SQL 1048766 jazyk modulů

Hlavniacute kategorie přiacutekazů bull1048766 definice dat a pohledů (DDL ndash Data Definition Language) bull1048766 manipulace s daty (DML ndash Data Manipulation Language)

1048766 - pro přiacutemyacute SQL 1048766 - pro hostitelskou verzi

bull1048766 autorizace (řiacutezeniacute přiacutestupovyacutech praacutev) bull1048766 integrita dat bull1048766 řiacutezeniacute transakciacute

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 6: Základní obeznámení s jazykem  SQL

Kontexty použitiacute jazyka SQL1048766 přiacutemyacute (direct) SQL 1048766 hostitelskaacute verze (embedded) SQL 1048766 jazyk modulů

Hlavniacute kategorie přiacutekazů bull1048766 definice dat a pohledů (DDL ndash Data Definition Language) bull1048766 manipulace s daty (DML ndash Data Manipulation Language)

1048766 - pro přiacutemyacute SQL 1048766 - pro hostitelskou verzi

bull1048766 autorizace (řiacutezeniacute přiacutestupovyacutech praacutev) bull1048766 integrita dat bull1048766 řiacutezeniacute transakciacute

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 7: Základní obeznámení s jazykem  SQL

Dotazy v SQL

pro vysvětleniacute použijeme syntaxi SQL 86 pomociacute diagramů orientovanyacute graf - automat rozpoznaacutevajiacuteciacute SQL rozlišovaacuteniacute termů v diagramu

malaacute piacutesmena podtrženiacute ndash podvyacuteraz v raacutemci daneacute konstrukce velkaacute piacutesmena ndash kliacutečoveacute slovo SQL malaacute piacutesmena kurziacuteva ndash jmeacuteno (tabulkysloupce)

miacutesto atributdomeacutena relace budeme použiacutevat označeniacute

sloupec tabulka

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 8: Základní obeznámení s jazykem  SQL

CREATE TABLE ndash zaacutekladniacute konstrukce

vytvořeniacute scheacutematu a praacutezdneacute tabulky (pokud již neniacute tabulka s danyacutem jmeacutenem založena)

tabulka maacute definovaacuteny jednak sloupce (atributy a souvisejiacuteciacute atributovaacute IO) a jednak tabulkovaacute IO

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 9: Základní obeznámení s jazykem  SQL

CREATE TABLE ndash definice sloupce

každyacute sloupec maacute vždy přiřazen jednak datovyacute typ (data_type) nepovinně je možno specifikovat

implicitniacute hodnotu v nově vytvořeneacutem zaacuteznamu (DEFAULT NULL | value) sloupcoveacute integritniacute omezeniacute

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 10: Základní obeznámení s jazykem  SQL

CREATE TABLE ndash integritniacute omezeniacute sloupce (lokaacutelniacute)

sloupcoveacute IO umožňuje omezit množinu platnyacutech hodnot daneacuteho atributu v raacutemci zaacuteznamu (noveacuteho nebo modifikovaneacuteho)

pojmenovaneacute CREATE TABLE ( CONSTRAINT constraint ) nepojmenovaneacute

5 typů omezeniacute na platnou hodnotu atributu NOT NULL ndash hodnota musiacute byacutet nenulovaacute UNIQUE ndash hodnota musiacute byacutet unikaacutetniacute (v raacutemci všech řaacutedků v tabulce) PRIMARY KEY ndash definuje primaacuterniacute kliacuteč (toteacutež jako NOT NULL + UNIQUE) REFERENCES ndash definuje jednoatributovyacute ciziacute kliacuteč (oba atributy musiacute byacutet kompatibilniacute) CHECK ndash obecnaacute podmiacutenka

vyhodnotiacute se pouze na vklaacutedaneacutem řaacutedku (řaacutedciacutech) při vyhodnoceniacute podmiacutenky na TRUE je hodnota atributu platnaacute

při pokusu o aktualizaciřaacutedků s neplatnou hodnotou atributu se aktualizace celeacuteho řaacutedkuneprovede

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 11: Základní obeznámení s jazykem  SQL

CREATE TABLE ndash integritniacute omezeniacute tabulky (globaacutelniacute)

zobecněniacute atributovyacutech IO pro kombinace hodnot viacutece sloupců kromě NOT NULL to maacute smysl pouze u jednotlivyacutech atributů

UNIQUE ndash n-tice hodnot je unikaacutetniacute FOREIGN KEY ndash stejně jako REFERENCES u atributu CHECK

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 12: Základní obeznámení s jazykem  SQL

Referenčniacute integrita při aktualizaci tabulky referujiacuteciacute (ta pro kterou je IO definovaacuteno) nebo

referovaneacute může nastat porušeniacute integrity ciziacutech kliacutečů pokus o vloženiacuteaktualizaci zaacuteznamu s hodnotou ciziacuteho kliacuteče kteraacute se nevyskytuje v sloupci referovaneacute

tabulky pokus o smazaacuteniacute zaacuteznamu z referovaneacute tabulky když pro mazanou hodnotu kliacuteče existuje reference

při porušeniacute integrity ciziacutech kliacutečů může nastat hlaacutešeniacute chyby aktualizace pokud neniacute definovaacutena referenčniacute akce (SQL 89) vykonaacuteniacute referenčniacute akce referential_action (SQL 92)

ON UPDATE ON DELETE ndash podmiacutenka spuštěniacute akce při modifikaci referovaneacute hodnoty nebo smazaacuteniacute řaacutedku v referovaneacute tabulce

CASCADE ndash zaacuteznam s referujiacuteciacute hodnotou se takeacute smaže nebo aktualizuje novou hodnotou SET NULL ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na NULL SET DEFAULT ndash hodnota dotčeneacuteho zaacuteznamu se nastaviacute na implicitniacute hodnotu definovanou v

CREATE TABLE NO ACTION ndash implicitniacute neprovede se nic resp SŘBD ohlaacutesiacute chybu tj chovaacuteniacute v raacutemci SQL 89

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 13: Základní obeznámení s jazykem  SQL

Modifikaacutetory AUTO_INCREMENT ndash (automatickeacute čiacuteslo) definuje datovyacute typ pole kteryacute při

přidaacuteniacute noveacuteho zaacuteznamu do tabulky automaticky uložiacute jedinečneacute čiacuteslo o jedničku většiacute než předchoziacute Nedovoliacute uložit už jednou použitou hodnotu i když zaacuteznam s touto hodnotou byl již z databaacuteze odstraněn Modifikaacutetor AUTO_INCREMENT lze použiacutet pouze u poliacute s celočiacuteselnyacutemi hodnotami

ZEROFILL ndash použiacutevaacute se k zobrazeniacute vedouciacutech nul u čiacutesel kteraacute jsou založena na šiacuteřce zobrazeniacute tj vyžadujiacute určityacute počet čiacuteslic Chceme-li čiacuteslo 23 zobrazit jako 000023 musiacuteme pole deklarovat jako INT(6) ZEROFILL

BINARY ndash umožňuje uklaacutedaacuteniacute textovyacutech informaciacute jako binaacuterniacutech řetězců Řetězce uloženeacute v binaacuterniacutem formaacutetu rozlišujiacute velikost piacutesmen To se projeviacute takeacute na třiacuteděniacute těchto poliacute

DEFAULT ndash umožňuje určit hodnotu pole jehož hodnota nebude při uloženiacute zaacuteznamu (řaacutedku) znaacutemaacute Vyacutechoziacute hodnotou použiacutevanou v systeacutemu MySQL je NULL Hodnota NULL je dosazovaacutena do všech praacutezdnyacutech poliacute kromě poliacute typu ENUM

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 14: Základní obeznámení s jazykem  SQL

Vytvořeniacute baacutezoveacute tabulky

- přiacutekaz vytvořiacute novou praacutezdnou tabulku s definovanyacutem počtem sloupců a popis uložiacute do katalogu

Integritniacute omezeniacute jsou omezeniacute kladenaacute na hodnoty ve sloupciacutech tabulky aby nedošlo k porušeniacute integrity dat

CREATE TABLE naacutezev_tabulky (definice_sloupce hellip [definice_integritniacutech_omezeniacute_tabulky] )

jmeacuteno_sloupce TYP [impl_hodnota] [integritniacute omezeniacute_sloupce]

Definice sloupce

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 15: Základní obeznámení s jazykem  SQL

Integritniacute omezeniacute celeacute tabulky

PRIMARY KEY (jm_sloupce hellip) UNIQUE (jm_sloupce hellip) FOREIGN KEY (jm_sloupce hellip) REFERENCES tabulka [(jm_sloupce hellip)] [udaacutelost ref_akce]

CHECK (podmiacuteněnyacute_vyacuteraz)

Integritniacute omezeniacute sloupce

NULL resp NOT NULL CHECK (podmiacuteněnyacute_vyacuteraz) PRIMARY KEY UNIQUE FOREIGN KEY REFERENCES tabulka [(jm_sloupce)]

[udaacutelost ref_akce]

Referenčniacute akce - CASCADE SET DEFAULT SET NULL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 16: Základní obeznámení s jazykem  SQL

Přiacuteklad Spořitelna ndash tabulky s globaacutelniacutemi IO

KLIENTr_cislo jmeno prijmeni ulice mesto6010121224 Jan Novyacute Jaacutenskaacute 25 Zliacuten8261115267 Petra Novaacutekovaacute Poštovaacute 128 Lešnaacute5805064891 Pavel Novaacuteček Nezvalova 697 Zliacuten7953022459 Ivana Novotnaacute Pod mlyacutenem 12 Lukov

UCET POBOCKAc_uctu stav r_cislo pobocka c_p nazev jmeni4568517 42000 8261115267 2 1 Naacutem Miacuteru 12 50000006585485 75000 5805064891 1 2 Zaraacutemiacute 325 80000003256151 25000 8261115267 1

TRANSAKCEc_uctu c_transakce castka datum6585485 1 -2100 110920074568517 1 -4560 110920076585485 2 10000 12092007

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 17: Základní obeznámení s jazykem  SQL

CREATE TABLE Klient(r_cislo VARCHAR(11) NOT NULL jmeno VARCHAR(20) NOT NULL prijmeni VARCHAR(30) NOT NULL ulice VARCHAR(30) NOT NULL mesto VARCHAR(30) NOT NULL CONSTRAINT pk PRIMARY KEY (r_cislo)) CREATE TABLE Pobocka(c_p INT NOT NULL nazev VARCHAR(10) jmeni DECIMAL(102) CONSTRAINT pk PRIMARY KEY (c_p))

CREATE TABLE Ucet (c_uctu DECIMAL(70) NOT NULL stav DECIMAL(102) r_cislo VARCHAR(11) NOT NULL pobocka VARCHAR(20) NOT NULL CONSTRAINT pk PRIMARY KEY (c_uctu) CONSTRAINT fk1 FOREIGN KEY (r_cislo) REFERENCES Klient CONSTRAINT fk2 FOREIGN KEY (pobocka) REFERENCES Pobocka )

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 18: Základní obeznámení s jazykem  SQL

ALTER TABLE

změna definice scheacutematu atributy ndash přidaacuteniacuteodebraacuteniacute atributu změna DEFAULT hodnoty IO ndash přidaacuteniacuteodebraacuteniacute IO

pozor v tabulce už mohou byacutet data kteraacute nedovoliacute změnit IO (např zaveacutest IO primaacuterniacute kliacuteč)

ALTER TABLE table-name

ADD [COLUMN] column-name column-definition

ADD constraint-definition

ALTER [COLUMN] column-name SET

ALTER [COLUMN] column-name DROP

DROP COLUMN column-name

DROP CONSTRAINT constraint-name

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 19: Základní obeznámení s jazykem  SQL

Změna struktury tabulky

ALTER TABLE naacutezev_tabulky aktualizace

ALTER TABLE naacutezev_tabulkyADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

Modifikuje tabulku a změniacute informace v katalogu

V přiacutepadě že v tabulce již nějakaacute data jsou lze použiacutet naacutesledujiacuteciacute přiacutekaz

Přidaacuteniacute sloupců do tabulky

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 20: Základní obeznámení s jazykem  SQL

Uacuteprava definice sloupců

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute mezeniacute]

ALTER TABLE naacutezev_tabulky DROP COLUMN jmeacuteno_sloupce [CASCADE]

Zaacutekladniacute přiacutekaz

Mazaacuteniacute sloupců

Maacuteme-li nějakyacute sloupec jehož hodnoty už opravdu nepotřebujeme jednoduše jej smažeme naacutesledujiacuteciacutem přiacutekazem

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 21: Základní obeznámení s jazykem  SQL

Přejmenovaacuteniacute sloupce

Prvniacute možnost je rychlejšiacute a využijeme v niacute již znaacutemyacute přiacutekaz

Druhaacute možnost je obecnějšiacute je potřeba proveacutest ji ve viacutece krociacutech

ALTER TABLE naacutezev_tabulkyCHANGE COLUMN stareacute_jmeacuteno_sloupce

noveacute_jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

ALTER TABLE naacutezev_tabulky ADD COLUMN jmeacuteno_sloupce typ_sloupce [integritniacute omezeniacute]

UPDATE naacutezev_tabulkySET stareacute_jmeacuteno_sloupce = noveacute_jmeacuteno_sloupce

ALTER TABLE naacutezev_tabulkyDROP stareacute_jmeacuteno_sloupce

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 22: Základní obeznámení s jazykem  SQL

DROP TABLE DROP TABLE table komplementaacuterniacute k přiacutekazu CREATE TABLE table smaže se jak obsah tabulky tak i scheacutema tabulky

pokud chceme vymazat pouze obsah tabulky použijeme přiacutekaz DELETE FROM table

Pokud provedeme přiacutekaz DROP TABLE tak přijdeme o všechna data kteraacute v mazaneacute tabulce byla uložena

Odstraněniacute tabulky

DROP TABLE naacutezev_tabulky

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 23: Základní obeznámení s jazykem  SQL

Modifikace dat SQL obsahuje kromě SELECT tři přiacutekazy pro manipulaci s

daty INSERT INTO ndash vloženiacute řaacutedků DELETE FROM ndash vymazaacuteniacute řaacutedků UPDATE ndash aktualizace hodnot v řaacutedciacutech

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 24: Základní obeznámení s jazykem  SQL

INSERT INTO vklaacutedaacuteniacute řaacutedku vyacutečtem hodnot dvě možnosti

INSERT INTO table VALUES (h1 h2 h3 h4) INSERT INTO table (s1 s2 s4) VALUES (h1 h2 h4)

vklaacutedaacuteniacute viacutece řaacutedků vyacutečtem hodnot INSERT INTO table VALUES (h11 h12 h13)(h21 h22 h23)

vklaacutedaacuteniacute viacutece řaacutedků jejichž hodnoty vzniknou jako vyacutesledek dotazu INSERT INTO tabulka | (vyacutečet atributů) | (SELECT FROM )

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 25: Základní obeznámení s jazykem  SQL

INSERT INTO naacutezev_tabulky [(naacutez_sloupce]] zdroj

Zdroje pro vklaacutedaniacute dat Řaacutedek implicitniacutech hodnot ndash z přiacutekazu CREATE TABLE

Řaacutedek zadanyacutech hodnot

DEFAULT_VALUES

VALUES (skalarniacute_vyacuteraz|NULL|DEFAULThellip)

Vyacutesledek poddotazu

tabulkovyacute_vyacuteraz

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 26: Základní obeznámení s jazykem  SQL

Přiacuteklad

INSERT INTO Klient VALUES (lsquo6010121224lsquolsquoJanlsquolsquoNovyacutelsquolsquoJaacutenskaacute 25lsquolsquoZliacutenlsquo)

INSERT INTO Klient (r_cislo jmeno prijmeni ulice mesto)VALUES (lsquo8261115267lsquolsquoPetralsquolsquoNovaacutekovaacutelsquolsquoPoštovaacute 128lsquolsquoLešnaacutelsquo)

(lsquo5805064891lsquolsquoPavellsquolsquoNovaacutečeklsquolsquoNezvalova 697lsquolsquoZliacutenlsquo)

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 27: Základní obeznámení s jazykem  SQL

UPDATE aktualizace zaacuteznamů splňujiacuteciacutech podmiacutenku hodnoty zvolenyacutech atributů vybranyacutech zaacuteznamů jsou

nastaveny na NULL hodnotu expression (např konstanta) vyacutesledek dotazu

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 28: Základní obeznámení s jazykem  SQL

Aktualizace dat

UPDATE naacutezev_tabulky SET sloupec = rsquohodnotarsquo

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquosloupec2 = rsquohodnota2rsquohellip

UPDATE naacutezev_tabulky SET sloupec1 = rsquohodnota1rsquoWHERE sloupec2 = rsquohodnota2rsquo

Použitiacute klauzule WHERE

Pro změnu viacutece hodnot se použiacutevaacute zaacutepis

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 29: Základní obeznámení s jazykem  SQL

Přiacuteklad

UPDATE Klient SET jmeno = lsquoJakubrsquo WHERE r_cislo = lsquo6010121224rsquo

UPDATE Ucet AS u SET stav = stav+ (SELECT castka FROM Transakce AS t WHERE uc_uctu = tc_uctu)

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 30: Základní obeznámení s jazykem  SQL

DELETE FROM

vymaže zaacuteznamy ktereacute splňujiacute podmiacutenku bez nadefinovaacuteniacute podmiacutenky vymaže všechny zaacuteznamy

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquo

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1

Page 31: Základní obeznámení s jazykem  SQL

Odstraňovaacuteniacute dat

POZOR ndash po odstraněniacute zaacuteznamu už neniacute možneacute zaacuteznam obnovit Je dobreacute miacutet data pro jistotu zaacutelohovanaacute Při odstraňovaacuteniacute dat je nutneacute použiacutevat podmiacutenku WHERE jinak se může staacutet že z tabulky odstraniacutete všechna data

Chcete-li zajistit většiacute bezpečnost před nechtěnyacutem odstraněniacutem zaacuteznamů můžete použiacutet klauzuli LIMIT kteraacute omeziacute počet odstraňovanyacutech zaacuteznamů

DELETE FROM naacutezev_tabulky WHERE sloupec = rsquohodnotarsquoLIMIT 1


Recommended