Užití SQL ve 4D v14-15



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

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

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

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

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

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

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

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

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

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

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

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

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

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

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

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

SQL - trigger, Databázové modelování

Semestrální práce 2 znakový strom

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

Access. Tabulky. Vytvoření tabulky

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

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

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

Virtual Private Database (VPD) Jaroslav Kotrč

Administrace Oracle. Práva a role, audit

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

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

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

RELAČNÍ DATABÁZOVÉ SYSTÉMY

Relační DB struktury sloužící k optimalizaci dotazů - indexy, clustery, indexem organizované tabulky

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

RELAČNÍ DATABÁZE ACCESS

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

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

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.

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

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MS Access propojení relací s formuláři a sestavami Ing.

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

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

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

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

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

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

DATABÁZE MS ACCESS 2010

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Databázové systémy I

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

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

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

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

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

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

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

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

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

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

Oracle XML DB. Tomáš Nykodým

Návod k aplikaci SQL Tools v.2.3

PG 9.5 novinky ve vývoji aplikací

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

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

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

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Použití databází na Webu

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

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á.

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

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

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

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.

Obrázek 1: Struktura programu z hlediska zapojení

Ukládání a vyhledávání XML dat

Nemocnice. Prvotní analýza a plán projektu

Operátory ROLLUP a CUBE

Základy informatiky. 06 Databázové systémy. Kačmařík/Szturcová/Děrgel/Rapant

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK3PH (vm3bph)

Měřící systém se vzdáleným přístupem. Databáze

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

Administrace Oracle Práva a role, audit. Kukhar Maria

Databázové systémy I

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

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

Text úlohy. Systémový katalog (DICTIONARY):

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Microsoft Office. Word hromadná korespondence

Studijní skupiny. 1. Spuštění modulu Studijní skupiny

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Databáze pro evidenci výrobků

Co je nového 2018 R2

Informační systémy 2008/2009. Radim Farana. Obsah. Základní principy XML

Relace x vztah (relationship)

Roční periodická zpráva projektu

1 Administrace systému Moduly Skupiny atributů Atributy Hodnoty atributů... 4

- sloupcové integritní omezení

Níže uvedená tabulka obsahuje technické údaje a omezení aplikace Excel (viz také článek Technické údaje a omezení aplikace Excel (2007).

5. POČÍTAČOVÉ CVIČENÍ

Lokality a uživatelé

Transkript:

Užití ve v14-15 Úvod Definice dat a přístup k datům jsou kritické momenty v řízení databází. Uživatelé potřebují schopnost definovat strukturu pro ukládání dat. Uživatelé také chtějí možnost přistupovat k datům uloženým v databázi za účelem práce s daty, a dotazy na data. umožňuje uživatelům všechny úrovně přístupu. také podporuje využívání ; populárního programovacího jazyka pro přístup k databázím. Tato technická poznámka bude dá a vedle sebe a dotýká se použití obou při přístupu k databázi. Dále se bude způsobem myslet tradiční přístup vývoje a užití databáze a doplňiújící způsob na zaákladě standardů, i když ten je již dnes také. Rozhodující položkou pro každou databázi je způsob, jak uživatelé definují datové struktury, a způsob, jak přistupují k datům uloženým v databázi. je relační databázový systém a IDE, který umožňuje uživatelům obě funkce. nabízí jednoduché grafické rozhraní pro uživatele k vytvoření jejich struktury. Uživatelé mohou vytvářet formuláře k úpravě svých osobních údajů v přátelským a intuitivním způsobem. Dále pak, poskytuje nativní jazyk dotazů na data a provádění mnoha dalších funkcí. Kromě mateřského jazyka, podporuje použití. je standardní jazyk pro relační databázový systém, který umožňuje uživatelům provádět některé databázové úlohy, ktzeré povoluje. a a jsou dvě různé možnosti, které vývojář / uživatel databáze může použít při vytváření a správě databáze. Je několik důležitých základních operací, jež zahrnují definování struktury databáze, manipulaci s daty v databázi, a vytváření vztahů mezi tabulkami a polí. Při provádění některých operací databáze, poskytuje uživateli s možnosti provedení operací buď programově (jazykem); nebo prostřednictvím grafického uživatelského rozhraní. Při provádění stejné operace v, musí vždy být použity standardní příkazy jazyka. Standardní příkazy jako Select, Create, Delete, Drop, a Update lze použít k provedení mnoha důležitých operací databáze. Definice dat (struktury) a manipulace s daty Mnoho z databázových operací může být rozděleno do dvou základních kategorií. Kategorie operací jsou rozděleny podle toho, co operace dělá a druhu úkolů, které vykonává. Tyto dvě kategorie jsou definice dat (struktury) a manipulace s daty. Definice dat (struktury) Definice dat zahrnuje definování toho, jak budou data uložena. Jedná se o vytváření tabulek a polí. To je v podstatě vytváření struktury pro data. V, struktura může být vytvořena prostřednictvím editoru struktury: 1

* Editor struktury poskytuje intuitivní grafické uživatelské rozhraní umožňující vytvořit a modifikovat tabulky a pole. V jsou používány pro totéž příkazy k vytvoření tabulky a pole. příkazy CREATE, ALTER, TRUNCATE, a DROP sev zabývají definicí dat. Operace definice dat (struktury) Operace pro definice dat definují strukturu databáze. Jedná se o vytváření, úpravy a mazání tabulky v databázi, spolu s poli a datovými typy. Vytvoření tabulky Prvním krokem při budování databáze je vytvoření tabulky. Tento krok zahrnuje vytvoření názevu tabulky, a definování pole a datových typů. Vytvořte tabulku přes editor struktury. Neexistujeí příkaz k vytvoření tabulky programově. Chcete-li vytvořit tabulku v, použijte příkaz CREATE TABLE. Příkaz umožňuje uživateli definovat název tabulky, názvy polí, typy polí a vlastnosti pole. Příklad vytvoření tabulky v : CREATE TABLE tabulka_1 ( ID int NOT Null, Název Varchar(255), Primary Key (ID) ); Kód výše vytvoří tabulku s názvem "tabulka_1" se dvěma poli (ID a Název).Pole "ID" je číslo, které nemůže být null. "ID" je také nastaven jako primární klíč. Pole "Název" je typu alfa. Varchar (255), v je to řetězec o maximální délce 255 znaků. 2

Úpravy tabulky - Alter table Po vytvoření tabulky, je důležité mít schopnost existující tabulky upravovat, změnit. Chcete-li to provést, musí být tabulka změněna (alter). Ve, mohou být tabulky měněny opět přes editor struktury Uživatel/vývojář může Přidávat, mazat nebo modifikovat pole. Opět v klasickém jazyku neexistuje příkaz pro tyto operace. příkaz ALTER TABLE je používán k modifikaci existující tabulky v databázi pomocí. Níže je několik příkladů manipulace s užítím tohoto příkazu. --přidá Pole_2 type int to Tabulka_1 ALTER TABLE Tabulka_1 ADD Pole_2 int; -upraví Pole_1 z Tabulka_1 aby bylo typu int ALTER TABLE table_1 ALTER COLUMN field_1 int; vymaže Pole_1 z Tabulka_1 ALTER TABLE Tabulka_1 DROP COLUMN Pole_1; Vymazání tabulky - Drop table Jiný způsob modifikace tabulky je vymazání existující tabulky. Všechna pole, indexy, triggery a omezení jsou odstraněny spolu s odstraněnou tabulkou. Ve, mohou být tabulky vymazány opět jen přes editor struktury Tabulka, spolu se svázanými formuláři je přesunuta do koše. příkaz DROP TABLE je používán k vymazání existující tabulky v databázi pomocí. Na rozdíl od tabulka není přenesena do koše, ale je natrvalo vymazána. Na druhou stranu všechny formuláře tabulky jsou do koše přesunuty. Drop Table table_1; --vymaže tabulka_1 Operace manipulace dat Operace manipulace dat pracujís daty v databázi. Tyto operace zahrnují vytvoření dat, vymazání dat a modifikaci existujících dat. Zkrácení tabulky - Truncate table 3

Truncate table vymaže všechny záznamy z určené tabulky. Tabulka sama však zůstane zachována, tím se liší od DROP TABLE a patří tedy do manipulace s daty. Zázamy mohou být vymazány z tabulky jednoduše výběrem záznamů ve výstupním formuláři a když jsou zvýrazněny klepnutím na příslušné tlačítko nebo klávesy delete/backspace. Záznamy mohou být mazány i programem příkazy TRUNCATE TABLE, DELETE RECORD, nebo DELETE SELECTION. Truncate Table([tabulka_1]) //vymaže všechny záznamy z tabulka_1 příkaz TRUNCATE TABLE odstraní všechna data/záznamy určené tabulky. TRUNCATE TABLE table_1; --vymaže všechny záznamy z tabulka_1 Výběr záznamů Manipulace dat pracuje s daty databáze. Tyto operace zahrnují i výběř (vyhledábí) odpovídajících záznamů. když je skupina záznamů vybrána mohou operace výběru pracovat s tímto podvýběrem. Ve jmůže být záznam či záznamy vybrány pomocí příkazu QUERY (a další z této skupiny) nebo ALL RECORDS Použití těchto příkazů přenese tento výběr do platného výběru. Platný výběr je ve držen v paměti. Všechny operace manipulace dat jsou prováděny ke změně platného výběru. Platný výběr může být změněn pomocí: Výběrem všech záznamů pomocí ALL RECORDS Vyhledáváním záznamů příkazy QUERY, QUERY BY FORMULA, QUERY BY EXAMPLE, QUERY SELECTION atd. Např. Query([tabulka_1];[tabulka_1]ID=1) All Records([tabulka_1]) mohou být záznamy vybrány za pomoci příkazu SELECT. Na rozdíl od nedrží výběr v paměti. Chcete-li zachovat záznamy vybrané, umístěte je do proměnné. To lze provést pomocí klauzule INTO. Níže je syntaxe pro jednoduchý výběrový výrok: Select (field_1;field_2,...,field_n) From table_name Where <Condition> Into (:$arr_1, :$arr_2,...,:$arr_n); 4

Užití: /*vybere záznamy z table_1 ode ID=1 a umístí výsledek do proměných*/ Select * From table_1 Where ID=1 Into (:$var_id, :$var_f1, :$var_f2); Vytvoření záznamů Vytváření záznamú je podstatné pro všechny databáze Na rozdíl od ostatních operací manipulace dat výběr zde není potřeba, a mají různé cesty jak to udělat. Ve záznam může být vytvořen ručně z formuláře nebo programem. K vytvoření záznamu programem se používají příkazy CREATE RECORD a SAVE RECORD. //Vytvoří záznam v table_1 Create Record([table_1]) [table_1]field_1:= abc [table_1]field_2:=123 Save Record([table_1]) K vytvoření zaznamu pomocí je používán příkaz INSERT. - - vytvoří záznam v tabulce table_1 INSERT INTO table_1 (field_1, Field_2) VALUES ( abc,123) Vymazání záznamů Další zásadní funkce v databázi je schopnost odstranit existující záznamy. Předtím, než je možné záznam vymazat, musí být záznam nejdříve vybrán. Ve záznamy mohou být ručně nebo programově vymazány. Záznamy lze vymazat ručně výběrem v formuláři výstupu a stisknutím klávesy Backspace / Delete. může taky odstranit záznamy programově pomocí příkaz DELETE RECORD. //vymaže jeden záznam v table_1 Query([table_1];[table_1]field_1= abc ) Delete Record([table_1]) //vymaže výběr záznamů v table_1 Query([table_1];[table_1]ID>10) Delete Selection([table_1]) Vymazat záznam pomocí lze ve příkazem DELETE. Koncept je mírně odlišný od, protože neexistuje platný záznam či výběr k provedení operace Vymazat. Místo toho záznamy, které budou vymazány jsou určeny pomocí podmínek v klausuli WHERE příkazu. 5

vymaže všechny záznamy v table_1 ode field_1= abc DELETE FROM table_1 WHERE field_1= abc ; vymaže všechny záznamy v table_1 kde ID>10 DELETE FROM table_1 WHERE ID>10; Podmínka WHERE určuje, který záznam vymazat. Jestliže nenexistuje podmínka where, jsou vymazány všechny záznamy. Úprava záznamů Existující záznamy mohou být také modifikovány a aktualizovány. Před tím než lze záznam aktualizovat musí být nejdřív vybrán. Ve záznamy lze aktualizovat ručně nebo programově. Záznamy lze aktualizovat ručně úpravami existujících záznamů ve formulářích pro vstup / výstup. Stávající záznamy mohou být aktualizovány programově pomocí třídy dotazů QUERY, a přiřazováním hodnot každému poli. Níže jsou uvedeny příklady různých způsobů, jak aktualizovat záznamy. //Upraví jeden záznam v table_1 Query([table_1];[table_1]ID=1) [table_1]field_1:= def [table_1]field_2:=456 Save Record([table_1]) //Upraví výběr záznamů v table_1 pomocí smyčky For Query([table_1];[table_1]ID<10) For($i;1;Records in selection([table_1])) [table_1]field_1:=uppercase([table_1]field_1) Save Record([table_1]) Next Record([table_1]) End for //Upraví výběr záznamů v table_1 pomocí Apply To Selection (Použít na výběr) Query([table_1];[table_1]ID<10) Apply to selection([table_1];[table_1]field_1:=uppercase([table_1]field_1) Chcete-li aktualizovat záznamy pomocí užíjte příkazu UPDATE. Podobně jako u DELETE příkazu, koncept je zde poněkud jiný než v. Protože neexistuje žádný aktuální záznam k užití UPDATE operace, záznamy jež mají být aktualizovány, jsou určeny podmínkou v klauzuli WHERE. Syntaxe: //Upraví všechny záznamy v table_1 kde field_1= upravovanáhodnota UPDATE table_name SET fieldname1= nováhodnota WHERE field_1= upravovanáhodnota ; Užití: //Upraví všechny záznamy v table_1 kde field_1= abc UPDATE table_1 SET field_1= def WHERE field_1 = abc Klauzule WHERE URČÍ, ktery záznam upravit. Není-li WHERE upraví se všechny záznamy tabulky. 6

Vztahy V relační databázi, jsou vztahy důležitý pojem. Vztahy umožňují různým polím a samostatným tabulkám se propojit. To má mnoho výhod, včetně těch, které umožní, aby byla data uložena do samostatných tabulek efektivně (normalizovaně). Vytváření vztahů v lze provést ve editoru struktury. Vztahy lze natáhnout z jednoho pole do druhého. Pole skupina k jedinci a pole jedinec ke skupině jsou dvě protilehlé možnosti. V koncept cizího klíče definuje vztahy. Cizí klíč tabulky je spojen s primárním klíčem jiné tabulky.primární klíč pro tabulku je pole (nebo kombinace polí) který jednoznačně identifikuje každý záznam v tabulce. Cizí klíč jiné tabulky bude odkaz na primární klíč jiné tabulky s cílem určit, které záznamy se k němu vztahují. Definici (constraint) primární klíč a cizí klíč lze vytvořit pomocí CREATE TABLE, nebo přidat pomocí ALTER TABLE. Vytvoření tabulky s cizím klíčem Create Table Employees ( ID int Primary Key, Name VarChar(50), Company_ID int, CONSTRAINT Emp_Comp FOREIGN KEY (Company_ID) REFERENCES Company(ID) ); Úprava existující tabulky přidáním primárního klíče Alter Table Employees ADD PRIMARY KEY (ID); --Úprava existující tabulky přidáním cizího klíče Alter Table Employees ADD CONSTRAINT Emp_Comp FOREIGN KEY (Company_ID) REFERENCES Company(ID); Tabulka jedinců a Tabulka skupin Předpokládejme následující tabulky: V tomto nastavení je tabulka adres považován za tabulku "jedinců". Tabulka Faktura je-považován za tabulku "skupin". Chcete-li si zapamatovat tento koncept uvažte, že existuje mnoho (skupina( faktur vztahující se k jedné adrese", a "každa adresa může mít skupinu faktur". Stejně tak, pole v tabulce faktury, považovány za pole "skupin", zatímco soubory v tabulce adres jsou v 7

nazývány polem "jedninců". U tabulky faktur jsou terminologii pole Bill_To a Ship_To cizí klíče s odkazem na primární klíč tabulky adres (pole ID). Vztehy jsou v tomto případě samozřejmě neautomatické. Navazování vztahů: Zadávání dat Listování v záznamech v výstupním formuláři Zprávy Operace na výběr záznamů (dotazy, třídění, užití výrazu) Následující operace způsobí, že se vztah bude navázán (automatický): Když se naváže automatický vztah, související záznamy jsou načteny a vybrány. Je-li vybráno více než jeden záznam, první záznam ve výběru je natažen do paměti. V některých případech v příkazech a / nebo akcích uživatele je natažen pouze záznam (do formuláře). Vztažené záznamy nejsou však automaticky vybrány. V těchto případech vztažené záznamy se musí explicitně vybrat pomocí příkazů RELATE ONE nebo RELATE MANY podle souvislosti a potřebujeme zpřístupniz záznamy ve vztahu. One-to-many a many-to-one vztahy Vztah one-to-many jedinec ke skupině nastává, když se odkazuje tabulka "jedniců" na související záznamy v tabulce "skupin". Chcete-li vytvořit vztah one-to-many v je používán příkaz RELATE MANY. Stejně tak vztah many-to-one skupina k jedinci nastává tehdy, když tabulka "skupin" se odkazuje na související záznam v tabulce "jedninců". Chcete-li vytvořit many-to-one vztah, je používán příkaz RELATE ONE. Relate one RELATE ONE naváže automatický vztah jedince ke skupině z tabulky nebo pole jedinců k tabulce či poli skupin. V RELATE ONE (manytable) naváže všechny automatické vztahy skupin k jedinci pro tuto tabulku skupin v platném procesu; nebo hledá záznamy týkající se manuálního neautomatického vztahu RELATE ONE (manyfield) a pokud existuje, načte související záznam do paměti, a vytvoří platný záznam a platný výběr pro tuto vztaženou tabulku. Chcete-li zobrazit hodnoty adresního řádku se ve je vstupním formuláři faktury, musí se použít RELATRE ONE(patřičné pole skupin), vztah je neautomatický. Kód umožní zobrazit ve vstupním formuláři faktury vztažené adresy "ulice, město, stát, a PSČ. Kód níže je v místě polí Bill_To a Ship_To jako makro. Bill_To pole: RELATE ONE([Invoice]Bill_To) vstreet1:=[address]street vcity1:=[address]city vstate1:=[address]state vzip1:=[address]zip Ship_To pole: 8

RELATE ONE([Invoice]Ship_To) vstreet2:=[address]street vcity2:=[address]city vstate2:=[address]state vzip2:=[address]zip Výsledný vstupní formulář vypadá následovně: V, odkazujem na pole "jedinců" z tabulky "skupin", použijeme join tabulky "jedninců" na tabulku "skupin" a související pole/sloupce. Níže je syntaxe: Select one_field (s) From one_table join many_table on one_field_value=many_field_value Chcete-li zobrazit související položky tabulky Adresa, musíme připojit tabulku adres s tabulkou faktury, kde adresa primární klíč (id), se rovná cizí klíč ve faktuře (Bill_To a Ship_To). Použijte níže uvedený kód na makrech polí Bill_To a Ship_To k zobrazení souvisejícího záznamu Adresa. 9

Kód v Bill_To poli: Begin Select * From Address join Invoice on Address.ID=Invoice.Bill_To End //Uloží hodnoty sloupce z Address do proměnných vstreet1:=[address]street vcity1:=[address]city vstate1:=[address]state vzip1:=[address]zip Kód v Ship_To poli: Begin Select * From Address join Invoice on Address.ID=Invoice.Ship_To End /Uloží hodnoty sloupce z Address do proměnných vstreet2:=[address]street vcity2:=[address]city vstate2:=[address]state vzip2:=[address]zip Relate many RELATE MANY ustavuje všechny vztahy jedince k skupině vztazích pro tabulky nebo pole jedinců. Tento příkaz se používá v souvislosti s tabulkami "jedinců". Když je zobrazen formulář tabulky jedinců "One" (Address), související záznamy z tabulky "skupin" (faktury) jsou načteny a stalou se platným výběrem v této tabulce. Avšak pokud je vybrán záznam pro tabulku "jedinců" (adresa) programově vztažené záznamy z tabulky "skupin" (faktury), nejsou načteny. V tomto případě, musí být použit příkaz RELATE MANY k načtení vztažených záznamů. V níže uvedeném příkladu je vybrán jeden ze záznamu tabulky adres a je zobrazen ve vstupním formuláři programově. RELATE MANY se používá k načtení záznamů vztažených faktur. //vyhledání, navázání relace, úpravy QUERY([Customers];[Customers]ID=1) RELATE MANY([Customers]) $winref:=open form window([customers];"input") DIALOG([Customers];"Input") CLOSE WINDOW($winref) Spuštěním výše uvedeného kódu se zobrazí vstupní formulář se záznamem tabulky adres, kde Addres ID je 1. Veškeré faktury související s tímto záznamem se zobrazí v podformuláři Address'Invoices. 10

V odkazujeme na pole Many z pole One tabulky, propojíme je pomocí join tabulky many s tabulkou one. Syntaxe je níže Select many_field(s) From many_table Join one_table on many_field_value=one_field_value; Níže je uveden příklad, kterým se zavádí vzteh jeden k mnoha. Jakmile se ustaví vztah, záznamy faktur ve vztažené skupině jsou zobrazeny ve vstupním formuláři tabulky jedinců (adresa). Nejprve uvede do vztahu dvě tabulky pak vybere související skupinu faktur, pokud adresa ID = 1. Nakonec umístí záznamy do polí a ty pak mohou být zobrazeny v listboxu. Select * From Invoice join Address on (Invoice.Bill_To=Address.A_ID or Invoice.Ship_To=Address.ID) Where Address.ID=1 Into :arrid, :arrbill, :arrship, 11

Závěr To byl dvojí pohled do a porovnání klasické cesty a využitím z hlediska zakládání datové struktury a manipulace s daty. mocný nástroj pro konečného uživatele, ale z hlediska vývojáře je nutno posoudit, kam až uživatele pustí, bez nebezpečí pro strukturu dat a integritu dat. Nové rysy v v14 View Integrovaný engine v14 podporuje standardní view. Je to virtuální tabulka, jež může být sestavena za běhu naplněna z několika pevných tabulek databáze a upravena výpočty. Když je tabulka view definována, můžeme na ni používat příkazy jazyka jako třeba SELECT tak jako na pevnou tabulku. Údaje vyskytující se ve view, pohledu, jsou definovány pomocí definice dotazu na základě příkazu SELECT. Skutečné pevné tabulky použité v definici dotazu se nazývají "výchozí" tabulky. view obsahuje sloupce a řádky stejně jako standardní tabulky, ale ve skutečnosti neexistují; je to jen reprezentace vzniklá při zpracování a jsou uloženy v paměti. Pouze definice pohledu je ve skutečnosti uložena v databázi. Pro ovládání view jsou používány ve v14 dva příkazy CREATE VIEW CREATE [OR REPLACE] VIEW [schema_name.]view_name [(column_list)] AS select_statement[;] Příkaz CREATE VIIEW vytvoří pohled pro prohlížení s názvem view_name (což je standardní sql_name), obsahuje sloupce definované v parametru column_list. Pokud je tabulka pouhou kopií trvalé tabulky nemusíte zatat názvy a typy sloupců. Název sloupce budete muset zadat, pokud tento sloupec je funkce nebo je odvozen z aritmetického výrazu (skalární). Rovněž je nutné zadat název sloupce, pokud chcete, aby jste vyhnuli různým sloupcům se stejným názvem (například během operace JOIN), nebo po chcete použít jiný název sloupce, než ten, ze kterého je tento odvozen. Jestliže je parametr column_list zadán, musí obsahovat stejný počet sloupců, jako select_statememt definující podmínku hledání záznamů pro pohled. Jestliže je column_list vynechán, budou mít sloupce pohledu tytéž názvy jako v podmínce hledání select_statement. View jako tabulky musí mít jedinečné názvy Jestliže předáte možnost OR REPLACE, view je automaticky přepsáno jestliže již existuje. Tato možnost muže být užitečná ke zmněně definice již existujícího view bez použití více kroků vymazat/znovuzaložit přístupová práva k objektům již definovaným pro toto view. Když možnost OR REPLACE není předána a snažíme se vytvořit view s již existujícím názvem vrátí se chyba. schema_name je také standardní sql_name a můžete ho použít k označení názvu schématu, který obsahuje pohled. Pokud npředáte schema_name, nebo předáte název schématu, který neexistuje, pohled je automaticky přiřazen do výchozího schématu, který se nazývá "DEFAULT_SCHEMA". 12

select_statement označuje příkaz SELECT, který definune definice dotaz pohledu. Select_statement je stejný jako standardní SELECT v, ale s těmito výjimkami: nelze použít příkazy INTO, LIMIT nebo OFFSET. Omezení, ofset nebo přiřazení proměnných v, ale mohou být provedena v SELECT při volání/použití pohledu. nelze použít klauzuli GROUP BY. pohledy jsou v režimu pouze pro čtení a nelze je aktualizovat. Definice view je "statická", a není aktualizována pokud je zdrojová tabulka upraví nebo i odstraní. Konkrétně žádný sloupec přidáný později do tabulky se nezobrazí v pohledu založeném na této tabulce. Stejně tak, pokud se pokusíte o přístup k sloupcům odstraněném z tabulky pomocí (nové) definice pohledu, způsobí to chybu. Nicméně, pohled odkazující se na odstraněné zdrojové view bude i nadále pracovat. Ve skutečnosti, když vytvoříte pohled, převede se jakýkoliv odkaz view do odkazů na zdrojové tabulky. Pohledy mají globální dosah. Jakmile je pohled vytvořen pomocí CREATE VIEW, lze k němu přistupovat pomocí všech částí aplikace ( remote pomocí, externí databáze vytvořené pomocí příkazu CREATE DATABASE, jiné databáze pomocí příkazu login, atd.). A kdykoliv, dokud není odstraněn pomocí příkazu DROP VIEW. Příklady Je definována tabulka Lidé obsahující následující sloupce ID FIRST_NAME LAST_NAME DEPARTMENT INT64 VARCHAR(30) VARCHAR(30) VARCHAR(30) SALARY INT Dále je několik příkladů view s žádnými omezeními: CREATE VIEW FULLVIEW AS SELECT * FROM PEOPLE; view s "horizontalním" omezením na obeah tabulky. Když např. chcete zobrazit pouze lidi z dapartementu Marketing: CREATE VIEW HORIZONTALVIEW (ID, FirstName, LastName, Salary) AS SELECT ID, FIRST_NAME, LAST_NAME, SALARY FROM PEOPLE WHERE DEPARTMENT = 'Marketing'; složené view: CREATE VIEW AGGREGATEVIEW (FirstName, LastName AnnualSalary) AS SELECT FirstName, LastName, SALARY*12 FROM PEOPLE; pohled s "vertikálním" omezením na počet sloupců. Když např. nechcete zobrazit sloupec SALARY: 13

CREATE VIEW VERTICALVIEW (ID, FirstName, LastName, Department) AS SELECT ID, FIRST_NAME, LAST_NAME, DEPARTEMENT FROM PEOPLE; Když je view již definováno můžete jeu používat jako standardní tabulku. Např. chcete získat všechny lidi jejichž výplata je větší než 5,000 Euro a chceme je zobrazit v listboxu: SELECT * FROM FULLVIEW WHERE SALARY < 5000 INTO :aid, :afirstname, :alastname, :adepartment, :asalary; Další příklad, chcete získat každou osobu v department Marketing, jejichž jmého je "Michael": SELECT ID, LastName, Salary FROM HORIZONTALVIEW WHERE FirstName='Michael' INTO :aid, :alastname, :asalary; DROP VIEW DROP VIEW [IF EXISTS] [schema_name.]view_name[;] Příkaz DROP VIEW vymaže view s názvem view_name z databáze. Když je předáno omezení IF EXISTS neudělá nic a nevrátí chybu, pokud view již neexistuje. schema_name je standardní sql_name a můžete ho použít k označení názvu schématu, který obsahuje pohled. Pokud npředáte schema_name, nebo předáte název schématu, který neexistuje, pohled je automaticky přiřazen do výchozího schématu, který se nazývá DEFAULT_SCHEMA". Nové možnosti v ALTER TABLE Příkaz ALTER TABLE nyní přijímá nové možnosti: [Trailing] (používá se s klíčovým slovem ADD): vynutí si vytvoření sloupce jež má být vytvořen po posledním existujícím sloupci tabulky v souboru struktury. Tato volba je užitečná když sloupce obsahující data byly vymazány z tabulky (aniž by byla smazána data), aby se zabránilo že existující data jsou předána do nově definovaného sloupce. povolení / zakázání žurnálování pro tabulky povolení / zakázání "AutoIncrement" možnost pro typ LongInt pole zapnutí / vypnutí volby "Auto UUID" pro alfa pole typu UUID. ALTER TABLE sql_name {ADD column_definition [PRIMARY KEY] [TRAILING] DROP sql_name ADD primary_key_definition DROP PRIMARY KEY ADD foreign_key_definition DROP CONSTRAINT sql_name [{ENABLE DISABLE} REPLICATE] [{ENABLE DISABLE} LOG] [{ENABLE DISABLE} AUTO_INCREMENT] [{ENABLE DISABLE} AUTO_GENERATE] SET SCHEMA sql_name} 14

Příkaz vrátí chybu: Když je volitelný parametr ENABLE LOG přijat a žádný platný primární klíč není definován, pokud se pokusíte změnit nebo odstranit definici primárního klíče tabulky bez zakázání žurnálování pomocí DISABLE LOG. Ve verzi v14r3 ALTER DATABASE {ENABLE DISABLE} {INDEXES CONSTRAINTS TRIGGERS} Příkaz umožňuje povolit/zakázat triggery pro všechny tabulky v aktuální databázi pro aktuální relace (tj pro všechny uživatele a procesy dokud databáze není restartována). Optimalizace v14r4 SELECT DISTINCT" Příkaz funguje rychleji o 80% Begin SELECT DISTINCT Names FROM Employees INTO :$Emp; End Optimalizace v14r5 GROUP BY/ORDED BY" Spuštění SELECT pomocí Group by, pokud jsou použity pro jednotlivé tabulky je asi desetkrát rychleji než dříve. Složitější případy, zejména s tabulkami v relaci, byly také optimalizovány pro běh až desetkrát rychlejší. 15