Anda di halaman 1dari 12

Manipulación Avanzada

de datos con SQL


FILIBERTO RUIZ HERNÁNDEZ
CREATE TYPE
Define un nuevo tipo de datos base.
SINTÁXIS
◦ CREATE TYPE typename
◦ (INPUT = input_function, OUTPUT = output_function, DELIMITER = delimiter )
CREATE TYPE
Permite al usuario registrar un nuevo tipo de datos de usuario con Postgres para ser usado en la
base de datos actual. El usuario que define un tipo se convierte en propietario typename es el
nombre del nuevo tipo y debe ser único dentro de los tipos definidos para esta base de datos.
TIPOS ENUMERADOS
Los tipos enumerados son tipos de datos que comprenden un conjunto de valores estático y
ordenado. Son equivalentes a los tipos de enumeración admitidos en varios lenguajes de
programación. Un ejemplo de un tipo enum, podrían ser los días de la semana.
DECLARACIÓN DE TIPOS ENUMERADOS
◦ CREATE TYPE semana AS ENUM (‘lunes’,’martes’,’miércoles’,’jueves’,’viernes’,’sábado’,’domingo’);

Una vez creado, el tipo enum puede ser usado en la definición de tablas y funciones.
◦ CREATE TABLE actividad (nombre text, dia_semana semana);
TIPOS ENUMERADOS
INSERT INTO actividad VALUES(‘Natación’,’lunes’);
SELECT * FROM actividad WHERE dia_semana = ‘lunes’);
Nombre | dia_semana
-------------+--------------------
Natación | lunes
(1 row)
CONDICIÓN IN
PostgreSQL utiliza la condición IN para reducir la necesidad de usar multiples condiciones OR, en
una acción SELECT, INSERT, UPDATE o DELETE.
Sintáxis.
Expresion IN (Valor1, valor2, …., valor n);
Expresión = valor a evaluar
Valor1, valor2, …., valorn = Valores a probar contra la expresión
También existe su negación utilizando NOT IN
RESTRICCIONES DE ATRIBUTO Y TUPLA
Este tipo de restricción busca limitar los valores de entrada (o actualización) permitidos; con la
finalidad de evitar errores como el insertar valores negativos cuando sólo se permiten positivos
o que haya valores que deban estar entre dos limites, etc. Para llevarlo a cabo se utiliza la
palabra reservada CHECK.
EJEMPLO:
CREATE TABLE estudiante (id INT, nombre VARCHAR(45), Average INT CHECK(Average >=0 AND
Average<=100));
RESTRICCIONES DE ATRIBUTO Y TUPLA
EJEMPLO (continuación):
Para comprobar el CHECK se insertan algunos registros:
◦ INSERT INTO estudiante (12,’Alma’,20);
◦ INSERT INTO estudiante (23,’Tomas’,30);
◦ INSERT INTO estudiante (34’,Roberto’,-10);
◦ INSERT INTO estudiante (45,’Ana’,120);

Deberá arrojar errores en los registros 3 y 4, porque se deja de cumplir con la restricción de
chequeo.
◦ ERROR: new row for relation “estudiante” violates check constraint “estudiante_average_check”
Combinación de consultas multitabla
Con las variantes INNER, LEFT, RIGHT y FULL de consultas multitabla podemos obtener registros
relacionados y los registros relacionados mas los registros no relacionados en uno de los dos
lados o en ambos, como se muestran las combinaciones de los datos de dos tablas:
Consultas avanzadas SQL
UNION, INTERSECT Y EXCEPT (o MINUS).
◦ UNION. Permite unir las filas devueltas por dos instrucciones SELECT. Para ello se debe cumplir que las
columnas devueltas en ambas instrucciones coincidan en número y en tipo de datos de cada una de
ellas, ya que en caso contrario dará un error al ejecutarse.
◦ Sintáxis:
◦ SELECT Columnas FROM …
UNION [ALL]
SELECT Columnas FROM …

◦ INTERSECT. Devuelve los valores distintos devueltos por las consultas y comunes a ambas, con lo que
obtenemos una intersección (sólo los registros que están entre los resultados de ambas consultas).
◦ EXCEPT. Devuelve los valores de la primera consulta que no se encuentran en la segunda. Así podemos
averiguar qué registros están en una consulta pero no en la otra, calculando la diferencia entre dos
conjuntos de registros. Algo realmente útil en ocasiones y difícil de conseguir con instrucciones más
simples.
Consultas avanzadas SQL
CREAR UNA VISTA EN POSTGRESQL.
Ejemplo:
Se crea una tabla empleados:
◦ CREATE TABLE empelados(id_emp INTEGER NOT NULL, nombre VARCHAR(40), departamento SMALLINT NOT
NULL, fecha_contrata TIMESTAMP)
Se otorgan privilegios a la tabla
◦ Psql pruebabd bd
◦ GRANT SELECT ON
◦ Bd.empleados TO usuario;
Se crea la vista
◦ CREATE VIEW vista_dept_201
◦ AS SELECT id_emp, fecha_contrata FROM bd.empleados WHERE departamento = 201;
Funciones de agregación.
COUNT (<fila>){devuelve el total de las filas seleccionadas}
SUM(<columna<){suma los valores de una columna}
MIN(<columna>){devuelve valor mínimo columna}
MAX(<columna<){devuelve valor máximo columna}
AVG(<columna>){devuelve la mediana de la columna}
EJEMPLO 1:
◦ SELECT COUNT(*) FROM alumnos;

EJEMPLO 2:
◦ SELECT AVG(edad) FROM alumnos WHERE curso_actual = 3;