|
Recuperando información
de una tabla
Seleccionando todos los datos
Seleccionando registros particulares
Seleccionando columnas particulares
|
Recuperando información de una
tabla
La sentencia SELECT es usada para obtener
la información guardada en una tabla. La forma
general de esta sentencia es:
SELECT LaInformaciónQueDeseamos
FROM DeQueTabla WHERE CondiciónASatisfacerAquí,
LaInformaciónQueDeseamos es la información
que queremos ver. Esta puede ser una lista de columnas,
o un * para indicar "todas las columnas". DeQueTabla
indica el nombre de la tabla de la cual vamos a obtener
los datos. La claúsula WHERE es opcional. Si está
presente, la CondiciónASatisfacer especifica las
condiciones que los registros deben satisfacer para que
puedan ser mostrados.
Seleccionando todos los datos
La manera más simple de la sentencia
SELECT es cuando se recuperan todos los datos de una tabla:
mysql> SELECT * FROM mascotas;
+--------+-------------+-----------+------+------------+---------------+
| nombre | propietario | especie | sexo | nacimiento |
fallecimiento |
+--------+-------------+-----------+------+------------+---------------+
| Fluffy | Arnoldo | Gato | f | 1999-02-04 | NULL |
| Mau | Juan | Gato | m | 1998-03-17 | NULL |
| Buffy | Arnoldo | Perro | f | 1999-05-13 | NULL |
| FanFan | Benito | Perro | m | 2000-08-27 | NULL |
| Kaiser | Diana | Perro | m | 1998-08-31 | 1997-07-29
|
| Chispa | Omar | Ave | f | 1998-09-11 | NULL |
| Wicho | Tomás | Ave | NULL | 2000-02-09 | NULL
|
| Skim | Benito | Serpiente | m | 2001-04-29 | NULL |
| Pelusa | Diana | Hamster | f | 2000-03-30 | NULL |
+--------+-------------+-----------+------+------------+---------------+
9 rows in set (0.00 sec)Esta forma del SELECT es útil
si deseamos ver los datos completos de la tabla, por ejemplo,
para asegurarnos de que están todos los registros
después de la carga de un archivo.
Por ejemplo, en este caso que estamos tratando,
al consultar los registros de la tabla, nos damos cuenta
de que hay un error en el archivo de datos (mascotas.txt):
parece que Kaiser ha nacido después de que ha fallecido!.
Al revisar un poco el pedigree de Kaiser encontramos que
la fecha correcta de nacimiento es el año 1989,
no 1998.
Hay por lo menos un par de maneras de solucionar
este problema:
Editar el archivo "mascotas.txt"
para corregir el error, eliminar los datos de la tabla
mascotas con la sentencia DELETE, y cargar los datos nuevamente
con el comando LOAD DATA:
mysql> DELETE FROM mascotas;
mysql> LOAD DATA LOCAL INFILE "mascotas.txt"
INTO TABLE mascotas;Sin embargo, si hacemos esto, debemos
ingresar los datos de Pelusa, la mascota de nuestra hermana
Diana.
La segunda opción consiste en corregir
sólo el registro erróneo con una sentencia
UPDATE:
mysql> UPDATE mascotas SET nacimiento="1989-08-31"
WHERE nombre="Kaiser";Como se mostró
anteriormente, es muy fácil recuperar los datos
de una tabla completa. Pero típicamente no deseamos
hacer esto, particularmente cuando las tablas son demasiado
grandes. En vez de ello, estaremos más interesados
en responder preguntas particulares, en cuyo caso debemos
especificar algunas restricciones para la información
que deseamos ver.
Seleccionando registros particulares
Podemos seleccionar sólo registros
particulares de una tabla. Por ejemplo, si deseamos verificar
el cambio que hicimos a la fecha de nacimiento de Kaiser,
seleccionamos sólo el registro de Kaiser de la
siguiente manera:
mysql> SELECT * FROM mascotas WHERE
nombre="Kaiser";
+--------+-------------+---------+------+------------+--------------+
| nombre | propietario | especie | sexo | nacimiento |
fallecimento |
+--------+-------------+---------+------+------------+--------------+
| Kaiser | Diana | Perro | m | 1989-08-31 | 1997-07-29
|
+--------+-------------+---------+------+------------+--------------+
1 row in set (0.00 sec)La salida mostrada confirma que
el año ha sido corregido de 1998 a 1989.
La comparación de cadenas es normalmente
no sensitiva, así que podemos especificar el nombre
como "kaiser", "KAISER", etc. El resultado
de la consulta será el mismo.
Podemos además especificar condiciones
sobre cualquier columna, no sólo el "nombre".
Por ejemplo, si deseamos conocer qué mascotas nacieron
después del 2000, tendríamos que usar la
columna "nacimiento":
mysql> SELECT * FROM mascotas WHERE
nacimiento >= "2000-1-1";
+--------+-------------+-----------+------+------------+---------------+
| nombre | propietario | especie | sexo | nacimiento |
fallecimiento |
+--------+-------------+-----------+------+------------+---------------+
| FanFan | Benito | Perro | m | 2000-08-27 | NULL |
| Wicho | Tomás | Ave | NULL | 2000-02-09 | NULL
|
| Skim | Benito | Serpiente | m | 2001-04-29 | NULL |
| Pelusa | Diana | Hamster | f | 2000-03-30 | NULL |
+--------+-------------+-----------+------+------------+---------------+
4 rows in set (0.00 sec)Podemos también combinar
condiciones, por ejemplo, para localizar a los perros
hembras:
mysql> SELECT * FROM mascotas WHERE
especie="Perro" AND sexo="f";
+--------+-------------+---------+------+------------+---------------+
| nombre | propietario | especie | sexo | nacimiento |
fallecimiento |
+--------+-------------+---------+------+------------+---------------+
| Buffy | Arnoldo | Perro | f | 1999-05-13 | NULL |
+--------+-------------+---------+------+------------+---------------+
1 row in set (0.00 sec)La consulta anterior usa el operador
lógico AND. Hay también un operador lógico
OR:
mysql> SELECT * FROM mascotas WHERE
especie = "Ave" OR especie = "Gato";
+--------+-------------+---------+------+------------+---------------+
| nombre | propietario | especie | sexo | nacimiento |
fallecimiento |
+--------+-------------+---------+------+------------+---------------+
| Fluffy | Arnoldo | Gato | f | 1999-02-04 | NULL |
| Mau | Juan | Gato | m | 1998-03-17 | NULL |
| Chispa | Omar | Ave | f | 1998-09-11 | NULL |
| Wicho | Tomás | Ave | NULL | 2000-02-09 | NULL
|
+--------+-------------+---------+------+------------+---------------+
4 rows in set (0.00 sec)El operador AND y el operador
OR pueden ser intercambiados. Si hacemos esto, es buena
idea usar paréntesis para indicar como deben ser
agrupadas las condiciones:
mysql> SELECT * FROM mascotas WHERE
(especie = "Gato" AND sexo = "m")
-> OR (especie = "Perro" AND sexo = "f");
+--------+-------------+---------+------+------------+---------------+
| nombre | propietario | especie | sexo | nacimiento |
fallecimiento |
+--------+-------------+---------+------+------------+---------------+
| Mau | Juan | Gato | m | 1998-03-17 | NULL |
| Buffy | Arnoldo | Perro | f | 1999-05-13 | NULL |
+--------+-------------+---------+------+------------+---------------+
2 rows in set (0.00 sec)Seleccionando columnas particulares
Si no deseamos ver los registros completos
de una tabla, entonces tenemos que usar los nombres de
las columnas en las que estamos interesados separándolas
por coma. Por ejemplo, si deseamos conocer la fecha de
nacimiento de nuestras mascotas, debemos seleccionar la
columna "nombre" y "nacimiento":
mysql> SELECT nombre, nacimiento FROM
mascotas;
+--------+------------+
| nombre | nacimiento |
+--------+------------+
| Fluffy | 1999-02-04 |
| Mau | 1998-03-17 |
| Buffy | 1999-05-13 |
| FanFan | 2000-08-27 |
| Kaiser | 1989-08-31 |
| Chispa | 1998-09-11 |
| Wicho | 2000-02-09 |
| Skim | 2001-04-29 |
| Pelusa | 2000-03-30 |
+--------+------------+
9 rows in set (0.00 sec)Para conocer quién tiene
alguna mascota, usaremos la siguiente consulta:
mysql> SELECT propietario FROM mascotas;
+-------------+
| propietario |
+-------------+
| Arnoldo |
| Juan |
| Arnoldo |
| Benito |
| Diana |
| Omar |
| Tomás |
| Benito |
| Diana |
+-------------+
9 rows in set (0.00 sec)Sin embargo, debemos notar que
la consulta recupera el nombre del propietario de cada
mascota, y algunos de ellos aparecen más de una
vez. Para minimizar la salida, agregaremos la palabra
clave DISTINCT:
mysql> SELECT DISTINCT propietario FROM
mascotas;
+-------------+
| propietario |
+-------------+
| Arnoldo |
| Juan |
| Benito |
| Diana |
| Omar |
| Tomás |
+-------------+
6 rows in set (0.03 sec)Se puede usar también una
claúsula WHERE para combinar selección de
filas con selección de columnas. Por ejemplo, para
obtener la fecha de nacimiento de los perritos y los gatitos,
usaremos la siguiente consulta:
mysql> SELECT nombre, especie, nacimiento
FROM mascotas
-> WHERE especie = "perro" OR especie = "gato";
+--------+---------+------------+
| nombre | especie | nacimiento |
+--------+---------+------------+
| Fluffy | Gato | 1999-02-04 |
| Mau | Gato | 1998-03-17 |
| Buffy | Perro | 1999-05-13 |
| FanFan | Perro | 2000-08-27 |
| Kaiser | Perro | 1989-08-31 |
+--------+---------+------------+
5 rows in set (0.00 sec)
|