Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduccin.
Una 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.
Una vez que hemos creado la base de datos podemos acceder a ella con el cliente de PgSQL, escribiendo el comando :
$psqlempresa
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 (o gato):
Bienvenidoapsql8.3.1,laterminalinteractivadePostgreSQL. Digite:\copyrightparaverlostrminosdedistribucin \hparaayudaderdenesSQL \?paraayudaderdenespsql \gopuntoycoma(;)paraejecutarlaconsulta \qparasalir empresa=#
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, etc.) 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 o tuplas. De este modo, para crear una tabla es necesario definir el tipo de informacin que se almacenar en cada columna. PgSQL posee varios tipos de datos, los ms usados son:
VARCHAR(n) Almacena cadenas de caracteres de longitud variable, de longitud mxima n. CHAR(n). Almacena cadenas de caracteres de longitud fija, de longitud n. INTEGER. Almacena nmeros enteros como 2,33,107,15228, etc. NUMERIC. Almacena nmeros enteros y decimales. FLOAT: Almacena nmeros enteros y decimales de doble palabra. DATE, Almacena fechas. 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. Copie las siguientes lineas en psql, tomando en cuenta que los espacios no son necesarios, solo se escriben para dar mayor claridad (Nota: Obviamente no se escribe empresa=#, ya que este es el prompt de psql):
empresa=#CREATETABLEempleados( empresa(#idserial,Indicedelatabla empresa(#nombrevarchar(50),nombredelempleado empresa(#rfcchar(13)UNIQUE,registrodehaciendadelempleado empresa(#fecha_nacdate,fechadenacimientodelempleado empresa(#sucursalvarchar(30),sucursaldondelabora empresa(#sueldonumericNOTNULLSueldo empresa(#);
Al ejecutar la consulta anterior ver un mensaje indicando que se ha creado una tabla, una secuencia para el campo id y un ndice para el campo rfc. Al hacer uso de psql debemos finalizar los comandos con un punto y coma (;) de otro modo, si slo damos enter, el comando no se ejecutar y el prompt cambiar a empresa(#, indicando que psql est en espera de un parntesis que cierra y del punto coma para ejecutar el comando SQL. 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:
empresa=#SELECT*FROMempleados; id|nombre|rfc|fecnac|sucursal|sueldo +++++ (0filas)
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 prctica 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, ms 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 para visualizarla:
empresa=#\dt; Listadoderelaciones Schema|Nombre|Tipo|Dueo +++ public|empleados|tabla|postgres (1fila)
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 vemos una tabla, la recin creada empleados. Para ver la descripcin de una tabla especfica utilice \d nombre_de_tabla. Por ejemplo:
empresa=#\dempleados; Tablapublic.empleados Columna|Tipo|Modificadores ++ id|integer|notnulldefaultnextval nombre|charactervarying(50)| rfc|charactervarying(20)| fecnac|date| sucursal|charactervarying(30)| sueldo|money|notnull ndices: empleados_rfc_keyUNIQUE,btree(rfc)
De esta manera usted puede recuperar los detalles de una tabla, como el tipo de cada campo. 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. Para visualizar las secuencias escribimos \ds (describe sequences) y para los ndices \di (describe indexes). Ahora insertemos algunos registros a nuestra tabla, para ello usamos el comando INSERT INTO, el cual posee el siguiente formato:
INSERTINTOnombre_tabla(columna1,columna2)VALUES('valoruno','valordos');
Los valores de los campos de tipo VARCHAR, DATE y MONEY deben ir entre comillas simples mientras los NUMERIC, FLOAT 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.
Queries simples
El querie o consulta ms simple es "SELECT * FROM tabla". En nuestro caso:
empresa=#select*fromempleados; id|nombre|rfc|fecha_nac|sucursal|sueldo +++++ 1|MarioLopez|MLG598777|19770611|Merida|9800 2|JorgeMarles|MLG1545487|19690718|Chiapas|14500 3|ManuelMontoya|ERT7890|19770611|Toluca|15900 4|LucianoPerez|JKJ11077|19770611|Guadalajara|1000 (4filas)
El asterisco indica que deseamos ver todas las columnas de la tabla. Podemos revisar slo algunas columnas con:
empresa=#SELECTid,nombreFROMempleados; id|nombre + 1|MarioLopez 2|JorgeMarles 3|ManuelMontoya 4|LucianoPerez (4filas)
Esto slo nos devuelve el campo id y el nombre del empleado. Si hemos creado campos sin la indicacin NOT NULL podemos insertar un nuevo registro dejndolos vacos:
empresa=#INSERTINTOempleados(id,nombre,sueldo)VALUES (NEXTVAL('empleados_id_seq'),'JuliaSanchez','16700');
O por el sueldo:
empresa=#SELECT*FROMempleadosORDERBYsueldo; id|nombre|rfc|fecnac|sucursal|sueldo +++++ 4|LucianoPerez|JKJ110777|19770611|Guadalajara|1.000,00 1|MarioLopez|MLG598777|19770611|Merida|9.800,00 2|JorgeMarles|MLG1545487|19690718|Chiapas|14.500,00 3|ManuelMontoya|ERT7890|19770611|Toluca|15.900,00 5|JuliaSanchez||||16.700,00 (5filas)
Podemos ordenar la tabla como ascendente o descendente, por omisin el orden es ascendente ASC (de menor a mayor):
empresa=#SELECT*FROMempleadosORDERBYsueldoDESC; id|nombre|rfc|fecnac|sucursal|sueldo +++++ 5|JuliaSanchez||||16.700,00 3|ManuelMontoya|ERT7890|19770611|Toluca|15.900,00 2|JorgeMarles|MLG1545487|19690718|Chiapas|14.500,00 1|MarioLopez|MLG598777|19770611|Merida|9.800,00 4|LucianoPerez|JKJ110777|19770611|Guadalajara|1.000,00 (5filas) empresa=#SELECT*FROMempleadosORDERBYsueldoASC; id|nombre|rfc|fecnac|sucursal|sueldo +++++ 4|LucianoPerez|JKJ110777|19770611|Guadalajara|1.000,00 1|MarioLopez|MLG598777|19770611|Merida|9.800,00 2|JorgeMarles|MLG1545487|19690718|Chiapas|14.500,00 3|ManuelMontoya|ERT7890|19770611|Toluca|15.900,00 5|JuliaSanchez||||16.700,00 (5filas)
Tambin podemos ordenar por ms de un columna a la vez, ejemplo (se separan los nombre de columna con comas, pero las palabras reservadas ORDER BY no se repiten):
empresa=#empresa=#SELECT*FROMempleadosORDERBYfecha_nacdesc,sueldo; id|nombre|rfc|fecha_nac|sucursal|sueldo +++++ 5|JuliaSanchez|a|||16700 4|LucianoPerez|JKJ11077|19770611|Guadalajara|1000 1|MarioLopez|MLG598777|19770611|Merida|9800 3|ManuelMontoya|ERT7890|19770611|Toluca|15900 2|JorgeMarles|MLG1545487|19690718|Chiapas|14500 (5filas)
Asimismo podemos limitar el nmero de renglones del query con el parmetro LIMIT, por ejemplo si slo deseamos conocer a los dos empleados de mayor sueldo:
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:
empresa=#SELECT*FROMempleadosWHEREsucursal='Chiapas'; id|nombre|rfc|fecnac|sucursal|sueldo +++++ 2|JorgeMarles|MLG1545487|19690718|Chiapas|14.500,00 (1fila)
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:
empresa=#SELECT*FROMempleadosWHEREsueldo>='10000'ANDsucursal='Toluca'; id|nombre|rfc|fecnac|sucursal|sueldo +++++ 3|ManuelMontoya|ERT7890|19770611|Toluca|15.900,00 (1fila)
Actualizar la tabla
Para modificar los datos de un registro de la tabla usamos el comando UPDATE:
empresa=#UPDATEempleadosSETsueldo='7500',rfc='YURT6734'WHEREid=4; UPDATE1 emplresa=#updateempleadossetrfc='ABCD1234',fecha_nac='19770205',sucursal='Pto progreso'whereid=5; UPDATE1 empresa=#updateempleadossetrfc='WXYZ4321',fecha_nac='19880915'whereid=7; UPDATE0
Ahora est claro para que creamos el campo id? Este campo nos sirve para realizar todas las operaciones sobre una tabla.
empresa=#ALTERTABLEempleadosRENAMECOLUMNcontratoTOtipo_contrato; ALTERTABLE
Nota: Cuidado con esta sentencia, borra la tabla y todo su contenido, sin preguntar nada, as que debe ejecutarse solo si estamos seguros que queremos eliminar la tabla de forma definitiva de la base de datos. 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 ms adelante.