2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE



Podobné dokumenty
Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

6. blok část B Vnořené dotazy

4. blok část A Logické operátory

6. blok část C Množinové operátory

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

1. Relační databázový model

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

6. SQL složitější dotazy, QBE

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Databázové systémy. Cvičení 6: SQL

Návrh a tvorba WWW stránek 1/14. PHP a databáze

5. blok Souhrnné a skupinové dotazy

Databázové systémy I

RELAČNÍ DATABÁZOVÉ SYSTÉMY

KIV/ZIS cvičení 5. Tomáš Potužák

Databáze SQL SELECT. David Hoksza

Databázové a informační systémy

Databázové systémy Cvičení 5.2

Databáze I. Přednáška 4

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Jazyk SQL databáze SQLite. připravil ing. petr polách

Vkládání, aktualizace, mazání

Úvod do databázových systémů

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Úvod do databázových systémů

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

- sloupcové integritní omezení

Úvod do databázových systémů

Sada 1 - PHP. 14. Úvod do jazyka SQL

Databázové systémy a SQL

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Zápisování dat do databáze

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Dotazovací jazyk SQL I

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

PG 9.5 novinky ve vývoji aplikací

FAKULTA STAVEBNÍ STUDIJNÍ PROGRAM: GEODÉZIE A KARTOGRAFIE TYP PROGRAMU: MAGISTERSKÝ STUDIJNÍ OBOR: GEOMATIKA ÚVOD DO ZPRACOVÁNÍ PROSTOROVÝCH DAT

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

12. blok Pokročilé konstrukce SQL dotazů - část II

Optimalizace dotazů a databázové transakce v Oracle

Databázové systémy I

Dotazování v relačním modelu a SQL

DUM 12 téma: Příkazy pro tvorbu databáze

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

KIV/ZIS cvičení 6. Tomáš Potužák

UNIVERZITA PALACKÉHO V OLOMOUCI

Jazyk SQL 3 - DML, DDL, TCL, DCL

Databázové systémy trocha teorie

Úvod do databázových systémů

Marek Laurenčík. Excel. práce s databázemi a kontingenčními tabulkami

Materiál ke cvičením - SQL

Jazyk S Q L základy, příkazy pro práci s daty

4IT218 Databáze. 4IT218 Databáze

Tabulka fotbalové ligy

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Jazyk SQL slajdy k přednášce NDBI001

Kapitola 4: SQL. Základní struktura

Konceptuální modelování a SQL

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Databázové systémy a SQL

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

Databáze I. 5. přednáška. Helena Palovská

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

MySQL manuál. Copyright: Adam Jun Stránky manuálu:

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

8.2 Používání a tvorba databází

10. Editor databází dotazy a relace

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

Databáze I. 1. přednáška. Helena Palovská

Structured Query Language SQL

2. blok část A Jazyk SQL, datové typy

SPŠS Č.Budějovice Obor Geodézie a Katastr nemovitostí 3.ročník ATRIBUTY ZÁKLADN POJMY VÝBĚR PRVKŮ DLE ATRIBUTŮ

Řešené příklady STUDENT(RČ, JMÉNO, SPECIALIZACE) PŘEDMĚT(KÓD, NÁZEV, SYLLABUS, GARANT) ZÁPIS(RČ, KÓD, SEMESTR, ZNÁMKA)

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Databázové systémy Cvičení 5

MySQL sežere vaše data

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Univerzita Pardubice. Centrální správa dokumentů

Zkouškový příklad 4IT218 Rezervační systém zážitkové agentury. Karel Kohout FIS VŠE

Databázové systémy úvod

Databázové systémy Cvičení 5.3

Integritní omezení (IO)

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Kapitola 6: Omezení integrity. Omezení domény

Informační systémy ve zdravotnictví. 6. cvičení

2. blok Zabezpečení a ochrana dat

Transkript:

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE Studijní cíl Tento blok je věnován základní syntaxi příkazu SELECT, pojmům projekce a restrikce. Stručně zde budou představeny příkazy INSERT, UPDATE, DELETE. Doba nutná k nastudování 1-2 hodiny Průvodce studiem Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen se základními pojmy jako tabulka, sloupec, databázový systém, výraz. 1. Příkaz SELECT Příkaz SELECT je nejčastěji využívaným příkazem jazyka SQL. Slouží totiž k získávání dat z databáze. Příkaz SELECT můžeme spouštět nad tabulkou, pohledem, tabulkovou funkcí a můžeme přes něj volat vestavěné funkce databázového serveru. Základní syntaxe příkazu SELECT zní: SELECT [ALL UNIQUE DISTINCT] <sloupce> FROM <tabulka> [WHERE <podmínka>] [GROUP BY <sloupce agregace> [HAVING <podmínka>]] [ORDER BY <sloupce řazení> [ASC DESC]]; Nyní si vysvětlíme jednotlivé části příkazu SELECT. ALL UNIQUE DISTINCT nepovinné parametry, které definují, zda bude ve výsledku naloženo s duplicitami. Podrobně si je vysvětlíme později. <sloupce> - seznam sloupců, které se zobrazí ve výsledku. Výčet všech sloupců může být nahrazen operátorem *. Ukážeme si na příkladu později. <tabulka> - identifikátor tabulky (pohledu, tabulkové funkce), nad kterou je prováděn příkaz SELECT. Může zde být obsaženo více tabulek oddělených čárkou, spojení tabulek nebo vnořený dotaz. WHERE <podmínka> příkaz slouží k omezení výstupní množiny dat. Do výsledku budou zahrnuty pouze ty řádky, které vyhovují podmínce <podmínka>. Podmínka může obsahovat jakýkoliv výraz, jehož výsledkem 1

je logická hodnota (PRAVDA, NEPRAVDA). Tato operace je nazývána restrikce. GROUP BY < sloupce agregace >, HAVING <podmínka> - konstrukce pro vytváření agregačních dotazů. Agregacím a souhrnným dotazům je věnován celý blok a nebudeme se jimi v této lekci zabývat. ORDER BY <sloupce řazení> - seznam sloupců, podle kterých se bude výsledek řadit. Ke každému sloupci je možné přidat ještě směr řazení ASC (vzestupně) a DESC (sestupně). V tomto bloku se budeme zabývat pouze zjednodušenou syntaxí příkazu SELECT bez konstrukcí agregačních dotazů (GROUP BY, HAVING). 1.1. Projekce Se základní syntaxí příkazu SELECT jsme se již seznámili a než si ukážeme příklady, představíme si důležité základní pojmy. Prvním důležitým pojmem je pojem projekce. Pojem vychází z relační algebry a představuje, které sloupce z tabulky budeme příkazem SELECT zobrazovat. Mějme tabulku PRODUKTY, která má následující sloupce a data: Pokud budeme z tabulky chtít zobrazit sloupce oznaceni a cena říkáme, že provádíme projekci sloupce oznaceni a cena. V relační algebře bychom zapsali jako PRODUKTY[oznaceni, cena]. 2

Obrázek 1 - Grafické znázornění projekce 1.2. Restrikce Druhým důležitým pojmem vycházejícím z relační algebry, je pojem restrikce ( v literatuře někdy označován jako selekce). Restrikce definuje řádky, které budou obsaženy ve výsledku. Jedná se tedy o podmínky a uvádí se za klauzulí WHERE. Příklad si ukážeme na již zmíněné tabulce PRODUKTY. Zobrazíme ty řádky, kde cena > 20000. V relační algebře zapíšeme jako PRODUKTY(cena>20000). Ke spojování podmínek v restrikci se používají logické operátory (AND, OR, NOT), kterým je věnován jeden celý blok a také operátory LIKE a EXISTS, které budou také probrány později. Projekce a restrikce je možné samozřejmě kombinovat. Obrázek 2 - Grafické znázornění restrikce Pojmy projekce a restrikce jsme si objasnili a můžeme si tedy zapsat znovu syntaxi příkazu SELECT s použitím těchto pojmů ve zjednodušené formě jako: SELECT [ALL UNIQUE DISTINCT] <projekce> FROM <tabulka> [WHERE <restrikce>] [ORDER BY <sloupce řazení> [ASC DESC]]; 3

1.3. Použití příkazu SELECT Prakticky si nyní ukážeme použití příkazu SELECT. Jak již bylo řečeno, příkaz slouží k získávání dat a není možné jím jakkoliv data ve zdrojovém umístění měnit. Ukážeme si nejjednodušší použití příkazu, které je možné. Zobrazte všechna data z tabulky PRODUKTY. SELECT * FROM produkty; V příkladu jsme využili pouze povinné části příkazu SELECT. Vynechali jsme restrikce i řazení. Projekci jsme provedli nad všemi sloupci tabulky a pro zjednodušení jsme použili operátor *. Stejný příklad je možné zapsat jako: SELECT produkt_id, oznaceni, dodavatel_id, cena FROM produkty; Další příklad si uvedeme již včetně restrikcí. Zobrazte všechny produkty z tabulky PRODUKTY, které mají cenu větší než 20 000, data seřaďte podle nejdražšího produktu. SELECT produkt_id, oznaceni, dodavatel_id, cena FROM produkty WHERE cena > 20000 ORDER BY cena DESC; 4

Restrikce zajistila, že do výstupu se dostaly pouze ty řádky, které ve sloupci cena mají hodnotu větší než 20000. 1.3.1. ALL, UNIQUE, DISTINCT Klíčová slova ALL, UNIQUE a DISTINCT slouží k definování způsobu práce s duplicitními řádky ve výsledku. Než si vysvětlíme význam jednotlivých příkazů, zobrazíme si část tabulky PRODKUTY. Konkrétně provedeme projekci na sloupec dodavatel_id. SELECT dodavatel_id FROM produkty; Z výstupu je patrné, že ve výsledku máme duplicitní řádky. V některých aplikacích potřebujeme, aby výstupní množina dat obsahovala každý řádek pouze jednou. K tomuto účelu slouží klauzule DISTINCT. Doplníme ji tedy do předchozího dotazu a znovu si zobrazíme výsledek. SELECT DISTINCT dodavatel_id FROM produkty; Každý řádek výstupu je nyní unikátní. Stejnou službu nám poskytne i klauzule UNIQUE, který je synonymem pro klauzuli DISTINCT. SELECT UNIQUE dodavatel_id FROM produkty; 5

Klauzule ALL je defaultní, pokud není zvolena žádná ze zde jmenovaných. Následující příkaz zobrazí kompletně všechna data bez ohledu na duplicity: SELECT ALL dodavatel_id FROM produkty; 6

2. Příkazy INSERT, UPDATE, DELETE Základní práci a pochopení příkazu SELECT máme za sebou a nyní si představíme další rozšířené příkazy jazyka SQL. Jedná se o příkazy souhrnně označované jako DML (Data Manipulation Language), tedy příkazy pro manipulaci s daty. Mezi tyto příkazy patří INSERT, UPDATE a DELETE. Pomocí DML operací je možné upravovat data v tabulkách a za jistých podmínek také v pohledech. 2.1. INSERT Příkaz INSERT slouží ke vkládání dat do jedné nebo do více tabulek zároveň. Základní syntaxe příkazu pro vkládání dat do jedné tabulky zní: INSERT INTO <tabulka>(<sloupec> [, <sloupec2>]) VALUES (DEFAULT <data> [, DEFAULT <data2>]); <tabulka> - identifikátor tabulky (nebo pohledu), do které budeme vkládat <sloupec> - definuje sloupec tabulky, do kterého budeme vkládat. Pokud vkládáme zároveň do více sloupců, oddělujeme pomocí čárek. DEFAULT <data> - do sloupce můžeme vložit buď vlastní hodnotu (<data>) nebo defaultní hodnotu sloupce (DEFAULT), pokud je zadaná v definici tabulky. Data pro jednotlivé sloupce oddělujeme čárkou. Na ukázku si vložíme řádek do tabulky PRODUKTY a celý obsah tabulky si následně vypíšeme. INSERT INTO produkty (produkt_id, oznaceni, dodavatel_id, cena) VALUES (11, 'Notebook2', 3, 32000); SELECT * FROM produkty; 7

Řádek se do tabulky úspěšně vložil. Příkaz INSERT je možné použít pro vkládání jednotlivých řádků, ale také pro vkládání hodnot přímo z výsledku příkazu SELECT. Syntaxe takového případu je potom: INSERT INTO <cilova_tabulka>(<sloupec> [, <sloupec2>]) SELECT <projekce> FROM <zdrojova_tabulka> [WHERE <restrikce>]; Tento způsob vkládání dat si ukážeme přímo na příkladu. Opět vložíme data do tabulky PRODUKTY. Data, která budeme vkládat, budou modifikovaná data z téže tabulky. Výsledný obsah tabulky si opět zobrazíme. INSERT INTO produkty (produkt_id, oznaceni, dodavatel_id, cena) SELECT produkt_id+10, oznaceni ' NEW', dodavatel_id, cena*0.7 FROM produkty; SELECT * FROM produkty; Pro využívání této konstrukce je nutné pochopit, jak je takový příkaz databázovým systémem zpracováván. Nejdříve je vyhodnocen příkaz SELECT a teprve potom jsou data použita do příkazu INSERT. Není tedy možné, aby se cyklicky přidávaly řádky pro každý přidaný řádek. 8

2.2. UPDATE Data, která se v tabulce již nachází, musí být možné nějakým způsobem upravovat. K úpravě dat v tabulce slouží příkaz UPDATE. Obecná syntaxe příkazu UPDATE vypadá následovně: UPDATE <tabulka> SET <sloupec>=<hodnota> [, <sloupec2>=<hodnota2>] [WHERE <restrikce>]; <tabulka> - identifikátor tabulky (nebo pohledu), v níž budeme upravovat data. <sloupec>=<hodnota> - přiřazení nové hodnoty (<hodnota>) sloupci (<sloupec>). Při současné úpravě více sloupců, oddělujeme uspořádané dvojice čárkou. WHERE <restrikce> - nepovinná část příkazu. Restrikce definuje, na které řádky se změna promítne. Příkaz UPDATE si ukážeme na praktickém příkladu. Provedeme změnu v tabulce PRODUKTY a to takovou, že zdražíme produkty o 15% u odběratele s id=2. Nakonec zobrazíme upravený obsah tabulky. UPDATE produkty SET cena=1.15*cena WHERE dodavatel_id=2; SELECT * FROM produkty; 9

2.3. DELETE Dosud jsme si představili příkaz pro vkládání a upravování. Do skupiny DML operací chybí ještě příkaz DELETE, který slouží k mazání záznamů z tabulky. Obecná syntaxe příkazu DELETE zní: DELETE FROM <tabulka> [WHERE <restrikce>]; <tabulka> - identifikátor tabulky (nebo pohledu), odkud budeme mazat data. WHERE <restrikce> - nepovinná část příkazu. Restrikce definuje, které řádky budou smazány. Příkaz DELETE si ukážeme nad tabulkou PRODUKTY, kde odstraníme ty řádky, který mají id > 10, kromě id = 17. Výsledný obsah tabulky si zobrazíme. DELETE FROM produkty WHERE produkt_id >= 10 AND produkt_id <> 17; SELECT * FROM produkty; 2.4. Hodnota NULL Ve výsledcích příkazů SELECT v této lekci můžete u některých produktů pozorovat ve sloupcích dodavatel_id a cena hodnotu NULL ve výsledku z SQL Developeru, kde jsou generovány výsledky pro praktické ukázky, se zobrazuje jako (null). Jde o takzvanou prázdnou, tj. chybějící neboli neznámou hodnotu. Znamená to, že neznáme, který dodavatel daný produkt dodává nebo za jakou cenu. V databázích se s hodnotami NULL budeme pravidelně setkávat a nepochopení jejich významu nebo nevhodná práce s touto hodnotou vede k častým chybám. Nejdříve je nezbytné pochopit rozdíl mezi hodnotou NULL a hodnotou 0 (nula). Nulová hodnota například v případě ceny udává, že produkt je možné získat za 0 peněz, tedy bezplatně. Hodnota NULL však neudává cenu, ale pouze označuje položku, jejíž hodnota není udána. 10

Databázový řídící systém s hodnotou NULL pracuje odlišně, než s jinými hodnotami. Tyto hodnoty neovlivňují některé matematické operace, například počítání součtu nebo počtu hodnot. Také logické funkce AND, OR a NOT musí s tímto třetím nedefinovaným stavem pracovat. 2.5. Vytvoření tabulky příkazem CREATE TABLE V předchozích kapitolách jsme se seznámili s příkazy DML. Nyní si řekneme něco o příkazech DDL. Zkratka DDL (Data Definition Language) zastupuje příkazy, které slouží k definici databázových objektů. Jedná se o příkazy pro vytvoření, zrušení a modifikaci tabulek a všech dalších databázových objektů. V této kapitole si představíme základní DDL příkaz pro vytvoření nové tabulky. Základní syntaxe vytvoření tabulky zní: CREATE TABLE [<schema>.]<název tabulky> ( <nazev sloupce> <datový typ> [NOT NULL][DEFAULT <hodnota>][unique] [PRIMARY KEY] [CONSTRAINT <název pravidla> { NOT NULL CHECK (<pravidla>) }] [CHECK <pravidla>] [,<nazev sloupce> <datový typ> [NOT NULL][DEFAULT <hodnota>][unique] [PRIMARY KEY] [CONSTRAINT <název pravidla> { NOT NULL CHECK (<pravidla>) }] [CHECK <pravidla>]] [,CONSTRAINT <nazev pravidla> { PRIMARY KEY (<sloupce>) CHECK (<pravidla>) FOREIGN KEY (<sloupce>) REFERENCES [schema.]<tabulka>(<sloupce>)}] ); <název tabulky> - název vytvářené tabulky. Před název je možné ještě specifikovat schéma, do kterého se tabulky vytvoří. Pokud schéma nespecifikujeme, vytvoří se do aktuálního schématu. <nazev sloupce> <datový typ> - název jednoho sloupce tabulky a jeho datový typ (např. id NUMBER(10)). NOT NULL omezení, které definuje, že hodnota ve sloupci musí být vždy zadána (nesmí být NULL). 11

UNIQUE hodnoty v celém sloupci musí být unikátní. Žádná hodnota se nesmí opakovat. DEFAULT předdefinovaná hodnota (např. datum DATE DEFAULT sysdate pokud není vyplněno datum, použij aktuální systémové datum). CONSTRAINT <název pravidla> - definice pravidla CHECK <pravidla> - podmínka pro hodnoty ve sloupci (např. ID INTEGER CHECK ID BETWEEN 0 AND 100) PRIMARY KEY (<sloupce>) definuje primární klíč tabulky (hodnoty ve sloupci musí být vyplněny a musí být unikátní). FOREIGN KEY (<sloupce>) REFERENCES <tabulka>(<sloupce>) definice cizího klíče (odkazuje na sloupec jiné tabulky podpora pro udržení integrity dat). Pro názornost popsaných pravidel, si ukážeme několik příkladů vytvoření tabulek s použitím popsaných pravidel. CREATE TABLE dodavatele ( dodavatel_id NUMBER(4) NOT NULL, nazev VARCHAR2(100) NOT NULL, zastoupeni VARCHAR2 (100), CONSTRAINT dodavatel_pk PRIMARY KEY (dodavatel_id) ); CREATE TABLE produkty ( produkt_id NUMBER (8) NOT NULL, oznaceni VARCHAR2 (30) NOT NULL, dodavatel_id NUMBER (4) NOT NULL, cena NUMBER (6), CONSTRAINT fk_dodavatele FOREIGN KEY (dodavatel_id) REFERENCES dodavatele(dodavatel_id) ); V uvedeném příkladu jsou vytvořeny dvě tabulky. Tabulka dodavatele, která má 3 sloupce a jedno omezení. Omezení je definováno jako primární klíč nad sloupcem dodavatel_id. Druhá tabulka je produkty. Tato tabulka má definovány čtyři sloupce a jedno omezení cizího klíče. Sloupec dodavatel_id je napojen na stejně nazvaný sloupec tabulky dodavatele. 12

CREATE TABLE ZAMESTNANCI_DEMO ( zamestnanec_id NUMBER(6) PRIMARY KEY, jmeno VARCHAR2(20), prijmeni VARCHAR2(25) CONSTRAINT zam_prijmeni_nn NOT NULL, email VARCHAR2(50) CONSTRAINT zam_email_nn NOT NULL, mobil VARCHAR2(15), datum_nastupu DATE DEFAULT SYSDATE CONSTRAINT zam_datum_nastupu_nn NOT NULL, pozice_id VARCHAR2(10) CONSTRAINT zam_pozice_nn NOT NULL, mzda NUMBER(8,2) CONSTRAINT zam_mzda_nn NOT NULL, provize_pct NUMBER(2,2), manazer_id NUMBER(6), oddeleni_id NUMBER(4), CONSTRAINT zam_mzda_min CHECK (mzda > 0), CONSTRAINT zam_email_uk UNIQUE (email) ); Druhý, již komplexnější příklad, vytváří tabulku s 11 sloupci. Sloupec zamestnanec_id je definován jako primární klíč. Sloupce prijmeni, email, datum_nastupu, pozice_id a mzda nemohou obsahovat hodnoty NULL. V závěru jsou vytvořena dvě pravidla. Jedno pro sloupec mzda, které definuje, že plat musí být větší než 0. Další je pro sloupec email a definuje, že hodnoty tohoto sloupce musí být v celé tabulce unikátní. Strukturu tabulek si můžeme nechat vypsat pomocí příkazu DESC <název tabulky>. DESC produkty; DROP TABLE <název tabulky>; Odstraní z databáze tabulku s daným jménem, tj. všechny řádky tabulky, celou strukturu, všechny nad ní definované databázové objekty (např. indexy a všechna případná omezení definovaná nad sloupci či celou tabulkou). 13

Tabulku již umíme vytvořit i odstranit. Poslední operace, kterou ještě schází představit, je úprava tabulky. Syntaxe pro přidání sloupce či omezení do tabulky zní: ALTER TABLE <název tabulky> ADD ( {<název sloupce> <datový typ> [<omezení sloupce>]} { <omezení tabulky> } ); Přidání sloupce do tabulky si ukážeme na jednoduchých příkladech. ALTER TABLE dodavatele ADD mesto varchar2(50); ALTER TABLE dodavatele ADD ( ulice varchar2(50), telefon varchar2(13) ); V prvním příkladu byl do tabulky dodavatele přidán sloupec mesto. Ve druhém příkladu jsou do tabulky přidány hned dva sloupce, ulice a telefon. Se sloupci tabulky je samozřejmě možné provádět i další operace, jako je přejmenování, úprava a odstranění. Syntaxe pro přejmenování sloupce zní: ALTER TABLE <název tabulky> RENAME COLUMN <název> TO <nový název>; ALTER TABLE dodavatele RENAME COLUMN mesto to sidlo_mesto; Změna sloupce tabulky se provádí také příkazem ALTER s následující syntaxí: ALTER TABLE <název tabulky> MODIFY (<sloupec> <specifikace sloupce>); ALTER TABLE dodavatele MODIFY sidlo_mesto VARCHAR2(45) NOT NULL; Poslední možností úpravy struktury je odstranění sloupce s následující syntaxí: ALTER TABLE <název tabulky> DROP COLUMN <sloupec>; ALTER TABLE dodavatele DROP COLUMN sidlo_mesto; 14

2.6. Úvod do transakcí V souvislosti s příkazy INSERT, UPDATE a DELETE, tedy příkazy, které modifikují obsah tabulek, je vhodné upozornit na skutečnost, že databázové systémy jsou obvykle implementovány tak, že změny v tabulkách je nutné následně buď potvrdit, nebo zamítnout. Hovoříme o takzvaném transakčním zpracování příkazů, kterému bude věnována samostatná lekce. V tuto chvíli je pro nás důležité, že veškeré změny provedené příkazy DML v tabulkách je nutné potvrdit příkazem COMMIT, případně odvolat příkazem ROLLBACK. Pokud ani jednu z těchto operací neprovedeme, dojde buď: a) K implicitnímu potvrzení transakce (COMMIT) při a. Úspěšném ukončení připojení k databázovému serveru b. Před provedením příkazu DDL b) K implicitnímu odrolování transakce (ROLLBACK) při nenormálním ukončení připojení k databázovému serveru (například při přerušení spojení) 15

Pojmy k zapamatování Příkazy a funkce: Příkazy SELECT, INSERT, UPDATE a DELETE Problém: základní užití příkazů SELECT, vymezení pojmů restrikce a projekce, seznámení s DML příkazy Shrnutí V této lekci jste se seznámili s příkazem SELECT a DML příkazy. Příkaz SELECT slouží k získávání dat z tabulek. Pomocí projekce a restrikce definujeme oblast dat, kterou chceme zobrazit. DML operace slouží pro manipulaci s daty. Otázky na procvičení 1. K čemu slouží příkaz SELECT? 2. Jaký je rozdíl mezi výstupy následujících příkazů? SELECT DISTINCT FROM SELECT FROM 3. Co znamená pojem restrikce a kam do příkazu SELECT se zapisuje? 4. Jaké jsou základní DML příkazy? 5. K čemu se používá příkaz COMMIT? Odkazy a další studijní prameny http://www.techonthenet.com/oracle (syntaxe příkazů SQL jazyka a funkcí) http://www.sqlcourse.com (interaktivni SQL trénink) http://www.oracle.com/technetwork/database/enterpriseedition/documentation (dokumentace k databázové platformě Oracle) http://www.penguin.cz/noviny/?id=chip/index (seriál Databáze standardu SQL z časopisu CHIP) Odkazy a další studijní prameny ŠIMŮNEK, M. SQL, kompletní kapesní průvodce. Grada Publishing, 1999. ISBN 80-7169-692-7. STEPHENS, K.R., PLEW, R.R. Naučte se SQL za 21 dní. Praha: Computer Press, 2004. ISBN 80-7226-870-8. GROFF, J.R., WEINBERG, P.N. SQL - kompletní průvodce. Praha: Computer Press, 2005. ISBN 80-251-0369-2. 16