{"id":341,"date":"2023-09-03T17:58:19","date_gmt":"2023-09-03T15:58:19","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/?page_id=341"},"modified":"2025-03-09T18:31:04","modified_gmt":"2025-03-09T16:31:04","slug":"1-14-ejemplo-practico-gestion-del-catalogo-de-genes-humanos","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/1-14-ejemplo-practico-gestion-del-catalogo-de-genes-humanos\/","title":{"rendered":"1.14. Ejemplo pr\u00e1ctico: gesti\u00f3n del cat\u00e1logo de genes humanos"},"content":{"rendered":"<p>Para demostrar c\u00f3mo extraer conocimiento \u00fatil de una base de datos relacional, os proponemos analizar con MySQL el contenido de un cat\u00e1logo de genes humanos. Un gen es un fragmento de ADN ubicado en el genoma que contiene la informaci\u00f3n precisa para sintetizar una mol\u00e9cula de ARN. En los organismos eucariotas, un gen est\u00e1 constituido por una sucesi\u00f3n de fragmentos \u00fatiles denominados <em>exones<\/em>. En una proporci\u00f3n significativa de los genes humanos existen varias combinaciones alternativas de exones, dando lugar a distintas formas alternativas de un mismo gen, denominadas <em>transcritos alternativos<\/em>. Para codificar la informaci\u00f3n relativa a la localizaci\u00f3n de los genes en el genoma es frecuente utilizar ficheros de texto tabulado. Cada l\u00ednea de estos ficheros contiene los valores de los atributos que caracterizan a un transcrito de un determinado gen. B\u00e1sicamente, un transcrito de un gen posee una localizaci\u00f3n concreta, identificada por un cromosoma, una posici\u00f3n inicial\/final y una direcci\u00f3n de lectura. Otras caracter\u00edsticas que podemos recuperar sobre un transcrito son su c\u00f3digo, el nombre del gen, el n\u00famero de exones o sus coordenadas exactas.<\/p>\n<div class=\"featured featured-blue\"><p><strong>Ved tambi\u00e9n<\/strong><\/p>\n<p>Para revisar los conceptos de <em>genoma<\/em>, <em>cromosoma<\/em>, <em>gen<\/em> y <em>prote\u00edna<\/em> os recomendamos la asignatura Fundamentos de biolog\u00eda molecular.\u00a0 <\/p>\n<\/div>\n<p>El navegador gen\u00f3mico de UCSC representa gr\u00e1ficamente los diferentes tipos de anotaciones existentes sobre el genoma humano en forma de cientos de pistas. Para administrar eficientemente este elevado volumen de informaci\u00f3n, una copia del SGBD MySQL est\u00e1 funcionando de forma transparente a los miles de usuarios que cada d\u00eda visitan este servidor. De este modo, en el caso de que deseemos reproducir una pista en nuestro ordenador, disponemos en la secci\u00f3n de descargas de un fichero SQL para ser ejecutado con el comando <strong><code>source<\/code><\/strong> y un fichero de texto con el conjunto de datos que deben importarse con la instrucci\u00f3n <strong><code>LOAD DATA<\/code><\/strong>. En este ejercicio vamos a utilizar la anotaci\u00f3n de los genes humanos distribuida por el consorcio <strong>RefSeq <\/strong>para el genoma humano. Este formato es com\u00fan a todas las especies suministradas por el navegador.<\/p>\n<div class=\"featured featured-blue\"><p><strong>Ved tambi\u00e9n<\/strong><\/p>\n<p>Es posible profundizar sobre el funcionamiento de los navegadores gen\u00f3micos en la asignatura Gen\u00f3mica computacional.\u00a0<\/p>\n<\/div>\n<p>Vamos a proceder ahora a descargar los dos ficheros asociados a la pista <strong>refGene<\/strong>, que contiene el cat\u00e1logo de genes humanos anotados por el consorcio <strong>RefSeq<\/strong>, en su versi\u00f3n <strong>hg38<\/strong>.<\/p>\n<p>Para ello, debemos utilizar el comando <code>wget<\/code> para transferir ambos ficheros a nuestro terminal.<\/p>\n<p><code>wget<\/code> http:\/\/hgdownload.soe.ucsc.edu\/goldenPath\/hg38\/database\/refGene.sql<\/p>\n<p><code>wget<\/code> http:\/\/hgdownload.soe.ucsc.edu\/goldenPath\/hg38\/database\/refGene.txt.gz<\/p>\n<p>Mostramos a continuaci\u00f3n el contenido del fichero <strong>refGene.sql<\/strong> que realiza la creaci\u00f3n de la tabla <strong>refGene<\/strong>. Los atributos que consultaremos con mayor frecuencia ser\u00e1n: <strong>name <\/strong>(c\u00f3digo del transcrito), <strong>chrom <\/strong>(cromosoma), <strong>strand <\/strong>(hebra), <strong>txStart <\/strong>y <strong>txEnd <\/strong>(coordenadas de inicio y final), <strong>exonCount <\/strong>(n\u00famero de exones) y <strong>name2 <\/strong>(nombre del gen).<\/p>\n<p>Es importante no confundir los campos de <strong>name <\/strong>y <strong>name2<\/strong>: un gen puede tener varios transcritos, pero un transcrito \u00fanicamente pertenece a un gen.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">CREATE TABLE 'refGene' (\r\n    'bin' smallint(5) unsigned NOT NULL,\r\n    'name' varchar(255) NOT NULL,\r\n    'chrom' varchar(255) NOT NULL,\r\n    'strand' char(1) NOT NULL,\r\n    'txStart' int(10) unsigned NOT NULL,\r\n    'txEnd' int(10) unsigned NOT NULL,\r\n    'cdsStart' int(10) unsigned NOT NULL,\r\n    'cdsEnd' int(10) unsigned NOT NULL,\r\n    'exonCount' int(10) unsigned NOT NULL,\r\n    'exonStarts' longblod NOT NULL,\r\n    'exonEnds' longblod NOT NULL,\r\n    'score' int(11) DEFAULT NULL,\r\n    'name2' varchar(255) NOT NULL,\r\n    'cdsStartStat' enum('none','unk','incmpl','cmpl') NOT NULL,\r\n    'cdsEndStat' enum('none','unk','incompl','cmpl') NOT NULL,\r\n    'exonFrames' longblod NOT NULL,\r\n    KEY 'chrom' ('chrom', 'bin'),\r\n    KEY 'name' ('name'),\r\n    KEY 'name2' ('name2')\r\n) ENGINE=MyISAM DEFAULT CHARSET=1atin1;<\/pre>\n<p>Pasaremos ahora a visualizar con el terminal el segundo fichero <strong>refGene.txt<\/strong>. Este archivo contiene los datos del cat\u00e1logo completo de genes anotados en el genoma humano. Debemos cargar esta informaci\u00f3n en nuestra base de datos una vez est\u00e9 creada la tabla <strong>refGene<\/strong>. En el contexto de este ejercicio, cada registro contiene informaci\u00f3n sobre un transcrito de un determinado gen. En el caso de que un gen posea varios transcritos, cada uno se codifica en registros separados (cada uno con su propio c\u00f3digo y sus correspondientes coordenadas).<\/p>\n<p>En primer lugar, debemos descomprimir el fichero con el comando <strong>gzip<\/strong>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">% gzip -d refGene.txt.gz\r\n\r\n% head -5 refGene.txt\r\n\r\n585 NR_046018 chr1 + 11873 14409 14409 14409 3 11873,12612,13220, 12227,12721,14409, 0 DOX11L1\r\nunk unk -1,-1,-1,\r\n\r\n585 NR_024540 chrl - 14361 29370 29370 29370 11 14361,14969,15795,16606,16857,17232,11605, 11914,\r\n18267,24737,29320,14829,15038,15947,16765,17055,17368,17742,18061,18366,24891,29370, 0 WASH7P\r\nunk unk -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,\r\n\r\n932 NR_104645 chrX + 45505387 45523644 45523644 45523644 3 45505387,45510496,45521607, 45505465,\r\n45510595,45523644, 0 LINC01204 unk unk -1,-1,-1,\r\n\r\n1078 NR_104148 chr7 + 64666082 6468783O 64687830 64687830 4 64666082,64669036,64679176,64684334,\r\n64666285,64669178,64679336,64687830, O ZNF107 unk unk -1,-1,-1,-1,\r\n\r\n103 NR_120408 chrl4 + 31561384 31861223 31861223 31861223 10 31561384,31562067,31565013,31599288,\r\n31673354,31673483,31826628,31846470,31850118,31859117,31561547,31562215,31565048,31599379,\r\n31673394,31673574,31826714,31846591,31850201,3186l223, ONUBPL unk unk -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,<\/pre>\n<div class=\"featured featured-blue\"><p>Las anotaciones de un genoma suelen actualizarse frecuentemente. Por este motivo, los datos mostrados en este tutorial pueden variar ligeramente con el paso del tiempo.<\/p>\n<\/div>\n<p>Una vez dentro del int\u00e9rprete de MySQL, indicaremos que vamos a trabajar dentro de nuestra base de datos <strong>catalogo<\/strong>.<\/p>\n<p>Ejecutaremos, posteriormente, el fichero <strong>refGene.sql<\/strong> con el comando <strong><code>source<\/code><\/strong> para crear la tabla <strong>refGene<\/strong>.<\/p>\n<p>Para verificar que la instrucci\u00f3n anterior ha funcionado correctamente, podemos ver el listado de atributos de la tabla <strong>refGene <\/strong>con el comando <strong><code>DESCRIBE<\/code><\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; USE catalogo;\r\n\r\nDatabase changed\r\n\r\nmysql&gt; DESCRIBE refGene;\r\n\r\n+---------------+-----------------------------------+------+------+---------+-------+\r\n| Field         | Type                              | Null | Key  | Default | Extra |\r\n+---------------+-----------------------------------+------+------+---------+-------+\r\n| bin           | smallint(5) unsigned              | NO   |      | NULL    |       |\r\n| name          | varchar(255)                      | NO   | MUL  | NULL    |       |\r\n| chrom         | varchar(255)                      | NO   | MUL  | NULL    |       |\r\n| strand        | char(1)                           | NO   |      | NULL    |       |\r\n| txStart       | int(10) unsigned                  | NO   |      | NULL    |       |\r\n| txEnd         | int(10) unsigned                  | NO   |      | NULL    |       |\r\n| cdsStart      | int(10) unsigned                  | NO   |      | NULL    |       |\r\n| cdsEnd        | int(10) unsigned                  | NO   |      | NULL    |       |\r\n| exonCount     | int(10) unsigned                  | NO   |      | NULL    |       |\r\n| exonStarts    | longblog                          | NO   |      | NULL    |       |\r\n| exonEnds      | longblog                          | NO   |      | NULL    |       |\r\n| score         | int(11)                           | YES  |      | NULL    |       |\r\n| name2         | varchar(255)                      | NO   | MUL  | NULL    |       |\r\n| cdsStartStat  | emun('none','unk',incmpl','cmpl') | NO   |      | NULL    |       |\r\n| cdsEndStat    | emun('none','unk',incmpl','cmpl') | NO   |      | NULL    |       |\r\n| exonFrames    | longblog                          | NO   |      | NULL    |       |\r\n+---------------+-----------------------------------+------+------+---------+-------+\r\n16 rows in set (0.14 sec)<\/pre>\n<div class=\"featured featured-blue\"><p>Vamos a asumir que ambos ficheros (refGene.sql y refGene.txt) est\u00e1n guardados en la misma carpeta de trabajo desde la cual hemos invocado al programa MySQL, anteriormente.<\/p>\n<\/div>\n<p>El segundo paso consiste en poblar la tabla con las anotaciones de los genes humanos que hemos descargado dentro del fichero<strong> refGene.txt<\/strong>. Usando el comando <strong>LOAD DATA<\/strong> podemos volcar todo el contenido en la tabla <strong>refGene<\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'refGene.txt'  INTO TABLE refGene;\r\n\r\nQuery OK, 69853 rows affected (2.54 sec)\r\nRecords: 69853  Deleted: 0  Skipped: 0  Warnings: 0<\/pre>\n<p>Nos encontramos en condiciones de comenzar a interrogar a la base de datos. Recordemos, nuevamente, que cada registro de la tabla <strong>refGene <\/strong>alberga la informaci\u00f3n asociada al transcrito de un gen en particular. Igualmente, es importante tener en cuenta que una elevada fracci\u00f3n de los genes humanos posee dos o m\u00e1s transcritos alternativos. Nuestra misi\u00f3n, a continuaci\u00f3n, es mostrar el enorme potencial de las consultas de SQL a la hora de extraer nuevo conocimiento biol\u00f3gico de los datos almacenados en las tablas de nuestra base de datos.<\/p>\n<p>Comenzaremos mostrando los primeros registros de nuestra tabla, incluyendo \u00fanicamente varios de sus atributos para favorecer la legibilidad de los valores de los registros por pantalla:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT name2,name,chrom,strand,txStart,txEnd,exonCount\r\n    -&gt; FROM refGene ORDER BY name2 LIMIT 10;\r\n\r\n+----------+--------------+-------+--------+----------+----------+-----------+\r\n| name2    | name1        | chrom | strand | txStart  | txEnd    | exonCount |\r\n+----------+--------------+-------+--------+----------+----------+-----------+\r\n| A1BG     | NM_130786    | chr19 | -      | 58346805 | 58353499 |         8 |\r\n| A1BG-AS1 | NR_015380    | chr19 | +      | 58351969 | 5835583  |         4 |\r\n| A1CF     | NM_01198819  | chr10 | -      | 50799408 | 50885675 |        15 |\r\n| A1CF     | NM_014576    | chr10 | -      | 50799408 | 50885675 |        13 |\r\n| A1CF     | NM_138932    | chr10 | -      | 50799408 | 50885675 |        13 |\r\n| A1CF     | NM_01198820  | chr10 | -      | 50799408 | 50885675 |        14 |\r\n| A1CF     | NM_01198818  | chr10 | -      | 50799408 | 50885675 |        14 |\r\n| A1CF     | NM_138933    | chr10 | -      | 50799408 | 50885675 |        13 |\r\n| A2M      | NM_001347423 | chr12 | -      |  9067707 |  9116229 |        37 |\r\n| A2M      | NM_000014    | chr12 | -      |  9067707 |  9116229 |        36 |\r\n+----------+--------------+-------+--------+----------+----------+-----------+\r\n10 rows in set (0.00 sec)<\/pre>\n<p>Dado que cada registro contiene la informaci\u00f3n de un transcrito, el n\u00famero de transcritos conocidos en el genoma humano coincidir\u00e1 con el n\u00famero de registros almacenados en la tabla <strong>refGene<\/strong>. Este contaje es sencillo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT COUNT(*) FROM refGene;\r\n\r\n+----------+\r\n| COUNT(*) |\r\n+----------+\r\n|  69853   |\r\n+----------+\r\n1 row in set (0.00 sec)<\/pre>\n<p>Tambi\u00e9n podemos contar f\u00e1cilmente el n\u00famero total de genes codificados en el genoma humano. Si un gen posee varios transcritos alternativos, entonces encontraremos varios registros en nuestro cat\u00e1logo que poseen un valor distinto del atributo <strong>name<\/strong>, pero que comparten el mismo valor para el atributo <strong>name2<\/strong>. Por tanto, empleando la cl\u00e1usula <strong><code>DISTINCT<\/code><\/strong> sobre este \u00faltimo atributo, contaremos una \u00fanica vez cada gen de nuestra tabla, aunque posea varias formas alternativas:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT COUNT(DISTINCT name2) FROM refGene;\r\n\r\n+-----------------------+\r\n| COUNT(DISTINCT name2) |\r\n+-----------------------+\r\n|                 27656 |\r\n+-----------------------+\r\n1 row in set (0.07 sec)<\/pre>\n<p>Si agrupamos los registros de la tabla por el atributo <strong>name2<\/strong>, podemos elaborar un inventario del n\u00famero de transcritos alternativos anotados para cada gen.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT name2, COUNT(name2)\r\n    -&gt; FROM refGene GROUP BY name2 LIMIT 10;\r\n\r\n+----------+--------------+\r\n| name2    | COUNT(name2) |\r\n+----------+--------------+\r\n| A1BG     |            1 |\r\n| A1BG-AS1 |            1 |\r\n| A1CF     |            6 |\r\n| A2M      |            4 |\r\n| A2M-AS1  |            3 |\r\n| A2ML1    |            2 |\r\n| A2MP1    |            1 |\r\n| A3GALT2  |            1 |\r\n| A4GALT   |            3 |\r\n| A4GNT    |            1 |\r\n+----------+--------------+\r\n10 rows in set (0.00 sec)<\/pre>\n<p>Podemos obtener resultados interesantes aplicando la cl\u00e1usula <strong><code>WHERE<\/code><\/strong> sobre los atributos de cada registro. Por ejemplo, imaginemos que deseamos conocer el n\u00famero de transcritos ubicados en cada hebra de la mol\u00e9cula de ADN:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT COUNT(*) FROM refGene WHERE strand LIKE '+';\r\n\r\n+----------+\r\n| COUNT(*) |\r\n+----------+\r\n|    35724 |\r\n+----------+\r\n1 row in set (0.10 sec)\r\n\r\nmysql&gt; SELECT COUNT(*) FROM refGene WHERE strand LIKE '-';\r\n\r\n+----------+\r\n| COUNT(*) |\r\n+----------+\r\n|    34129 |\r\n+----------+\r\n1 row in set (0.09 sec)<\/pre>\n<p>Tambi\u00e9n podemos contar el n\u00famero de transcritos localizados en un cromosoma:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT COUNT(*) FROM refGene WHERE chrom LIKE 'chr21';\r\n\r\n+----------+\r\n| COUNT(*) |\r\n+----------+\r\n|      961 |\r\n+----------+\r\n1 row in set (0.00 sec)<\/pre>\n<p>Nuevamente, jugando con el atributo <strong>name2 <\/strong>podemos contar el n\u00famero de genes codificados en el mismo cromosoma:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT COUNT(DISTINCT name2) \r\n    -&gt; FROM refGene WHERE chrom LIKE 'chr21';\r\n\r\n+-----------------------+\r\n| COUNT(DISTINCT name2) |\r\n+-----------------------+\r\n|                   408 |\r\n+-----------------------+\r\n1 row in set (0.01 sec)<\/pre>\n<p>O identificar cu\u00e1les son los transcritos que poseen un mayor n\u00famero de exones:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT name2,name,exonCount \r\n    -&gt; FROM refGene ORDER BY exonCount DESC LIMIT 10;\r\n\r\n+-------+--------------+-----------+\r\n| name2 | name         | exonCount |\r\n+-------+--------------+-----------+\r\n| TTN   | NM_001267550 |       363 |\r\n| TTN   | NM_001256850 |       313 |\r\n| TTN   | NM_133378    |       312 |\r\n| TTN   | NM_133437    |       192 |\r\n| TTN   | NM_133432    |       192 |\r\n| TTN   | NM_003319    |       191 |\r\n| NEB   | NM_001271208 |       183 |\r\n| NEB   | NM_001164507 |       182 |\r\n| NEB   | NM_001164508 |       182 |\r\n| MUC19 | NM_173600    |       174 |\r\n+-------+--------------+-----------+\r\n10 rows in set (0.11 sec)<\/pre>\n<p>Tambi\u00e9n podemos seleccionar aquellos transcritos que poseen un \u00fanico ex\u00f3n:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT name2,name,exonCount\r\n    -&gt; FROM refGene WHERE exonCount = 1\r\n    -&gt; ORDER BY name2 LIMIT 10;\r\n\r\n+------------+---------------+-----------+\r\n| name2      | name          | exonCount |\r\n+------------+---------------+-----------+\r\n| AADACL2-AS1 | NR_110203    |         1 |\r\n| ABALON      | NR_131907    |         1 |\r\n| AEBP16B     | NM_080622    |         1 |\r\n| ACKR1       | NM_001122951 |         1 |\r\n| ACKR4       | NM_178445    |         1 |\r\n| ACTBL2      | NM_001017992 |         1 |\r\n| ACTG1P20    | NR_033926    |         1 |\r\n| ACTG1P4     | NR_024438    |         1 |\r\n| ACTL10      | NM_001024675 |         1 |\r\n| ACTL7A      | NM_006687    |         1 |\r\n+------------+---------------+-----------+\r\n10 rows in set (0.00 sec)<\/pre>\n<p>Es posible calcular el n\u00famero de exones, en promedio, por cada transcrito:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT AVG(exonCount) FROM refGene;\r\n\r\n+----------------+\r\n| AVG(exonCount) |\r\n+----------------+\r\n|         9.4126 |\r\n+----------------+\r\n1 row in set (0.11 sec)<\/pre>\n<p>Y la longitud en promedio de los transcritos de los genes humanos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT AVG(txEnd-txStart+1) FROM refGene;\r\n\r\n+----------------------+\r\n| AVG(txEnd-txStart+1) |\r\n+----------------------+\r\n|           56983.2770 |\r\n+----------------------+\r\n1 row in set (0.10 sec)<\/pre>\n<p>Finalmente, vamos a integrar en este an\u00e1lisis el genoma de rat\u00f3n dom\u00e9stico. Descargamos los ficheros <strong>refGene.sql<\/strong> y <strong>refGene.txt<\/strong> de esta especie en su versi\u00f3n mm9.<\/p>\n<p>Para evitar sobrescribir las anotaciones humanas, debemos grabar ambos ficheros con un nombre diferente (por ejemplo, <strong>refGene_mouse.sql <\/strong>y <strong>refGene_mouse.tx<\/strong><strong>t<\/strong>). Posteriormente, es necesario editar el contenido del fichero SQL para modificar el nombre de la tabla, por la misma raz\u00f3n.<\/p>\n<p>Tras estas modificaciones, ya estamos en condiciones de lanzar la creaci\u00f3n de la nueva tabla con el comando <strong>source<\/strong> y su repoblaci\u00f3n con los datos relativos al genoma del rat\u00f3n con el comando <code>LOAD DATA<\/code>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\"> DROP TABLE IF EXISTS 'refGene_mouse';\r\n\r\nCREATE TABLE 'refGene_mouse' (\r\n   'bin\" smallint(S) unsigned NOT NULL,\r\n   'name' varchar(255) NOT NULL,\r\n   'chrom' varchar(255) NOT NULL,\r\n   'strand' char(l) NOT NULL,\r\n...\r\n---------------------------------------\r\n\r\nmysql&gt; source 'refGene_mouse.sql';\r\n\r\nQuery OK, 0 rows affected (O.00 sec)\r\n\r\nmysql&gt; LOAD DATA LOCAL INFILE 'refGene_mouse.txt'\r\n    -&gt; INTO TABLE refGene_mouse;\r\n\r\nQuery OK, 34904 rows affected (l.23 sec)\r\nRecords: 34904  Deleted: O  Skipped: O  Warnings: 0<\/pre>\n<p>Comprobamos que los registros almacenados en la nueva tabla son correctos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT name2,name,chrom,strand,txStart,txEnd,exonCount\r\n   -&gt; FROM refGene_mouse ORDER BY name2 LIMIT 10;\r\n\r\n+---------------+--------------+-------+--------+-----------+-----------+-----------+\r\n| name2         | name         | chrom | strand | txStart   | txEnd     | exonCount |\r\n+---------------+--------------+-------+--------+-----------+-----------+-----------+\r\n| 0610005C13R1k | NR_O38166    | chr7  | -      |  52823164 |  52830S46 |         5 |\r\n| 0610005C13R1k | NR_038165    | chr7  | -      |  52823164 |  52830S46 |         4 | \r\n| 0610007P14Rik | NM_021446    | chr12 | -      |  87156404 |  87165495 |         5 | \r\n| 0610009B22Rik | NM_L025319   | chr11 | -      |  51498886 |  51502136 |         2 | \r\n| 0610009Ll8Rik | NR_038126    | chr11 | +      | 120209991 | 120212504 |         2 | \r\n| 0610009O20Rik | NM_024179    | chr18 | +      |  38409902 |  38422283 |        13 | \r\n| 0610010B08Rik | NM_001177543 | chr2  | -      | 175017505 | 175163713 |         6 | \r\n| 0610010B08Rik | NM_001177543 | chr2  | -      | 174952492 | 175261278 |         6 |\r\n| 0610010B08Rik | NM_001177543 | chr2  | +      | 175639522 | 175655901 |         5 |\r\n| 0610010B08Rik | NM_001177543 | chr2  | +      | 175737073 | 175753460 |         5 |\r\n+---------------+--------------+-------+--------+-----------+-----------+-----------+\r\n10 rows in set (0,00 sec)<\/pre>\n<p>Ahora, si seleccionamos aquellos registros de las dos tablas que pertenecen al mismo gen en ambas especies, podemos construir un cat\u00e1logo de genes hom\u00f3logos.<\/p>\n<p>Podemos llevar a cabo esta asociaci\u00f3n porque SQL no distingue entre may\u00fasculas o min\u00fasculas a la hora de comparar la columna <strong>name2<\/strong>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT DISTINCT refGene.name2,refGene.chrom,refGene.strand,\r\n    -&gt; RefGene.txStart,refGene.txEnd,refGene.exonCount,\r\n    -&gt; refGene_mouse.name2,RefGene_mouse.chrom,\r\n    -&gt; refGene_mouse.strand,refGene_mouse.txStart,\r\n    -&gt; refGene_mouse.txEnd,refGene_mouse.exonCount\r\n    -&gt; FROM refGene JOIN refGene_mouse\r\n    -&gt; ON refGene.name2 = refGene_mouse.name2\r\n    -&gt; ORDER BY refGene.name2 ASC LIMIT 10;\r\n\r\n+---------+-------+--------+----------+----------+-----------+---------+-------+--------+-----------+-----------+-----------+\r\n| name2   | chrom | strand | txStart  | txEnd    | exonCount | name2   | chrom | strand | txStart   | txEnd     | exonCount |\r\n+---------+----------------+----------+----------+-----------+---------+-------+--------+-----------+-----------+-----------+\r\n| A1BG    | chr19 | -      | 58346805 | 58353499 |         8 | A1bg    | chr15 | -      |  60749143 |  60752825 |         7 |\r\n| A1CF    | chr10 | -      | 50799408 | 50885675 |        13 | A1cf    | chr19 | +      |  31943250 |  32023896 |        12 |\r\n| A1CF    | chr10 | -      | 50799408 | 50885675 |        14 | A1cf    | chr19 | +      |  31943250 |  32023896 |        12 |\r\n| A1CF    | chr10 | -      | 50799408 | 50885675 |        15 | A1cf    | chr19 | +      |  31943250 |  32023896 |        12 |\r\n| A2M     | chr12 | -      |  9067707 |  9116229 |        35 | A2m     | chr6  | +      | 121586190 | 121629256 |        36 |\r\n| A2M     | chr12 | -      |  9067707 |  9116229 |        36 | A2m     | chr6  | +      | 121586190 | 121629256 |        36 |\r\n| A2M     | chr12 | -      |  9067707 |  9116229 |        37 | A2m     | chr6  | +      | 121586190 | 121629256 |        36 |\r\n| A3GALT2 | chr1  | -      | 33306765 | 33321098 |         5 | A3galt2 | chr4  | +      | 128436501 | 128446542 |         5 |\r\n| A4GALT  | chr22 | -      | 42692111 | 42720910 |         3 | A4galt  | chr15 | -      |  83057151 |  83082161 |         3 |\r\n| A4GALT  | chr22 | -      | 42692111 | 42720910 |         3 | A4galt  | chr15 | -      |  83057151 |  83082204 |         3 |\r\n+---------+-------+--------+----------+----------+-----------+---------+-------+--------+-----------+-----------+-----------+\r\n10 rows in set (5.14 sec)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Para demostrar c\u00f3mo extraer conocimiento \u00fatil de una base de datos relacional, os proponemos analizar con MySQL el contenido de un cat\u00e1logo de genes humanos. Un gen es un fragmento de ADN ubicado en el genoma que contiene la informaci\u00f3n precisa para sintetizar una mol\u00e9cula de ARN. En los organismos eucariotas, un gen est\u00e1 constituido [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/341"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/comments?post=341"}],"version-history":[{"count":6,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/341\/revisions"}],"predecessor-version":[{"id":1018,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/341\/revisions\/1018"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/media?parent=341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}