Strukturovaný dotazovací jazyk SQL 
SQL Windows představuje produkt, který slouží pro vývoj databáztových aplikací klient - sever běžících pod Microsoft Windows. Tvorba aplikace probíhá ve dvou krocích:

V prvém kroku programátor definuje zpravidla interakčním způsobem grafický vzhled uživatelského rozhraní tím, že vytváří grafické objekty a rozmísťuje je na ploše obrazovky. Současně přizpůsobuje parametrizované vlastnosti objektů svým potřebám.

Ve druhém kroku provádí vlastní programování zadáváním příkazů jazyka SAL (SQL Application Language) popisujících chování vytvořených objektů. Programování je založeno na řízení zprávami. Systém SQL Windows zasílá zprávy objektům, jichž se týkají (např. tisk tlačítka myši na objektu typu tlačítko). Podstata programování v jazyce SAL potom spočívá především v příkazech popisujících reakce na přijaté zprávy. I programátor může definovat vlastní zprávy a zasílat je objektům.

Jazyk SAL obsahuje poměrně malý sortiment základních příkazů, používá však celou řadu systémových funkcí a je definována řada systémových zpráv.
I vlastní programování lze provádět do určité míry interaktivně, neboť lze využit kontextově závislé nabídky položek, které lze na dané místo popisu vložit.

Použití databáze

SQL Windows používá pro styk s databází jazyk SQL. Příkazy jazyka SQL se zadávají jako znakové řetězce funkcím a jsou analyzovány až při běhu aplikace.
V této části budeme uvažovat pouze jednouživatelskou aplikaci, nebudeme řešit problémy související se souběžným přístupem.

Seznam používaných příkazů

MySQL_Affected_Rows — Počet záznamů ovlivněných posledním příkazem
MySQL_Close — Uzavření spojení s databází MySQL
MySQL_Connect — Vytvoření spojení s databázovým serverem
MySQL_Create_DB — Vytvoření nové databáze
MySQL_Data_Seek — Přesun ukazatele na aktuální záznam
MySQL_DB_Query — Vykonání SQL-příkazu
MySQL_DBName — Přečtení jména databáze
MySQL_Drop_DB — Smazání databáze
MySQL_ErrNo — Chybový kód posledního volání MySQL
MySQL_Error — Text chybového hlášení posledního volání MySQL
MySQL_Fetch_Array — Načte záznam výsledku do asociativního pole
MySQL_Fetch_Field — Získání informací o položce výsledku
MySQL_Fetch_Lengths — Zjištění délek položek aktuálního záznamu výsledku
MySQL_Fetch_Object — Načte záznam výsledku do objektu
MySQL_Fetch_Row — Načte záznam výsledku do pole
MySQL_Field_Flags — Zjištění doplňkových informací o položce
MySQL_Field_Len — Zjištění délky položky
MySQL_Field_Name — Zjištění názvu položky
MySQL_Field_Seek — Nastavení aktuálního indexu položky
MySQL_Field_Table — Zjištění tabulky, ze které pochází položka
MySQL_Field_Type — Zjištění typu položky
MySQL_Free_Result — Uvolnění výsledku z paměti
MySQL_Insert_Id — Zjištění hodnoty ID posledního příkazu INSERT
MySQL_List_DBs — Zjištění všech databází dostupných na serveru
MySQL_List_Fields — Získání výsledku s obsahem položek zadané tabulky
MySQL_List_Tables — Zjištění všech tabulek uložených v databázi
MySQL_Num_Fields — Zjistí počet položek výsledku
MySQL_Num_Rows — Zjistí počet záznamů výsledku
MySQL_PConnect — Vytvoří persistentní spojení s databázovým serverem
MySQL_Query — Vykonání SQL-příkazu
MySQL_Result — Získání hodnoty jedné položky výsledku dotazu
MySQL_Select_DB — Výběr aktivní databáze
MySQL_TableName — Přečtení jména tabulky


Přístup k databází

Aplikace v SQLWindows může přistupovat k databázi dvojím způsobem:
a) vícekrokový přístup
b) jednokrokový přístup

U vícekrokového přístupu je nutno provést tyto akce:
1. zajistit připojení databáze (Connect)
2. provádět databázové operace
3. uzavřít spojení s databází

Druhý krok sestává pro každý příkaz jazyka SQL z několika dílčích kroků:
2a. přeložení příkazu jazyka SQL
2b. provedení příkazu jazyka SQL
2c. výběr dat z databáze a přiřazení (pro příkaz SELECT)

U jednokrokového přístupu lze provést databázovou operaci voláním jediné funkce, která v sobě zahrnuje provedení všech kroků vícekrokového přístupu. Tento způsob je jednodušší, ale má některá omezení, především u příkazu SELECT lze vybrat a přiřadit pouze jeden řádek tabulky výsledku dotazu.

Vytvoření tabulky

Nové vytvořená databáze je samozřejmě prázdná. Taková prázdná databáze nám příliš platná není, a proto je třeba v ní vytvořit tabulku (či více tabulek) pro ukládání dat. K tomu v SQL slouží příkaz CREATE TABLE se syntaxí:
CREATE TABLE jméno (atribut1 typ [modifikátory] [, atribut2 typ ...])

např. CREATE TABLE adresar (id INTEGER PRIMARY KEY AUTO_INCREMENT, jmeno VARCHAR(30), email VARCHAR(40), poznamka TEXT);

Modifikace struktury tabulky

Chceme-li přidat sloupec tabulky, použijeme příkaz ADD, resp. ADD COLUMN, za kterým následuje definice přidávaného sloupce:

ALTER TABLE adresar ADD COLUMN datum_narozeni DATE;

Tento příkaz zároveň umožňuje určit, kam ve struktuře tabulky má být nový sloupec zařazen. Bez dalšího určení je sloupec zařazen jako poslední, pomocí identifikátorů FIRST či AFTER jej lze zařadit na jinou pozici:

ALTER TABLE adresar ADD adresa VARCHAR(100) AFTER jmeno;
ALTER TABLE adresar ADD id_maj INTEGER FIRST;

Chceme-li smazat sloupec tabulky, tj. odstranit jej z definice tabulky (a tím pádem samozřejmě smazat data, jež obsahuje), použijeme příkaz DROP, resp. DROP COLUMN:
ALTER TABLE adresar DROP adresa;
ALTER TABLE adresar DROP COLUMN id_maj;

Pokud chceme změnit definici sloupce, máme na výběr příkazy MODIFY a CHANGE. Příkaz MODIFY je rozšířením standardu SQL, pocházejícím od společnosti Oracle, příkaz CHANGE je vlastním rozšířením MySQL. Příkaz MODIFY umožňuje změnit datový typ konkrétního sloupce, případně jueho modifikátory:

ALTER TABLE adresar MODIFY email VARCHAR(50) NOT NULL;

Výše uvedený příkaz zvětší prostor pro uložení elektronické adresy na 50 znaků (z původních 40) a určí, že toto pole musí být vždy vyplněno. Příkaz CHANGE je poněkud složitější, neboť vyžaduje nejprve určení sloupce, který chcete měnit, a poté kompletní novou definici. Což znamená, že výše uvedenou změnu bychom pomocí CHANGE provedli takto:

ALTER TABLE adresar CHANGE email email VARCHAR(50) NOT NULL;

Ano, skutečně je třeba dvakrát za sebou zadat jméno sloupce - poprvé totiž slouží jako identifikace modifikovaného sloupce a podruhé jako součást vlastní definice. Výhodou příkazu CHANGE naopak je, že nám umožňuje změnit jméno sloupce:

ALTER TABLE adresar CHANGE email el_adresa VARCHAR(50) NOT NULL;

Tento příkaz zároveň se změnou definice sloupce jej ještě přejmenuje na el_adresa.

Smazání tabulky

Chcete-li celou tabulku smazat, použijte příkaz DROP TABLE se zadáním jména tabulky, kterou chcete smazat:
DROP TABLE adresar;

Tento příkaz tabulku smaže, včetně veškerých dat. Obnova ze zálohy je obvykle možná, přesto s tímto příkazem zacházejte opatrně.

Vkládání záznamů

Příkaz INSERT umožňuje vkládat nová data. Jeden příkaz INSERT umožňuje vkládat data pouze do jedné tabulky - pokud tedy potřebujeme vkládat data do více tabulek, byť nějakým způsobem propojených, je třeba vložení provést pro každou tabulku zvlášť.

Také příkaz INSERT má více variant syntaxe, z nichž nejčastěji se používá tato:

INSERT INTO tabulka [(seznam sloupců)] VALUES (seznam hodnot) [, (seznam hodnot) ...]

Za příkazem INSERT INTO je třeba uvést jméno tabulky, do níž chceme hodnoty vkládat. Dále může (a nemusí) následovat seznam vkládaných atributů v závorce, poté je za klíčovým slovem VALUES v závorce uveden seznam vkládaných hodnot. Chcete-li najednou vložit více řádků, stačí uvést čárku a v závorce seznam hodnot pro další řádek.

Příklady:

INSERT INTO adresar VALUES (0,"Pavel Pavel","pavel@server.cz","kamarád z volejbalu");
INSERT INTO adresar (jmeno, email) VALUES ("Petr Rád","radp@p.cz"), ("Roman Kapoun", "kapr@hotmail.com");

Další varianta příkazu INSERT umožňuje vložit do tabulky záznamy (resp. jejich část), které jsou již uložny v jiné tabulce nebo tabulkách. Tato varianta využívá výběrového příkazu SELECT. Příkazem SELECT je možné vybrat prakticky libovolnou množinu záznamů z jedné či více propojených tabulek - a právě výsledek takového výběrového příkazu nám poslouží jako vstup do nově vytvářené tabulky. Syntaxe příkazu vypadá takto:

INSERT INTO tabulka [ (seznam sloupců) ] SELECT výběrový příkaz;

Začátek příkazu je zcela shodný s předchozí variantou, pouze místo části VALUES následuje část SELECT.

Mazání záznamů

Někdy je naopak třeba z tabulky nepotřebné záznamy smazat. K tom se v jazyce SQL používá příkaz DELETE s následující syntaxí:

DELETE FROM tabulka [ WHERE podmínka ];

Je samozřejmě třeba určit jméno tabulky, ze které chceme mazat, obvykle také podmínku pro záznam či záznamy určené ke smazání.

Pokud podmínku nezadáme, tj. zadáme samotný příkaz:
DELETE FROM tabulka;
budou smazány všechny záznamy tabulky!!

Podmínka v jazyce SQL se obvykle týká hodnot nějakého atributu, např.:

DELETE FROM adresar WHERE id=31;

Tento příkaz smaže záznam s identifikačním číslem 31, pokud existuje. Protože se jedná zároveň o primární klíč, je zřejmé, že tento záznam je pouze jeden. Podmínce však může vyhovovat i více záznamů, v takovém případě budou smazány všechny takové záznamy:

DELETE FROM adresar WHERE id>10;
DELETE FROM adresar WHERE jmeno="Jan Novák";
DELETE FROM adresar WHERE poznamka IS NULL;
DELETE FROM adresar WHERE jmeno LIKE "Ja% Novák%";

Úprava záznamů

Pro úpravu existujících záznamů tabulky je určen příkaz UPDATE. Umožňuje zadaným záznamům změnit příslušné atributy na nové hodnoty. Syntaxe:

UPDATE tabulka SET atribut=hodnota ['atribut=hodnota ...] [ WHERE podmínka ];

Opět je třeba určit tabulku, ve které chceme úpravu provádět, a obvykle též podmínku určující záznam či záznamy, jichž se bude úprava týkat. Vlastní změna je prováděna v části SET, za kterou následuje jedna či více dvojic atribut=hodnota. Například:

UPDATE adresar SET jmeno="Petr Mejla" WHERE id=3;

Tento příkaz změní jméno v záznamu jednoznačně určeném pomocí identifikačního čísla. Lze však snadno upravit také několik záznamů najednou:

UPDATE adresar SET poznamka="spolupracovnici" WHERE email LIKE "%@nasefirma.cz";

Místo hodnota je také možné zadat výraz, ve kterém využijete hodnot proměnných v daném řádku:

UPDATE zamestnanci SET plat=plat*1.2;

Tento příklad zvedne platy všem zaměstnancům (neboť není zadána podmínka). Pokud upravujeme více atributů najednou, stačí jedna část SET, za kterou následují jednotlivé dvojice atribut-hodnota oddělené čárkou:

UPDATE adresar SET jmeno="Tereza Vdaná", email="vdanat@hotmail.com" WHERE id=4;




  Datový typ Rozsah hodnot
Celočíselné datové typy TINYINT -128 .. 127
SMALLINT -32 768 .. 32 767
MEDIUMINT -8 388 608 .. 8 388 607
INT, INTEGER -2 147 483 648 .. 2 147 483 647
BIGINT -9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807
Čísla s pohyblivou řádkovou čárkou FLOAT -3.40282346638 .. 3.40282346638/td>
DOUBLE, REAL, DOUBLE PRECISION -1.79769313486223157308 .. 1.79769313486223157308
DECIMAL(x,n), NUMERIC(x,n) záleží na x, n
Datum a čas DATE '1000-01-01' .. '9999-12-31'
DATETIME '1000-01-01 00:00:00' .. '9999-12-31 23:59:59'
TIMESTAMP lib. datum z 1970-2037
TIME '-838:59:59' .. '838:59:59'
YEAR 1901..2155 pro rok zadaný čtyřmi číslicemi (standard), 1970-2069 pro rok zadaný dvěma číslicemi - YEAR(2)
Řetězce CHAR(x) x znaků
VARCHAR(x) x znaků
Rozsáhlá TINYBLOB, TINYTEXT max. 255 znaků
BLOB, TEXT max. 65 535 znaků
MEDIUMBLOB, MEDIUMTEXT max. 16 777 215 znaků
LONGBLOB, LONGTEXT max. 4 294 967 295 znaků
Výčet ENUM('hodnota1', 'hodnota2', ...) libovolná hodnota ze zadaného výčtu
Množina SET('hodnota1', 'hodnota2', ...) množina obsahující libovolný počet hodnot


© 2003  e -future Company