1. Bases de datos relacionales

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

Fuente: elaboración propia.

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)