Image
7.6.2016 0 Comments

Databázy / 5. časť

Späť na úvod >> Späť na seriál

V úvode si objasníme problémy, ktoré vznikli pri domácej úlohe z predchádzajúcej časti. Pozrime sa bližšie na 6. príklad z úlohy: Čo sa stane, keď po zmazaní niektorého záznamu znova vložíme jeden nový záznam?
Odpoveď znie: Nový záznam sa nevloží na koniec ostatných záznamov, ale server nájde prvé voľné miesto po zmazanom zázname a využije ho. Ak už neexistuje voľné miesto po zmazaných záznamoch, pridá nový vkladaný záznam na koniec všetkých záznamov. Toto je veľmi dôležité uvedomiť si pri operáciách mazania a vkladania, inak by sme mohli dostávať nežiaduce výsledky.
8. príklad je ešte nebezpečnejší: Ak zadáme delete from meno_tabuľky bez podmienky, zmaže sa celá tabuľka! A ako už vieme, príkaz delete je deštrukčný a prídeme o všetky dáta v príslušnej tabuľke.
Takže pozor na presné zadávanie príkazov!
Toľko k domácej úlohe.
Teraz si spusťme klient-monitor mysql s parametrom kniznica, aby sme mohli operovať s našimi tabuľkami.

Príkaz SELECT
SQL, a teda aj MySQL ponúka veľa spôsobov, ktoré slúžia na manipuláciu s dátami v databáze. Zvyšujú tak komfort obsluhy a kvalitu práce. Jedným z najznámejších, najužitočnejších a najpoužívanejších príkazov jazyka SQL je istotne príkaz SELECT (výber). Pomocou tohto príkazu môžeme vytiahnuť z databázy každý dôležitý údaj a vyriešiť tak veľa situácií v získaní tej správnej informácie.
V závere predošlej časti sme si ukázali najzákladnejší tvar príkazu SELECT na prezeranie dát v našich tabuľkách KNIHA a ZANER v databáze KNIZNICA:
mysql> select * from zaner;

Výsledkom tohto príkazu je výpis č. 1:

Príkaz SELECT toho však dokáže podstatne viac. Opis všetkých funkcií by obsiahol desiatky strán, preto sa zameriame iba na tie najpoužívanejšie. (Všetky možnosti príkazu SELECT sa nachádzajú v príslušnej dokumentácii k danému SQL serveru.)
Základný opis príkazu SELECT v MySQL je takýto:

SELECT {zoznam výstupných položiek } FROM {zoznam tabuliek}
      //WHERE {podmienky}//
      //GROUP BY{zoznam položiek}//
      //HAVING {skupinová podmienka}//
      //ORDER BY {meno položky ako podmienka zatriedenia}//

Zoznam výstupných položiek môže byť množina názvov jednotlivých stĺpcov tabuľky alebo aj tzv. agregačné funkcie. Čo sú agregačné funkcie, to si ukážeme ďalej.
Zoznam tabuliek sú názvy tabuliek v danej databáze.
Parametre uvedené v lomkách nie sú povinné.
Skúsme si aplikovať tieto podmienky prakticky na našej databáze KNIZNICA.

Vypísanie niektorých položiek
Ak chceme vypísať zoznam všetkých položiek (stĺpcov) danej tabuľky, použijeme znak * – hviezdičku. Hviezdička symbolizuje slovo „všetko“. Výsledok sme si už ukázali.
Ak chceme vypísať len niektoré stĺpce z danej tabuľky, nahradíme hviezdičku vypísaním názvov požadovaných položiek v príkaze:
SELECT  položka_1, položka_2, ...položka_n FROM meno_tabuľky

Ak zadáme príkaz:
mysql>select id, nazov, autor from kniha;

dostaneme výsledok, kde sú zobrazené iba stĺpce id, nazov a autor, ostatné sú ignorované. Zobrazí sa teda zredukovaná tabuľka, ako je na výpise č. 2:

Agregačné funkcie
Agregačné funkcie sú typy dopytov, ktoré spracúvajú hodnoty z celých stĺpcov tabuľky. Zadávame ich do zoznamu výstupných položiek za príkaz SELECT.

V MySQL existujú tieto najpoužívanejšie agregačné funkcie:

SUM( )             – súčet numerických hodnôt v danom stĺpci
MIN( )               – nájdenie minimálnej hodnoty v danom stĺpci
MAX( )             – nájdenie maximálnej hodnoty v danom stĺpci
COUNT( )         – počet hodnôt (záznamov) v danom stĺpci
AVG( )              – aritmetický priemer numerických hodnôt v danom stĺpci

Vyskúšajme si tieto funkcie.

SUM( )
Ak by sme chceli vedieť, aká je hodnota (hodnota = súčet cien jednotlivých kníh) našej knižnice. Pre zjednodušenie predpokladajme, že máme iba po jednom kuse z každej knihy.
Použijeme funkciu SUM(cena) takto:
mysql> select sum(cena) from kniha;

a dostaneme tento výpis č. 3:

Že sa nám nepáči názov stĺpca sum(cena)? To nič, keby naša účtovníčka nepoznala tieto pojmy, môžeme pre ňu upraviť príkaz select takto:
mysql> select sum(cena) as ‘Hodnota knih’ from kniha;

Slovko as spôsobí, že premenuje stanovenú funkciu (v tomto prípade „sum(cena)“ ) na stanovený text, napr. Hodnota knih. Potom dostaneme výpis č. 4:

No a to už je zrozumiteľnejší výpis.

MIN( ), MAX( )
Veľmi podobným spôsobom môžeme zistiť minimálnu alebo maximálnu cenu kníh v našej knižnici. Použijeme na to funkcie MIN a MAX s využitím formulky AS ‘konkrétny_text’:
mysql> select min(cena) as ‘Najmensia cena’, max(cena) as ’Najvacsia cena knih’ from kniha;

Výsledok je na výpise č. 5:

Ak sa pozrieme do našej tabuľky KNIHA, vidíme, že tieto vyselektované hodnoty sú skutočne správne.

AVG( )
Ak by nás zaujímala priemerná cena kníh v našej knižnici, použijeme funkciu AVG( ) takto:
mysql> select avg(cena) as ’Priemerna cena knih’ from kniha;

a dostaneme výpis č. 6:

Count( )
Ak sa chceme dozvedieť, koľko máme teraz v knižnici evidovaných kníh, použijeme funkciu COUNT( ), ktorá zisťuje počet položiek v danom stĺpci.

Zadajme príkaz:
mysql> select count(*) as ’Pocet knih’ from kniha;

a tu je výsledok (výpis č. 7):

Poďme sa teraz pozrieť na „druhý koniec“ príkazu SELECT:

Formulácia podmienky WHERE
Formuláciu podmienky WHERE už trocha poznáme aj z iných príkazov SQL. Použili sme ju pri mazaní (delete) a upravovaní (update) jednotlivých záznamov v predošlej časti seriálu. Aj pri príkaze SELECT spĺňa rovnakú úlohu – vyselektujú sa len tie záznamy, ktoré podmienke vyhovujú, ostatné záznamy sa ignorujú.

Obsahom podmienky môžu byť:

  • operácie s textovým reťazcom (rovnosť, nerovnosť, podobnosť)
  • matematické operácie  (rovnosť, nerovnosť, väčší než, menší než)
  • logické operácie (AND, OR, NOT)

Operácie s textovým reťazcom
Pri vyhľadávaní s formulkou WHERE s textovým reťazcom použijeme tento všeobecný zápis:
SELECT  položka_1, položka_2, ...položka_n FROM meno_tabuľky

WHERE názov_filtračného_stĺpca OPERAND hľadaný_reťazec

Za názov_filtračného_stĺpca dosadíme názov stĺpca, podľa ktorého stanovujeme podmienku. Ak chceme vyhľadávať podľa názvu knihy, použijeme NAZOV, ak podľa ceny, použijeme CENA.

Za OPERAND dosadíme:
=“ (rovná sa), ak sa má porovnať presný text podmienky,
<>“ (nerovná sa), ak sa nemá vôbec rovnať hľadanému reťazcu
LIKE (podobnosť), ak sa má hľadaný reťazec podobať.

Za hľadaný_reťazec dosadíme stanovený text do apostrofov.
Tu je niekoľko príkladov:

= (rovná sa)

Ak by sme chceli vyhľadať názov, autora a cenu kníh, ktorých VYDAVATEL je vydavateľstvo Computer Press, použijeme príkaz:
mysql> select nazov, autor, cena from kniha where vydavatel = ’Computer Press’;

Na výpise č. 8 vidíme, že stanovenej podmienke vyhoveli dva záznamy:

<> (nerovná sa)

Naopak, keby sme chceli vypísať všetky záznamy o knihách, len nie tie, ktoré sú z vydavateľstva Computer Press, zapíšeme podmienku takto:
mysql> select nazov, autor, cena from kniha where vydavatel <> ’Computer Press’;

Výsledkom bude výpis zvyšných piatich záznamov – tak ako na výpise č. 9:

LIKE
Ak nevieme presný názov knihy, nemôžeme použiť operand = . Ak vieme, aké slovo alebo časť slova daný názov obsahuje, použijeme LIKE a tzv. divoké znaky, ktorým hovorievame aj žolíky (jokes). Tie v textových reťazcoch fungujú podobne ako žolíky v kartách – nahrádzajú iné znaky.

Divoké znaky sú v SQL databázach dva:
% - percento, ktoré nahrádza ľubovoľnú skupinu znakov,
_ - podčiarovník, ktorý nahrádza iba jeden znak.

Predstavme si, že existuje akási kniha o programovaní, ale nevieme jej presný názov. Vtedy použijeme príkaz:
mysql> select nazov, autor, vydavatel, cena from kniha

where nazov like ’%program%’;

Výsledok je na výpise č. 10:

Treba si uvedomiť, že v tomto ilustračnom príklade, kde máme iba sedem záznamov, je výsledok hľadania pomerne jednoznačný. V praxi, kde sú v tabuľkách milióny záznamov, je potrebné čo najpresnejšie opísať danú podmienku na vyhľadávanie, aby sme dostali čo najkonkrétnejšie výsledky, inak by uvedenej podmienke mohli vyhovieť aj stovky knižných titulov.
Preto sa často používa aj znak _ podčiarovník, ktorý nahrádza iba jeden znak v podmienke.

Podmienka s matematickými operáciami
Práca s príkazom SELECT, kde je v podmienke matematická operácia, sa neveľmi líši od práce s textovým reťazcom. Je tu iba jedna zmena – číselné hodnoty sa nezapisujú do apostrofov.
Pri vyhľadávaní s formulkou WHERE s číselnou hodnotou použijeme tento všeobecný zápis:
SELECT  položka_1, položka_2, ...položka_n FROM meno_tabuľky

WHERE názov_filtračného_stĺpca OPERAND číselná_hodnota

Za operand môžeme dosadiť:

=“ (rovná sa)
<>“ nerovná sa
<“ menší než
>“ väčší než

Tu je niekoľko príkladov:
Ak chceme vyhľadať knihy, ktorých cena je rovná konkrétnemu číslu, použijeme zápis:
mysql> select nazov, autor, cena from kniha

where cena = 66;

Výsledok je na výpise č. 11:

Znakom <> (nerovná sa) by sme analogicky vypísali všetky ostatné knihy, len nie tie, čo stáli 66 korún, tak ako je to na výpise č. 12:

Takisto môžeme stanoviť podmienku > (väčší než) alebo < (menší než).
Knihy drahšie ako 400 Sk sú na výpise č. 13:

Knihy lacnejšie ako 400 Sk sú na výpise č. 14:

Podmienka s logickými operáciami
Logické operácie v podmienkach príkazu SELECT sú tesne zviazané s uvedenými matematickými alebo textovými operáciami. Pomocou logických operandov môžeme spájať niekoľko podmienok do jedného príkazu. Všeobecný opis príkazu SELECT s využitím logických operácií vyzerá takto:
SELECT  položka_1, položka_2, ...položka_n FROM meno_tabuľky

WHERE podmienka_1 LOGICKÝ_OPERAND podmienka_2 LOGICKÝ_OPERAND podmienka_n

Za logický operand môžeme použiť:

AND       – a zároveň
OR         – alebo
NOT (!=) – negácia = zápor

Na záver niekoľko príkladov:

AND
Ak hľadáme knihy, ktoré patria do kategórie odbornej literatúry a ZÁROVEŇ ich cena je väčšia ako 450 Sk, zadáme príkaz:
mysql> select nazov, autor, vydavatel from kniha

where cis_odd  = 7 AND cena > 450;

Vidíme, že tejto zloženej podmienke vyhovujú dva záznamy.

OR
Ak hľadáme knihy, ktoré vydalo nakladateľstvo Computer Press ALEBO Grada, zadáme príkaz:
mysql> select nazov, autor, vydavatel from kniha

where vydavatel  = ‘Computer Press’ OR  vydavatel  = ‘Grada’ ;

Tentoraz vyhoveli podmienke tri záznamy.

!= (NOT)
Ak chceme nájsť knihy, ktoré NEVYDALO nakladateľstvo EAAP, zadáme príkaz:
mysql> select nazov, vydavatel, cena  from kniha

where vydavatel  != ‘EAAP’;

Výsledok je na výpise č. 17:

Isto nás napadne, že je možné tieto typy podmienok vzájomne kombinovať, aby sme mohli vytvoriť aj veľmi zložitú podmienku.
Nabudúce si vysvetlíme ďalšie parametre príkazu SELECT.

Poznámka:
Internetová stránka venovaná tomuto seriálu sa presťahovala z určitých dôvodov na adresu
mior.host.sk.
Zároveň prosím o pochopenie, že nie je ešte úplná, lebo pracujem na jej vývoji.

 

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá