1.8. Consultes bàsiques: filtres i condicions
L’ordre SELECT
permet també extreure de les taules únicament aquells registres que posseeixen certes propietats. Per especificar el filtre a realitzar sobre el contingut d’una taula, cal afegir-hi la clàusula WHERE
:
SELECT camp1, camp2,..., campn FROM taula WHERE condicio;
La condició pot ser simple o composta, avaluant-se sobre un o més atributs de diverses taules. Els operadors de comparació més habituals es mostren a la taula 3.
Taula 3. Operadors de comparació en consultes de MySQL.
Operador | Significat |
=,<> |
Igual/diferent |
<,> |
Menor/major |
<=,>= |
Menor/major o igual |
LIKE |
Recerca d’un patró de text |
NOT |
Negació d’una condició |
AND/OR |
Condicions combinades |
REGEXP |
Expressió regular |
Els operadors numèrics també resulten molt útils per buscar registres en un rang concret de dates del calendari.
Provarem aquests operadors per realitzar consultes més concretes sobre la nostra base de dades cataleg. En primer lloc, podem interrogar la base de dades sobre els gens ubicats en el fil positiu de la cadena d’ADN en qualsevol espècie, preguntar per aquells que no pertanyen a la nostra espècie o buscar els gens anotats abans del primer milió de bases en qualsevol cromosoma:
mysql> SELECT * FROM gens WHERE cadena LIKE '+'; +-------+-----------+--------+-----------+-----------+-----------+-----------------+ | nom | cromosoma | cadena | inici | final | proteina | especie | +------+------------+--------+-----------+-----------+-----------+-----------------+ | ash2 | chr3R | + | 20477248 | 20479098 | NP_733023 | D. melanogaster | | HNF1A | chr12 | + | 121416548 | 121440312 | NP_000536 | H. sapiens | | MYC | chr8 | + | 128748314 | 128753678 | NP_002458 | H. sapiens | +-------+-----------+--------+-----------+-----------+-----------+-----------------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM gens WHERE especie NOT LIKE 'H. sapiens'; +-------+-----------+--------+-----------+-----------+-----------+-----------------+ | nom | cromosoma | cadena | inici | final | proteina | especie | +------+------------+--------+-----------+-----------+-----------+-----------------+ | ash2 | chr3R | + | 20477248 | 20479098 | NP_733023 | D. melanogaster | | cbt | chr2L | - | 476437 | 479046 | NP_722636 | D. melanogaster | +-------+-----------+--------+-----------+-----------+-----------+-----------------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM gens WHERE inici <= 1000000; +-------+-----------+--------+---------+-----------+-----------+-----------------+ | nom | cromosoma | cadena | inici | final | proteina | especie | +------+------------+--------+---------+-----------+-----------+-----------------+ | cbt | chr2L | - | 476437 | 479046 | NP_722636 | D. melanogaster | +-------+-----------+--------+---------+-----------+-----------+-----------------+ 1 row in set (0.00 sec)
La clàusula es pot complementar amb el modificador %, que actua de comodí en les expressions alfanumèriques. A continuació, seleccionem només registres que pertanyen al genoma de la mosca:
mysql> SELECT * FROM gens WHERE especie LIKE '%melano%'; +------+-----------+--------+-----------+----------+------------+-----------------+ | nom | cromosoma | cadena | inici | final | proteina | especie | +------+-----------+--------+-----------+----------+------------+-----------------+ | ash2 | chr3R | + | 20477248 | 20479098 | NP_733023 | D. melanogaster | | cbt | chr2L | - | 476437 | 479046 | NP_722636 | D. melanogaster | +------+-----------+--------+-----------+----------+------------+-----------------+ 2 rows in set (0.00 sec)
També podem combinar preguntes sobre valors de diferents tipus. Per exemple, si desitgem esbrinar quants gens de la mosca de la fruita estan anotats al fil positiu de la cadena d’ADN:
mysql> SELECT * FROM gens WHERE especie LIKE '%melano%' -> AND cadena LIKE '+'; +------+-----------+--------+----------+----------+-----------+-----------------+ | nom | cromosoma | cadena | inici | final | proteina | especie | +------+-----------+--------+----------+----------+-----------+-----------------+ | ash2 | chr3R | + | 20477248 | 20479098 | NP_733023 | D. melanogaster | +------+-----------+--------+----------+----------+-----------+-----------------+ 1 row in set (0.00 sec)