1.8. Consultas básicas: filtros y condiciones
El comando SELECT
permite también extraer de las tablas únicamente aquellos registros que poseen ciertas propiedades. Para especificar el filtro a realizar sobre el contenido de una tabla, debe añadirse la cláusula WHERE
:
SELECT campo1, campo2,..., campon FROM tabla WHERE condicion;
La condición puede ser simple o compuesta, evaluándose sobre uno o más atributos de varias tablas. Los operadores de comparación más habituales se muestran en la tabla 3.
Tabla 3. Operadores de comparación en consultas de MySQL.
Operador | Significado |
=,<> |
Igual/diferente |
<,> |
Menor/mayor |
<=,>= |
Menor/mayor o igual |
LIKE |
Búsqueda de un patrón de texto |
NOT |
Negación de una condición |
AND/OR |
Condiciones combinadas |
REGEXP |
Expresión regular |
Los operadores numéricos también resultan muy útiles para buscar registros en un rango concreto de fechas del calendario.
Vamos a probar estos operadores para realizar consultas más concretas sobre nuestra base de datos catalogo. En primer lugar, podemos interrogar a la base de datos sobre los genes ubicados en la hebra positiva de la cadena de ADN en cualquier especie, preguntar por aquellos que no pertenecen a nuestra especie o buscar los genes anotados antes del primer millón de bases en cualquier cromosoma:
mysql> SELECT * FROM genes WHERE hebra LIKE '+'; +--------+-----------+--------+-----------+-----------+-----------+-----------------+ | nombre | cromosoma | hebra | inicio | 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 genes WHERE especie NOT LIKE 'H. sapiens'; +--------+-----------+--------+-----------+-----------+-----------+-----------------+ | nombre | cromosoma | hebra | inicio | 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; +--------+-----------+--------+-----------+-----------+-----------+-----------------+ | nombre | cromosoma | hebra | inicio | final | proteina | especie | +--------+-----------+--------+-----------+-----------+-----------+-----------------+ | cbt | chr2L | - | 476437 | 479046 | NP_722636 | D. melanogaster | +--------+-----------+--------+-----------+-----------+-----------+-----------------+ 1 row in set (0.00 sec)
La cláusula puede complementarse con el modificador %, que actúa de comodín en las expresiones alfanuméricas. A continuación, seleccionamos solo aquellos registros que pertenecen al genoma de la mosca:
mysql> SELECT * FROM genes WHERE especie LIKE '%melano%'; +--------+-----------+--------+-----------+----------+------------+-----------------+ | nombre | cromosoma | hebra | inicio | 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)
También podemos combinar preguntas sobre valores de distintos tipos. Por ejemplo, si deseamos averiguar cuántos genes de la mosca de la fruta están anotados en la hebra positiva de la cadena de ADN:
mysql> SELECT * FROM genes WHERE especie LIKE '%melano%' -> AND hebra LIKE '+'; +--------+-----------+--------+----------+----------+-----------+-----------------+ | nombre | cromosoma | hebra | inicio | final | proteina | especie | +--------+-----------+--------+----------+----------+-----------+-----------------+ | ash2 | chr3R | + | 20477248 | 20479098 | NP_733023 | D. melanogaster | +--------+-----------+--------+----------+----------+-----------+-----------------+ 1 row in set (0.00 sec)