Consulta de datos en MySQL 4

Seleccionar registros

La instrucción SELECT sirve para recuperar datos dentro de una base de datos, en base a las restricciones que nosotros le especifiquemos.

Sintaxis básica

SELECT [predicado]
{* tabla.*[tabla].campo1[as alias1]
[,[tabla].campo2[as alias][,.]]}
FROM tabla [,tabla]
[WHERE….]
[GROUP BY]
[ORDER BY……] [;]

Para obtener todos los campos:

SELECT *
FROM tabla

Donde "*" indica todos los valores y "tabla" el nombre de la tabla.

La cláusula WHERE sirve para especificar las condiciones que deben reunir los registros que van a ser seleccionados, utilizando operadores lógicos y de comparación. De este modo, reducimos el número de registros que devolverá la consulta a aquellos que realmente necesitemos.

Sintaxis:

SELECT campos FROM tabla
WHERE condición

Nota: Hay que colocar comillas en los datos de tipo texto y fecha.

Cuando empleamos la cláusula WHERE nos ayudamos de una serie de operadores, que veremos en más detalle adelante. Por ahora indicar que están disponibles los operadores de comparación <, >, <>, <=, >= y =, con los que realizaremos los ejemplos y ejercicios hasta que estudiemos el resto de operadores.

Ejemplo 1:

Seleccionamos todos los campos de la tabla productos donde el nombre sea Killer.

SELECT * FROM productos
WHERE nombre = 'Killer';

Ejemplo 2:

Seleccionamos los campos id, nombre y precio de la tabla productos donde el precio sea mayor que 15. A la derecha podemos ver una simulación animada que nos muestra cómo funciona esta consulta.

SELECT id, nombre, precio FROM productos
WHERE precio > 15;

1._

1.jpg

2._

2.jpg

3._

3.jpg

Alias

De columna

Por defecto cada columna de una consulta se etiqueta para los resultados de acuerdo al nombre del campo, se pueden reemplazar estos por otros para conseguir que los resultados de las consultas sean más legibles. Esto se consigue utilizando un alias.

Sintaxis:

SELECT campo AS alias de columna
FROM tabla;

Ejemplo 3:

Se seleccionan los salarios de todos los empleados pero denominandolos "sueldo".

SELECT salario AS sueldo
FROM empleados;

De tabla

En ocasiones los nombres de las tablas son muy largos o tenemos varias tablas en la misma consulta, por esto nos es muy cómodo dar a una tabla otro nombre. Este Alias o nuevo nombre no es permanente, sino que sólo es valido para un comando.

Sintaxis:

SELECT campos
FROM tabla AS alias
WHERE condición

Ejemplo 4:

Hacemos una consulta bautizando a la tabla empleados "e".

SELECT apellido, salario
FROM empleados AS e
WHERE e.departamento =10;

Limitar los resultados

En muchas ocasiones, cuando trabajamos con tablas algo más grandes que las que estamos empleando en el curso, necesitaremos mostrar sólo una parte de los registros para poder estudiarlo. Para lograrlo se emplea la cláusula LIMIT:

SELECT campos

LIMIT inf,regs

Donde inf es el primer registro a mostrar y regs el número de registros a devolver.

Ejemplo 5:

Seleccionar los datos de los cinco primeros empleados.

SELECT *
FROM empleados
LIMIT 0,5;

Ejemplo 6:

Seleccionar aquellos empleados que sean vendedores.

SELECT * FROM empleados
WHERE trabajo = "Vendedor";

Ejemplo 7:

Seleccionar apellido de los empleados que ganen mas de 2000 euros, que seguro que si no son el presidente están cobrando de más.

SELECT apellido
FROM empleados
WHERE salario > 2000

Ejemplo 8:

Obtener todos los datos de los empleados y, además, el salario anual a percibir por cada uno de ellos en un nuevo campo llamado SalarioAnual

SELECT *, salario * 12 as SalarioAnual
FROM empleados;

Obtener datos de varias tablas

Se nos puede dar un caso muy habitual en el que tengamos que obtener campos de distintas tablas para operar con ellos. Para este caso debemos hacer mención a las distintas tablas de donde se van a sacar los datos. En el caso de que algun campo se llame igual en ambas, utilizamos el nombre de la tabla seguido de un punto y el nombre del campo. Por ejemplo: empleados.departamento.
Sintaxis

SELECT tabla1.campo, tabla2.campo
FROM tabla1, tabla2
WHERE tabla1.campo1 = tabla2.campo2;

Más adelante veremos otra forma de obtención de datos de varias tablas mediante la cláusula JOIN.

Nota: Al unir dos tablas hay que relacionarlas con un campo común, que en estos ejemplos es departamento. Normalmente suelen ser claves extranjeras.

Ejemplo 9:

Obtener el apellido, trabajo, departamento y localidad de todos los empleados de la empresa.

SELECT apellido, trabajo, e.departamento, nombre, localidad
FROM empleados AS e, departamentos AS d
WHERE e.departamento = d.departamento;

Ejemplo 9:

Seleccionar el nombre, trabajo, departamento, localidad y salario de los empleados que tengan un salario superior a 2000 Euros.

SELECT apellido, trabajo, d.departamento, localidad, salario
FROM empleados AS e, departamentos AS d
WHERE salario > 2000 AND d.departamento = e.departamento;

Ejemplo 10:

Recuperar el nombre, descripción, precio y nombre de la categoría a la que pertenecen los productos.

SELECT p.nombre, p.descripcion, p.precio, c.nombre
FROM productos AS p, categorias AS c
WHERE p.idcategoria = c.id;

Predicado DISTINCT

Los predicados se situan entre la cláusula y los campos. El único predicado en MySQL que afecta a los resultados es DISTINCT. Se utiliza para eliminar todos los registros que contienen datos duplicados en los campos seleccionados. Si la cláusula SELECT contiene mas de un campo, la combinación de valores de todos los campos para un registro concreto tiene que ser única.

Sintaxis:

SELECT DISTINCT campos
FROM tabla
WHERE condición

Consideraciones:

  • DISTINCT ordena los resultados de forma impredecible.
  • Si se utiliza el predicado DISTINCT, solo se podrán meter en la cláusula ORDER BY (que veremos en breve) los campos listados.
  • Los campos que no tengan duplicados serán representados en la consulta.

Ejemplo 11:

Selecciona todos los trabajos de los empleados.

SELECT DISTINCT trabajo
FROM empleados;

Ejemplo 12:

Averiguar todos los números de departamentos en los que trabajan empleados (sin consultar la tabla departamentos).

SELECT DISTINCT departamento
FROM empleados;

Ordenación

Por defecto en una consulta los datos se ordenan de acuerdo al orden en que se especifiquen las filas de cada tabla, ascendente o descendente. La ordenación con la cláusula GROUP BY se puede hacer por nombre o por el número del campo.

Admite la ordenación por mas de una columna. El resultado se ordena de acuerdo a los valores de la primera. Si dos filas tienen idéntico valor en esa columna, estas se ordenan por la 2ª y así sucesivamente.

Sintaxis:

SELECT campo
FROM tabla
ORDER BY campo [DESC]

Consideraciones:

  • Se pueden ordenar expresiones, valores y nombres de campos.
  • Por defecto la ordenación es ascendente. Para hacer la ordenación descendente pondremos DESC en la cláusula Order By.
  • No utilice la cláusula Group By con campos de texto o de imagen.

Ejemplo 13:

Seleccionar los empleados y su salario ordenados por el salario y por el apellido.

SELECT apellido, salario
FROM empleados
ORDER BY salario, apellido;

Ejemplo 14:

Ver un nuevo campo llamado "pvp de 10 unidades" que recoja los precios de los productos por 10 Uds y ordenado el resultado por este nuevo campo.

Nota: Si el alias de una nueva columna tiene espacios, este alias se pone entre comillas dobles o simples.

SELECT id as código, precio*10 as "pvp de 10 unidades"
FROM productos
ORDER BY "pvp de 10 unidades";

Ejemplo 15:

Ordena a los empleados segun su código.

SELECT codigo, apellido
FROM empleados
ORDER BY codigo

Operadores

A lo largo de este capítulo veremos diversos tipos de operadores: lógicos, aritméticos, de comparación, etc..

El operador más básico y común a todos los tipos de expresiones es el paréntesis. Se emplean para forzar el orden de evaluación en una expresión.

Ejemplo 16:

Primero, sin paréntesis. Devuelve 7 porque se evalúa antes la multiplicación que la suma.

SELECT 1+2*3;

Ejemplo 17:

Ahora, con paréntesis. Devuelve 9 porque hemos alterado el orden de evaluación.

SELECT (1+2)*3;

Nota: MySQL permite emplear consultas SELECT sin FROM, lo que permite evaluar expresiones como hemos hecho en esta consulta.

Lógicos

Los operadores lógicos se utilizan para conectar condiciones de búsqueda en instrucciones WHERE. Los operadores lógicos sirven para combinar predicados, haciendo que el resultado de las consultas sea más ajustado.

NOT sirve para negar la expresión que le sigue. En las consultas indica lo contrario a la selección que hacemos.

Ejemplo 18:

Seleccionar todos los campos de la tabla productos donde el campo precio no tenga valores superiores a 15.

SELECT *
FROM productos
WHERE NOT (precio > 15);

AND es el Y lógico. Sirve para unir dos condiciones que tienen que cumplirse. La consulta devolverá los valores de los campos que cumplan las dos condiciones, condición 1 Y condición 2.

Ejemplo 19:

Seleccionar todos los campos de la tabla productos donde el campo precio sea igual a 4 y la categoría sea la 1.

SELECT *
FROM productos
WHERE precio = 4
AND idcategoria = 1;

OR es el O lógico. La consulta devuelve los valores de aquellas tuplas que cumplen una condición u otra, condición1 O condición2.

Ejemplo 20:

Seleccionar todos los campos de la tabla productos donde el campo precio sea igual a 15 o a 19.

SELECT *
FROM productos
WHERE precio = 15
OR precio = 19;

  • Cuando tengamos mas de dos predicados es conveniente utilizar paréntesis para agrupar expresiones y hacer que las consultas sean más legibles.
  • El orden de evaluación de estos operadores es NOT, AND y OR.
  • Cuando los predicados son del mismo nivel, el orden de preferencia será de izquierda y derecha.

Ejemplo 21:

Seleccionar el apellido y el departamento de los empleados que no sean del departamento 10.

SELECT apellido, departamento
FROM empleados
WHERE NOT (departamento = 10);

Ejemplo 22:

Seleccionar el apellido de los empleados que sean vendedores y ganen mas de 1500 euros

SELECT apellido
FROM empleados
WHERE trabajo = "Vendedor" AND salario > 1500;

Ejemplo 23:

Seleccionar el apellido de los empleados que sean administrativos o trabajen en el departamento 30

SELECT apellido
FROM empleados
WHERE trabajo = "Administrativo" OR departamento = 30;

Aritméticos

Sirven para efectuar operaciones entre campos o campos con variables.

Operador Significado
+ Suma
- Resta
* Multiplicación
/ División
% Módulo, es decir, el resto de una división

Ejemplo 24:

Seleccionar aquellos empleados que no trabajen en el departamento 30 sin emplear NOT.

SELECT *
FROM empleados
WHERE departamento <> 30;

De Comparación

Sirven para comparar campos con otros campos o con variables.

Operador Significado
< Menor que
> Mayor que
<> ó != Distinto de
<= Menor igual que
>= Mayor igual que
= Igual que

Ejemplo 25:

Seleccionar los empleados que hayan entrado en la empresa antes del 1 de Enero de 1982.

SELECT *
FROM empleados
WHERE fechaingreso < '1982/01/01';

LIKE

El operador LIKE sirve para buscar cadenas de caracteres que contengan una porción de texto determinada, utilizando caracteres comodín. Estos caracteres se emplean como sustitutos de caracteres reales.

Comodín Significado
% Cualquier N° de caracteres
_ Un carácter solo
  • El operador LIKE sólo puede ser empleado con datos numéricos y de carácter.
  • Para realizar una comparación exacta es más rápido emplear un operador de comparación en lugar de LIKE.
  • Hay que tener en cuenta los espacios en blanco, ya que estos son significativos.
  • No distingue entre mayúsculas y minúsculas.
  • Si deseamos buscar los caracteres de los comodines deberemos ponerles antes el caracter de escape \. Es decir, deberemos poner \% y \_.

Ejemplo 26:

Buscar los productos que en la descripción indiquen que son obras de Michael Fende.

SELECT *
FROM productos
WHERE descripcion LIKE '%Michael Fende%';

Ejemplo 27:

Seleccionar los productos de la marca Coca Mola.

SELECT *
FROM productos
WHERE descripcion LIKE '%Coca Mola%';

Ejemplo 28:

Seleccionar los datos de los empleados cuyo apellido empiece por A

SELECT *
FROM empleados
WHERE apellido LIKE "a%";

Intervalos (BETWEEN)

El operador BETWEEN sirve para recuperar campos que están dentro de un rango de valores entre dos límites especificados.

Sintaxis:

BETWEEN limite1 AND limite2

Consideraciones:

  • Utiliza el operador BETWEEN con la palabra reservada NOT (NOT BETWEEN) para recuperar campos que no están dentro del intervalo.
  • Utiliza el operador BETWEEN en vez de un predicado con un operador lógico AND con dos operadores de comparación

En realidad, BETWEEN no hace nada que no se puede hacer igual con operadores de comparación, pero resulta más corto y legible.

Ejemplo 29:

Ver los productos que tengan un precio entre 5 y 10 euros.

SELECT * FROM productos
WHERE precio BETWEEN 5 AND 10;

Ejemplo 30:

Seleccionar los datos de los empleados cuyo salario esté entre 2000 y 3000 euros.

SELECT *
FROM empleados
WHERE salario BETWEEN 2000 AND 3000;

Tambien se puede hacer de esta otra forma:

SELECT *
FROM empleados
WHERE salario >= 2000 AND salario <= 3000;

Listas de Comparación (IN)

El operador IN sirve para ver si el valor de un campo esta dentro de una lista.

Consideraciones:

  • No deje valores NULL en la lista ya que al hacer comparaciones nos puede dar resultados incorrectos.
  • A veces son más rápidas las consultas que utilizan los operadores = y OR para realizar las comparaciones.
  • Si al operador IN se le incluye la palabra reservada NOT (NOT IN) hará lo contrario, seleccionando los campos que no están dentro de la lista.

Ejemplo 31:

Ver los productos que tengan identificador 1 o 2.

SELECT *
FROM productos
WHERE id IN (1,2);

Ejemplo 32:

Seleccionar los empleados que no se apelliden King ni Turner, porque nos gustan los apellidos españoles.

SELECT *
FROM empleados
WHERE apellido NOT IN ('King', 'Turner');

Ejemplo 33:

De entre los apellidos Sánchez, Almendro y Santos, ver cuales tienen los empleados.

SELECT apellido
FROM empleados
WHERE apellido IN ("Sanchez", "Almendro", "Santos");

Valores Desconocidos (IS NULL)

Al crear una base de datos, a veces, se dejan campos vacíos dejando el valor nulo. Con el operador IS NULL seleccionaremos estos registros, donde el valor del campo seleccionado es nulo.

Consideraciones:

  • Al crear las tablas de las bases de datos es conveniente considerar si los campos van a aceptar valores nulos
  • Los valores nulos crean problemas a la hora de hacer comparaciones.
  • El operador IS NOT NULL hará lo contrario; es decir, recuperará los campos cuyos valores no son nulos.

Ejemplo 34:

Selecciona los empleados con jefe.

SELECT *
FROM empleados
WHERE depende IS NULL;

Ejemplo 35:

Selecciona los empleados sin jefe.

SELECT *
FROM empleados
WHERE depende IS NOT NULL;

Ejemplo 36:

Seleccionar los datos de los empleados que tienen comisión y no es 0

SELECT *
FROM empleados
WHERE comision IS NOT NULL AND comision <> 0;

Funciones escalares

Las funciones escalares son aquellas que operan sobre un único valor y devuelven, a su vez, un único valor. Las dividiremos en tres categorías, dependiendo de los datos sobre los que actúen:

  • Funciones de fechas
  • Funciones de cadenas
  • Funciones matemáticas

Hay que tener en cuenta que estas funciones son las que más cambian entre diferentes gestores de bases de datos. Posiblemente no puedas emplear las funciones que vamos a estudiar en otro gestor que no sea MySQL. Además, veremos sólo las más útiles.

Estas funciones trabajan con fechas. Se pueden dividir en dos grandes grupos, dependiendo de si el valor que devuelven es de tipo fecha, como en las siguientes:

  • CURDATE()
  • CURTIME()
  • NOW()
  • DATE_ADD()
  • DATE_SUB()

Si devuelven números obtenidos a partir de un campo de tipo fecha:

  • WEEKDAY()
  • DAYOFMONTH()
  • MONTH()
  • YEAR()
  • HOUR()
  • MINUTE()
  • SECOND()

También existe una función DATE_FORMAT que devuelve una cadena. Vamos ahora a estudiar la utilidad de cada una de ellas.

Estas funciones sirven para obtener la fecha actual. Esta fecha la obtiene del reloj de nuestro ordenador, de modo que debemos recordar tenerlo en día y hora si queremos emplearlas. La diferencia entre ellas está en los datos concretos que devuelven:

  • CURDATE() devuelve sólo la fecha.
  • CURTIME() devuelve sólo la hora.
  • NOW() devuelve tanto la fecha como la hora.

Ejemplo 37:

Seleccionar los datos de los empleados que hayan empezado hoy mismo a trabajar.

SELECT *
FROM empleados
WHERE fechaingreso=CURDATE();

Ejemplo 38:

Averigua la fecha y la hora actual.

SELECT NOW();

Las funciones DAYOFMONTH, MONTH y YEAR sirven para obtener el día, el mes y el año de una fecha dada como parámetro. WEEKOFDAY, en cambio, devuelve el día de la semana (1=lunes, 2=martes, etc.). La sintaxis es:

DAYOFMONTH (fecha)
WEEKDAY (fecha)
MONTH (fecha)
YEAR (fecha)

Ejemplo 39:

Seleccionar los datos de los empleados que hayan empezado a trabajar el día 1 de cualquier mes.

SELECT *
FROM empleados
WHERE DAYOFMONTH(fechaingreso)=1;

Ejemplo 40:

Seleccionar los datos de los empleados que hayan empezado a trabajar en miércoles.

SELECT *
FROM empleados
WHERE WEEKDAY(fechaingreso)=3;

Ejemplo 41:

Seleccionar los datos de los empleados que hayan empezado a trabajar cualquier día del mes de febrero.

SELECT *
FROM empleados
WHERE MONTH(fechaingreso)=2;

Ejemplo 42:

Seleccionar los datos de los empleados que hayan empezado a trabajar en 1982.

SELECT *
FROM empleados
WHERE YEAR(fechaingreso)=1982;

Las funciones HOUR, MINUTE y SECOND sirven para obtener la hora, los minutos y los segundos de una fecha dada como parámetro.

Sintaxis:

HOUR (fecha)
MINUTE (fecha)
SECOND (fecha)

Ejemplo 43:

Seleccionar la hora, los minutos y los segundos de la hora actual.

SELECT HOUR(NOW()) AS hora, MINUTE(NOW()) AS minuto, SECOND(NOW()) AS segundos;

Las funciones DATE_ADD y DATE_SUB suman o restan un intervalo a una fecha. Se puede utilizar alternativamente una sintaxis alternativa más intuitiva:

DATE_ADD (fecha, INTERVAL intervalo)
fecha + INTERVAL intervalo
DATE_SUB (fecha, INTERVAL intervalo)
fecha - INTERVAL intervalo

El intervalo tiene el formato numero tipo donde tipo puede ser YEAR, MONTH, DAY, HOUR, MINUTE o SECOND.

Ejemplo 44:

Seleccionar los datos del empleado apellidado Fraga añadiendo un campo llamado fecha de jubilación, que cumplirá a los 25 años de entrar en la empresa.

SELECT *, fechaingreso + INTERVAL 25 YEAR AS "Fecha de jubilación"
FROM empleados
WHERE apellido='Fraga';

La función DATE_FORMAT devuelve una cadena con la fecha pasada como parámetro escrita según el formato descrito por su segundo parámetro. Ese formato está formado de caracteres normales y una serie de caracteres especiales o especificadores que tienen un significado especial y cambiarán según la fecha que estemos tratando.

DATE_FORMAT (fecha, formato)

En la tabla de la derecha tenemos algunos de los especificadores más utilizados.

Ejemplo 45:

Seleccionar la fecha de ingreso de los empleados en formato día/mes/año.

SELECT
DATE_FORMAT(fechaingreso, "%d/%m/%Y")
AS fecha
FROM empleados;

Especificador Significado
%Y Año, numérico, 4 dígitos
%y Año, numérico, 2 dígitos
%d Día del mes, numérico (00..31)
%e Día del mes, numérico (0..31)
%m Mes, numérico (00..12)
%c Mes, numérico (0..12)
%H Hora (00..23)
%k Hora (0..23)
%h Hora (01..12)
%l Hora (1..12)
%i Minutos, numérico (00..59)
%r Hora completa, 12 horas (hh:mm:ss [AP]M)
%T Hora completa, 24 horas (hh:mm:ss)
%s Segundos (00..59)
%p AM o PM
%% El carácter %

Estas funciones trabajan con cadenas. Normalmente devuelven una cadena tras hacerle diversas perrerías, como por ejemplo quitarles espacios en blanco:

  • LTRIM (x) elimina los espacios en blanco a la izquierda del primer carácter que no sea un espacio.
  • RTRIM (x) elimina los espacios en blanco al final de la cadena.
  • TRIM (x) elimina los espacios en blanco tan al principio como al final de la cadena.

Ejemplo 45:

Seleccionar los apellidos de los empleados quitando los espacios de la izquierda, de la derecha y quitando todos los espacios.

SELECT LTRIM(apellido), RTRIM(apellido),
TRIM(apellido)
FROM empleados;

Hay un par de funciones para convertir a mayúsculas o minúsculas:

  • UPPER (x) (o UCASE) convierte x a mayúsculas.
  • LOWER (x) (o LCASE) convierte x a mayúsculas.

Ejemplo 46:

Seleccionar los apellidos de los empleados poniéndolos en mayúsculas y en minúsculas.

SELECT UCASE(apellido), LCASE(apellido)
FROM empleados;

La función LENGTH (x) devuelve el número de caracteres de x.

Ejemplo 47:

Seleccionar el apellido y la longitud del mismo.

SELECT apellido, LENGTH(apellido) AS "Tamaño del… apellido"
FROM empleados;

Las funciones CONCAT y CONCAT_WS devuelven una cadena que resulta de la concatenación de todas las que se pasan como parámetro. La diferencia entre ambos es que el primer parámetro pasado a CONCAT_WS se toma como separador de cadenas, insertándose entre ellas.

Sintaxis:

CONCAT (cadena1, cadena2,…)

CONCAT_WS (separador, cadena1, cadena2,…)

Averiguar los códigos de la tarjeta de los empleados. Estos códigos se obtienen a partir del código del empleado seguido de su apellido en mayúsculas.

SELECT CONCAT(codigo, UPPER(apellido)) AS tarjeta
FROM empleados;

Ejemplo 48:

Seleccionar en un sólo campo el nombre y la descripción de los productos separados por una coma.

SELECT CONCAT_WS(", ", nombre, descripcion) AS "nombre completo"
FROM productos;

Hay tres funciones para extraer un fragmento de una cadena:

  • LEFT(cadena, x) devuelve los x primeros caracteres de la cadena.
  • RIGHT(cadena, x) devuelve los x últimos caracteres de la cadena.
  • SUBSTRING(cadena, pos[, x]) devuelve x caracteres de la cadena situados a partir del carácter número pos. En MySQL el primer carácter tiene el número 1, y no 0, como en muchos lenguajes de programación. Si no se especifica x coge todos los caracteres hasta el final de la cadena. También se puede emplear MID como sinónimo, aunque en ese caso deberemos indicar x obligatoriamente..

Ejemplo 49:

Extrae cuatro caracteres del apellido de los empleados.

SELECT LEFT(apellido,4), RIGHT(apellido,4),
MID(apellido,2,4)
FROM empleados;

LOCATE(subcadena, cadena[, pos]) devuelve la posición de la primera ocurrencia de subcadena dentro de cadena. Si se especifica un tercer parámetro pos se empieza a buscar a partir de la posición indicada por él.

REPLACE(cadena, buscada, nueva) reemplaza todas las ocurrencias de buscada dentro de cadena y las cambia por nueva.

Ejemplo 50:

Añade más uves dobles a las tres uves dobles.

SELECT REPLACE('www.mysql.com', 'w', 'Ww');

Ejemplo 51:

Seleccionar el apellido y el trabajo de los empleados poniendo la primera letra de su labor en mayúsculas.

SELECT apellido, CONCAT(LEFT(UPPER(trabajo), 1), SUBSTRING(trabajo, 2)) AS empleo
FROM empleados;

Estas funciones trabajan con datos numéricos. No obstante, las funciones numéricas más utilizadas no son escalares sino las agregadas que veremos en el próximo capítulo.

MySQL dispone de un par de funciones relacionadas con el signo de un número:

  • ABS() devuelve el valor absoluto de un número, es decir, que si el número que recibe como parámetro es positivo lo deja tal cual, pero si es negativo, le cambia el signo.
  • SIGN() devuelve el signo sin valor. Es decir, devuelve 1 si el número es positivo, -1 si es negativo y 0 si es cero.

Podemos concluir que ABS(x)*SIGN(x)=x, si nos gustan las matemáticas… También tenemos a nuestra disposición algunas funciones de exponenciación.

  • POW(x,y) devuelve x elevado a y
  • EXP(x) devuelve e elevado a x
  • LN(x) devuelve el logaritmo natural (es decir, en base e) de x.
  • LOG(b,x) devuelve el logaritmo en base b de x.

El número e, recordemoslo, es aproximadamente 2'71.

Hay dos funciones para convertir ángulos:

  • DEGREES(x) devuelve el valor x, convertido de radianes a grados.
  • RADIANS(x) devuelve el valor x, convertido de grados a radianes.

Por último veremos otras tres funciones más:

  • PI() devuelve el valor del número PI. Muestra por defecto 6 decimales, pero se guarda internamente como un número real en doble precisión.
  • RAND([x]) devuelve un número aleatorio situado entre 0 y 1. Si se facilita un número como parámetro, se emplea éste como semilla.
  • SQRT(x) devuelve la raíz cuadrada de x

Ejemplo 52:

Devuelve PI con diferente número de decimales.

SELECT PI(), PI()+0.000000000000000000;

MySQL dispone de tres funciones que realizan la labor de redondeo de un número real. Son éstas:

  • ROUND(x[,d]): Redondea al entero más cercano. d indica el número de decimales que deseamos mantener, por defecto 0.
  • TRUNCATE(x,d): Elimina la parte decimal. En este caso, d es obligatorio y puede ser negativo, en cuyo caso pondrá ceros en los enteros.

Ejemplo 53:

Este ejemplo nos devolverá 100.

SELECT TRUNCATE(122,-2);

  • FLOOR(x): Redondea al entero más bajo
  • CEILING(x): Redondea al entero más alto

Ejemplo 54:

Este ejemplo nos permite observar el distinto comportamiento de cada función de redondeo ante distintos datos, positivos y negativos y cercanos bien al entero más pequeño o al más grande.

SELECT
ROUND(3.4), TRUNCATE(3.4,0), FLOOR(3.4), CEILING(3.4),
ROUND(-3.4), TRUNCATE(-3.4,0), FLOOR(-3.4), CEILING(-3.4),
ROUND(3.6), TRUNCATE(3.6,0), FLOOR(3.6), CEILING(3.6),
ROUND(-3.6), TRUNCATE(-3.6,0), FLOOR(-3.6), CEILING(-3.6);

La siguiente tabla muestra esas diferencias con ejemplos:

3.2 3.8 -3.2 -3.8
ROUND 3 4 -4 -3
TRUNCATE 3 3 -3 -3
CEILING 3 4 -3 -3
FLOOR 3 3 -4 -3

La trigonometría es la rama de las matemáticas que estudia las relaciones entre los lados y los ángulos de los triángulos. Las funciones trigonométricas expresan relaciones entre esos lados. Por ejemplo, dado un triángulo rectángulo (es decir, con un ángulo recto) como el de la figura, se definen las siguientes funciones:

  • SIN() (seno) es igual a a/c
  • COS() (coseno) es igual a b/c

Ambas reciben como parámetro el ángulo , expresado en radianes.

trigonometria.gif

La función tangente (TAN()) es un poco más difícil de comprender. Supongamos que tomamos el punto A del triángulo anterior como centro de un círculo que deba pasar por el punto B. Nos saldría algo parecido a la figura de la izquierda. Pues la tangente será la línea roja (equivalente a a/b).

Por último, tenemos las funciones inversa, la arcotangente (ATAN()), el arcoseno (ASIN()) y el arcocoseno (ACOS()). Estas funciones reciben como parámetro un número y devuelven el ángulo necesario para que la función original (TAN(ángulo) para la arcotangente) sea igual al número recibido como parámetro.

tangente.gif

Ejemplo 55:

Con este ejemplo podemos ver como realmente ATAN es la inversa de TAN.

SELECT salario, TAN(ATAN(salario)) FROM empleados;

« MySQL 4 | Mantenimiento y consulta de datos

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License