Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akce až 50 % zdarma při nákupu e-learningu. Více informací:
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Slevovy týden 3/50

4. diel - MySQL krok za krokom: Výber dát (vyhľadávanie)

V minulej lekcii, MySQL krok za krokom: Vkladanie a mazanie dát v tabuľke , sme si ukázali vkladanie a mazanie záznamov.

Dnes sa zameriame na tú najkrajšiu časť a tou je výber dát. Jedná sa o dotazovanie na dáta, či chcete, tak vyhľadávanie v tabuľke.

Výber dát je kľúčovou funkciou databáz, umožňuje nám totiž pomocou relatívne jednoduchých otázok robiť aj zložité výbery dát. Od prostého výberu užívateľa podľa jeho id (napr. Pre zobrazenie detailov v aplikácii) môžeme vyhľadávať užívateľa spĺňajúce určité vlastnosti, výsledky zoradiť podľa rôznych kritérií alebo dokonca do dotazu zapojiť viac tabuliek, rôzne funkcie a skladať dotazy do seba (o tom až v ďalších dieloch ).

Testovacie dáta

Pred skúšaním otázok je vždy dobré mať nejaké testovacie dáta, aby sme mali s čím pracovať a nemali tam len 4 užívateľov. Poďme si do našej tabuľky uzivatele vložiť nejaké záznamy, aby bolo s čím pracovať. Niečo som vám pripravil. Tabuľku si najprv vyprázdnite (aby sme mali rovnaké dáta):

DELETE FROM `uzivatele`;

Ďalej spustite nasledujúci SQL dotaz:

INSERT INTO `uzivatele` (
        `jmeno`,
        `prijmeni`,
        `datum_narozeni`,
        `pocet_clanku`
)
VALUES
('Jan',  'Novák',  '1984-11-03', 17),
('Tomáš', 'Marný', '1942-10-17', 12),
('Josef', 'Nový', '1958-7-10', 5),
('Alfons', 'Svoboda', '1935-5-15', 6),
('Ludmila', 'Dvořáková', '1967-4-17', 2),
('Petr', 'Černý', '1995-2-20', 1),
('Vladimír', 'Pokorný', '1984-4-18', 1),
('Ondřej', 'Bohatý', '1973-5-14', 3),
('Vítezslav', 'Churý', '1969-6-2', 7),
('Pavel', 'Procházka', '1962-7-3', 8),
('Matěj', 'Horák', '1974-9-10', 0),
('Jana', 'Veselá', '1976-10-2', 1),
('Miroslav', 'Kučera', '1948-11-3', 1),
('František', 'Veselý', '1947-5-9', 1),
('Michal', 'Krejčí', '1956-3-7', 0),
('Lenka', 'Němcová', '1954-2-11', 5),
('Věra', 'Marková', '1978-1-21', 3),
('Eva', 'Kučerová', '1949-7-26', 12),
('Lucie', 'Novotná', '1973-7-28', 4),
('Jaroslav', 'Novotný', '1980-8-11', 8),
('Petr', 'Dvořák', '1982-9-30', 18),
('Jiří', 'Veselý', '1961-1-15', 2),
('Martina', 'Krejčí', '1950-8-29', 4),
('Marie', 'Černá', '1974-2-26', 5),
('Věra', 'Svobodová', '1983-3-2', 2),
('Pavel', 'Dušín', '1991-5-1', 9),
('Otakar', 'Kovář', '1992-12-17', 9),
('Kateřina', 'Koubová', '1956-11-15', 4),
('Václav', 'Blažek', '1953-10-20', 6),
('Jan', 'Spáčil', '1967-5-6', 3),
('Zdeněk', 'Malačka', '1946-3-10', 6);

V databáze máme 31 užívateľov. To by malo stačiť na to, aby ste si na nich vyskúšali základy dopytovania.

(Mimochodom, všimnite si, že sa dá VALUES v príkaze INSERT vložiť naraz viac, vloží sa tak viac položiek v jednom dotaze).

Dopytovania

Dotaz na dáta, teda ich vyhľadanie / výber nájdete v prostredí phpMyAdmin pod položkou Vyhľadať v hornej lište. Môžete si to skúsiť, stačí zadať nejakú hodnotu do stĺpca hodnota. Ak ich zadáte viac, bude sa hľadať podľa viacerých hodnôt. Operátorov zatiaľ neriešte, vysvetlíme si ich ďalej.

Vyledávání v phpMyAdmin

phpMyAdmin bol pre nás spočiatku takú barličkou, ale teraz pre nás už prestáva byť zaujímavý. Budeme ho používať hlavne pre spúšťanie dotazov a ukazovanie ich výsledkov.

Po vyhľadaní nám phpMyAdmin ukáže dotaz SELECT. Vždy tam píše niečo naviac, než je naozaj potrebné. Základná otázka pre výber všetkých Janů z tabuľky by vyzeral takto:

SELECT * FROM `uzivatele` WHERE `jmeno` = 'Jan';

Príkaz je asi zrozumiteľný, tá hviezdička označuje, že chceme vybrať všetky stĺpce. Otázka teda slovensky znie: "Vyber všetky stĺpce z tabuľky uzivatele, kde je meno Ján".

Výsledok dotazu nám phpMyAdmin zobrazí, mali by ste vidieť toto:

8    Jan    Novák     1984-11-03    17
37   Jan    Spáčil    1967-05-06    3

Tabuľky majú väčšinou veľa stĺpcov a väčšinou nás zaujímajú len nejaké. Aby sme databázu nezaťažovali prenášaním zbytočných dát späť do našej aplikácie, budeme sa snažiť vždy špecifikovať tie stĺpce, ktoré chceme. Dajme tomu, že budeme chcieť len priezvisko ľudí, čo sa volajú Ján a ešte počet ich článkov. Otázka upravíme:

SELECT `prijmeni`, `pocet_clanku` FROM `uzivatele` WHERE `jmeno` = 'Jan';

výsledok:

Novák     17
Spáčil    3

Naozaj nebuďte leniví a ak nepotrebujete takmer všetky stĺpce, vymenujte v SELECT tie, ktorej hodnoty vás v tú chvíľu zaujímajú. Vždy sa snažte podmienku obmedziť čo najviac už na úrovni databázy, nie že si vyťaháme celú tabuľku do aplikácie a tam si ju vyfiltrujete. Povedzme, že by vaša aplikácia potom nebola úplne rýchla :) Výpočet stĺpcov, ktoré má dotaz vrátiť, nemá nič spoločné s ďalšími stĺpci, ktoré v dotaze používame. Môžeme teda vyhľadávať podľa desiatich stĺpcov, ale vrátiť len jeden.

Rovnako ako tomu bolo pri DELETE, aj tu bude fungovať iba otázka:

SELECT * FROM `uzivatele`;

Vtedy budú vybraní úplne všetci užívatelia z tabuľky.

U podmínkování platí to isté, ako u DELETE, klauzula WHERE funguje úplne rovnako. Skúsme si to. Vyberme všetkých užívateľov, narodené po roku 1960 as počtom článkov vyšším ako 5:

SELECT * FROM `uzivatele` WHERE `datum_narozeni` >= '1960-1-1' AND `pocet_clanku` > 5;

výsledok:

8     Jan          Novák        1984-11-03    17
16    Vítezslav    Churý        1969-06-02    7
17    Pavel        Procházka    1962-07-03    8
27    Jaroslav     Novotný      1980-08-11    8
28    Petr         Dvořák       1982-09-30    18
33    Pavel        Dušín        1991-05-01    9
34    Otakar       Kovář        1992-12-17    9

Operátormi

Základný operátormi =,>, <,> =, <=,! = Určite viete použiť. V SQL máme ale ďalšie, povedzme si o LIKE, IN a BETWEEN.

LIKE

Like umožňuje vyhľadávať textové hodnoty len podľa časti textu. Funguje podobne, ako operátor "=" (rovná sa), len môžeme používať 2 zástupné znaky:

  • % (Percento) označuje ľubovoľný počet ľubovoľných znakov.
  • _ (Podčiarkovník) označuje jeden ľubovoľný znak.

Poďme si vyskúšať niekoľko otázok s operátorom like. Nájdime priezvisko ľudí začínajúce na S:

SELECT `prijmeni` FROM `uzivatele` WHERE `prijmeni` LIKE 's%';

Zadáme normálne text apostrofmi, iba na niektoré miesta môžeme vložiť špeciálne znaky. Na veľkosti písmen nezáleží (hľadanie je teda case-insensitive). Výsledok dotazu bude nasledujúci:

Svoboda
Svobodová
Spáčil

Teraz skúsme nájsť pětipísmenná priezvisko, ktoré majú ako 2. znak O:

SELECT `prijmeni` FROM `uzivatele` WHERE `prijmeni` LIKE '_o___';

výsledok:

Novák
Horák
Kovář

Asi už tušíte, ako LIKE funguje. Použitie možno vymyslieť veľa, väčšinou sa používa s percentami na oboch stranách pre fulltextové vyhľadávanie (napr. Slová v texte článku).

IN == IN umožňuje vyhľadávať pomocou zoznamu prvkov. Urobme si teda výpočet mien a vyhľadajme užívatelia s týmito menami:

SELECT `jmeno`, `prijmeni` FROM `uzivatele` WHERE `jmeno` IN ('Petr', 'Jan', 'Kateřina');

výsledok:

Jan         Novák
Petr        Černý
Petr        Dvořák
Kateřina    Koubová
Jan         Spáčil

Operátor IN sa používa ešte u tzv. Poddotazov, ale na tie máme ešte dosť času :)

Between

Posledný operátor, ktorý si dnes vysvetlíme, je BETWEEN (teda medzi). Nie je ničím iným, než skráteným zápisom podmienky "> = AND <=". Už vieme, že aj dátumy môžeme normálne porovnávať, nájdime si užívateľov, ktorí sa narodili medzi rokmi 1980 a 1990:

SELECT `jmeno`, `prijmeni`, `datum_narozeni` FROM `uzivatele` WHERE `datum_narozeni` BETWEEN '1980-1-1' AND '1990-1-1';

Medzi 2 hodnoty píšeme AND.

výsledok:

Jan         Novák        1984-11-03
Vladimír    Pokorný      1984-04-18
Jaroslav    Novotný      1980-08-11
Petr        Dvořák       1982-09-30
Věra        Svobodová    1983-03-02

To je pre dnešok všetko. U výberu dát zostaneme ešte niekoľko dielov, vlastne väčšinu tohto seriálu.

V budúcej lekcii, MySQL krok za krokom: Radenie, Limit a agregačné funkcie , sa pozrieme na radenie a agregačné funkcie.


 

Predchádzajúci článok
MySQL krok za krokom: Vkladanie a mazanie dát v tabuľke
Všetky články v sekcii
MySQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
MySQL krok za krokom: Radenie, Limit a agregačné funkcie
Článok pre vás napísal David Čápka
Avatar
Užívateľské hodnotenie:
2 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity