Extraer información de una tabla.

La sentencia SELECT es utilizada para traer información desde una tabla. La sintaxis general de esta sentencia es:

 Seleccionar datos específicos

Se pueden seleccionar sólo algunos registros de la tabla. Por ejemplo, si quisiera verificar los cambios realizados sobre la edad de Pedro seleccione el registro de Pedro de esta manera:

registros_especificos

Normalmente, las comparaciones de cadenas no son case sensitive, por eso puede escribir el nombre como ‘pedro’, ‘Pedro’, etc. El resultado de la consulta será el mismo.

Se pueden indicar condiciones a cumplir por cualquier columna. Por ejemplo, si quisiera saber  una lista de mayores de 21 años pondríamos:

where

 Seleccionar columnas concretas

Si no se quieren ver filas completas, solo hace falta indicar las columnas en las que se está interesado, separadas por comas. Por ejemplo, si desea saber los nombres solamente, seleccione la columna fname:

columna_sola

Ordenar registros

Quizá advirtió, en los ejemplos anteriores, que las filas resultantes se mostraron sin ningún orden en particular. A menudo es más fácil examinar la salida de una consulta cuando las filas se ordenan de algún modo significativo. Para ordenar un resultado, se usa la cláusula ORDER BY.

Aquí tenemos los nombres ordenadas por edades:

ordenar

Por lo general, cuando se trata de columnas de tipo carácter, la ordenación, — al igual que otras operaciones de comparación — no es case-sensitive. Significa que el orden permanece indefinido para las columnas que son idénticas excepto por sus mayúsculas y minúsculas. Puede no obstante forzar a que una columna se ordene en forma sensible a mayúsculas empleando el modificador BINARY: ORDER BY BINARY columna.

El sentido de ordenación, por defecto, es ascendente, con los valores más pequeños primero. Para ordenar en sentido inverso (descendente), agregue la palabra clave DESC luego del nombre de la columna por la que ordena:

orden_descendente

Cálculos sobre fechas

MySQL provee varias funciones que se aplican a cálculos entre fechas, por ejemplo, para calcular edades u obtener partes de una fecha.

En una base de datos de componentes de un equipo, queremos determinar cuántos años de edad tiene cada uno, hay que calcular la diferencia entre el año de la fecha actual y el de la fecha de nacimiento, y luego restar 1 al resultado si el día y mes actuales son anteriores al día y mes indicados por la fecha de nacimiento. La siguiente consulta devuelve, para cada persona, el nombre, la fecha de nacimiento, la fecha actual, y la edad en años.

calcula la edad

En el ejemplo anterior, YEAR() trae la parte correspondiente al año de una fecha, y RIGHT() trae los 5 primeros caracteres contando desde la derecha, que representan la parte MM-DD de la fecha. La porción de la expresión que compara los valores MM-DD devuelve 1 o 0, lo cual se corresponde con la diferencia de 1 año a restar de la edad si el día de la fecha devuelto por CURDATE() ocurre antes que la fecha de nacimiento nacido. La expresión completa es un tanto confusa para usar como encabezado, por lo que se emplea un alias (age) para que el encabezado sea más comprensible.

La consulta funciona bien, pero los resultados podrían revisarse más fácilmente si las filas se presentaran en algún orden. Esto puede hacerse agregando la cláusula ORDER BY age para ordenar por edad la salida:

Orden_por edad

 Podemos sacar el mes de nacimiento de una fecha de nacimiento:

sacar_mes

Encontrar personas que cumplen años el mes siguiente es también sencillo. Suponga que el mes actual es abril. De modo que su número es 4, y se buscan personas nacidas en Mayo (mes 5), de esta forma:

ENCONTRAR MES CUMPLE

 Trabajar con valores NULL

El valor NULL puede resultar un poco desconcertante hasta que se comienza a utilizar. Conceptualmente, NULL significa valor inexistente o desconocido, y es tratado de forma diferente a otros valores. Para verificar que un valor es NULL, no se pueden emplear operadores de comparación aritmética como =, <, o <>. Para comprobar esto, intente la siguiente consulta:

NULL_1

Claramente, no se obtienen valores significativos a partir de estas comparaciones. Use en su lugar los operadores IS NULL y IS NOT NULL:

is_null

Observe que en MySQL, 0 o NULL se interpretan como falso, y cualquier otro valor, como verdadero. El valor por defecto para una operación booleana es 1. Cuando se realiza un ORDER BY, los valores NULL se presentan en primer lugar si se emplea ORDER BY ... ASC, y al final si se ordena con ORDER BY ... DESC.

Un error muy común cuando se trabaja con valores NULL es asumir que es imposible insertar un valor cero o una cadena vacía en una columna definida como NOT NULL, pero no es así. Los mencionados son efectivamente valores, mientras que NULL significa “no hay un valor”. Puede comprobar esto fácilmente empleando IS [NOT] NULL como se muestra aquí:

null_3

Por lo tanto, es totalmente posible insertar cadenas vacias o ceros en columnas marcadas como NOT NULL, ya que son valores NOT NULL.

 Coincidencia de patrones

MySQL posee capacidades estándar para utilizar patrones así como también una forma de patrones basada en expresiones regulares extendidas similares a las que se encuentran en utilidades de UNIX, como ser vi, grep, y sed.

Los patrones SQL permiten emplear el carácter ‘_‘ para representar coincidencia con un carácter individual y ‘%‘. En MySQL, por defecto, los patrones SQL no son case-sensitive. Abajo se muestran algunos ejemplos. Advierta que no se emplean los operadores = o <> para trabajar con patrones SQL, en lugar de eso se usan los operadores de comparación LIKE o NOT LIKE.

Para encontrar nombres que comiencen con ‘m‘:

coincidencia

 Para encontrar nombres que terminen con 'o':

busqueda final

Para encontrar nombres que contengan 'n':

busqueda_4Para encontrar nombres que contengan exactamente 5 caracteres, use 5 veces el carácter patrón '_':

busqueda_5Letras

Los otros patrones que pueden emplearse con MySQL usan expresiones regulares extendidas. Cuando busque coincidencias con este tipo de patrones, use los operadores REGEXP y NOT REGEXP (o bien los sinónimos RLIKE y NOT RLIKE).

Algunas características de las expresiones regulares extendidas:

  • '.' detecta coincidencia con cualquier carácter individual.
  • Una clase de carácter '[...]' detecta coincidencia con cualquier carácter entre los corchetes. Por ejemplo, '[abc]' coincidirá con 'a', 'b', o 'c'. Para hacer referencia a un rango de caracteres, use un guión. '[a-z]' detecta coincidencia con cualquier letra, mientras que '[0-9]' lo hace con cualquier dígito.
  • '*' detecta coincidencia con cero o más apariciones de los caracteres que lo preceden. Por ejemplo, 'x*' detecta cualquier número de caracteres 'x', '[0-9]*' detecta cualquier cantidad de dígitos, y '.*' coincidirá con cualquier número de cualquier carácter.
  • REGEXP tendrá éxito si el patrón suministrado encuentra coincidencia en cualquier parte del valor examinado (esto difiere de LIKE en que este último solo tiene éxito si el patrón concuerda con todo el valor).
  • Para lograr que un patrón detecte coincidencias solamente al principio o al final del valor examinado, utilice '^' al principio o '$' al final del patrón.

Para demostrar el funcionamiento de las expresiones regulares extendidas, las consultas con LIKE expuestas anteriormente se han reescrito utilizando REGEXP.

Para hallar nombres que comiencen con 'l', use '^' para buscar coincidencia al principio del valor:

 comienza_l

En MySQL 5.0, si realmente quiere forzar a que la comparación realizada por REGEXP sea case sensitive, utilice la palabra clave BINARY para convertir a una de las cadenas en una cadena binaria. Esta consulta solamente encontrará coincidencia con 'L' mayúscula al comienzo de un nombre:

regexp_binary

Para hallar nombres finalizado en 'o', emplee '$' para buscar la coincidencia en el final del nombre:

encuentra_o

Para encontrar nombres conteniendo una 'e', utilice esta consulta:

busqueda_e

Debido a que un patrón de expresión regular encuentra coincidencia sin importar el lugar del valor donde se produce, en la consulta previa no es necesario colocar un comodín a cada lado del patrón para obtener coincidencia en cualquier parte del valor, como hubiera sucedido de utilizar un patrón SQL.

Para hallar nombres conteniendo exactamente cinco caracteres, use '^' y '$' para obligar a que la coincidencia deba estar al principio y al final del nombre, y cinco instancias de '.' entre ellas.

busqueda5_letras

La consulta anterior también se podría haber escrito empleando el operador '{n}' “repetir-n-veces”:

encuentra5_2

Contar registros

Una pregunta frecuente que deben responder las bases de datos es: “¿qué tan a menudo aparece en la tabla un cierto tipo de dato?” Por ejemplo, se podría querer averiguar la cantidad de personas que dispone. La misma pregunta que “¿cuántos registros hay en la tabla equipo?”, ya que hay un registro por persona. COUNT cuenta el número de filas, por ello, la consulta para contar en la tabla es así:

cuenta_1

Ahora que sabemos lo básico sobre las tablas, continuaremos los siguientes pasos un poco más complicado.

atras2

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s