Načítanie dát z tabuľky
Keďže už naša tabuľka obsahuje nejaké dáta (záznamy – riadky), môžeme sa konečne dostať k tomu najdôležitejšiemu o čo tu ide a to je čítanie (read) dát. Prečo je to také dôležité? Pretože v informačných systémoch, či už je to webstránka alebo čokoľvek iné, sa najčastejšie využíva práve táto operácia. Je dôležité dáta vkladať, meniť, mazať a podobne, ale pomocou tejto operácie dáta načítame (vyberieme). To, že si dáta v tabuľke prezeráme v sekcii prehľad tabuľky (browse), nám síce povie, čo sa v našej tabuľke nachádza, ale iba vizuálne. My (programátori) nepotrebujeme niečo vidieť, my to potrebujeme mať v programe/systéme.
Pomocou načítania dát dostávame tieto dáta z databázy priamo do kódu programu, podobne ako keď sme napríklad čítali parametre z URL alebo z formulárov, kde ich budeme môcť následne použiť. Uložiť do premennej, vytvárať z nich premenné, vykonávať s nimi požadované operácie a následne ich zobrazovať podľa požiadaviek. Práve táto operácie je tá kľúčová, pretože niekedy môže systém slúžiť iba na zobrazovanie nejakých dát, o správu ktorých sa stará možno nejaký iný systém. Náš systém ich ale má zobrazovať a pracovať s nimi, takže ich bude len čítať a ďalej s nimi pracovať.
Príkaz na načítanie dát nesie meno SELECT (vybrať), za ktorým nasleduje špecifikácia (vymenovanie), ktoré stĺpce chceme zobraziť. Môžeme si zobraziť iba jeden stĺpec, dva alebo aj všetky. Ďalej nasleduje slovo FROM (z/odkiaľ), za ktorým nasleduje názov tabuľky, z ktorej chceme vyberať dáta. Okrem vymenovania stĺpcov (názvov oddelených čiarkami) je možné použiť špeciálny znak – hviezdičku (*), ktorá označuje, že chceme vybrať všetky stĺpce v tabuľke a nepotrebujeme to tým pádom vypisovať ručne. Jednoduchý príkaz na načítanie všetkých dát z tabuľky teda vyzerá nasledovne:
SELECT * FROM users;
Po vykonaní tejto query dostaneme úspešnú hlášku showing rows 0-5 (zobrazovanie riadkov), ktorá značí, ktoré konkrétne riadky nám pod hláškou v tabuľke zobrazilo po vykonaní príkazu select. To, čo je zobrazené v tabuľke, nie je nič iné ako dvojrozmerné pole dát, ktoré dostaneme (vráti nám funkcia) v prípade, že budeme volať tento príkaz v kóde. Tieto dáta dostaneme uložené v dvojrozmernom poli, ktoré si následne môžeme uložiť do premennej a pracovať s nimi. V systéme phpMyAdmin sa výsledok (result) príkazu select zobrazuje v tabuľke pre lepšiu prehľadnosť (nie iba výpis obsahu premennej ako napríklad pri print_r v prípade PHP). Okrem toho nám v zátvorke v hláške zobrazuje, koľko presne riadkov sme dostali.
Ak by mala naša tabuľka oveľa viac stĺpcov, ale my z nejakého dôvodu potrebujeme momentálne napríklad len prvý a tretí, môžeme tento príkaz select upraviť tak, že namiesto hviezdičky vymenujeme názvy stĺpcov, ktoré chceme dostať. Výsledok (2D pole) bude teda obsahovať len tieto dáta, indexy poľa budú reprezentovať jednotlivé stĺpce. Príkaz by mohol vyzerať asi takto:
SELECT id,user_surname FROM users;
Ako je vidieť vo výsledku, v tabuľke sa zobrazuje už len prvý a tretí stĺpec našej pôvodnej tabuľky (tej, z ktorej načítavame dáta). Tabuľky v databázach vo väčšine obsahujú množstvo riadkov a málokedy je nutné vykonávať túto query, ktorá vyťahuje všetky dáta z tabuľky. Ak by sme mali v tabuľke oveľa viac riadkov, napríklad 10 000, tak by vykonanie tohto príkazu trvalo dlhšie. Možno ste si všimli, že v hláške, ktorá sa zobrazuje po každom príkaze sa zobrazuje aj čas v sekundách, ktorý popisuje, ako dlho trvalo, kým sa príkaz vykonal. Práve rýchlosť vykonávania príkazov najviac ovplyvňuje aj rýchlosť samotného systému. Určite ste sa stretli s tým, že ste boli na nejakej stránke a dali ste niečo hľadať. Ak vám našlo len zopár výsledkov, tak sa vám to zobrazilo hneď. Ale ak napríklad idete vyhľadávať letenku, kde je strašne veľa záznamov v databázach, ktoré sa načítavajú a kombinujú, vidíte, ako sa na stránkach vo väčšine krúti nejaká ikona indikujúca progres načítavania a až po pár sekundách dostanete výsledok. Presne toto je odpoveď, prečo to niekedy tak trvá – dáta sa musia vyhľadávať a načítavať z obrovského množstva dát.
Aby sa komunikácia s databázou a celkovo načítavanie dát urýchlilo, resp. aby sa to nebrzdilo (nespomalovalo), tak v prípade, že to nie je nutné, snažíme sa vyhnúť načítavaniu zbytočne veľkého množstva dát z tabuľky (alebo všetkých záznamov). To, ktoré riadky dostaneme sa dá bližšie špecifikovať pomocou klauzuly/výnimky (clause) WHERE (kde), ktorýá slúži akokeby na filtrovanie dát z tabuľky. Za týmto slovom totižto zadávame podmienky, ktorú bude vrátený záznam spĺňať. Tie záznamy (riadky), ktoré našu podmienku nespĺňajú, jednoducho z tabuľky nedostaneme (nenačítame). Funguje to podobne ako podmienka v jazyku PHP, za slovom WHERE píšeme podmienky napríklad kde hodnota v stĺpci ID je rovná číslu 5 alebo kde hodnota v stĺpci user_surname je Satan a podobne.
Syntax tejto klauzuly je podobná ako v prípade podmienky v jazyky php. Začína sa špecifikovaním (názvom) stĺpca, na ktorého hodnotu sa bude vzťahovať podmienka, za ktorým nasleduje operátor určujúci vzťah podmienka (rovný, je väčší, menší...) a končí nami definovanou hodnotou, s ktorou sa porovnáva. Operátory sú podobné, pre zhodu je to rovná sa (=), pre odlišný/nie rovný/rôzny od sú zobáčiky od seba (<>), pre väčší otvorený zobáčik (>), pre menší zatvorený (<) a analogicky aj >= a <=. Poďme si to teda vyskúšať, skúsme si vytiahnuť iba záznamy, ktoré majú hodnotu v stĺpci id väčšiu ako 2, mohlo by to vyzerať takto:
SELECT * FROM users WHERE id > 2;
Tak aj pri podmienkach v jazyku PHP, aj tu môžeme použiť zložené podmienky pomocou logických operátorov AND (a súčasne) a OR (alebo). Tento operátor sa vloží medzi jednotlivé výrazy za slovom WHERE. Ak by sme napríklad chceli vybrať používateľov, ktorí majú krstné meno Miro alebo Zdeno, naša query by vyzerala nasledovne:
SELECT * FROM users WHERE user_name = 'Miro' OR user_name = 'Zdeno';
Ako je vidieť, skutočne sme dostali iba tie záznamy, ktoré obsahujú špecifikované hodnoty v stĺpci user_name. Používanie tohto filtra (klauzuly WHERE) je najbežnejšia forma výberu (čítania) dát, budeme sa s ním stretávať neustále. V našej tabuľke veľmi logický význam použitých príkazov nevidíme, ale keď bude naša tabuľka obsahovať viacero dát a logických údajov a stĺpcov, uvidíte toho význam. Predstavte si, že v tejto tabuľke máme uložené všetky dáta o používateľovi ako telefónne číslo, mail, fotku, dátum narodenia, miesto bydliska atď. V našom systéme by sme mali napríklad tabuľku, kde by bol zoznam všetkých používateľov, na ktorých sa dá kliknúť. Po kliknutí sa zobrazí detailný profil konkrétneho používateľa. V tomto prípade by sa pri kliku preposlalo ID (identifikačné číslo používateľa) z prvého stĺpca tabuľky a následne by sa toto číslo vložilo do podmienky, čiže by sme dostali dáta len o konkrétnom používateľovi, ktoré by sme následne zobrazili na stránke. Vyzeralo by to napríklad takto:
SELECT * FROM users WHERE id = 2;