Hlavní navigace

SQL ve vztahu klient - server

Petr Hodan

Databáze standardu SQL jsou založeny na komunikaci server-klient. Jako server vystupuje počítač (místní či vzdálený), na němž je spuštěna služba naslouchající na portu určeném konfigurací. Je připraven naslouchat a dávat odpovědi na smysluplné dotazy. Klient je většinou www server, který se ptá. Ale pokud databázi upravujete, používáte klienta jiného.

Ještě než začnu s popisem klientů, bylo by vhodné zmínit letmo strukturu SQL serveru. Ta je postavena na databázích. Databází může na serveru být hodně, záleží jen na jeho výkonu. Databáze se skládá z tabulek. Počet tabulek v databázi není omezen, každá tabulka má unikátní jméno. A tabulka se jak už víme skládá z řádků a sloupců. Převedeno do náhledu z pohledu souborů to zní asi takto (pro MySQL): Na serveru v jistém adresáři (třeba /usr/local/var) je několik podadresářů, které se jmenují jako jednotlivé databáze. V těchto podadresářích jsou soubory jednotlivých tabulek. Je jich více, pokud si je prohlédnete pomocí midnight commanderu, moudří z toho nebudete.

Klienta můžete používat buďto přímo z balíku serveru (například u MySQL serveru lze zkompilovat jen klienta či jen server), nebo klienta třetí strany. Klienti od serverů jsou jednoduché, většinou se obsluhují na příkazové řádce pomocí jazyka DDL (zkratka pro Data Definition Languague). Mají tu výhodu, že jste nuceni znát příkazy, které pak použijete spolu se spojením s nějakým skriptovacím jazykem (PHP, ASPI, CGI) při tvorbě stránek.

Klienti třetích stran jsou většinou grafické, používají X-Windows spolu s nějakým z toolkitů (Qt, Gtk, …). Na toolkitu GNOME je založen Gnome Transcript (gtranscript, poslední verze je 0.1.5). Jeho vlastnosti jsou poněkud omezené, neumí serveru posílat dotazy, pouze umožňuje vytvářet tabulky, editovat a mazat je. Do styku s DDL přijdete jen při zakládáni tabulky, a to ještě omezeně při volbě typu proměnné a její nulovosti a unikátnosti.

Druhý mnou používaný klient je postaven na toolkitu Gtk, čímž je ovlivněn jeho vzhled. Jmenuje se myGDE a jeho poslední verze má (zatím) číslo 0.1. Nižší číslo ovšem neznamená horší vlastnosti, ba dokonce si troufám tvrdit že je propracovanější než Gnome Transcript. Nemá sice ovládání pomocí ikonek, to bych od klienta k SQL serveru nepožadoval. Umí vytvářet tabulky, rozšiřovat je, dělat z nich výběry a hlavně, umožňuje pracovat se všemi databázemi na serveru pokud do nich máte přístup. Výhodou je že myGDE nabízí „interaktivní tvorbu SQL příkazů“. Základní menu je tvořené šesti tlačítky (Connect, Status, Query Gen, Table Gen, Quick Select a Quit). Hlavní okno programu sestává ze třech sloupců. V prvním je seznam všech databází, ve druhém seznam všech tabulek ve vybrané databázi a ve třetím popis tabulky z hlediska typu proměnných a podmínek na ně kladené.
Okno Query Generatoru se otevře po stisku tlačítka Query Gen. Je koncipováno stejně jako okno hlavního programu. Nabízí volbu příkazu, tabulky, sloupce, podmínky a operátorů.

MyGDE

Základy jazyka DDL

Dotazy na SQL server jsou tvořeny pomocí jazyka DDL. Pro angličtináře zajisté nebude problém si ho osvojit. I formulace dotazů je velmi podobná anglickému slovosledu. Nejdůležitějšími příkazy jsou CREATE, SELECT a ALTER.

Každý příkaz se v SQL ukončuje pomocí středníku. Pokud tak neučiníte klient bude po Enteru čekat na další data, teprve po vložení středníku příkaz provede. Tímto se také dostáváme k typům proměnných, jež lze v jednotlivých sloupcích používat. Jejich názvy jsou standardizovány a jsou podobné typům z jiných jazyků (třeba C, C++). Mezi základní patří INT, FLOAT, DATE, TIME, CHAR a TEXT. INT a FLOAT jsou číselné proměnné, CHAR a TEXT znakové. Existují ještě jisté odnože těchto proměnných, ale o nich se vždy zmíníme až u konkrétního příkladu.

Vytvořme nyní tabulku, která bude obsahovat naše kontakty na spolupracovníky, jejich adresy a telefonní čísla. Tabulka bude mít sloupce prijmeni, jmeno, titul, firma, telefon_pevna, telefon_mobil a email. Celkem tedy 7 sloupců.

CREATE TABLE kontakty (prijmeni char(30), jmeno char(30), titul char(30), firma char(60), telefon_pevna char(30), telefon_mobil char(30), email char(40));

Všechny proměnné jsou typu CHAR. To proto, že i v telefoních číslech se může vyskytnout závorka, lomítko nebo pomlčka či dokonce znak. Znáte přece reklamu „0800–1POMOC“, ne? Každému číslu na mobilu odpovídají 3 písmena. Btw: nebylo by fajn mít číslo třeba „0603THALEZU“ ? Tak daleko ale naštěstí ještě nejsme. Existuje variace proměnné CHAR, má název VARCHAR a liší se v tom, že natvrdo nealokuje celých 30 znaků v případě příjmení, ale jen tolik, kolik je potřeba, avšak maximálně právě těch 30.

Tabulku máme připravenou, můžeme začít vkládat údaje. K tomu slouží příkaz INSERT.

INSERT INTO kontakty VALUES („Vonásek“, „Josef“, „ing.“, „První tunelářská a.s.“, „0202–88889999“, „0607–895656“,„vona­sek@tunel.cz“);

INSERT INTO znamená VLOŽ DO, VALUES jsou HODNOTY. Znakové proměnné musíme uzavírat do uvozovek, a to jak dvojitých tak jednoduchých. Druhá možnost se používá při psaní třeba PHP skriptů. Důsledek je stejný. Nyní přidejme ještě několik osob:

INSERT INTO kontakty VALUES (‚Kachličková‘, ‚Alžběta‘, ‚MuDr.‘, '', ‚02–895588‘, ‚0607–777888‘, ‚kachlicka@dok­tori.cz‘);

Pokud nechceme uvést nějaký údaj, můžeme napsat v případě znakové proměnné dvoje uvozovky, nebo NULL pro všechny typy proměnných. NULL znamená neurčeno, nedefinováno. Aplikujme toto na Františka Dobrotu, který ještě nemá mobila a nemá ani žádný titul:

INSERT INTO kontakty VALUES (‚Dobrota‘, ‚František‘, NULL, ‚První Traktorská‘, ‚069–8888874‘, NULL, ‚frantisek.do­brota@buty.cz‘);

Nyní se podívejme, jak námi vytvořená tabulka vypadá. K tomu použijeme příkaz SELECT.

SELECT * FROM kontakty;

+-------------+-----------+-------+-----------------------+
| prijmeni    | jmeno     | titul | firma                 |
+-------------+-----------+-------+-----------------------+
| Vonásek     | Josef     | ing.  | První tunelářská a.s. |
| Kachličková | Alžběta   | MuDr. |                       |
| Dobrota     | František | NULL  | První Traktorská      |
+-------------+-----------+-------+-----------------------+

---------------+---------------+---------------------------+
 telefon_pevna | telefon_mobil | email                     |
---------------+---------------+---------------------------+
 0202-88889999 | 0607-895656   | vonasek@tunel.cz          |
 02-895588     | 0607-777888   | kachlicka@doktori.cz      |
 069-8888874   | NULL          | frantisek.dobrota@buty.cz |
---------------+---------------+---------------------------+

Jak je vidět, vybrány byly všechny sloupce a všechny řádky tabulky. Co kdybychom ale chtěli jen seznam příjmení a jmen a k nim číslo mobila? Místo hvězdičky uvedeme seznam sloupců, které chceme zobrazit:SELECT prijmeni,jmeno,te­lefon_mobil FROM kontakty;

+-------------+-----------+---------------+
| prijmeni    | jmeno     | telefon_mobil |
+-------------+-----------+---------------+
| Vonásek     | Josef     | 0607-895656   |
| Kachličková | Alžběta   | 0607-777888   |
| Dobrota     | František | NULL          |
+-------------+-----------+---------------+

Vypadne nám tabulka právě s těmi třemi sloupci. Tomuto se říká projekce. Projekce tedy znamená zobrazení jen nějakých sloupců. A co když budeme chtít zobrazit jen lidi, kteří mají mobila? Vyřešíme to logickou podmínkou:

SELECT prijmeni,jmeno,te­lefon_mobil FROM kontakty WHERE telefon_mobil!=„NUL­L“;

+-------------+---------+---------------+
| prijmeni    | jmeno   | telefon_mobil |
+-------------+---------+---------------+
| Vonásek     | Josef   | 0607-895656   |
| Kachličková | Alžběta | 0607-777888   |
+-------------+---------+---------------+

Podmínka je vyjádřena pomocí WHERE (KDE) a „!=“ znamená „nerovná se“. Slovní interpretace by byla asi takováto: Vyber příjmení, jméno a číslo mobilu z tabulky kontaktů, kde je uvedeno něco v položce telefon_mobil. Možná pro začátek složitý příklad. Přidejme tedy do tabulky ještě Josefa Huhňala, který má e-mail: huhnal@post.cz, mobila 0607–897888 a domů 0545–8888888, pracuje v Polední důlní a.s. Budeme chtít vybrat všechny Pepy, protože svátek Josefa už se blíží a tak chystáme překvápko. Budeme chtít vědět příjmení, jméno a telefon na pevnou:

SELECT prijmeni,jmeno,te­lefon_pevna FROM kontakty WHERE jmeno=„Josef“;

+----------+-------+---------------+
| prijmeni | jmeno | telefon_pevna |
+----------+-------+---------------+
| Vonásek  | Josef | 0202-88889999 |
| Huhňal   | Josef | 0545-8888888  |
+----------+-------+---------------+

A máme všechny Pepy pohromadě. Tomuto se říká projekce s restrikcí. Restrikce znamená ve světě SQL omezení počtu řádků položením podmínky vztahující se k nějakému sloupci tabulky.

Tolik o projekci a restrikci. Tabulku lze samozřejmě i upravovat, ale o tom příště společně s několika slovy o klíčích a zakázání duplicitních záznamů v databázi.

Odkazy:
gtranscript: http://gtranscrip­t.sourceforge­.net
myGDE: http://www.gdi­web.com
MySQL: http://www.mys­ql.cz

Našli jste v článku chybu?

17. 1. 2014 20:40

korem (neregistrovaný)

Zdravím,

díky za super článek...zdá se mi přehledný a napsaný jednoduše, nijak komplikovaně :)

MYslím že SQL není zas tak těžký jazyk, každopádně se s ním dá velice slušně uživit...já jsem se ho naučil doma a o práce jsem potom neměl nouzi :) (hledal jsem zde http://timone.cz/, kdyby třeba někdo hledal práci)

2. 9. 2013 22:42

Vlado (neregistrovaný)

Perfektne na pochopenie aj pre uplneho laika. Chvalim hlavne to ako to vie autor jednoducho podat. Dakujem pekne.

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: Test Philips 24PFS5231 s Bluetooth repro

Test Philips 24PFS5231 s Bluetooth repro

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla