Listado completo de tutoriales
19 - Columnas calculadas (operadores aritméticos y de concatenación) |
Aprendimos que los operadores son símbolos que permiten realizar distintos tipos de operaciones.
Dijimos que PostgreSQL tiene 4 tipos de operadores: 1) relacionales o de comparación (los vimos), 2) lógicos (lo veremos más adelante, 3) aritméticos y 4) de concatenación.
Los operadores aritméticos permiten realizar cálculos con valores numéricos.
Son: multiplicación (*), división (/) y módulo (%) (el resto de dividir números enteros), suma (+) y resta (-).
Es posible obtener salidas en las cuales una columna sea el resultado de un cálculo y no un campo de una tabla.
Si queremos ver los títulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad from libros;
Si queremos saber el monto total en dinero de un título podemos multiplicar el precio por la cantidad por cada título, pero también podemos hacer que PostgreSQL realice el cálculo y lo incluya en una columna extra en la salida:
select titulo, precio,cantidad, precio*cantidad from libros;
Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia los siguientes cálculos:
select titulo,precio, precio-(precio*0.1) from libros;
También podemos actualizar los datos empleando operadores aritméticos:
update libros set precio=precio-(precio*0.1);
Todas las operaciones matemáticas retornan error si no se pueden ejecutar. Ejemplo:
select 5/0;
Los operadores de concatenación: permite concatenar cadenas, el más (||).
Para concatenar el título, el autor y la editorial de cada libro usamos el operador de concatenación ("||"):
select titulo||'-'||autor||'-'||editorial from libros;
Note que concatenamos además unos guiones para separar los campos.
drop table if exists libros; create table libros( codigo serial, titulo varchar(40) not null, autor varchar(20) default 'Desconocido', editorial varchar(20), precio decimal(6,2), cantidad smallint default 0, primary key (codigo) ); -- Ingresamos algunos registros: insert into libros (titulo,autor,editorial,precio) values('El aleph','Borges','Emece',25); insert into libros (titulo,autor,editorial,precio,cantidad) values('Java en 10 minutos','Mario Molina','Siglo XXI',50.40,100); insert into libros (titulo,autor,editorial,precio,cantidad) values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',15,50); -- Queremos saber el monto total en dinero de cada libro: select titulo, precio,cantidad, precio*cantidad from libros; --Queremos saber el precio de cada libro con un 10% de descuento: select titulo,precio, precio-(precio*0.1) from libros; -- Actualizamos los precios con un 10% de descuento y vemos el resultado: update libros set precio=precio-(precio*0.1); select * from libros; -- Queremos una columna con el título, el autor y la editorial de cada libro: select titulo||'-'||autor||'-'||editorial from libros;
La ejecución de este lote de comandos SQL genera una salida similar a: