V predchádzajúcich dvoch častiach sme si načrtli možnosti práce s príkazom SELECT v SQL. Dnes si konečne toto pojednávanie dokončíme a pokročíme o kus ďalej.
Vychádzajme z našej pokusnej tabuľky Authors2, na ktorej si popisujeme jednotlivé modifikácie príkazu SELECT. Ani dnes to nebude iné.
mysql> select * from authors2;
+----+--------+----------------+---------+------+
| id | autor | mail | telefon | vek |
+----+--------+----------------+---------+------+
| 1 | Andrej | annn@dreeej.sk | 145879 | 25 |
| 2 | Jan | jann@email.sk | 1458796 | 29 |
| 3 | Marek | frank@nic.sk | 7458741 | 24 |
+----+--------+----------------+---------+------+
3 rows in set (0.00 sec)
Príkaz SELECT * FROM authors2 WHERE autor LIKE "Andrej";, ako sme si povedali minule, nám pomocou operátora LIKE vyberie z našej tabuľky všetky údaje z poľa "autor", ktoré zodpovedá reťazcu "Andrej".
mysql> SELECT * FROM authors2 WHERE autor LIKE "Andrej";
+----+--------+----------------+---------+------+
| id | autor | mail | telefon | vek |
+----+--------+----------------+---------+------+
| 1 | Andrej | annn@dreeej.sk | 145879 | 25 |
+----+--------+----------------+---------+------+
1 row in set (0.06 sec)
Ak potrebujeme menej konkrétnu selekciu, môžeme použiť za operátorom LIKE znaky so špeciálnym významom. Jedná sa o znak percenta "%" a znak podčiarkovník "_". Znak percento nahradzuje ľubovoľnú skupinu písmen. A znak podčiarkovník nahrazuje jeden ľubovoľný znak. Ak napríklad chceme z našej tabuľky vybrať všetkých autorov, ktorým sa tel.číslo začína na číslice 145, použijeme nasledovný príkaz:
mysql> SELECT * FROM authors2 WHERE telefon LIKE "145%"
-> ;
+----+--------+----------------+---------+------+
| id | autor | mail | telefon | vek |
+----+--------+----------------+---------+------+
| 1 | Andrej | annn@dreeej.sk | 145879 | 25 |
| 2 | Jan | jann@email.sk | 1458796 | 29 |
+----+--------+----------------+---------+------+
2 rows in set (0.05 sec)
Operátor LIKE sme mohli použiť pri tejto číselnej hodnote (tel.číslo) z dôvodu toho, pretože pole telefon je charakteru varchar. Keby bolo charakteru int, museli by sme použiť "=".(Bližšie viď. minulá časť)
Jednotlivé podmienky je samozrejme možné medzi sebou kombinovať podľa ľubovôle a docieliť tým požadovaného efektu pri výbere jednotlivých údajov. Kombinovať ich môžeme pomocou logických spojok AND, OR, NOT.
Môže sa Vám aj stať že to s tým kombinovaním preženiete a výsledok výberu bude nulový.
mysql> SELECT id,autor,vek FROM authors2 WHERE (vek > 24)
-> AND (telefon LIKE "1_5");
Empty set (0.06 sec)
Tak ako sa to stalo mne :), ale poďme trošku ďalej a ukážme si ešte ako zotriedíme údaje v tabuľke. Skúsme teda najskôr podĺa abecedy zotriediť náš výpis autorov, pričom záznamy budú zoradené podľa mien (položky autor).
mysql> SELECT * FROM authors2 ORDER BY autor;
+----+--------+----------------+---------+------+
| id | autor | mail | telefon | vek |
+----+--------+----------------+---------+------+
| 1 | Andrej | annn@dreeej.sk | 145879 | 25 |
| 2 | Jan | jann@email.sk | 1458796 | 29 |
| 3 | Marek | frank@nic.sk | 7458741 | 24 |
+----+--------+----------------+---------+------+
3 rows in set (0.66 sec)
Pokiaľ by sme chceli záznamy v tabuľke zotriediť opačným spôsobom (teda od Z do A) použijeme DESC. Teda:
mysql> SELECT * FROM authors2 ORDER BY autor DESC;
+----+--------+----------------+---------+------+
| id | autor | mail | telefon | vek |
+----+--------+----------------+---------+------+
| 3 | Marek | frank@nic.sk | 7458741 | 24 |
| 2 | Jan | jann@email.sk | 1458796 | 29 |
| 1 | Andrej | annn@dreeej.sk | 145879 | 25 |
+----+--------+----------------+---------+------+
3 rows in set (0.00 sec)
Príkaz SELECT je skutočne veľmi rozsiahly, ale rozsah nášho seriálu nie je na jeho dôkladné vysvetlenie natoľko obšírny. Ďalšie príklady použitia SELECTu môžete nájsť v manuály na stránkach http://www.mysql.com.