Está en la página 1de 21

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._

2._

3._

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

También podría gustarte