HOME > HOWTO > DATABÁZEHOWTO

Abeceda SQL (1.část - Úvod)

1. Říjen 2000, 00:00 (21842x zobrazeno)Abeceda SQL (1.část - Úvod)

Historie tohoto jazyka sahá až do sedmdesátých let, kdy se vyvinul z jazyka SEQUEL. Důležitým mezníkem v jeho vývoji byla standardizace organizací ANSI v roce 1986 a její přijetí ISO v roce 1987 - tato verze se nazývá SQL86 a mnohé databáze ji dodnes využívají. Dalších rozšíření se SQL dočkal v letech 1989 a 1992 (SQL89 a SQL92). V současné době se pracuje na dalším standardu, SQL3, který by měl přinést další rozšíření (objekty, rekurzivní dotazy).

V tomto seriálu nechci popisovat co je to databáze, tabulka, jaké jsou pravidla pro vytváření datových modelů, co jsou to normální formy apod. Tyto informace si každý zájemce může vyhledat v literatuře, které je i u nás dostatek. Půjde zde pouze o jazyk SQL (čteno es kjú el nebo síkvel), který je základním nástrojem pro komunikaci s databázovým systémem.

Jako ukázkovou databázi jsem si vybral PostgreSQL. Je šířena zdarma a je dostupná jak pro většinu unixových systémů, tak i pro Windows. Občas, hlavně ze začátku se zmíním i o databázi MySQL, která je také velmi populární, ale která zatím nepodporuje tak velkou množinu SQL konstrukcí jako PostgreSQL. Nicméně všechny ukázky by měli fungovat na všech ostatních databázích, splňujících některou z norem SQL (Sybase, Oracle, Interbase, MS SQL a další).

Klientskou část databáze spustíte příkazem psql v případě PostgreSQL nebo mysql v případě MySQL. Buď již máte vytvořenou databázi, nebo ji vytvoříte příkazem create a připojíte se k ní:

 template1=# create database pokusna_db; CREATE DATABASE tamplate1=# \c pokusna_db You are now connected to database pokusna_db. pokusna_db# _ 

V případě MySQL to vypadá trochu jinak:

 mysql> create database pokusna_db; Query OK, 1 row affected (0.00 sec)  mysql> use pokusna_db; Database changed mysql> _ 

V práci s databázemi se jadnotlivé systémy často liší. První poznatek: všechny SQL příkazy musí být ukončené středníkem.

Teď můžete vytvořit první tabulku, například jednoduchý seznam se jmény a platem. K vytvoření tabulky slouží příkaz CREATE:

 CREATE TABLE plat   (   jmeno  VARCHAR (30),   plat   DECIMAL (7, 2)   ); 

Tento příkaz vytváří tabulku, která bude mít dva sloupce: sloupec se jmény zaměstnanců, údaje zde budou textové, s proměnnou délkou do třiceti znaků a sloupec s platem zaměstnance, kde budou číselné údaje o max. 7 cifrách, z nichž dvě budou za desetinnou čárkou (resp. tečkou).

Mezi jednotlivými sloupci se při definici píše čárka, za posledním nikoliv. Nyní můžete vložit nějaká data příkazem INSERT:

 # INSERT INTO plat VALUES ('Novák',12000); INSERT 91434 1 # INSERT INTO plat VALUES ('Dvořáková',11000.50); INSERT 91435 1 # INSERT INTO plat VALUES ('Novák',11454); INSERT 91436 1 # INSERT INTO plat VALUES ('Janeček',20000); INSERT 91437 1 

Odezvy jiných databázových systémů se budou samozřejmě lišit, například MySQL reaguje na vložení dat takto:

 Query OK, 1 row affected (0.01 sec) 

Zadáte-li nějaký údaj špatně, máte v podstatě dvě možnosti - buď jej příkazem DELETE smazat a vložit nový a nebo jej příkazem UPDATE opravit:

 # DELETE FROM plat WHERE jmeno = 'Janeček'; DELETE 1 # INSERT INTO plat VALUES ('Janeček',22000); INSERT 91438 1 

nebo

 # UPDATE plat SET plat = 22000 WHERE jmeno = 'Janeček'; UPDATE 1 

Nakonec se jistě budete chtít na vložená data podívat: k tomu využijete příkaz SELECT, který je asi při práci s databází nejpoužívanější a zároveň má obrovské množství variant.

 # SELECT * FROM plat;    jmeno   |   plat -----------+----------  Novák     | 12000.00  Dvořáková | 11000.50  Novák     | 11454.00  Janeček   | 22000.00 (4 rows) 

Budeme-li chtít zobrazit pouze platy vyšší nebo rovné 12000 a zároveň je řadit vzestupně, použijeme takto modifikovaný SELECT:

 # SELECT * FROM plat WHERE plat >= 12000 ORDER BY plat ASC;   jmeno  |   plat ---------+----------  Novák   | 12000.00  Janeček | 22000.00 (2 rows) 

Další možností je vypsat si pouze jména z databáze. Zároveň je naší podmínkou, aby se jména neopakovala, tj. je-li nějaké jméno v databázi vícekrát, my ho chceme na výstupu pouze jednou a jména chceme řadit v obráceném, tj. "neabecedním" pořadí:

 # SELECT DISTINCT jmeno FROM plat ORDER BY jmeno DESC;    jmeno -----------  Novák  Janeček  Dvořáková (3 rows) 

Poslední ukázka je výpis celkové sumy, kterou získal pan Novák:

 # SELECT SUM(plat) FROM plat WHERE jmeno = 'Novák';    sum ----------  23454.00 (1 row) 

Jistě jste z těchto ukázek odvodili strukturu příkazu SELECT. Za klíčovým slovem SELECT se uvádí výčet sloupců, oddělených čárkou, které chceme do výpisu zahrnout. Je možné uvést modifikátor DISTINCT, který zabrání výstupu stejných řádek. Za částí jsou uvedené tabulky, ze kterých se má výpis provést - i zde jich může být více, ale o tom až jindy. Část WHERE slouží k omezení výběru řádek, které se dostanou do výpisu. Částo ORDER BY pak definuje, podle jakých kritérií se mají řádky třídit. SUM je agregační funkce, která provádí součet jednoho sloupce. Příkaz SELECT je ale mnohem složitější a některé pokračování tohoto seriálu věnujeme pouze jemu.

Na závěr ještě jeden příkaz:

 DROP TABLE plat; 

Tento příkaz smaže kompletně celou tabulku včetně všech dat.

Zde uvedený příklad tabulky platů samozřejmě není nejvhodnějším řešením tohoto problému a je zde uveden pouze jako ukázka jednoduché tabulky. V příští části se podíváme na některé pokročilejší dotazy, datové typy, klíče a spojování tabulek.

autor: Ing. Jiří Václavovič

Líbil se vám článek?

3.67 (6x hodnoceno)12345

Přidejte si článek do oblíbených

Linkuj.cz ico linkuj.czdel.icio.us icodel.icio.usrss icorss - HOWTOrss icorss - HOWTO > DATABÁZE

Komentáře

related

serialy

nejctenejsi clanky

hledas job ?

nejkomentovanejsi clanky

reboot girl

 

POLITICKY ROZCESTNIK a RSS AGREGATOR  SEZNAMKA PRAHA  Politicky magazin JP  POLITICKE INFORMACNI CENTRUM  www.czfree.net  Hack This Page  Vlastenecka politicka strana  Ja PATRIOT | vyberovy magazin  www.BASTARDSERVERS.com  DEBIAN GNU LINUX 
www.blackhole.cz  www.linux.sk  www.abclinuxu.cz  www.underground.cz  MAGAZIN O POLITICE  PATRIOTI - Narodne vlastenecka strana  www.linuxzone.cz  www.root.cz  www.penguin.cz  www.krypta.cz 
AGREGATOR  Mr.NETWOR  POLITIKA PRAHA BRNO OSTRAVA  BASTARD NEWS  G$BIT SERVERS  geek music  www.soom.cz  Novinky z politiky  HackThisPage  Strana ÄŚeskĂ˝ch PatriotĹŻ 
CZECH GEEK FEED  Patrioti CR  photopost.cz  apsara.cz  PODPOR PATRIOTY  sport, outdoor, cyklo obchod  dfklub.cz  www.zi.cz  DOMOBRANA - KOHO ZAVOLAS  PATRIOTI - CESKA NARODNI PRAVICE