Crear y modificar tablas
CREAR UNA TABLA
Una vez ya estamos dentro de Postgresql podemos crear las tablas de la base de datos:
CREATE TABLE alumno (
matrícula serial,
dni varchar (9),
nom varchar(30) not null,
sexe char (1) not null,
edat int not null,
CONSTRAINT alumno_pk PRIMARY KEY (matricula) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT alumno_uk UNIQUE (dni);
Ahora habría que crear las restricciones para el sexo y la edat, pero como ya habríamos creado los dominos solo tendríamos que especificar cada dominio.
MODIFICAR UNA TABLA
Se utiliza la sentencia ALTER TABLE:
- Add Columns
- Remove Columns
- Add Constraints
- Remove Constraints
- Charge default values
- Charge column data type
- Rename column
- Rename tables
Veamos algunos ejemplos:
ALTER TABLE perona ADD COLUMN apellido varchar (50); Añade al campo apellido a la tabla perona.
ALTER TABLE perona DROP COLUMN data_naix;
ALTER TABLE perona ADD CONSTRAINT persona_pk PRIMARY KEY (dni); Clave primaria para el campo dni.
ALTER TABLE perona DROP CONSTRAINT persona_pk; Elimina la clave primaria.
ALTER TABLE perona ALTER COLUMN name DROP SET not null; Elimina la restricción not null.
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77; Introduce el valor 7.77 por defecto.
ALTER TABLE perona RENAME TO persona;
ALTER TABLE persona RENAME COLUMN name TO nombre;
ALTER TABLE persona ALTER COLUMN data_naix TYPE date;
ALTER TABLE perona ADD CONSTRAINT name SET NOT NULL; (Cambia en la tabla persona el atributo name para que sea not null)
Creación de tablas con consultas
También podemos crear una tabla aprovechando los datos de una consulta.
CREATE TABLE depts AS SELECT d.nom as “Departamento”, count(e.id_empleado) AS “Nº de empleados”
FROM departaments d, empleados e
WHERE d.id_dept=e.id_dept
GROUP BY 1;
Y obtenemos una tabla con el nombre de departamento y los empleados que le pertenecen.
Actualizar datos, incrementar, borrar, etc.
También podemos actualizar datos, borrar o eliminar:
UPDATE departamentos SET idcap = (SELECT idempleado
FROM empleados
WHERE name LIKE ‘pepe’
AND lastname LIKE ‘juan’)
WHERE nom_dept LIKE ‘Planchado de Vapor';
Con DELETE nombre_tabla y realizando una consulta podemos eliminar un registro o varios.