{"id":304,"date":"2023-09-03T16:55:38","date_gmt":"2023-09-03T14:55:38","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/?page_id=304"},"modified":"2025-03-09T14:51:24","modified_gmt":"2025-03-09T12:51:24","slug":"1-7-consultas-basicas-en-las-tablas","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/1-7-consultas-basicas-en-las-tablas\/","title":{"rendered":"1.7. Consultas b\u00e1sicas en las tablas"},"content":{"rendered":"<p>Las bases de datos son herramientas excepcionalmente \u00fatiles para consultar informaci\u00f3n y extraer nuevo conocimiento. En este sentido, los esquemas entidad-relaci\u00f3n no son una excepci\u00f3n. M\u00e1s bien al contrario, utilizando el \u00e1lgebra relacional es posible consultar el contenido de las tablas de m\u00faltiples formas. B\u00e1sicamente, las consultas SQL (en ingl\u00e9s, <em>queries<\/em>) consisten en filtros que delimitan el segmento del conjunto completo de los registros de una o m\u00e1s tablas en el cual estamos interesados, para mostrar despu\u00e9s el valor de sus atributos.<\/p>\n<p>La instrucci\u00f3n <strong>SELECT <\/strong>implementa el proceso de consulta sobre las tablas, mostrando los atributos indicados para aquellos registros que cumplen una determinada condici\u00f3n.<\/p>\n<div class=\"featured featured-blue\"><p>Pod\u00e9is encontrar informaci\u00f3n sobre el uso del terminal para llevar a cabo operaciones similares sobre ficheros de texto en el m\u00f3dulo \u00ab<a href=\"https:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/\" target=\"_blank\" rel=\"noopener\">El entorno de trabajo UNIX<\/a>\u00bb<em>.<\/em><\/p>\n<\/div>\n<p>Vamos a explorar en los pr\u00f3ximos subapartados c\u00f3mo enriquecer nuestras consultas, empleando para ello nuestro cat\u00e1logo de genes, que est\u00e1 almacenado en la base de datos <strong>catalogo<\/strong>. Antes de hacer consultas m\u00e1s elaboradas, mostramos a continuaci\u00f3n la forma m\u00e1s sencilla de realizar una consulta.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">SELECT campo1, campo2, ..., campon FROM tabla;<\/pre>\n<p>La consulta m\u00e1s habitual consiste en mostrar el contenido completo de una tabla. El car\u00e1cter *, precisamente, indica que deseamos visualizar el listado \u00edntegro de los valores de todos los atributos para el subconjunto de registros seleccionados. Para poner en pr\u00e1ctica este comando sobre nuestro cat\u00e1logo, seleccionamos todos los valores de cada instancia guardada en la tabla <em>genes<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT * FROM genes;\r\n\r\n+--------+-----------+---------+-----------+-----------+-----------+-----------------+\r\n| nombre | cromosoma | hebra   | inicio    | final     | proteina  | especie         |\r\n+--------+-----------+---------+-----------+-----------+-----------+-----------------+\r\n| ash2   | cbr3B     |   +     |  20477248 |  20479098 | NP_733023 | C. melanogaster |\r\n| cbt    | chr2L     |   -     |    476437 |    479046 | NP_722636 | C. melanogaster |\r\n| HNF 1A | chr12     |   +     | 121416548 | 121440312 | NP_000536 | H. sapiens      |\r\n| MYC    | chr8      |   +     | 128748314 | 128753678 | NP_002458 | H. sapiens      |\r\n+--------+-----------+---------+-----------+-----------+-----------+-----------------+\r\n4 rows in set (0.00 sec)<\/pre>\n<p>Para evitar el exceso de informaci\u00f3n, el usuario puede seleccionar los atributos o campos de los registros de una tabla que desea ver por pantalla. Simplemente sustituyendo en la pregunta el s\u00edmbolo * por un listado de atributos, separados por comas, podemos delimitar la vista de los registros, en este caso genes que obtenemos como resultado:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT nombre, especie FROM genes;\r\n\r\n+--------+------------------+\r\n| nombre | especie          |\r\n+--------+------------------+\r\n| ash2   | D. melanogaster  |\r\n| cbt    | D. melanogaster  |\r\n| HNF1A  | H. sapiens       |\r\n| MYC    | H. sapiens       |\r\n+--------+------------------+\r\n4 rows in set (0.00 sec)<\/pre>\n<p>El recuento del n\u00famero de registros que cumple una condici\u00f3n concreta es una de las consultas m\u00e1s frecuentes en SQL. En este caso es suficiente con a\u00f1adir la funci\u00f3n <strong><code>COUNT<\/code><\/strong> a la consulta que estemos realizando para contabilizar el n\u00famero de l\u00edneas de la salida:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT COUNT(*) FROM genes;\r\n\r\n+----------+\r\n| COUNT(*) |\r\n+----------+\r\n|        4 |\r\n+----------+\r\n1 row in set (0.00 sec)<\/pre>\n<p>La funci\u00f3n <strong><code>DISTINCT<\/code><\/strong> elimina los resultados duplicados. Por ejemplo, si deseamos contar el n\u00famero de organismos en nuestra tabla <em>genes<\/em>, podemos combinar las funciones <strong><code>COUNT<\/code><\/strong> y <strong><code>DISTINCT<\/code><\/strong> sobre el atributo <em>especies<\/em> del siguiente modo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT especie FROM genes;\r\n\r\n+------------------+\r\n| especie          |\r\n+------------------+\r\n| D. melanogaster  |\r\n| D. melanogaster  |\r\n| H. sapiens       |\r\n| H. sapiens       |\r\n+------------------+\r\n4 rows in set (0.00 sec)\r\n\r\nmysql&gt; SELECT DISTINCT especie FROM genes;\r\n\r\n+------------------+\r\n| especie          |\r\n+------------------+\r\n| D. melanogaster  |\r\n| H. sapiens       |\r\n+------------------+\r\n2 rows in set (0.07 sec)\r\n\r\nmysql&gt; SELECT COUNT(DISTINCT especie) FROM genes;\r\n\r\n+-------------------------+\r\n| COUNT(DISTINCT especie) |\r\n+-------------------------+\r\n|                       2 |\r\n+-------------------------+\r\n1 row in set (0.07 sec)<\/pre>\n<p>El comando <strong><code>ORDER BY<\/code><\/strong> ordena la lista de resultados producida por un comando <strong><code>SELECT<\/code><\/strong>, de forma ascendente o descendente (seg\u00fan si a\u00f1adimos la cl\u00e1usula <strong><code>ASC<\/code><\/strong> o <strong><code>DESC<\/code><\/strong>, respectivamente). En la pr\u00f3xima figura ordenamos los genes por su posici\u00f3n en cada cromosoma o por su nombre, de distintas maneras:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT nombre, cromosoma, inicio FROM genes ORDER BY inicio;\r\n\r\n+--------+-----------+-----------+\r\n| nombre | cromosoma |   inicio  |\r\n+--------+-----------+-----------+\r\n| cbt    | chr2L     |    476437 |\r\n| ash2   | chr3R     |  20477248 |\r\n| HNF1A  | chr12     | 121416548 |\r\n| MYC    | chr8      | 128748314 |\r\n+--------+-----------+-----------+\r\n4 rows in set (0.00 sec)\r\n\r\nsql&gt; SELECT nombre, cromosoma, inicio FROM genes ORDER BY nombre;\r\n\r\n+--------+-----------+-----------+\r\n| nombre | cromosoma |   inicio  |\r\n+--------+-----------+-----------+\r\n| ash2   | chr3R     |  20477248 |\r\n| cbt    | chr2L     |    476437 |\r\n| HNF1A  | chr12     | 121416548 |\r\n| MYC    | chr8      | 128748314 |\r\n+--------+-----------+-----------+\r\n4 rows in set (0.00 sec)\r\n\r\nsql&gt; SELECT nombre, cromosoma, inicio FROM genes \r\n   -&gt; ORDER BY nombre DESC;\r\n\r\n+--------+-----------+-----------+\r\n| nombre | cromosoma |   inicio  |\r\n+--------+-----------+-----------+\r\n| MYC    | chr8      | 128748314 |\r\n| HNF1A  | chr12     | 121416548 |\r\n| cbt    | chr2L     |    476437 |\r\n| ash2   | chr3R     |  20477248 |\r\n+--------+-----------+-----------+\r\n4 rows in set (0.01 sec)<\/pre>\n<p>Cuando se trabaja con tablas que contienen miles de elementos, resulta conveniente mostrar inicialmente solo los primeros registros para comprobar el correcto funcionamiento de la consulta. La funci\u00f3n <strong><code>LIMIT<\/code><\/strong> permite mostrar exclusivamente los primeros <em>n<\/em> registros de la consulta en ejecuci\u00f3n:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"mowtwo\">mysql&gt; SELECT * FROM genes LIMIT 1;\r\n\r\n+--------+-----------+--------+----------+----------+-----------+-----------------+\r\n| nombre | cromosoma | hebra  |  inicio  |   final  | proteina  |     especie     |\r\n+--------+-----------+--------+----------+----------+-----------+-----------------+\r\n| ash2   | chr3R     | +      | 20477248 | 20479098 | NP_733023 | D. melanogaster |\r\n+--------+-----------+--------+----------+----------+-----------+-----------------+\r\n1 row in set (0.00 sec)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Las bases de datos son herramientas excepcionalmente \u00fatiles para consultar informaci\u00f3n y extraer nuevo conocimiento. En este sentido, los esquemas entidad-relaci\u00f3n no son una excepci\u00f3n. M\u00e1s bien al contrario, utilizando el \u00e1lgebra relacional es posible consultar el contenido de las tablas de m\u00faltiples formas. B\u00e1sicamente, las consultas SQL (en ingl\u00e9s, queries) consisten en filtros que [&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\/304"}],"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=304"}],"version-history":[{"count":7,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/304\/revisions"}],"predecessor-version":[{"id":1008,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/304\/revisions\/1008"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/media?parent=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}