Está en la página 1de 5

Aprendiendo SQL con PostgreSQL

1 - Aprendiendo SQL con PostgreSQL


La base de datos es el corazn de toda empresa, en ella se almacena y se gestiona toda la
informacin que se necesita para operar y crecer. Las (buenas) bases de datos se manejan a travs
de SQL (Standar Query Lenguage) que es un conjunto de comandos a travs de los cuales podemos
insertar, borrar y editar la informacin de la base de datos adems de hacer consultas (queries)
sobre la informacin contenida. PostgreSQL (PgSQL) es un excelente y veloz gestor de base de
datos de cdigo abierto que posee caractersticas avanzadas como manejo de concurrencia,
procedimientos almacenados e integridad referencial. Como en muchos otros casos en el mundo del
software libre, uno se sorprende de que algo tan bueno como PostgreSQL pueda ser descargado y
usado sin pagar nada.
2 - Para instalar PostgreSQL
# apt-get install postgresql
Al instalar PgSQL con apt-get tambin se instalar psql, el cliente de PostgreSQL, adems se aadir
al sistema el usuario postgres. Este usuario ser el dueo de la base de datos pues por seguridad no
puede ser el root. Asignemos un nuevo password a este usuario con el comando:
# passwd postgres
Ahora cambimonos a este usuario:
# su postgres
3 - Crearemos una nueva base de datos
$createdb dbmiempresa
Ver el mensaje CREATE DATABASE. Una vez que hemos creado la base de datos podemos
acceder a ella con el cliente de PgSQL :
$psql dbmiempresa
Al acceder a la base de datos ver el mensaje de bienvenida de PgSQL, un prompt con el
nombre de la base de datos en la que se encuentra, seguido de un signo de igual y un sostenido:
Si desea ejecutar comandos de Linux dentro de psql, utilice \! [comando]. Para salir de psql
slo escriba \q y pulse enter.
4 - Tablas y campos
Como cualquier otra base de datos, PGSQL guarda los datos en tablas. Si usted ha usado
una hoja de clculo como Excel u OpenCalc usted ya posee el concepto de tabla: una serie de
columnas y renglones en donde las intersecciones son llamadas celdas. De hecho, una hoja
de clculo puede considerarse un tipo de base de datos. La diferencia principal con una
verdadera base de datos radica en que cada columna guarda un tipo de valor especfico
(nmeros, decimales, fechas, alfanumricos, ) y que en lugar de celdas, el lugar donde se
guardan los datos son llamados campos. Por otra parte, a los renglones se les llama
registros.
De este modo, para crear una tabla es necesario definir el tipo de informacin que se
almacenara en cada columna. PgSQL posee varios tipos de datos, los ms usados son:
VARCHAR(n) Almacena cadena de caracteres de longitud variable, de longitud mxima n.
CHAR(n). Almacena cadena de caracteres de longitud fija, de longitud n.
INTEGER. Almacena nmeros enteros como 2,33,107,15228, etc.
NUMERIC. Almacena nmeros enteros y decimales.
DATE, almacena fechas.
FLOAT: numrico con signo de doble palabra y coma flotante.
TEXT. Guarda textos largos.
SERIAL. Crea una secuencia y la asigna a una columna como llave de la tabla.
Para crear una tabla se usa el comando CREATE TABLE nombre_de_tabla. Por ejemplo, vamos a
crear la tabla empleados. Corte y pegue las siguientes lineas :
CREATE TABLE empleados (
id serial, --Indice de la tabla
nombre varchar(50), --nombre del empleado
rfc varchar(20) UNIQUE, --registro de hacienda del empleado
fecnac date, --fecha de nacimiento del empleado
sucursal varchar(30), --sucursal donde labora
sueldo money NOT NULL --Sueldo
);
SQL acepta comentarios, simplemente escrbalos despus de un doble guin (--). Ver un mensaje
indicando que se ha creado una tabla y una secuencia para el campo id.
Al hacer uso de psql debemos concluir los comandos SQL con un punto y coma (;) de otro modo,
si slo damos enter, el comando no se ejecutar y el prompt cambiar de un signo de igual(=) a un
guin, indicando que psql est en espera del punto y la coma para ejecutar el comando SQL. Por
otra parte, si abre un parntesis [(] y da enter sin cerrarlo, el prompt de psql mostrar un parntesis
de cierre indicando que debe cerrarlo.
Por convencin (no slo en PostgreSQL sino en todas las bases de datos) se usan las
MAYSCULAS para escribir las palabras SQL en las sentencias, mientras que el nombre de los
campos y las tablas se escriben en minsculas, por ejemplo:
SELECT nombre, fecha FROM ventas;
Algunos diseadores recomiendan nombrar a los campos de una tabla con el formato
nbd_ntb_campo. Donde nbd es el nombre de la base de datos y ntb es el nombre de la tabla. Yo
encuentro particularmente fastidioso usar este sistema de nombrado sobre todo en los queries de
varias tablas. Sin embargo, es una buena practica hacerlo si usted esta trabajando con varias
personas en un proyecto y desea evitar confusiones.
Dado que usamos el tipo serial al crear la columna id, se crear una secuencia para esta
columna. El nombre de las secuencias se crea conjuntando el nombre de la tabla, mas el nombre de
la columna ms el postfijo seq. De modo que en este caso la secuencia se llamar
empleados_id_seq. Ya que hemos creado la tabla, teclearemos el comando \dt
dbmiempresa=# \dt;
Este comando dt (describe tables) muestra las tablas (tambin llamadas relaciones) de la base
de datos as como el dueo de la tabla (el usuario postgres). En este caso slo veremos una tabla, la
recin creada empleados. Para ver la descripcin de una tabla especfica utilice \d tabla. Por
ejemplo:
De esta manera usted puede recuperar los detalles de una tabla, como el tipo de cada campo. Por
otra parte el comando \ds (describe sequences) muestra las secuencias que existen en la BD.
Note, adems que al crear la columna rfc aadimos la indicacin UNIQUE que indica que los
valores listados en esa columna deben ser nicos, pues dos empleados no pueden tener el mismo
rfc. La indicacin NOT NULL en la columna sueldo indica que al insertar un registro (o rengln) ese
campo no puede quedar vaco y forzosamente debe tener un valor.
Ahora insertemos algunos registros a nuestra tabla, para ello usamos el comando INSERT
INTO, el cual posee el siguiente formato:
INSERT INTO tabla (columna1, columna2) VALUES ('valor uno',
'valor dos');
Corte y pegue las siguientes lneas:
INSERT INTO empleados (id, nombre,rfc, fecnac, sucursal, sueldo) VALUES
(NEXTVAL('empleados_id_seq'), 'Mario Lopez', 'MLG598777','11-06-1977', 'Merida', '9800.00');
INSERT INTO empleados (id, nombre,rfc, fecnac, sucursal, sueldo) VALUES
(NEXTVAL('empleados_id_seq'), 'Jorge Marles', 'MLG1545487','18-07-1969', 'Chiapas',
'14500.00');
INSERT INTO empleados (id, nombre,rfc, fecnac, sucursal, sueldo) VALUES
(NEXTVAL('empleados_id_seq'), 'Manuel Montoya', 'ERT7890','11-06-1977', 'Toluca',
'15900.00');
INSERT INTO empleados (id, nombre,rfc, fecnac, sucursal, sueldo) VALUES
(NEXTVAL('empleados_id_seq'), 'Luciano Perez', 'JKJ110777','11-06-1977', 'Guadalajara',
'1000.00');
Los valores de los campos de tipo VARCHAR, DATE y MONEY deben ir entre comillas simples
mientras los NUMERIC e INTEGER no las necesitan. Ahora que ya vio como se hace, agregue
algunos empleados usted mismo.
Como habr notado, la funcin NEXTVAL('secuencia') simplemente agrega el siguiente valor de
una secuencia a la columna id, de este modo tendremos un campo en nuestra tabla que nunca se
repetir y que (como veremos) es muy til. Observar, adems, que luego de insertar un registro
psql le devolver el mensaje INSERT 1 que indica que el registro ha sido agregado con xito.
Ahora veamos nuestros registros.
5 - Queries simples
El querie o consulta ms simple es "SELECT * FROM tabla". En nuestro caso:
El asterisco indica que deseamos ver todas las columnas de la tabla. Podemos revisar slo
algunas columnas con:
dbmiempresa=# SELECT id, nombre FROM empleados;
Esto slo nos devolver el campo id y el nombre del empleado.
Si hemos creado campos sin la indicacin NOT NULL podemos insertar un nuevo registro
dejndolos vacos:
dbmiempresa=# INSERT INTO empleados (id, nombre,sueldo) VALUES
(NEXTVAL('empleados_id_seq'), 'Julia Sanchez','16700.98');
6 - Ordenar una consulta
Podemos ordenar el resultado de la consulta segun diferentes criterios con el parametro ORDER BY. Por
ejemplo, que ordene nuestra tabla por nombre
dbmiempresa=#SELECT * FROM empleados ORDER BY nombre;
O por el sueldo:
dbmiempresa=# SELECT * FROM empleados ORDER BY sueldo;
Podemos ordenar la tabla como ascendente o descendente, por omision el orden es ascendente ASC (de
menor a mayor):
dbmiempresa=# SELECT * FROM empleados ORDER BY sueldo DESC;
dbmiempresa=# SELECT * FROM empleados ORDER BY sueldo ASC;
Asimismo podemos limitar el numero de renglones del query con el parametro LIMIT, por ejemplo si
solo deseamos conocer a los dos empleados de mayor sueldo:
dbmiempresa=# SELECT nombre, sueldo FROM empleados ORDER BY
sueldo DESC LIMIT 2;
7 - El condicional WHERE
Si deseamos conocer al empleado cuya sucursal se encuentra en Chiapas debemos usar el
parmetro WHERE. Este parmetro indica que se deben listar slo los registros que cumplen con
una condicin especificada:
dbmiempresa=# SELECT * FROM empleados WHERE sucursal ='Chiapas';
Si deseamos conocer a los empleados cuyo sueldo es mayor a 13,000 pesos:
dbmiempresa=# SELECT * FROM empleados WHERE sueldo > '13000.00'
ORDER BY sueldo;
Si deseamos conocer a los empleados cuya sucursal es Toluca y el sueldo es igual o mayor a 10,000
pesos debemos usar AND para especificar ms de una condicin:
dbmiempresa=# SELECT * FROM empleados WHERE sueldo >= '10000.00'
AND sucursal = 'Toluca';
Se pueden colocar tantos AND como columnas tenga nuestra tabla:
dbmiempresa=# SELECT nombre, fecnac FROM empleados WHERE sueldo
>= '10000.00' AND sucursal = 'Toluca' AND id=3 AND
rfc='ERT7890';
8 - Actualizar la tabla
Para modificar los datos de un registro de la tabla usamos el comando UPDATE:
dbmiempresa=# UPDATE empleados SET sueldo ='7500.00',
rfc='YURT6734' WHERE id=4;
Para borrar el rengln de una tabla:
dbmiempresa=# DELETE FROM empleados WHERE id=5;
Ahora est claro para que creamos el campo id? Este campo nos sirve para realizar todas las
operaciones sobre una tabla.
9 - Modificar una tabla
Agregar una columna a una tabla:
dbmiempresa=# ALTER TABLE empleados ADD COLUMN contrato INTEGER;
Renombrar la columna de una tabla:
dbmiempresa=# ALTER TABLE empleados RENAME COLUMN contrato TO
tipocontra;
Eliminar una columna a una tabla:
dbmiempresa=# ALTER TABLE empleados DROP COLUMN tipocontra;
Borrar la tabla:
dbmiempresa=# DROP TABLE empleados;
Apartir de la versin 7.4 de PostgreSQL, al borrar una tabla las secuencias relacionadas con esta
tambin se borran y ya no se quedan "hurfanas".
Todos estos ejemplos que hemos visto son sobre una sola tabla, sin embargo, la verdadera
potencia de SQL se hace patente cuando se hacen consultas y reportes conjuntando varias tablas.
Un querie multitabla, largo y bien diseado nos puede dar una completa visin del departamento
de ventas o el estado del inventario. Pero eso lo veremos en una prxima entrega.

También podría gustarte