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.