TRANSAKCE

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

Access. Tabulky. Vytvoření tabulky

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

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

RELAČNÍ DATABÁZE ACCESS

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

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

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

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

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

1 Tabulky Příklad 3 Access 2010

2 Dotazy Příklad 3 Access 2010

Microsoft. Office. Microsoft. Access 2003 pro školy. Ing. Bc. Hana Rachačová. w w w. c o m p u t e r m e d i a. c z

Microsoft Access. Úterý 26. února. Úterý 5. března. Typy objektů databáze: Vytvoření a návrh nové tabulky

DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS. (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat)

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

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

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

1 Tabulky Příklad 7 Access 2010

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

Základní přehled SQL příkazů

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

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

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

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Databázový systém označuje soubor programových prostředků, které umožňují přístup k datům uloženým v databázi.

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

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

Kontingenční tabulky v MS Excel 2010

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

Kurz Databáze. Obsah. Návrh databáze E-R model. Datová analýza, tabulky a vazby. Doc. Ing. Radim Farana, CSc.

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

Řazení řádků ve vzestupném pořadí (A až Z nebo 0 až 9) nebo sestupném pořadí (Z až A nebo 9 až 0)

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

Databáze pro evidenci výrobků

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student.

Databáze SQL SELECT. David Hoksza

Střední odborná škola stavební Karlovy Vary Sabinovo náměstí 16, Karlovy Vary Autor: Ing. Hana Šmídová Název materiálu:

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

téma: Výběrové dotazy v MS Access

Databázové systémy I

1. Umístěte kurzor do sloupce Datový typ na řádek s polem, ve kterém vytvořit chcete seznam.

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

zobrazuje názvy polí, vložené hodnoty jednotlivých záznamů, lze v něm zadávat data (přidávat záznamy) v návrhovém zobrazení:

Databáze MS-Access. Obsah. Co je to databáze? Doc. Ing. Radim Farana, CSc. Ing. Jolana Škutová

Postupy práce se šablonami IS MPP

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

3 Formuláře a sestavy Příklad 1 Access 2007

KIV/ZIS - SELECT, opakování

téma: Akční dotazy v MS Access

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

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

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

Databázové systémy I

DUM 06 téma: Tvorba makra pomocí VBA

Tiskové sestavy. Zdroj záznamu pro tiskovou sestavu. Průvodce sestavou. Použití databází

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

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

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

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

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

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Radek Vohradník. diplomová práce. PaedDr. Petr Pexa. Soukromá vyšší odborná škola a Obchodní akademie s. r. o. Oddělení výpočetní techniky

Kapitola 4: SQL. Základní struktura

DATABÁZE MS ACCESS 2010

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

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 6. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

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

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

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

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

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

ZADÁNÍ: Informatika B Příklad 10 MS Access. TÉMA: Formuláře. OPF v Karviné, Slezská univerzita v Opavě. Ing. Kateřina Slaninová

3 Formuláře a sestavy Příklad 1 Access 2010

Databázový systém ACCESS

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

Internetový přístup do databáze FADN CZ - uživatelská příručka Modul FADN BASIC

Access Tabulka letní semestr 2013

47 Mapování přístupnosti

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

Sestavy. Téma 3.3. Řešený příklad č Zadání: V databázi zkevidence.accdb vytvořte sestavu, odpovídající níže uvedenému obrázku.

Microsoft. Access. Výběrové dotazy. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Školící dokumentace administrátorů IS KRIZKOM (úroveň KRAJ) (role manager, administrátor )

Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY CVIČENÍ 4

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

EQAS Online. DNY kontroly kvality a speciálních metod HPLC, Lednice

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

Aplikace Microsoft Office Outlook 2003 se součástí Business Contact Manager

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

Řazení tabulky, dotazu nebo formuláře

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

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

Dotazy tvorba nových polí (vypočítané pole)

10. Editor databází dotazy a relace

Microsoft. Access. Databáze s více tabulkami. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Transkript:

Jazyk SQL (Structured Query Language)... 2 Co je dotaz SQL a k čemu slouží?... 2 Příkaz SELECT... 2 Parametrs... 7 Datové typy... 8 TRANSFORM... 8 Příkaz DELETE... 9 Příkaz INSERT INTO... 10 Příkaz UPDATE... 11 Příkaz SELECT... INTO... 12 Definiční dotazy... 12 Příkaz CREATE TABLE... 12 Příkaz CREATE INDEX... 14 Příkaz ALTER TABLE... 15 Příkaz DROP... 16 Sjednocovací dotaz operace UNION... 16 Předávací dotaz... 17 Poddotaz... 17 Příkaz (metoda) EXECUTE... 19 TRANSAKCE (Metoda)... 20 datový typ Object... 21 Informace o práci s daty a objekty databáze prostřednictvím kódu jazyka Visual Basic... 22 Přehled objektů data ACCESS... 23 Vlastnosti objektů... 27 str. 1

Jazyk SQL (Structured Query Language) Jazyk používaný pro dotazování, aktualizaci a správu relačních databází. Dotazy programu Microsoft Access můžete zobrazit nebo zapsat jako příkazy jazyka SQL v okně Dotaz klepnutím na příkaz Zobrazení SQL v nabídce Zobrazit nebo klepnutím na jeden z příkazů podnabídky Dotaz SQL v nabídce Dotaz. Co je dotaz SQL a k čemu slouží? Dotaz SQL je dotaz, který se tvoří pomocí příkazu SQL. Typickým příkladem dotazů SQL je výběrový dotaz, mazací dotaz, aktualizační dotaz, sjednocovací dotaz, předávací dotaz, definiční dotaz nebo poddotaz. Poznámky Dotaz můžete vytvořit nebo upravit přímo v zobrazení SQL, nikoliv v návrhovém zobrazení. Chcete-li tuto možnost využít, přepněte do zobrazení SQL a zapište nebo opravte příkaz SQL. Po přepnutí zpět do návrhového zobrazení se veškeré změny příkazu SQL promítnou do mřížky návrhu dotazu. Pro většinu vlastností dotazu v okně vlastností v návrhovém zobrazení existují ekvivalentní klauzule a volby v zobrazení SQL. Pokud pomocí průvodce vytvoříte formulář nebo sestavu založenou na několika tabulkách nebo vytvoříte seznam či pole se seznamem, vytvoří se k danému prvku automaticky i odpovídající příkaz SQL, který definuje zdroj záznamů pro formulář nebo sestavu nebo zdroj řádků pro seznam či pole se seznamem. Příkaz SQL je možné generovat pro vlastnosti Zdroj záznamů a Zdroj řádků i bez použití průvodce, a to klepnutím na tlačítko Sestavit vedle těchto vlastností a následným vytvořením dotazu v návrhovém zobrazení dotazu. Příkazy SQL SELECT můžete použít všude, kde program Microsoft Access přijímá název tabulky, název dotazu nebo název pole. Chcete-li například vygenerovat seznam položek v ovládacím prvku seznam, můžete nastavit vlastnost seznamu Zdroj ovládacího prvku na příkaz SQL SELECT. Mřížku návrhu dotazu nelze použít k vytvoření specifických dotazů SQL (poddotazy, předávací dotazy, sjednocovací dotazy a definiční dotazy). Tyto dotazy je nutné vytvořit v zobrazení SQL. Příkaz SELECT SELECT [predikát] * tabulka.* [tabulka.]pole [AS alias] {, [tabulka.]pole [AS alias} FROM název tabulky [IN externí databáze]{ název tabulky [IN externí databáze]} [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]; Příkaz SELECT sestává z těchto částí: Část Popis predikát Jeden z následujících predikátů: ALL, DISTINCT, DISTINCTROW, nebo TOP. Predikáty jsou použity pro vymezení počtu vybraných vět. Pokud není určen žádný, je implicitně doplněno ALL. ALL Předpokládá se, pokud neuvedete žádný predikát. Následující dva příklady jsou rovnocenné a vrací všechny věty z tabulky Zaměstnanci: str. 2

1) SELECT ALL * FROM Zaměstnanci ORDER BY IDZaměstnance; 2) SELECT * FROM Zaměstnanci ORDER BY IDZaměstnance; DISTINCT Vypustí věty, které ve vybraných polích obsahují duplicitní data. Hodnoty všech polí, uvedených v příkazu SELECT musí být unikátní, pokud mají být zahrnuty do výsledku dotazu. Například několik zaměstanců z tabulky Zaměstnanci může mít stejné příjmení. Pokud dvě věty obsahují v poli Příjmení příjmení Novák, následující příkaz SQL vrátí pouze jednu větu, která obsahuje příjmení Novák: SELECT DISTINCT Příjmení FROM Zaměstnanci; Pokud vynecháte predikát DISTINCT, tento dotaz vrátí obě věty obsahující příjmení Novák.Pokud příkaz SELECT obsahuje více než jedno pole, musí být unikátní kombinace hodnot všech polí dané věty, aby byla věta zahrnuta do výsledku.výsledek dotazu, který používá frázi DISTINCT není aktualizovatelný a nepromítají se do něho následné změny provedené jinými uživateli. DISTINCTROW Vypustí data na základě celé duplicitní věty, ne pouze na základě duplicitních polí. Chcete například vytvořit dotaz, který spojí tabulku Zakazníci a Objednávky na základě pole IDZákazníka. Tabulka Zákazníci neobsahuje žádné duplicitní pole IDZákazníka, ale tabulka Objednávky ano, protože každý zákazník může mít několik objednávek. Následující příkaz SQL ukazuje, jak můžete využít predikát DISTINCTROW pro vytvoření seznamu firem, které mají minimálně jednu objednávku bez toho, že by byly uvedeny další podrobnosti o objednávkách: SELECT DISTINCTROW JménoSpolečnosti FROM Zákazníci INNER JOIN Objednávky ON Zákazníci.IDZákazníka = Objednávky.IDZákazníka ORDER BY JménoSpolečnosti; Pokud vynecháte predikát DISTINCTROW, tento dotaz vrátí několik řádků pro každou firmu, která má více než jednu objednávku.predikát DISTINCTROW má smysl uvádět pouze tehdy, pokud vybíráte pole z několika, ale ne všech tabulek použitých v dotazu. Pokud váš dotaz obsahuje pouze jednu tabulku, nebo pokud chcete výstup polí ze všech tabulek je predikát DISTINCTROW ignorován. TOP n [PERCENT] Vrátí určitý počet vět, od začátku nebo konce výběru určeného frází ORDER BY. Předpokládejme, že chcete získat jména posledních 25 studentů ročníku 1994: SELECT TOP 25 Jméno, Příjmení FROM Studenti WHERE RokUkončení = 1994 ORDER BY MaturitníPrůměr DESC; Pokud neuvedete frázi ORDER BY, dotaz vrátí náhodnou podmnožinu 25 vět z tabulky STUDENTI, které splňují podmínku uvedenou ve frázi WHERE. Predikát TOP neodděluje shodné hodnoty. Pokud by v předchozím příkladě byl studijní průměr studentů na 25. a 26. místě byl shodný, dotaz vrátí 26 vět.pokud chcete vrátit určité procento vět od začátku nebo konce výběru stanoveného frází ORDER BY, můžete použít také vyhrazené slovo PERCENT. Předpokládejme, že chcete namísto prvních 25 studentů získat prvních 10 procent: SELECT TOP 10 PERCENT Jméno, Příjmení FROM Studenti WHERE RokUkončení = 1994 ORDER BY MaturitníPrůměr ASC; Predikát DESC určuje, že budou vráceny hodnoty z konce tabulky. Hodnoty uvedené za predikátem TOP musí být celočíselnéa bez znaménka. Predikát TOP nemá vliv na to, zda je dotaz aktualizovatelný. str. 3

Fráze ORDER BY Je nepovinná, syntaxe: ORDER BY pole1 [ASC DESC ][, pole2 [ASC DESC ]][,...]] pole1, pole2: názvy polí, podle kterých mají být věty setříděny, výchozí nastavení je vzestupné setřídění, vyhrazená slova: ASC = třídění vzestupné, DESC = třídění sestupné (Z... A, 9...0) Následující příklady třídí jména zaměstnanců podle příjmení vzestupně (od A do Z): 1) SELECT Příjmení, Jméno FROM Zaměstnanci ORDER BY Příjmení; 2) SELECT Příjmení, Jméno FROM Zaměstnanci ORDER BY Příjmení ASC; Další příklad vybírá platy a třídí je v sestupném pořadí, v případě shody platů třídí ve vzestupném pořadí podle příjmení: SELECT Příjmení, Plat FROM Zaměstnanci ORDER BY Plat DESC, Příjmení; Název tabulky Tabulka(y), ze které jsou získávána data. * Určuje, že budou vybrána všechna pole ze zadané tabulky nebo tabulek. tabulka.* Tabulka, ze které budou vybrána všechna pole pole Názvy polí obsahující data, která chcete získat. Pokud zadáte více než jedno pole, budou vrácena v pořadí v jakém byla zadána. alias Názvy použité v záhlaví sloupců namísto původních názvů sloupců v tabulce. externí databáze Název databáze obsahující tabulky použité v parametru název tabulky, pokud nejsou v aktuální databázi. Fráze HAVING je nepovinná, syntaxe: HAVING seskupovací podmínka seskupovací podmínka: Výraz určující, které seskupené věty mají být zobrazeny. Je podobná frázi WHERE, která určuje, které věty mají být vybrány. Poté, co jsou věty seskupeny pomocí fráze GROUP BY, fráze HAVING určí, které záznamy budou zobrazeny: SELECT IDKategorie, Sum(KusůVBalení) FROM Výrobků GROUP BY IDKategorie HAVING Sum(KusůVBalení) > 100 And Like "BOS*"; Fráze HAVING může obsahovat až 40 výrazů spojených logickými operátory And a Or. Fráze WHERE je nepovinná, syntaxe: WHERE podmínka podmínka je výraz, který musí splňovat věty, aby byly zahrnuty do výsledku dotazu. Pokud je fáze WHERE uvedena, musí být umístěna za částí FROM. Příklady: 1) vybere všechny zaměstnance prodejního oddělení: WHERE Odděl = 'Prodej' 2) všechny zákazníky, jejichž věk se pohybuje v rozmezí 18 a 30 let: WHERE Věk between 18 and 30. Zadáte-li v dotazu více tabulek než jednu a neuvedete frázi WHERE nebo JOIN, dotaz vytvoří kartézský součin tabulek. Pokud neuvedete frázi JOIN, která provádí SQL operace propojení s několika tabulkami, výsledný výběr nebude aktualizovatelný. Fráze WHERE je podobná frázi HAVING. WHERE určuje, které věty budou vybrány. Podobně, pokud jsou věty seskupeny pomocí fráze GROUP BY, fráze HAVING určuje, které věty budou zobrazeny. Použijte-li frázi WHERE a současně frázi GROUP BY, budou seskupovány jen ty věty, které budou vybrány frází WHERE str. 4

Příklad: vybírá všechny zaměstnance, jejichž plat převyšuje 21,000 Kč: SELECT Příjmení, Plat FROM Zaměstnanci WHERE Plat > 21000; Fráze WHERE může obsahovat až 40 výrazů spojených logickými operátory And a Or. POUŽÍVÁNÍ DATUMU v podmínce: datum musí být ve formátu U.S a uzavřené znakem #, příklady: 1) SELECT * FROM Objednávky WHERE Datum = #5/10/96#; 2) Můžete použít také funkci DateValue, která pracuje s mezinárodním nastavením používaným v Microsoft Windows. - pro Spojené Státy: SELECT * FROM Objednávky WHERE Datum = DateValue('5/10/96'); 3) a příklad pro Velkou Británii: SELECT * FROM Objednávky WHERE Datum = DateValue('10/5/96'); Fráze GROUP BY je nepovinná, syntaxe: GROUP BY seznam polí skupiny seznam polí skupiny: názvy až deseti polí použitých pro seskupení vět. Pořadí názvů polí uvedených v seznamu polí skupiny určuje úroveň skupin od nejvyšší do nejnižší. Pomocí fráze WHERE vypustíte řádky, které nechcete seskupovat a pomocí fráze HAVING vytvoříte filtr pro věty poté, co budou seskupeny. Klíčové slovo JOIN používá se v těchto kontextech: a) INNER JOIN, slučuje záznamy ze dvou tabulek, jakmile se shodují hodnoty ve společném poli, syntaxe: FROM tabulka1 INNER JOIN tabulka2 ON tabulka1.pole1 porovnávací_operátor tabulka2.pole2 Názvy polí, která jsou spojena. musí být stejného datového typu a musí obsahovat stejný typ dat, ale nesmí mít stejný název porovnávací_ operátory: "=", "<", ">", "<=", ">=" nebo "<>". Příklad ukazuje jak můžete sloučit tabulky Kategorie a Výrobky přes pole IDKategorie: SELECT NázevKategorie, NázevVýrobku FROM Kategorie INNER JOIN Výrobky ON Kategorie.IDKategorie = Výrobky.IDKategorie; V předchozím příkladu je pole IDKategorie připojené, ale není zahrnuto ve výstupi dotazu, protože není uvedeno v příkazu SELECT. Abyste jej začlenili do výstupu, přidejte jeho název do příkazu SELECT, v tomto případě Kategorie.IDKategorie. Použitím následující syntaxe můžete sloučit několik klauzulí ON v příkazu JOIN: SELECT pole FROM tabulka1 INNER JOIN tabulka2 ON tabulka1.pole1 porovnávací_operátor tabulka2.pole1 AND ON tabulka1.pole2 porovnávací_operátor tabulka2.pole2) OR ON tabulka1.pole3 porovnávací_operátor tabulka2.pole3); Operace LEFT JOIN nebo RIGHT JOIN mohou být vřazeny dovnitř operace INNER JOIN, ale operace INNER JOIN nemůže být vřazena dovnitř operací LEFT JOIN nebo RIGHT JOIN. b) LEFT JOIN a RIGHT JOIN, slučují záznamy ze zdrojové tabulky, jsou-li použity v nějaké klauzuli FROM, syntaxe: FROM tabulka1 [ LEFT RIGHT ] JOIN tabulka2 ON tabulka1.pole1 porovnávací_operátor tabulka2.pole2 str. 5

Operace LEFT JOIN se použije pro vytvoření vnějšího sloučení zleva. Vnější sloučení zleva zahrnuje všechny záznamy z první (levé) ze dvou tabulek a v případě, že zde nejsou obsaženy žádné vyhovující hodnoty, pak ze druhé (pravé) tabulky. Příklad ukazuje jak můžete sloučit tabulky Kategorie a Výrobky přes pole IDKategorie. Dotaz vygeneruje seznam všech kategorií včetně těch, které neobsahují žádné výrobky: SELECT NázevKategorie, NázevVýrobku FROM Kategorie LEFT JOIN Výrobky ON Kategorie.IDKategorie = Výrobky.IDKategorie; Operace RIGHT JOIN se použije pro vytvoření vnějšího sloučení zprava. Vnější sloučení zprava zahrnuje všechny záznamy ze druhé (pravé) ze dvou tabulek a v případě, že zde nejsou obsaženy žádné vyhovující hodnoty, pak z první (levé) tabulky. Pro výběr všech zaměstnanců včetně těch, kteří nejsou přiřazeni do žádného oddělení, použijete operaci RIGHT JOIN. WITH OWNERACCESS OPTION deklarace je volitelná, ve víceuživatelském prostředí se zabezpečením pracovní skupiny, použijte tuto deklaraci společně s dotazem, který dává uživatelům používajícím nějaký dotaz stejná přístupová práva jako vlastníkovi dotazu. Příklad umožňuje uživateli prohlížet informace o platech (dokonce i když vlastník dotazu nemá přístupová práva pro prohlížení tabulky Payroll ), což mu umožňují stejná přístupová práva jaká má vlastník dotazu: SELECT Příjmení, Jméno, Plat FROM Zaměstnanci ORDER BY Příjmení WITH OWNERACCESS OPTION; Jestliže chcete zvýšit nastavení bezpečnosti pracovní skupiny a uživatelská přístupová práva, nezačleňujte deklaraci WITH OWNERACCESS OPTION. Tato volba vyžaduje, abyste měli přístup do souboru System.mdw, který je přidružen k databázi. Tato deklarace je opravdu užitečná pouze ve víceuživatelských bezpečnostních implementacích. Poznámky Prohledá určenou tabulku nebo tabulky, vyjme zvolené sloupce, vybere řádky splňující stanovená kritéria, a setřídí nebo seskupí vybrané řádky podle určeného pořadí. Příkaz SELECT nemění data v databázi. Minimální syntaxe pro příkaz SELECT je: SELECT pole FROM tabulka; Můžete použít hvězdičku, (*) aby byla vybrána všechna pole z tabulky. Následující příklad vybírá všechna pole z tabulky Zaměstnanci: SELECT * FROM Zaměstnanci; Pokud se název pole ve frázi FROM vyskytuje ve více než jedné tabulce, umístěte před něj název tabulky a tečku (.). V následujícím příkladě, je pole Oddělení jak v tabulce Zaměstnanci tak i v tabulce Kontroloři. Příkaz SQL vybere pole Oddělení z tabulky Zaměstnanci a pole KontrJméno z tabulky Kontroloři: SELECT Zaměstnanci.Oddělení, Kontroloři.KontrJméno FROM Zaměstnanci INNER JOIN Kontroloři WHERE Zaměstnanci.Oddělení = Kontroloři.Oddělení; Následující příklad používá pro pojmenování vybraného Field záhlaví Narození: SELECT DatumNarození AS Narození FROM Zaměstnanci; Kdykoliv použijete agregované funkce nebo dotazy, které vracejí nejednoznačné nebo duplicitní názvy Field, musíte použít frázi AS, aby byl objektu Field přiřazen náhradní název. Následující příklad používá záhlaví s názvem Počet pro pojmenování vybraného Field ve výsledném výběru: SELECT COUNT(IDZaměstnance) AS Počet FROM Zaměstnanci; str. 6

Příklady Chcete-li vyzkoušet následující příklad v programu Microsoft Access, vytvořte nejprve nový dotaz ve vzorové databázi Northwind. Zavřete dialogové okno Zobrazit tabulku, aniž byste určili tabulku nebo dotaz. Přepněte do zobrazení SQL, vložte požadovaný příklad do okna pro příkaz SQL a spusťte dotaz. Vybere pole Příjmení a Jméno ze všech záznamů v tabulce Zaměstnanci: SELECT Příjmení, Jméno FROM Zaměstnanci; V dalším příkladu budou vybrána všechna pole z tabulky Zaměstnanci: SELECT * FROM Zaměstnanci; Zjištění počet záznamů, které obsahují položku v poli PSČ, a výsledné pole bude nazváno Počet: SELECT Count([PSČ]) AS Počet FROM Zákazníci; Zobrazení jednotkových cen produktů, při zdražení o 10 procent. Existující jednotkové ceny v databázi se nezmění. SELECT NázevVýrobku, JednotkováCena AS AktuálníCena, JednotkováCena * 1.1 AS NavrhovanáCena FROM Výrobky; Zjištění početu výrobků v databázi, průměrné a maximální jednotkové ceny: SELECT Count(*) AS [Počet výrobků], Avg([JednotkováCena]) AS [Průměrná jednotková cena], Max([JednotkováCena]) AS [Maximální jednotková cena] FROM Výrobky; V dalším příkladu je pro každý záznam v tabulce Výrobky zobrazen obsah polí NázevVýrobku a JednotkováCena. Tato pole budou ve výsledné sadě odděleny řetězcem "má jednotkovou cenu". SELECT NázevVýrobku, 'má jednotkovou cenu', JednotkováCena FROM Výrobky; Parametrs Deklaruje názvy a datové typy každého parametru v parametrizovaném dotazu. PARAMETERS název datovýtyp {, název datovýtyp } Deklarace PARAMETERS se skládá z těchto částí: Část Popis název Název parametru. Přiřazuje vlastnost Name objektu Parameter a používá jej pro identifikaci tohoto parametru v kolekci Parameters. Pro název můžete použít řetězec, který se zobrazuje v dialogu jakmile aplikace spustí dotaz. K uzavření textu, který obsahuje mezery nebo interpunkci, použijte hranaté závorky ([]). Například [Nízká cena] a [Od kterého měsíce začít zprávu?] jsou platné argumenty název. datovýtyp Jeden z primárních datových typů jazyka Microsoft Jet SQL nebo jejich synonyma. Poznámky Parametrizovaný dotaz může pomáhat tak, že zautomatizuje proces změny kritérií dotazu. Při práci s parametrizovaným dotazem bude váš programový kód při každém spuštění dotazu potřebovat zadávat parametry. Deklarace PARAMETERS je volitelná, ale když je již obsažena v nějakém předchozím příkazu, včetně příkazu SELECT. Obsahuje-li deklarace více než jeden parametr, oddělujte je od sebe čárkami. Následující příklad obsahuje dva parametry: PARAMETERS [Sleva] Měna, [DatumOdeslání] DatumČas; V klauzuli WHERE nebo HAVING můžete použít proměnnou název, ale nikoliv datovýtyp. V následujícím příkladu se předpokládá, že budou zadány dva parametry a potom budou použita kritéria do záznamů v tabulce Objednávky: PARAMETERS [Sleva] Měna, [DatumOdeslání] DatumČas; SELECT IDObjednávky, Množství FROM Objednávky WHERE Množství > [Sleva] AND DatumObjednávky >= [DatumOdeslání]; str. 7

Datové typy Databázové jádro aplikace Microsoft Jet SQL sestává z třinácti základních datových typů definovaných aplikací Microsoft Jet a několika platných synonym, která jsou pro tyto datové typy rozpoznávána. Následující tabulka zobrazuje základní datové typy. Synonyma jsou definována v rezervovaných slovech databázového jádra aplikace Microsoft Jet SQL. Datový typ Ukládaná velikost Popis BINARY 1 bajt / znak V poli tohoto typu může být uložen libovolný datový typ. Tato data se nepřekládají. Vstupní data odpovídají výstupním. BIT 1 bajt Hodnoty Ano a Ne a pole, která obsahují pouze jednu z těchto hodnot. BYTE 1 bajt Celočíselná hodnota v rozmezí od 0 do 255. COUNTER 4 bajty Počet je aplikací Microsoft Jet automaticky zvyšován poté, kdy je do tabulky přidán nový záznam. V databázovém jádru aplikace Microsoft Jet je datový typ pro tuto hodnotu Long. CURRENCY 8 bajtů Celočíselné hodnoty přepočítané na rozsah DATETIME(DOUBLE) 8 bajtů Datová nebo časová hodnota mezi roky 100 a 9 999. GUID 128 bitů Jedinečné identifikační číslo používané při dálkovém volání procedury SINGLE 4 bajty Hodnota s jednoduchou přesností a plovoucí řádovou čárkou. DOUBLE 8 bajtů Hodnota s dvojitou přesností a plovoucí řádovou čárkou SHORT 2 bajty Krátká celočíselná hodnota v rozmezí od 32 768 do 32 767. LONG 4 bajty Dlouhá celočíselná hodnota v rozmezí od 2 147 483 648 do 2 147 483 647. LONGTEXT 1 bajt / znak Nula až maximálně 1,2 Gigabajtu. LONGBINARY Podle potřeby Nula až maximálně1,2 Gigabajtu. Užívá se pro objekty OLE. TEXT 1 bajt / znak Nula až 255 znaků. Poznámka: Rezervované slovo VALUE můžete rovněž použít v příkazech jazyka SQL. TRANSFORM Vytváří křížový dotaz. TRANSFORM agregfunkce vybratpříkaz PIVOT kontingenčnípole [IN (hodnota{,hodnota})]; Příkaz TRANSFORM se skládá z těchto částí: Část Popis agregfunkce Libovolná agregační funkce jazyka SQL, která pracuje s vybranými daty. vybratpříkaz Příkaz SELECT. kontingenčnípole Pole nebo výraz, které chcete použít k vytvoření záhlaví sloupců ve výsledkové sadě dotazu. hodnota1, hodnota2 Pevná hodnota použitá k vytvoření záhlaví sloupců. Poznámky Děláte-li souhrn dat pomocí křížového dotazu, vybíráte hodnoty z určitých polí nebo výrazů jako záhlaví sloupců, kde potom můžete data vidět v daleko kompaktnějším tvaru než při použítí výběrového dotazu. Příkaz TRANSFORM je volitelný tehdy, když je obsažen v prvním příkazu v řetězci jazyka SQL. Předchází příkazu SELECT, který určuje pole použitá jako záhlaví řádků, klauzuli FROM a klauzuli GROUP BY, která určuje řádkove seskupení. Volitelně můžete zahrnout další klauzule jako například WHERE, která určuje přídavný výběr nebo seřazovací kritéria. Také můžete použít poddotazy jako predikáty specielně v klauzuli WHERE v křížovém dotazu. str. 8

Hodnoty vrácené v proměnné kontingenčnípole jsou použity jako záhlaví sloupců ve výsledkové sadě dotazu. Například kontingencí množství prodeje v měsíci prodeje v křížovém dotazu by měl křížový dotaz vytvořit 12 sloupců. Porměnnou kontingenčnípole můžete omezit tak, že vytvoříte záhlaví z pevně daných hodnot (hodnota1, hodnota2 ) uvedených v seznamu volitelné klauzule IN. Také můžete pevné hodnoty zahrnout pro neexistující data, aby se vytvořily přídavné sloupce. Příklady: Chcete-li vyzkoušet následující příklady v programu Microsoft Access, vytvořte nejprve nový dotaz ve vzorové databázi Northwind. Zavřete dialogové okno Zobrazit tabulku, aniž byste určili tabulku nebo dotaz. Přepněte do zobrazení SQL, vložte požadovaný příklad do okna pro příkaz SQL a spusťte dotaz. V následujícím příkladu je vytvořen křížový dotaz, který zobrazí přehled prodeje výrobků podle měsíců pro rok, který uživatel určí. Měsíce jsou vraceny zleva doprava jako sloupce a názvy výrobků shora dolů jako řádky. PARAMETERS [Požadovaný rok] LONG; TRANSFORM Sum([Rozpis objednávek].množství * ([Rozpis objednávek].jednotkovácena - ([Rozpis objednávek].sleva / 100) * [Rozpis objednávek].jednotkovácena)) AS Prodej SELECT NázevVýrobku FROM Objednávky INNER JOIN (Výrobky INNER JOIN [Rozpis objednávek] ON Výrobky.ČísloVýrobku = [Rozpis objednávek].číslovýrobku) ON Objednávky.ČísloObjednávky = [Rozpis objednávek].čísloobjednávky WHERE DatePart("yyyy", DatumObjednávky) = [Požadovaný rok] GROUP BY NázevVýrobku ORDER BY NázevVýrobku PIVOT DatePart("m", DatumObjednávky); Příkaz DELETE Vytvoří vymazávací dotaz, který odstraní záznamy z jedné nebo více tabulek zapsaných v klauzuli FROM, která souvisí s klauzulí WHERE. DELETE [tabulka.*] FROM tabulka [WHERE podmínka]; Příkaz DELETE se skládá z těchto částí: Část Popis tabulka.* Volitelný název tabulky, ze které se budou vymazávat záznamy. Pozor u nás ve škole je nutné uvést alespoň * tabulka Název tabulky, ze které se budou vymazávat záznamy. podmínka Výraz, který určuje záznamy pro vymazání. Poznámky Příkaz DELETE je obzvlášť praktický při vymazávání většího počtu záznamů. K vyjmutí celé tabulky z databáze můžete použít metodu Execute s příkazem DROP. Smažete-li tabulku, ztratí se samozřejmě i její struktura. Avšak použijete-li příkaz DELETE, vymažou se pouze data, zatímco struktura tabulky a všechny její vlastnosti jako například atributy polí a indexy zůstanou zachovány. Příkaz DELETE můžete použít pro vymazávání záznamů z tabulek, které jsou s ostatními tabulkami v relaci 1 : mnoha. Operace kaskádového vymazávání způsobí, že ty záznamy, které jsou v tabulkách s vícenásobnou relací, budou vymazány, bude-li odpovídající záznam na jedné straně relace v dotazu vymazán. Například v relaci mezi tabulkami Zákazníci a Objednávky je tabulka Zákazníci v jednoduché a tabulka Objednávky ve vícenásobné relaci. Smažete-li nějaký záznam v tabulce Zákazníci a je-li str. 9

nastavená volba kaskádového vymazávání, dojde k vymazání odpovídajících záznamů v tabulce Objednávky. Vymazávací dotaz vymaže celé záznamy, nikoliv pouze data ve vybraných polích. Chcete-li vymazat hodnoty z vybraných polí, vytvoříte aktualizovaný dotaz, který změní vybrané hodnoty na prázdné.hodnoty. DŮLEŽITÉ!!!! Po vymazání záznamů pomocí vymazávacího dotazu nelze operaci vzít zpět. Chcete-li vědět, které dotazy budou vymazány, nejprve použijte k vyzkoušení výběrový dotaz, který používá stejná kritéria a potom teprve spusťte vymazávací dotaz. Pořizujte si neustále záložní kopie. Jestliže vymažete nesprávné záznamy, můžete je nahradit ze záložní kopie. Příkaz INSERT INTO Přidá jednoduchý nebo vícenásobný záznam do tabulky. Vztahuje se k spojovacímu dotazu. 1) spojovací dotaz pro jednoduchý záznam: INSERT INTO cílové místo [(pole {,pole}) VALUES (hodnota1[, hodnota2[,...]); 2) spojovací dotaz pro vícenásobný záznam: INSERT INTO cílové místo [IN externí databáze] [pole {,pole} SELECT [zdrojové místo.]pole{,[zdrojové místo.]pole} FROM název tabulky; Příkaz INSERT INTO se skládá z těchto částí: Část Popis cílové místo Název tabulky nebo dotazu, do kterých se mají přidat záznamy. pole Pole nebo seznam polí uzavřený v kulatých závorkách, - do kterých se mají vložit data, jestliže předchází argument cílové místo - nebo názvy polí, ze kterých se mají obdržet data, jestliže následuje argument zdrojové místo. hodnota Hodnoty ke vkládání do určených polí nového záznamu. Každá hodnota je vložena do určitého pole, které odpovídá pozici hodnoty v seznamu: 1. hodnota je vložena do 1. pole nového záznamu a 2. hodnota2 do 2. pole, atd. Hodnoty musíte od sebe oddělit čárkou a pole textu - v apostrofech -uzavřít do kulatých závorek ( ). externí databáze Cesta k externí databázi. Více o popisu cesty viz klauzule IN. zdrojové místo Název tabulky nebo dotazu, ze kterých se mají kopírovat záznamy. název tabulky Tabulka(y), ze kterých mají být vloženy záznamy. Tento argument může být název jednotlivé tabulky nebo složené slovo vzniklé z operací INNER JOIN, LEFT JOIN nebo RIGHT JOIN nebo z uloženého dotazu. Poznámky Příkaz INSERT INTO můžete používat k přidávání jednotlivého záznamu do tabulky s použitím syntaxe pro spojovací dotaz jednoduchého záznamu jak bylo ukázáno výše. V takovémto případě váš programový kód určuje název a hodnotu pro každé pole záznamu. Musíte určit každé pole záznamu, ke kterému má být přiřazena hodnota a hodnotu pro toto pole. Neurčíte-li každé pole, do chybějících sloupců je přiřazena výchozí hodnota nebo prázdná hodnota. Záznamy se přidávají na konec tabulky. Příkaz INSERT INTO můžete také použít k připojení sady záznamů z jiné tabulky nebo dotazu použitím klauzule SELECT... FROM jako je ukázáno výše pro syntaxi dotazu vícenásobného záznamu. V tomto případě klauzule SELECT určuje pole, která se mají připojit do tabulky cílové místo. Tabulka zdrojové místo nebo cílové místo může určovat tabulku nebo dotaz. Je-li určen dotaz připojí se záznamy do libovolné tabulky určené dotazem. Příkaz INSERT INTO je volitelný, ale je-li začleněn, předchází příkazu SELECT. str. 10

Obsahuje-li cílová tabulka primární klíč, ujistěte se, zda pro primární klíč pole nebo polí vkládáte jedinečné hodnoty, které nejsou prázdné, protože takové záznamy se nepřipojí. Jestliže připojujete záznamy do tabulky obsahující pole typu AutoNumber a chcete připojené záznamy přečíslovat, nezačleňujte do dotazu pole typu AutoNumber. Pole typu AutoNumber použijte v dotazu tehdy, když chcete zachovat původní hodnoty z tohoto pole. Klauzuli IN použijte pro připojení záznamů do tabulky z jiné databáze. K vytvoření nové tabulky použijte příkaz SELECT... INTO namísto vytváření dotazu pro vytváření tabulky. K zobrazení záznamů, které budou připojeny před spuštěním spojovacího dotazu, spusťte nejprve výběrový dotaz, který používá stejná kritéria. Spojovací dotaz kopíruje záznamy z jedné nebo více tabulek do dalších. Tabulky obsahující záznamy které budete připojovat nebudou spojovacím dotazem ovlivněny. Namísto připojování existujících záznamů z jiné tabulky můžete určit hodnotu pro každé pole v novém záznamu pomocí klauzule VALUES. Vynecháte-li seznam polí, klauzule VALUES se pokusí začlenit hodnotu pro každé pole tabulky, což způsobí, že operace INSERT bude chybná. Pro každý přídavný záznam, který chcete vytvořit, použijte přídavný příkaz INSERT INTO s klauzulí VALUES. Příkaz UPDATE Vytváří aktualizační dotaz, který mění hodnoty v polích určené tabulky podle zadaných kritérií. UPDATE tabulka SET přiřazení nové hodnoty [WHERE podmínka]; Příkaz UPDATE se skládá z těchto částí: Část Popis tabulka Název tabulky obsahující data, která chcete upravovat. přiřazení nové hodnoty Přiřazovací příkaz, který určuje hodnotu, která má být vložena do určitého pole v aktualizovaném záznamu. podmínka Výraz, který určuje, které záznamy budou aktualizovány. Aktualizují se pouze ty záznamy, které vyhoví danému výrazu. Poznámky Příkaz UPDATE je zvláště výhodný, chcete-li změnit větší množství záznamů ve vícenásobných tabulkách. Během stejného okamžiku můžete změnit několik polí. Následující příklad zvyšuje hodnotu pole Objednané množství o 10 % a hodnotu pole Dopravné o 3 % pro dodavatele ve Spojeném království: UPDATE Objednávky SET ObjednanéMnožství = ObjednanéMnožství * 1.1, Dopravné = Dopravné * 1.03 WHERE ZeměDodavatele = 'UK'; DŮLEŽITÉ!!!! Příkaz UPDATE negeneruje výsledkovou sadu a z toho vyplývá, že poté co aktualizujete záznamy aktualizačním dotazem, nelze vzít tuto akci zpět. Chcete-li vědět, které záznamy budou aktualizovány, použijte pro kontrolu nejdříve výběrový dotaz, který používá stejná kritéria a potom teprve spusťte aktualizační dotaz. Vytvářejte si neustále záložní kopie svých dat. Jestliže aktualizujete nesprávná data, můžete je obnovit ze záložní kopie. str. 11

Příkaz SELECT... INTO Vytvářecí tabulkový dotaz vytváří novou tabulku z již existující tabulky nebo dotazu. SELECT pole{, pole} INTO novátabulka [IN externídatabáze] FROM zdrojovémísto Příkaz SELECT...INTO se skládá z těchto částí: Část Popis pole Názvy polí, které se mají kopírovat do nové tabulky. novátabulka externídatabáze zdrojovémísto Název tabulky, která má být vytvořena. Musí se řídit standardními pojmenovávacími konvencemi. Má-li novátabulka stejný název jako nějaká existující, nastane chyba přepsání tabulky. Cesta k externí databázi. Zadávání cesty viz popis klauzule IN. Název existující tabulky, ze které jsou vybírány záznamy. Může to být jednoduchá nebo vícenásobná tabulka nebo dotaz. Poznámky Vytvářecí tabulkové dotazy můžete používat k archivaci záznamů, vytváření záložních kopií, vytváření kopií pro export do jiných databází nebo je používat jako základ pro zprávy, které budou zobrazovat data po jistých časových obdobích. Můžete například vytvořit zprávu Měsíční prodej podle oblastí tak, že každý měsíc spustíte stejný vytvářecí tabulkový dotaz. Pro novou tabulku můžete chtít definovat primární klíč. Když vytvoříte novou tabulku, pak její pole dědí datový typ a velikost, a to pro všechny tabulky podléhající určitému dotazu, ale žádná další pole ani vlastnosti se nepřenáší. K přidávání dat do existující tabulky použijte příkaz INSERT INTO namísto vytváření přidávacího dotazu. Chcete-li vědět které dotazy budou vybrány před tím než spustíte vytvářecí tabulkový dotaz, nejprve použijte k vyzkoušení příkaz SELECT, který používá stejná kritéria a potom teprve spusťte tabulkový vytvářecí dotaz. Definiční dotazy Definiční dotazy SQL se používají k vytvoření, odstranění nebo změně tabulek, popřípadě k vytvoření indexů v aktuální databázi. Postup práce: 1. V okně Databáze klepněte na ouško karty Dotazy a poté na tlačítko Nový. 2. V okně Nový dotaz klepněte na položku Návrhové zobrazení a poté na tlačítko OK. 3. V dialogovém okně Zobrazit tabulku nepřidávejte tabulky ani dotazy, pouze klepněte na tlačítko Zavřít. 4. V nabídce Dotaz ukažte na příkaz Dotaz SQL a poté klepněte na příkaz Definiční. 5. Zadejte příkaz SQL pro definiční dotaz. Každý definiční dotaz obsahuje právě jeden definiční příkaz. Program Microsoft Access podporuje tyto definiční příkazy: CREATE TABLE vytvoří tabulku ALTER TABLE přidá nové pole nebo omezující podmínku k existující tabulce DROP odstraní tabulku z databáze, popřípadě danému poli nebo skupině polí odebere index. CREATE INDEX vytvoří index k danému poli nebo skupině polí. 6 Klepnutím na tlačítko Spustit na panelu nástrojů dotaz spustíte. UPOZORNĚNÍ: Nepřevádějte definiční dotaz na jiný druh dotazu, například na výběrový dotaz. Pokud tak učiníte, ztratíte zadaný příkaz SQL. Příkaz CREATE TABLE CREATE TABLE tabulka ({pole typ [(velikost)] [NOT NULL] [index]} 1 {, CONSTRAINT vícenásobný index} ) str. 12

Příkaz CREATE TABLE sestává z těchto částí: Část Popis tabulka Název tabulky, která má být vytvořena. pole Název pole nebo polí, která mají být vytvořena v nové tabulce. Musíte vytvořit alespoň jedno pole. typ Datový typ pole v nové tabulce. velikost Velikost pole ve znacích (Pouze pro textová a binární pole). index Fráze CONSTRAINT definující jednoduchý index. Více informací o tom, jak vytvořit tento index naleznete u hesla CONSTRAINT. vícenásobný index Fráze CONSTRAINT definující vícenásobný index. Více informací o tom, jak vytvořit tento index naleznete u hesla CONSTRAINT. Poznámky Příkaz CREATE TABLE můžete použít pro definování nové tabulky a jejích polí a omezení. Pokud je pro pole vybrána volba NOT NULL, musí nové věty obsahovat v tomto poli platné hodnoty. Fráze CONSTRAINT vytváří různá omezení pro pole, a může být použita pro vytvoření primárního klíče. Pro vytvoření primárního klíče nebo dalších indexů k existující tabulce, můžete také použít příkaz CREATE INDEX. Frázi NOT NULL můžete použít na jednoduchém poli, nebo uvnitř fráze CONSTRAINT, která přísluší buď k jednoduchému nebo k vícenásobnému poli CONSTRAINT. Omezení NOT NULL můžete však použít pro určité pole pouze jednou, jinak nastane chyba při běhu programu. V následujícím příkladu bude vytvořena nová tabulka se dvěma poli typu Text: CREATE TABLE PrvníTabulka (Jméno TEXT, Příjmení TEXT); V následujícím příkladu bude vytvořena nová tabulka se dvěma poli typu Text, polem typu Datum/čas a jedinečným indexem zahrnujícím všechna tři pole: CREATE TABLE DruháTabulka (Jméno TEXT, Příjmení TEXT, DatumNarození DATETIME, CONSTRAINT PodmínkaProTabulku UNIQUE (Jméno, Příjmení, DatumNarození)); V následujícím příkladu bude vytvořena nová tabulka se dvěma poli typu Text a s jedním polem typu Celé číslo. Pole RodnéČíslo bude primárním klíčem. CREATE TABLE TřetíTabulka (Jméno TEXT, Příjmení TEXT, RodnéČíslo INTEGER CONSTRAINT PodmínkaProPole PRIMARY KEY); Fráze CONSTRAINT Omezení je obdobou indexu s tím rozdílem, že může být použit pro vytvoření relace s jinou tabulkou. Omezení pro jedno pole: CONSTRAINT název {PRIMARY KEY UNIQUE NOT NULL REFERENCES připojovaná tabulka [({pole připojované tabulky} )]} Omezení pro více polí: CONSTRAINT název {PRIMARY KEY ({primární klíč} 1 ) UNIQUE ({jednoznačný klíč} 1 ) NOT NULL ({platná hodnota} 1 ) FOREIGN KEY ({odkaz} 1 ) REFERENCES připojovaná tabulka [({pole připojované tabulky})]} Fráze CONSTRAINT sestává z těchto částí: Část Popis název Název omezení, které má být vytvořeno. primární klíč Název pole nebo polí, která jsou navržena jako primární klíč. jednoznačný klíč Název pole nebo polí oddělené čárkou, která jsou navržena jako jednoznačný klíč. str. 13

platná hodnota Název pole nebo polí oddělené čárkou vyhrazených pro hodnoty, které nejsou prázdné. odkaz Název pole nebo polí oddělené čárkou v připojované tabulce. připojovaná tabulka Název připojované tabulky obsahující pole nebo několik polí určených jako pole připojované tabulky. pole připojované tabulky Název pole nebo polí oddělené čárkou v připojované tabulce určených odkazem. Tuto frázi můžete vynechat, pokud je odkazem pole, které tvoří primární klíč připojované tabulky. Poznámky Syntax pro omezení pro jedno pole použijete ve frázi pro definici pole příkazu ALTER TABLE nebo CREATE TABLE bezprostředně po určení datového typu pole. Syntax pro omezení pro více polí použijete při zadání vyhrazeného slova CONSTRAINT mimo frázi pro definici pole v příkazu ALTER TABLE nebo CREATE TABLE. Pomocí fráze CONSTRAINT můžete označit pole jako jedno z následujících typů omezení: Můžete použít vyhrazené slovo UNIQUE pro označení pole jako jednoznačného klíče. To znamená, že žádné dvě věty z tabulky nesmí mít v tomto poli stejnou hodnotu. Můžete vyhradit jakékoliv pole nebo seznam polí jako jednoznačné. Pokud je jako jednoznačný klíč určeno omezení pro více polí, kombinace hodnot všech polí z indexu musí být jednoznačná, i když dvě nebo více vět mají stejnou hodnotu v jednom poli. Vyhrazené slovo PRIMARY KEY můžete použít pro označení jednoho pole nebo několika polí v tabulce jako primárního klíče. Všechny hodnoty primárního klíče musí být jednoznačné a nebýt prázdné, a jedna tabulka může mít pouze jeden primární klíč. NENASTAVUJTE FRÁZI PRIMARY KEY na tabulce, která již primární klíč má; pokud tak učiníte, objeví se chyba. Vyhrazené slovo FOREIGN KEY můžete použít pro určení klíče pomocí pole z připojované tabulky. Pokud primární klíč připojované tabulky sestává z více než jednoho pole, musíte použít definici omezení pro více polí, a vypsat všechny odkazovací pole, název připojované tabulky a názvy polí v připojované tabulce ve stejném pořadí, v jakém jsou vypsány odkazovací pole. Pokud pole nebo seznam polí v připojované tabulce jsou primárním klíčem připojované tabulky, nemusíte vypisovat pole připojované tabulky,databáze automaticky předpokládá, že primární klíč připojované tabulky jsou pole připojované tabulky. Příkaz CREATE INDEX Vytvoří nový index pro existující tabulku. CREATE [ UNIQUE ] INDEX index ON tabulka (pole [ASC DESC]{, pole [ASC DESC}) [WITH { PRIMARY DISALLOW NULL IGNORE NULL }] Příkaz CREATE INDEX se skládá z těchto částí: Část Popis index Název indexu, který má být vytvořen. tabulka Název existující tabulky, pro kterou má být index vytvořen. pole Název pole nebo polí pro vytvoření indexu. Pro vytvoření jednoduchého indexu vypište název pole v závorkách následovaný názvem tabulky. Chcete-li vytvořit vícenásobný index, vypište názvy všech polí, která mají být v indexu obsažena. Pokud chcete vytvořit index v sestupném pořadí použijte vyhrazené slovo DESC; pokud tak neučiníte bude index vytvořen ve vzestupném pořadí. UNIQUE Chcete-li zamezit duplicitním hodnotám různých vět v poli nebo polích použitých v indexu. WITH můžete připojit pravidla pro kontrolu platnosti dat. Můžete: Zakázat vstup prázdné hodnoty pro novou větu v poli nebo polích použitých pro index pomocí volby DISALLOW NULL. Zamezit tomu, aby byly věty s prázdnou hodnotou v poli nebo polích str. 14

použitých pro index zahrnuty do indexu pomocí volby IGNORE NULL. Označit indexové pole nebo seznam polí jako primární klíč pomocí vyhrazeného slova PRIMARY. Z toho automaticky vyplývá, že klíč je jednoznačný, takže můžete vynechat vyhrazené slovo UNIQUE. Poznámky: Pro přidání jednoduchého nebo vícenásobného indexu k tabulce můžete použít také příkaz ALTER TABLE a pro odstranění indexu vytvořeného pomocí příkazu ALTER TABLE nebo CREATE INDEX můžete použít příkaz ALTER TABLE nebo DROP. Nepoužívejte PRIMARY pokud vytváříte nový index na tabulce, která již primární klíč obsahuje; pokud tak učiníte, dojde k chybě. Příkaz ALTER TABLE Umožní upravit vzhled tabulky poté, co byla vytvořena pomocí příkazu CREATE TABLE. ALTER TABLE tabulka {ADD {COLUMN typ pole[(velikost)] [NOT NULL] [CONSTRAINT index] CONSTRAINT vícenásobný index} DROP {COLUMN pole I CONSTRAINT název indexu}} Příkaz ALTER TABLE se skládá z těchto částí: Část Popis tabulka Název tabulky, která má být upravena. pole Název pole, které má být přidáno nebo odstraněno z tabulky. typ Datový typ pole. velikost Velikost pole ve znacích (Pouze pro textová a binární pole). index Index pole. Více informací o tom, jak vytvořit tento index naleznete u hesla CONSTRAINT. vícenásobný index Definice vícenásobného indexu, který má být přidán k tabulce. Více informací o tom, jak vytvořit tento index naleznete u hesla CONSTRAINT název indexu Název vícenásobného indexu, který má být odstraněn. ADD COLUMN pro přidání nového pole do tabulky. Určíte název pole, datový typ, a (pro textová a binární pole) velikost. Příklad: příkaz přidá textové pole nazvané Poznámky o délce 25 znaků do tabulky Zaměstnanci: ALTER TABLE Zaměstnanci ADD COLUMN Poznámky TEXT(25) Můžete také pro toto pole definovat index. Více informací o jednoduchých indexech naleznete u hesla CONSTRAINT. NOT NULL nové věty musí v tomto poli mít platná data. ADD CONSTRAINT umožní přidat vícenásobné indexy. Více informací o vícenásobných indexech naleznete u hesla CONSTRAINT. DROP COLUMN pro odstranění pole. Určíte pouze název pole, které má být odstraněno. DROP CONSTRAINT pro odstranění vícenásobného indexu. Určíte pouze název indexu, za kterým uvedete vyhrazené slovo CONSTRAINT. Poznámky: Nemůžete současně přidat nebo odstranit více než jedno pole nebo index. Pro přidání jednoduchých nebo vícenásobných indexů k tabulce, můžete použít též příkaz CREATE INDEX a pro odstranění indexu vytvořeného pomocí příkazu ALTER TABLE nebo CREATE INDEX můžete použít příkaz ALTER TABLE nebo DROP. Frázi NOT NULL můžete použít na jednoduchém poli, nebo uvnitř fráze CONSTRAINT, která přísluší buď k jednoduchému nebo k vícenásobnému poli CONSTRAINT. Omezení NOT NULL můžete však použít pro určité pole pouze jednou, jinak nastane chyba při běhu programu. str. 15

Příkaz DROP Odstraní existující tabulku z databáze nebo odstraní existující index z tabulky. DROP {TABLE tabulka INDEX index ON tabulka} Příkaz DROP sestává z těchto částí: Část Popis tabulka Název tabulky, která má být odstraněna nebo tabulky, ze které má být odstraněn index. index Název indexu, který má být odstraněn z tabulky. Poznámky: Pokud chcete odstranit tabulku nebo odstranit index z tabulky, musíte nejprve tabulku zavřít. Chcete-li odstranit index z tabulky, můžete použít také příkaz ALTER TABLE. Pro vytvoření tabulky použijte příkaz CREATE TABLE a pro vytvoření indexu příkaz CREATE INDEX nebo ALTER TABLE. Pro úpravu tabulky použijte příkaz ALTER TABLE. Sjednocovací dotaz operace UNION Vytváří sjednocovací dotazy, které slučují výsledky dvou či více nezávislých dotazů nebo tabulek. [TABULKA] dotaz {UNION [ALL] [TABULKA] dotaz} 1 Operace UNION se skládá z těchto částí Část Popis dotaz1 Příkaz SELECT nebo název uloženého dotazu nebo tabulky, kterému předchází klíčové slovo TABLE. Poznámky V jednoduché operaci UNION můžete sloučit výsledky dvou dotazů, tabulek a příkazů STATEMENT, a to v libovolné kombinaci. Následující příklad ukazuje sloučení názvu existující tabulky a příkazu SELECT: TABLE [NovéMnožství] UNION ALL SELECT * FROM Zákazníci WHERE ObjednanéMnožství > 1000; Je-li použito operace UNION, nevrací se duplicitní záznamy. Samozřejmě však můžete použít predikát ALL, k zajištění návratu všech záznamů. Toto také zrychluje práci dotazu. Všechny dotazy v operaci UNION vyžadují stejný počet polí a samozřejmě pole musí být stejné velikosti a datového typu. Použijte zástupce (klauzule AS viz př. 2) pouze v prvním příkazu SELECT, protože jinde by byly ignorováni. V klauzuli ORDER BY odkazujte na názvy polí, kterými jsou voláni v prvním příkazu STATEMENT. Můžete použít klauzule GROUP BY nebo HAVING v každém argumentu dotaz pro seskupení vracených dat. Můžete použít klauzuli ORDER BY na konci posledního argumentu dotaz pro zobrazení vracených dat v určeném poředí. Příklady sjednocovacích dotazů 1. Následující sjednocovací dotaz vrací názvy a města firem, které jsou zastoupeny v obou tabulkách, Zákazníci i Dodavatelé. Výsledná data řadí dle názvu města: SELECT [Firma], [Město] FROM [Dodavatelé] UNION SELECT [Firma], [Město]FROM [Zákazníci]ORDER BY [Město]; 2. Přejmenování polí ve sjednocovacím dotazu. Následující sjednocovací dotaz přejmenuje ve výsledném výstupu pole Firma na pole Dodavatel/Jméno zákazníka: SELECT [Firma] AS [Dodavatel/Jméno zákazníka], [Město] FROM [Dodavatelé] UNION SELECT [Firma] AS [Dodavatel/Jméno zákazníka], [Město] FROM [Zákazníci]; str. 16

3. Vrácení duplicitních záznamů sjednocovacím dotazem. Následující sjednocovací dotaz vrací pomocí příkazu UNION ALL všechny záznamy včetně duplicitních: SELECT [Firma], [Město] FROM [Dodavatelé] UNION ALL SELECT [Firma], [Město] FROM [Zákazníci]; Předávací dotaz Tento typ dotazu slouží k zasílání příkazů jazyka SQL přímo do databáze ODBC, jako je například Microsoft SQL Server. Syntaxe zasílaných příkazů se řídí typem serveru. Předávací dotaz lze využít například k vyhledávání záznamů nebo změně dat. Program Microsoft Access odesílá předávací dotazy přímo databázovému serveru ODBC, jako je například Microsoft SQL Server. Prostřednictvím předávacích příkazů pracujete přímo s tabulkami na tomto serveru, nikoli s propojenými daty. 1 V okně Databáze klepněte na ouško karty Dotazy a poté na tlačítko Nový. 2 V dialogovém okně Nový dotaz klepněte na položku Návrhové zobrazení a poté na tlačítko OK. 3 V dialogovém okně Zobrazit tabulku nepřidávejte tabulky ani dotazy, pouze klepněte na tlačítko Zavřít. 4 V nabídce Dotaz ukažte na příkaz Dotaz SQL a poté klepněte na příkaz Předávací. 5 Na panelu nástrojů klepněte na tlačítko Vlastnosti, které otevře okno vlastností dotazu. 6 V okně vlastností dotazu nastavte vlastnost Propojovací řetěz ODBC tak, aby její hodnota ukazovala cestu k požadované databázi. Cestu zadejte buď přímo, nebo klepněte na tlačítko Sestavit a zadejte informace o serveru, k němuž se chcete připojit. Podrobnosti o syntaxi dotazu najdete v dokumentaci k databázového serveru SQL, kterému chcete dotaz odeslat. 7 Pokud dotaz nevrací žádné záznamy, nastavte vlastnost Vrací záznamy na hodnotu Ne. 8 V okně Předávací dotaz SQL zapište text dotazu. 9 Dotaz spustíte klepnutím na tlačítko Spustit na panelu nástrojů. (U předávacích dotazů, který vrací záznamy, můžete rovněž použít tlačítko Zobrazit.) V případě potřeby si program Microsoft Access vyžádá informace o databázovém serveru SQL. Upozornění: Nepřevádějte předávací dotaz na jiný druh dotazu, například na výběrový dotaz. Pokud tak učiníte, ztratíte zadaný příkaz SQL. Poznámky Předávací dotazy jsou vhodné pro spuštění uložených procedur na serveru ODBC. Pokud v poli vlastnosti Předávací řetězec ODBC neuvedete spojovací řetězec nebo pokud odstraníte existující řetězec, program použije výchozí řetězec "ODBC". V tomto nastavení je však nutné při každém spuštění dotazu zadat informace, které jsou nezbytné pro přístup k databázi. Některé předávací dotazy mohou vracet kromě dat i zprávy. Pokud nastavíte vlastnost Zaznamenat zprávy dotazu na hodnotu Ano, vytvoří program Microsoft Access tabulku, do které ukládá všechny vrácené zprávy. Název tabulky je odvozen od jména uživatele, k němuž je připojena pomlčka ( - ) a pořadové číslo. Čísla jsou přidělována vzestupně, první hodnota je 00. Například pro výchozího uživatele se jménem ADMIN budou tabulky s vrácenými zprávami pojmenovány "ADMIN - 00", "ADMIN - 01" atd. Pokud vytvoříte předávací dotaz, který vrací několik výsledných sad, můžete z každého výsledku vytvořit samostatnou tabulku. Poddotaz Charakteristickým prvkem tohoto typu dotazu je příkaz SQL SELECT, který je umístěn uvnitř jiného výběrového nebo akčního dotazu. Příkazy lze v mřížce návrhu dotazu zadat buď do řádku str. 17

Pole, kde slouží k definici nového pole, nebo do řádku Kritéria, kde slouží k definici kritérií pro toto pole. Poddotazy se využívají zejména k provádění těchto úkonů: Zjištění existence výsledku poddotazu (pomocí vyhrazených slov EXISTS nebo NOT EXISTS). Nalezení všech hodnot hlavního dotazu, které jsou rovny, větší než nebo menší než hodnoty vrácené poddotazem (pomocí vyhrazených slov ANY, IN nebo ALL). Vytvoření poddotazů uvnitř poddotazů (vnořené poddotazy). Použití poddotazu k definici pole nebo k definici kritéria pro výběr pole Vytvoření poddotazu: 1 Vytvořte nový dotaz. 2 V návrhovém zobrazení dotazu vložte do mřížky návrhu požadovaná pole, včetně polí, pro která chcete použít poddotaz. 3 Pokud poddotaz slouží k definici kritéria pro pole, zapište příkaz SELECT do buňky Kritéria pole, ke kterému se toto kritérium vztahuje. Příkaz SELECT uzavřete do závorek. Pokud poddotaz slouží k definici obsahu buňky Pole, zapište příkaz SELECT (uzavřený do závorek) do buňky Pole. Jakmile opustíte buňku, program Microsoft Access před příkaz SELECT automaticky vloží výrazy "Výraz1:", "Výraz2:" atd. 4 Klepnutím na tlačítko Zobrazit na panelu nástrojů zobrazte výsledek dotazu. Poznámky: Pokud k zápisu příkazu SELECT do buňky Pole nebo Kritéria potřebujete více místa, stiskněte kombinaci kláves SHIFT+F2 a zadejte příkaz v okně Lupa. Chcete-li pole přejmenovat, zapište místo výrazu "Výraz1:" jiný název, například "Kat:". Pole, které je definováno poddotazem, nelze použít k seskupování. Příkaz SELECT poddotazu nemůže definovat sjednocovací nebo křížový dotaz. Příklady výrazů, které jako kritéria používají výsledky poddotazů Pole Výraz 1) Výrobky, jejichž cena je stejná jako cena anýzového sirupu JednotkováCena (SELECT [JednotkováCena] FROM [Výrobky] WHERE [NázevVýrobku] = "Anýzový sirup") 2)Výrobky, jejichž cena leží nad vypočítaným průměrem. JednotkováCena >(SELECT AVG([JednotkováCena]) FROM [Výrobky]) 3) Platy obchodních zástupců, jejichž plat je vyšší než platy zaměstnanců s funkcemi "Obchodní ředitel" nebo "Marketingový ředitel". Plat > ALL (SELECT [Plat] FROM [Zaměstnanci] WHERE ([Funkce] LIKE "*Obchodní ředitel") OR ([Funkce] LIKE "*Marketingový ředitel*")) 4) Mezisoučty objednávek: Objednávky, jejichž souhrnné ceny jsou vyšší než průměrná hodnota objednávky [JednotkováCena]*[Množství] > ALL (SELECT AVG([JednotkováCena] * [Množství]) FROM [RozpisObjednávek]) str. 18

Příkaz (metoda) EXECUTE Spustí akční dotaz nebo vykoná SQL příkaz na zadaném objektu Connection nebo Database. objekt.execute zdroj, volby querydef.execute volby Syntaxe metody Execute se skládá z těchto částí: Část Popis objekt Objektová proměnná Connection nebo Database, na které se spustí dotaz. querydef Objektová proměnná určující objekt QueryDef, jehož vlastnost SQL určuje SQL příkaz, který se má provést. zdroj String obsahující SQL příkaz nebo vlastnost Name objektu QueryDef. volby Nepovinný. Konstanta nebo kombinace konstant určující integritu dat v dotazu, jak je popsáno v Nastavení. Nastavení Pro parametr volby je možné použít těchto konstant: Konstanta Popis dbdenywrite Bere právo zápisu ostatním uživatelům (pouze v pracovních prostorech Microsoft Jet). dbinconsistent (Výchozí) Provede nekonzistentní aktualizace (pouze v pracovních prostorech Microsoft Jet). dbconsistent Provede konzistentní aktualizace (pouze v pracovních prostorech Microsoft Jet). dbsqlpassthrough Provede předávací dotaz SQL. Nastavením této volby se SQL příkaz předá k zpracování ODBC databázi (pouze v pracovních prostorech Microsoft Jet). dbfailonerror Odvolá aktualizace, jestliže dojde k chybě (pouze v pracovních prostorech Microsoft Jet). dbseechanges Vyvolá chybu při běhu programu, jestliže jiný uživatel mění data, která upravujete (pouze v pracovních prostorech Microsoft Jet). dbrunasync Vykoná dotaz asynchronně (pouze u ODBCDirect objektů Connection a QueryDef). dbexecdirect Vykoná příkaz bez předchozího volání ODBC API funkce SQLPrepare (pouze u ODBCDirect objektů Connection a QueryDef). Poznámky: Konstanty dbconsistent a dbinconsistent se vzájemně vylučují, v jednom použití OpenRecordset můžete použít pouze jednu z nich. Použití obou konstant dbconsistent a dbinconsistent vyvolá chybu. Metoda Execute je platná pouze pro akční dotazy. Použijete-li ji s jiným typem dotazu, dojde k chybě. Jelikož akční dotaz nevrací žádné záznamy, metoda Execute nevrací objekt Recordset. (Vykonání SQL předávacího dotazu v pracovním prostoru ODBCDirect neohlásí chybu, pokud není vrácen objekt Recordset.) Použitím vlastnosti RecordsAffected objektu Connection, Database, nebo QueryDef zjistíte počet záznamů ovlivněných posledním voláním metody Execute. Např. RecordsAffected obsahuje počet záznamů odstraněných, aktualizovaných nebo vložených při provádění akčního dotazu. Při spuštění dotazu metodou Execute je vlastnost RecordsAffected objektu QueryDef nastavena na počet ovlivněných záznamů. V pracovním prostoru Microsoft Jet nemůže při provedení syntakticky správného SQL příkazu (máte-li potřebná práva) dojít k chybě při volání metody Execute, a to ani v případě, že nemůže být změněn nebo odstraněn ani jeden řádek. Z tohoto důvodu při používání metody Execute ke spuštění dotazu pro aktualizaci nebo odstranění vždy používejte volbu dbfailonerror. Tato volba vyvolá chybu při běhu programu a odvolá všechny provedené změny v případě, že některé z cílových záznamů jsou zamčeny a nemohou tedy být aktualizovány nebo odstraněny. str. 19