Вы находитесь на странице: 1из 56

Fundamentos de PostgreSQL

Creative Commons
Reconocimiento­No   comercial­Compartir   bajo   la   misma  
licencia 3.0
Usted es libre de:

• copiar, distribuir y reproducir públicamente la obra 

• hacer obras derivadas 
Bajo las siguientes condiciones: 

• Reconocimiento.  Debe reconocer los créditos de la obra de la manera 
especificada por el autor o el licenciante (pero no de una manera que sugiera 
que tiene su apoyo o apoyan el uso que hace de su obra). 

• No comercial. No puede utilizar esta obra para fines comerciales. 

• Compartir bajo la misma licencia. Si altera o transforma esta obra, o 
genera  una obra  derivada,  sólo  puede  distribuir  la  obra  generada  bajo una 
licencia idéntica a ésta. 
• Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la 
licencia de esta obra. 
• Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del 
titular de los derechos de autor
• Nada en esta licencia menoscaba o restringe los derechos morales del autor.

Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley 
no se ven afectados por lo anterior. 
Esto es un resumen fácilmente legible del texto legal de versión
original en Idioma Inglés (la licencia completa)
http://creativecommons.org/licenses/by-nc-sa/3.0/ec/legalcode
Índice de contenido
UNIDAD 1: INTRODUCCIÓN................................................................5
1.1. Instalando PostgreSQL 8.3 en Canaima..................................6
1.2. Conceptos Básicos de Base de Datos.....................................8
UNIDAD 2: LENGUAJE DE CONSULTA ESTRUCTURADO.....................13
2.1. Lenguaje de Definición de Datos (DDL)................................14
2.2. Lenguaje de Control de Datos (DCL).....................................16
2.3. Lenguaje de Manipulación de Datos (DML)...........................17
2.4. Lenguaje de Consulta de Datos (DQL)..................................20
2.5. Los Operadores Relacionales o de Comparación..................21
2.6. Tipos de Datos de PostgreSQL..............................................21
2.6.1. Tipos de datos Numéricos..............................................22
2.6.2. Tipos de datos de Fecha y Hora.....................................23
2.6.3. Tipos de datos de Cadena de Caracteres.......................24
UNIDAD 3: APRENDIENDO SQL CON POSTGRESQL..........................25
3.1. Creación y Eliminación de Base de Datos y Tablas...............25
3.2. Inserción de datos a una tabla..............................................30
3.3. Actualización de datos de una tabla.....................................32
3.4. Eliminación de datos de una tabla........................................33
3.5. Consulta de los registros de una tabla..................................34
3.5.1. Sentencia SELECT..........................................................34
3.5.2. Clausula OFFSET............................................................35
3.5.3. Clausula WHERE.............................................................36
3.5.4. Clausula ORDER BY........................................................37
3.5.5. Funciones agregadas.....................................................38
3.5.5.1. Función concat()......................................................38
3.5.5.2. Función sum()..........................................................39
3.5.5.3. Función avg()...........................................................39
3.5.5.4. Función max()..........................................................40
3.5.5.5. Función min()..........................................................41
3.5.5.6. Función count()........................................................41
3.5.6. Operador IN....................................................................42
3.5.7. Operador BETWEEN.......................................................43
3.5.8. Operador NOT................................................................44
3.5.9. Operador LIKE................................................................45
3.5.10. Clausula AS..................................................................46
3.5.11. Operador IS y valor NULL.............................................47
3.5.12. Operador DISTINCT......................................................48
3.5.13. Clausula GROUP BY......................................................48
3.5.14. Clausula HAVING..........................................................49
3.5.15. Consulta de los registros de mas de 1 tabla con JOIN......50
3.5.15.1. Join Cartesiano......................................................50
3.5.15.2. Inner Join o Join Natural.........................................51
3.5.15.3. Right Outer Join.....................................................52
3.5.15.4. Left Outer Join.......................................................53
3.5.16. Subconsultas................................................................54
3.5.17. Uniones........................................................................55
GLOSARIO DE TÉRMINOS.................................................................56
UNIDAD 1: INTRODUCCIÓN

PostgreSQL es un sistema de gestión de base de datos


relacional orientada a objetos de software libre, publicado bajo la
licencia BSD.

Como muchos otros proyectos open source, el desarrollo de


PostgreSQL no es manejado por una sola compañía sino que es
dirigido por una comunidad de desarrolladores y organizaciones
comerciales las cuales trabajan en su desarrollo. Dicha comunidad
es denominada el PGDG (PostgreSQL Global Development Group).

PostgreSQL ha tenido una larga evolución, la cual se inicia en 1982


con el proyecto Ingres en la Universidad de Berkeley. Este proyecto,
liderado por Michael Stonebraker, fue uno de los primeros intentos
en implementar un motor de base de datos relacional. Después de
haber trabajado un largo tiempo en Ingres y de haber tenido una
experiencia comercial con el mismo, Michael decidió volver a la
Universidad en 1985 para trabajar en un nuevo proyecto sobre la
experiencia de Ingres, dicho proyecto fue llamado post-ingres o
simplemente POSTGRES.

El proyecto post-ingres pretendía resolver los problemas con el


modelo de base de datos relacional que habían sido aclarados a
comienzos de los años 1980. El principal de estos problemas era la
incapacidad del modelo relacional de comprender "tipos", es decir,
combinaciones de datos simples que conforman una única unidad.
Actualmente estos son llamados objetos. Se esforzaron en introducir
la menor cantidad posible de funcionalidades para completar el
soporte de tipos. Estas funcionalidades incluían la habilidad de
definir tipos, pero también la habilidad de describir relaciones - las
cuales hasta ese momento eran ampliamente utilizadas pero
mantenidas completamente por el usuario. En Postgres la base de
datos comprendía las relaciones y podía obtener información de
tablas relacionadas utilizando reglas. Postgres usó muchas ideas de
Ingres pero no su código.

1.1. Instalando PostgreSQL 8.3 en Canaima

Para la instalación de PostgreSQL en las plataformas GNU/Linux


específicamente sistemas derivados de Debian, basta con hacer uso
del aptitude, a continuación se muestra la sentencia ha escribir en
consola para instalar PostgreSQL:

sudo aptitude install postgresql-8.3

La sentencia de arriba nos instalara el servidor y un cliente en modo


consola para interactuar con el servidor de PostgreSQL, luego
procederemos a cambiar la contraseña del usuario que se creo
durante la instalación con el siguiente comando:

sudo passwd postgres

Una vez echo esto nos conectamos a postgres con la siguiente


sentencia note que no nos pedirá ninguna contraseña:

sudo su postgres -c “psql -U postgres”

Luego que estemos conectados al manejador de base de datos


postgreSQL le colocaremos un password al usuario postgres de base
de datos con la siguiente sentencia:

alter role postgres with password 'mi_password';

Verifique que diga ALTER ROLE después de ejecutar la sentencia


anterior. Y luego cierre la base de datos tipeando \q.

Por ultimo configuraremos el siguiente archivo para que nos solicite


el password de base de datos al tratar de logearse:

sudo nano /etc/postgresql/8.3/main/pg_hba.conf

Y en las lineas que digan ident sameuser colocaremos md5 (es decir
remplazamos ident sameuser por md5).

Actualmente existen en el mercado aplicaciones de escritorio y web


para interactuar con base de datos PostgreSQL, tales como
phpPgAdmin para trabajarlo en ambiente Web y pgAdmin en
ambiente de escritorio, haremos la instalación de este último con la
siguiente sentencia:

sudo aptitude install pgadmin3

1.2. Conceptos Básicos de Base de Datos

A continuación veremos una serie de conceptos que usaremos de


forma implícita en todo el manual, para hacer explicación de todos
estos conceptos emplearemos como punto de descripción la
siguiente tabla.
tabla_curso
id_curso id_estudiante id_materia
1 1 1
2 1 2
3 2 1
Tabla 1

Registro o Filas

Un registro es conocido en base de datos también como fila o


tupla y representa un ítem único de datos implícitamente
estructurados en una tabla. De acuerdo a la Tabla 1 que se muestra
arriba las filas son aquellas que se muestran con fondo morado y
azul claro, en esa tabla por tanto hay 3 registros.

Campo o Columna

Un campo también denominado columna en base de datos, es la


mínima unidad de información a la que se puede acceder; un
campo o un conjunto de ellos forman un registro que fue el punto
que vimos arriba, los campos tienen atributos asociados a ellos
como lo son los tipos de datos que van a manejar como contenido y
estos pueden ser numéricos, texto, entre otros. Adicionalmente,
cada campo tiene un nombre, en la Tabla 1 que se muestra arriba
los existen 3 campos y estos tienen un fondo para describirse
facilmente de color verde turquesa.

Clave Primaria

El concepto de clave primaria se aplica a un campo o a una


combinación de campos que identifica de forma única a cada fila de
una tabla. No pueden haber dos filas o registros en una tabla que
tengan la misma clave primaria. Tampoco pueden haber campos
que son declarados con clave primaria con valores nulos.

Clave Foránea

Un campo con clave foránea, es aquel campo cuyos valores hacen


referencia a valores guardados en otra tabla cuyo campos que las
guarda ha sido definido de tipo clave primaria. En una tabla con un
campo con clave foránea los valores que va a contener si pueden
repetirse, la restricción esta en que no puede guardarse valores en
esa columna o campo que no estén definidos en la tabla donde ese
campo es clave primaria.
Índice

El índice de una base de datos es una estructura de datos que


mejora la velocidad de las operaciones, permitiendo un rápido
acceso a los registros de una tabla. Al aumentar drásticamente la
velocidad de acceso, se suelen usar sobre aquellos campos sobre
los cuales se hagan frecuentes búsquedas. Los índices se actualizan
cada vez que se modifica la columna o columnas que utiliza. Por ello
no es aconsejable usar como indices columnas en las que serán
frecuentes operaciones de escritura (INSERT, UPDATE, DELETE).

Base de datos orientada a objetos

En una base de datos orientada a objetos, la información se


representa mediante objetos como los presentes en la
programación orientada a objetos. Cuando se integra las
características de una base de datos con las de un lenguaje de
programación orientado a objetos, el resultado es un sistema gestor
de base de datos orientada a objetos (ODBMS, object database
management system). Un ODBMS hace que los objetos de la base
de datos aparezcan como objetos de un lenguaje de programación
en uno o más lenguajes de programación a los que dé soporte. Un
ODBMS extiende los lenguajes con datos persistentes de forma
transparente, control de concurrencia, recuperación de datos,
consultas asociativas y otras capacidades.

Las bases de datos orientadas a objetos se diseñan para trabajar


bien en conjunción con lenguajes de programación orientados a
objetos como Java, C#, Visual Basic.NET y C++. Los ODBMS usan
exactamente el mismo modelo que estos lenguajes de
programación.

Los ODBMS son una buena elección para aquellos sistemas que
necesitan un buen rendimiento en la manipulación de tipos de dato
complejos.

Los ODBMS proporcionan los costes de desarrollo más bajos y el


mejor rendimiento cuando se usan objetos gracias a que almacenan
objetos en disco y tienen una integración transparente con el
programa escrito en un lenguaje de programación orientado a
objetos, al almacenar exactamente el modelo de objeto usado a
nivel aplicativo, lo que reduce los costes de desarrollo y
mantenimiento.
UNIDAD 2: LENGUAJE DE CONSULTA ESTRUCTURADO

El Lenguaje de consulta estructurado SQL o “Structured Query


Language” es un lenguaje declarativo de alto nivel, que permite
interactuar con bases de datos relacionales así como también
especificar diversos tipos de operaciones en éstas. Una de sus
características es el manejo del álgebra y el cálculo relacional
permitiendo efectuar consultas con el fin de recuperar de una
manera sencilla información de interés de una base de datos, así
como también hacer cambios sobre ella.

El lenguaje de consulta SQL puede ser dividido en 4 renglones como


se muestra a continuación:

•Lenguaje de Definición de Datos (DDL): Proporciona comandos


para definir los objetos de la base de datos, (CREATE, DROP, ALTER).

•Lenguaje de Manipulación de Datos(DML): Proporciona


comandos para insertar, eliminar y modificar registros en la(s)
tabla(s), (INSERT, UPDATE, DELETE).

•Lenguaje de Control de Datos (DCL): Proporciona comandos


para manejar y controlar datos, (GRANT, REVOKE).

•Lenguaje de Consulta de Datos (DQL): Proporciona comandos


para recuperar datos desde tablas, (SELECT).
2.1. Lenguaje de Definición de Datos (DDL)

Este lenguaje como vimos es un subconjunto de SQL, y


permite definir la estructura de los datos, a continuación
describiremos cada uno de los comandos que componen a este
subconjunto:

CREATE

•Crea objetos de la base de datos (Tablas, vistas e índices) .

La sintaxis general de este comando es el siguiente:

CREATE TABLE nombre_tabla (

campo1 INTEGER,

campo2 CHAR(10) NOT NULL,

campo3 INT

);

ALTER
•Altera la estructura de una tabla.

•Modifica o agrega a la estructura de datos existente.

La sintaxis general de este comando es el siguiente:

ALTER TABLE tabla1 ADD COLUMN columna4 FLOAT;

DROP

•Elimina objetos de la base de datos.

La sintaxis general de este comando es el siguiente:

DROP TABLE nombre_tabla;

DROP VIEW nombre_vista;

DROP INDEX nombre_indice;


2.2. Lenguaje de Control de Datos (DCL)

Este subconjunto de SQL permite establecer niveles de


seguridad previniendo o garantizando el acceso a la data, a
continuación se describen los comandos que componen a este
subconjunto:

GRANT

Este comando permite o garantiza el acceso de un usuario o grupo


a un objeto de una base de datos.

La sintaxis general de este comando es el siguiente:

GRANT SELECT ON tabla1 TO USER usuario1;

GRANT SELECT ON tabla1 TO GROUP grupo1;

REVOKE

Este comando revoca o elimina el acceso de un grupo o usuario a


un objeto de la base de datos.
La sintaxis general de este comando es el siguiente:

REVOKE SELECT ON tabla1 FROM USER usuario1;

REVOKE SELECT ON tabla1 FROM GROUP grupo1;

2.3. Lenguaje de Manipulación de Datos (DML)

Este subconjunto de SQL, consta de comandos que permiten


modificar, eliminar e insertar datos de una tabla, a continuación los
comandos que componen a este subconjunto:

INSERT

Este comando es el encargado de insertar datos o registros a una


tabla.

La sintaxis general de este comando es el siguiente:

INSERT INTO nombre_tabla (columna1, columna2) VALUES


(valor1,valor2);

DELETE

Este comando es el encargado de eliminar datos o registros a una


tabla.

La sintaxis general de este comando es el siguiente:

DELETE FROM nombre_tabla ;

La sentencia de arriba no tiene una condición la cual se especifica


con la palabra reservada WHERE por ende esta borrara todas las
filas de la tabla nombre_tabla.

DELETE FROM nombre_tabla WHERE campo1 = 'valor1';

Esta última sentencia si borrara los registros que cumplan con la


condición del WHERE.
UPDATE

Este comando del subconjunto DML permite actualizar el valor de


uno o varios campos específicos de una tabla.

La sintaxis general de este comando es el siguiente:

UPDATE nombre_tabla SET campo1=valor1, campo2=valor2

La sentencia de arriba no tiene una condición la cual se especifica


con la palabra reservada WHERE por ende esta actualizara todas las
filas de la tabla nombre_tabla.

UPDATE nombre_tabla SET campo1 = 'valor1' WHERE campo2 =


'valor2';

Esta última sentencia si actualizara los registros que cumplan con la


condición del WHERE.
2.4. Lenguaje de Consulta de Datos (DQL)

Este subconjunto es el que nos permitirá consultar los datos


de una tabla según los requerimientos o necesidades. Este
subconjunto tan solo consta del comando SELECT.

La sintaxis general de este comando es el siguiente:

SELECT * FROM nombre_tabla;

La sentencia de arriba selecciona todos los datos de la tabla


nombre_tabla.

SELECT nombre_campo1, nombre_campo2,…, nombre_campon


FROM nombre_tabla;

Selecciona datos de columnas específicas de la tabla nombre_tabla.

SELECT * FROM nombre_tabla WHERE campo1 = valor1;

Esta última sentencia retorna los registros que cumplan con la


condición del WHERE.

2.5. Los Operadores Relacionales o de Comparación

Operador Significado
= Igual a
< Menor que
<= Menor o igual a
> Mayor que
>= Mayor o igual a
<> Diferente
!= Diferente

2.6. Tipos de Datos de PostgreSQL

PostgreSQL soporta un número de tipos de datos divididos en


varias categorías:

• Números de precisión arbitraria.

• Texto de largo ilimitado.

• Figuras geométricas (con una variedad de funciones


asociadas) .
• Direcciones IP (IPv4 e Ipv6).

• Bloques de direcciones estilo CIDR.

• Direcciones MAC.

• Arrays.

También soporta tipos de datos definidos por el usuario. Hacer una


explicación o mostrar todos los tipos de datos soportados en este
manejador de base de datos haría extensa la lectura y no es el
objetivo principal de este manual mostrar todos los tipos de datos,
por tanto se mostraran algunos tipos de datos. Para mayor
información en este link se muestra la documentación de todos los
tipos de datos soportados por postgreSQL
http://www.postgresql.org/docs/current/static/datatype.html.

2.6.1. Tipos de datos Numéricos

PostgreSQL soporta todos los tipos de datos SQL numéricos


estándar. Estos tipos incluyen el tipo numérico exacto INTEGER, así
como el tipo de dato aproximado FLOAT. La palabra clave INT es
sinónimo de INTEGER, adicionalmente se tiene SERIAL que es
equivalente a INTEGER y además AUTOINCREMENTAL.
A continuación una tabla con los tipos de datos numéricos
soportados por PostgreSQL:

Tipo de Campo Tamaño de Almacenamiento


smallint 2 bytes
integer 4 bytes
bigint 8 bytes
decimal Variable (Especificado por el
usuario)
numeric Variable (Especificado por el
usuario)
real 4 bytes
double precision 8 bytes
serial 4 bytes
bigserial 8 bytes

2.6.2. Tipos de datos de Fecha y Hora

Los tipos de fecha y hora para representar valores temporales son


DATETIME, DATE, TIMESTAMP, TIME, y YEAR. Cada tipo temporal
tiene un rango de valores legales, así como un valor “zero” que se
usa cuando se especifica un valor ilegal que no puede representar.
A continuación una tabla con los tipos de datos de fecha soportados
por PostgreSQL:

Tipo de Campo Tamaño de Almacenamiento


timestamp sin tiempo de zona 8 bytes
timestamp con tiempo de zona 8 bytes
date 4 bytes
time sin tiempo de zona 8 bytes
time con tiempo de zona 12 bytes
interval 12 bytes

2.6.3. Tipos de datos de Cadena de Caracteres

Los tipos de cadenas de caracteres son CHAR, VARCHAR, TEXT.

Tipo de Campo Descripción


character, varchar(n) Longitud variable con un limite
character(n), char(n) Longitud fija con un limite
text Longitud variable sin limite
UNIDAD 3: APRENDIENDO SQL CON POSTGRESQL

La mejor forma de aprender cualquier lenguaje de


programación o de consulta como es el nuestro es escribiendo
código “No se aprende a caminar sin intentar gatear”.

A lo largo de esta unidad estaremos creando una base de datos, con


sus respectivas tablas y registros asociados a medida de que se
explica cada uno de los comandos o sentencias que componen a
SQL.

Nota: Todos los puntos que se desarrollan mas adelante tienen una
continuidad así que se aconseja ir paso a paso con la lectura de
este manual.

3.1. Creación y Eliminación de Base de Datos y Tablas

Primero nos conectamos a el servidor de PostgreSQL con la


siguiente sentencia que tipearemos en consola, donde -d especifica
la base de datos -U el usuario y -h la maquina donde esta el
servidor de base de datos posgres instalado:

psql -U postgres -d base_de_datos_nombre


Si el servidor se encontrase en otra maquina nuestra sentencia
quedaria de la siguiente manera:

psql -h ip -U postgres -d base_de_datos_nombre

Luego el siguiente código que se muestra a continuación se copiara


o se tipeara en la consola donde nos logeamos a PostgreSQL. Cada
línea de código se explica a través de un comentario PostgreSQL en
donde sea necesario.

Inicio del Ejemplo 1

/*Esta linea esta es un comentario de PostgreSQL, Los símbolos en


color rojo que rodean este texto indica que esta línea es un
comentario

*/

/*Crea la base de datos fabrica*/

CREATE DATABASE fabrica;

/*Nos conectamos a la base de datos fabrica*/

\c fabrica;
/*Crea tabla cliente*/

CREATE TABLE cliente(

/*Creamos un campo de tipo entero y no puede tener valores


nulos, y se auto incrementa en 1 automáticamente*/

id_cliente SERIAL,

/*Campo de tipo texto de un máximo de 30 caracteres*/

nombre VARCHAR(30),

/*Se define al campo de arriba id_cliente como clave


primaria*/

PRIMARY KEY(id_cliente)

);

Fin del Ejemplo 1

Para consultar las bases de datos creadas en el servidor de


PostgreSQL basta con tipear en la consola la siguiente sentencia:

\l
Para consultar las tablas que existen en una base de datos
especifica primero nos conectamos a la misma con:

\c nombre_base_datos;

Luego tipeamos lo siguiente para listar las tablas de la base de


datos a la cual nos conectamos:

\dt

A continuación nos crearemos una nueva tabla en la base de datos


fabrica:

Inicio del Ejemplo 2

/*Crea tabla factura*/

CREATE TABLE factura (

/*Creamos un campo de tipo entero y no puede tener valores


nulos, y se autoincrementa en 1 automaticamente*/

id_factura SERIAL,

/*Creamos un campo de tipo entero y no puede tener valores


nulos*/

id_cliente INT NOT NULL,

/*Creamos un campo de tipo doble*/

monto FLOAT,

/*Se define al campo de arriba id_factura como clave


primaria*/

PRIMARY KEY(id_factura),

/*Se define al campo de arriba id_cliente como clave foránea


de la tabla id_cliente de la tabla cliente con REFERENCES
cliente(id_cliente) y adicionalmente indicamos con ON DELETE
CASCADE que al eliminar un registro de la tabla cliente si existiese
un registro de cliente asociado a factura se borra
automaticamente*/

FOREIGN KEY(id_cliente) REFERENCES


cliente(id_cliente) ON DELETE CASCADE

);

Fin del Ejemplo 2


Hasta ahora nos hemos creado 1 base de datos de nombre fabrica y
2 tablas de nombres cliente y factura.

3.2. Inserción de datos a una tabla

El siguiente conjunto de sentencias insertan datos a las tablas que


creamos recientemente en el punto anterior “cliente y factura”.

Inicio del Ejemplo 3

/*

Insertamos un registro a la tabla cliente, como no definimos los


campos donde se van a guardar los valores, se pasan en el orden
en que se definieron en la tabla

*/

INSERT INTO cliente VALUES (1,'Hans Bullow');

/*

Insertamos un registro a la tabla cliente, como se auto incrementa


en 1 el campo id_cliente automáticamente, se le puede pasar null
*/

INSERT INTO cliente VALUES (2,'Diana De Sousa');

/*

Insertamos un registro a la tabla cliente, como definimos los


campos a quienes se les va a dar valores se colocan los mismos en
el orden en que se definieron después de VALUES

*/

INSERT INTO cliente (nombre, id_cliente) VALUES ('Ralph


Berg', 3);

INSERT INTO cliente (id_cliente , nombre) VALUES (4,


'Willhelm Goethe');

/*Insertamos dos registros en una sola sentencia*/

INSERT INTO factura VALUES (1,3,1451),(2,3,7582);

/*

Insertamos dos registros en una sola sentencia, especificando sus


campos

*/
INSERT INTO factura (id_factura, id_cliente, monto) VALUES
(3, 1, 1452), (4, 1, 6555);

/*Insertamos más registros a la tabla factura*/

INSERT INTO factura VALUES (5, 2, 999);

INSERT INTO factura VALUES (6, 2, 2451);

INSERT INTO factura VALUES (7, 2, 14051);

INSERT INTO factura VALUES (8, 2, 11041);

Fin del Ejemplo 3

3.3. Actualización de datos de una tabla

Haciendo uso de los datos insertados anteriormente vamos a


actualizar algunos registros.

Inicio del Ejemplo 4

/*Esta sentencia actualiza el registro con id_cliente igual a 2 de la


tabla cliente, colando su nombre en Carlos*/
UPDATE cliente SET nombre = 'Carlos' WHERE id_cliente = 2;

/*Esta sentencia actualiza el registro con el id_factura igual a 2 de la


tabla factura, colando su el id_cliente igual a 3 y el monto igual a
8541*/

UPDATE factura SET id_cliente = 3, monto = 8541 WHERE


id_factura = 2;

Fin del Ejemplo 4

Recuerde que sino se coloca la clausula WHERE se actualizan todos


los registros colando a todos los registros el nombre de Carlos.

3.4. Eliminación de datos de una tabla

Inicio del Ejemplo 5

/*Esta sentencia elimina el registro con id_factura igual a 8 de la


tabla factura*/

DELETE FROM factura WHERE id_factura = 8;


/*Esta sentencia elimina el registro con un monto menor a 1000 y
con un id_cliente igual a 2 de la tabla factura*/

DELETE FROM factura WHERE monto<1000 AND


id_cliente=2;

Fin del Ejemplo 5

Si nosotros no colocamos la clausula WHERE elimina todos los


registros de la tabla factura.

3.5. Consulta de los registros de una tabla

3.5.1. Sentencia SELECT

Como vimos en unidades pasadas este sentencia se emplea para


recuperar datos de una base de datos.

Inicio del Ejemplo 6

/*Muestra todos los campos y registros de la tabla cliente*/


SELECT * FROM cliente;

/*Muestra solo los registros de el campo nombre de la tabla cliente*/

SELECT nombre FROM cliente;

/*Usted puede colocar después de el SELECT los campos que desea


mostrar separados por coma “,”*/

SELECT id_cliente, monto FROM factura;

Fin del Ejemplo 6

3.5.2. Clausula OFFSET

Con esta clausula se limita la cantidad de registros o filas que


retornara la consulta SELECT, retornando los últimos registros o filas
sin incluir los primeros registros que son especificados después del
offset, por ejemplo “offset 3” no devolverá los 3 primeros registros.

Inicio del Ejemplo 7


/*Muestra todos los campos y los 2 primeros registros de la tabla
cliente no se mostraran, debido a la restricción de offset, Usted
coloca la cantidad a mostrar*/

SELECT * FROM cliente OFFSET 2;

Fin del Ejemplo 7

3.5.3. Clausula WHERE

Con esta clausula se establecen condiciones que deben cumplir los


registros a ser retornados por el SELECT.

Inicio del Ejemplo 8

/*Muestra todos los campos de el registro con id_cliente igual a 1 de


la tabla llamada cliente, Usted con lo operadores lógicos puede
agregar más condiciones*/

SELECT * FROM cliente WHERE id_cliente=1;

Fin del Ejemplo 8


3.5.4. Clausula ORDER BY

Con esta clausula nosotros podremos decidir el orden que tendrán


las filas o duplas a ser retornadas, si el campo es numérico los
ordena de menor a mayor por defecto “ASC” y descendente si se
especifica la opción DESC, si se trata de una cadena los ordena
alfabéticamente.

Inicio del Ejemplo 9

/*Muestra todos los campos y registros de la tabla llamada cliente,


mostrando los datos ordenados de forma descendente por el campo
id_cliente, si el campo id_cliente es de tipo cadena los ordena
alfabéticamente y si se quiere ordenados de forma ascendente se
coloca ASC en lugar de DESC*/

SELECT * FROM cliente ORDER BY id_cliente DESC;

Fin del Ejemplo 9


3.5.5. Funciones agregadas

Son también llamadas funciones de grupo. Trabajan sobre conjuntos


de filas y devuelven resultados.

3.5.5.1. Función concat()

Se emplea para concatenar campos y devolverlos a través de un


SELECT como si fueran un solo campo.

Nota: PostgreSQL no posee una función agregada de concatenación


como MySQL sin embargo el efecto se logra de la siguiente manera.

Inicio del Ejemplo 10

/*Usted puede concatenar los campos con la ||, observe que


después de as indicamos el nombre de la columna*/

SELECT 'Para el id ' || id_cliente || ' el monto es de ' || monto


as monto FROM factura;

Fin del Ejemplo 10


3.5.5.2. Función sum()

Permite devolver la sumatoria de los registros de un campo


especifico.

Inicio del Ejemplo 11

/*Usted puede sacar la sumatoria de un conjunto de valores de un


campo con la función agregada sum()*/

SELECT sum(monto) FROM factura;

Fin del Ejemplo 11

3.5.5.3. Función avg()

Permite devolver el promedio de los registros de un campo


especifico.

Inicio del Ejemplo 12


/*Puede también sacar el promedio de un determinado campo*/

SELECT avg(monto) FROM factura;

Fin del Ejemplo 12

3.5.5.4. Función max()

Permite devolver el máximo valor de los registros de un campo


especifico.

Inicio del Ejemplo 13

/*Puede sacar el máximo valor de un determinado campo*/

SELECT max(monto) FROM factura;

Fin del Ejemplo 13


3.5.5.5. Función min()

Permite devolver el mínimo valor de los registros de un campo


especifico.

Inicio del Ejemplo 14

/*Puede sacar el mínimo valor de un determinado campo*/

SELECT min(monto) FROM factura;

Fin del Ejemplo 14

3.5.5.6. Función count()

Permite devolver el número total de registros de una tabla


especifica.

Inicio del Ejemplo 15

/*Puede obtener el total de registros de una tabla determinada, con


la función count(), no importa el nombre del campo que pase por
sus argumentos*/
SELECT count(monto) FROM factura;

/*Esta sentencia devuelve el numero de clientes que gastaron mas


de 2000 Bs.F*/
SELECT count(monto) FROM factura WHERE monto> 2000;

Fin del Ejemplo 15

3.5.6. Operador IN

Permite verificar que un determinado valor se encuentra en una fila


dada si es así esa fila es devuelta.

Inicio del Ejemplo 16

/*Esta sentencia devuelve el id_cliente de las personas que tienen el


nombre Hans Bullow o Ralph Berg, Usted puede usar también si lo
requiere el operador AND*/
SELECT id_cliente FROM cliente WHERE nombre IN ('Hans
Bullow', 'Ralph Berg');

/*Esta sentencia hace exactamente lo mismo que la de arriba*/

SELECT id_cliente FROM cliente WHERE nombre='Hans


Bullow' OR nombre='Ralph Berg';

Fin del Ejemplo 16

3.5.7. Operador BETWEEN

Este operador se emplea para verificar valores que se encuentren


en un rango dado.

Inicio del Ejemplo 17

/*Esta sentencia retorna los id_cliente que estén entre 2000 y


5000*/

SELECT id_cliente FROM factura WHERE monto BETWEEN


2000 AND 5000;
/*Esta sentencia hace exactamente lo mismo que la de arriba*/

SELECT id_cliente FROM factura WHERE monto>=2000 AND


monto<=5000;

Fin del Ejemplo 17

3.5.8. Operador NOT

Este operador niega el resultado de una condición, por ejemplo: (5


< 7) esto devuelve Verdadero, pero al colocarlo de esta forma NOT
(5 < 7) esto nos devuelve Falso porque niega el resultado.

Inicio del Ejemplo 18

/*Esta sentencia retorna los registros que no esten en el rango de


2000 a 5000 es similar a la de arriba solo que el operador NOT
niega a que se traiga ese rango*/

SELECT id_cliente FROM factura WHERE monto NOT


BETWEEN 2000 AND 5000;

/*Esta sentencia retorna todos los datos de la tabla cliente excepto


para la persona Hans Bullow ya que el operador NOT niega a que se
traiga lo que esta en el operador IN*/

SELECT * FROM cliente WHERE nombre NOT IN ('Hans


Bullow');

Fin del Ejemplo 18

3.5.9. Operador LIKE

Este es muy similar al operador de comparación igual “=” con la


diferencia que en el podemos emplear comodines que son simple
caracteres especiales que equivalen a cualquier caracter, en ese
sentido tenemos el comodin % que equivale a cuaquier cantidad de
caracteres y comodin _ que equivale a cualquier caracter pero uno
solo.

Inicio del Ejemplo 19

/*Trae los registros donde en el campo nombre por lo menos


aparezca la ocurrencia de Hans, el % es un comodín e indica que no
importa los caracteres que vengan después de una expresión o
patrón dado*/
SELECT nombre FROM cliente WHERE nombre LIKE 'Hans%';

/*Esta sentencia es similar a la sentencia anterior con la diferencia


que busca una palabra que empieza por 'Ha' y que tenga 2
caracteres mas sin importar cuales sean pero solo deben ser 2*/

SELECT nombre FROM cliente WHERE nombre LIKE 'Ha__';

Fin del Ejemplo 19

3.5.10. Clausula AS

Esta clausula permite establecer otros nombres a las columnas


retornadas, y también usar referencias o alias a las tablas a la hora
de accederlas. Muchas veces se puede obviar el AS para crear un
alias; tan solo seguido del nombre de la tabla o columna se
especifica un nombre y ese sera el alias para dichos objetos.

Inicio del Ejemplo 20

/*Ahora para acceder al campo nombre en un lenguaje de


programación podremos hacerlo a través nombre_completo*/
SELECT nombre AS nombre_completo FROM cliente;

/*Fijese que accedemos al campo nombre a través del alias 'c' que
le dimos a la tabla */

SELECT c.nombre FROM cliente as c;

Fin del Ejemplo 20

3.5.11. Operador IS y valor NULL

Un valor NULL es aquel que es diferente de vacío o un campo sin


ningún valor de echo NULL es diferente de NULL. Para preguntar
entonces si un campo es vacío basta con usar el operador IS.

Inicio del Ejemplo 21

/*La siguiente sentencia hace uso del operador IS, y se usa cuando
un campo escogido no tiene algún valor conocido válido.*/

SELECT * FROM cliente WHERE nombre IS NULL;


Fin del Ejemplo 21

3.5.12. Operador DISTINCT

Se usa para listar valores únicos (Filas únicas).

Inicio del Ejemplo 22

/*Devuelve los registros sin repetir tomando de referencia el valor


de un campo especificado con la clausula DISTINCT*/

SELECT DISTINCT id_cliente FROM factura;

Fin del Ejemplo 22

3.5.13. Clausula GROUP BY

La clausula GROUP BY se una para un agrupamiento lógico de los


datos existentes, basados sobre el valor de un atributo. Más de una
columna puede ser incluida en la cláusula GROUP BY.
Inicio del Ejemplo 23

/*La sentencia de abajo nos dice cuantas facturas hay por cliente*/

SELECT count(id_cliente) FROM factura GROUP BY id_cliente;

/*La siguiente nos muestra la sumatoria de montos por clientes*/

SELECT id_cliente, sum(monto) FROM factura GROUP BY


id_cliente;

Fin del Ejemplo 23

3.5.14. Clausula HAVING

Cuando se emplea GROUP BY no se puede usar WHERE para


establecer condiciones a los registros a retornar, es allí donde se
introduce la clausula HAVING para establecer una condición
después de que el agrupamiento lógico es realizado a través del
GROUP BY.

Inicio del Ejemplo 24


SELECT id_cliente, SUM(monto) AS total FROM factura
GROUP BY id_cliente HAVING id_cliente = 2;

Fin del Ejemplo 24

3.5.15. Consulta de los registros de mas de 1 tabla con JOIN

Los JOIN se emplean para enlaza tablas de datos por medio de un


valor de atributo común en ambas tablas. Y sirve para poder
recuperar registros de múltiples tablas.

3.5.15.1. Join Cartesiano

Hace corresponder todas las filas de la primera tabla con todas las
filas de la segunda tabla y presenta una combinación de todos los
registros en ambas tablas.

Inicio del Ejemplo 25


/*Muestra todos los registros de ambas tablas*/

SELECT * FROM factura, cliente;

Fin del Ejemplo 25

3.5.15.2. Inner Join o Join Natural

Hace corresponder los registros de la primera tabla con los de la


segunda tabla, basándose en la igualdad de los valores especificada
en la condición JOIN. Solo los registros que tienen una
correspondencia exacta son extraídos de ambas tablas.

Inicio del Ejemplo 26

/*Muestra todos los registros de ambas tablas*/

SELECT cliente.id_cliente, cliente.nombre, factura.monto


FROM factura, cliente WHERE cliente.id_cliente =
factura.id_cliente;

/*Esta sentencia hace exactamente lo mismo que la de arriba*/


SELECT cliente.id_cliente, cliente.nombre, factura.monto
FROM factura INNER JOIN cliente ON cliente.id_cliente =
factura.id_cliente;

Fin del Ejemplo 26

3.5.15.3. Right Outer Join

Hace corresponder los registros en la primera tabla con los de la


segunda tabla. Se basa en la igualdad de valores que se especifica
en la condición JOIN. Incluye registros presentes en la segunda tabla
que no están asociados con los registros de la primera tabla y al no
haber match de los elementos de la segunda tabla con la primera
según la condición; completa la segunda tabla con NULL.

Inicio del Ejemplo 27

/*Muestra todos los registros de ambas tablas*/

SELECT cliente.id_cliente, cliente.nombre, factura.monto FROM


factura RIGHT OUTER JOIN cliente ON cliente.id_cliente =
factura.id_cliente;
Fin del Ejemplo 27

3.5.15.4. Left Outer Join

Hace corresponder los registros de la primera tabla con los de la


segunda tabla, basado en la igualdad de valores que es
especificada en la condición JOIN . Incluye aquellos registros
presentes en la primera tabla, que no están asociados con los
registros de la segunda tabla completando esos registros con NULL.

Inicio del Ejemplo 28

/*Muestra todos los registros de ambas tablas*/

SELECT cliente.id_cliente, cliente.nombre, factura.monto FROM


factura LEFT OUTER JOIN cliente ON cliente.id_cliente =
factura.id_cliente;

Fin del Ejemplo 28


3.5.16. Subconsultas

Una subconsulta o subquery es una consulta dentro de una


consulta. También se puede decir que una subconsulta es una
sentencia SELECT anidada dentro de otra sentencia SELECT.

Inicio del Ejemplo 29

/*Esta sentencia devuelve el id_cliente con el monto más alto*/

/*Esta sentencia hace exactamente lo mismo que la anterior*/

SELECT id_cliente FROM factura WHERE monto IN (SELECT


max(monto) FROM factura);

/*Esta sentencia se trae los nombres de la tabla cliente siempre y


cuando existan relaciones con la tabla factura entre los campos
id_cliente*/

SELECT cliente.nombre FROM cliente WHERE EXISTS


(SELECT * FROM factura WHERE
factura.id_cliente=cliente.id_cliente);
Fin del Ejemplo 29

3.5.17. Uniones

Es una operación de conjunto (SET) que combina los resultados de


dos o más consultas, elimina los registros duplicados y presenta el
resultado. La única restricción es que deben especificarse la misma
cantidad de campos en ambas tablas.

Fin del Ejemplo 30

SELECT id_cliente FROM cliente UNION SELECT id_factura


FROM factura;

Fin del Ejemplo 30


GLOSARIO DE TÉRMINOS

•RDMS: son las siglas en ingles de “Relational Data Base


Management System” lo que se traduce al español como “Sistema
Administrador de Bases de Datos Relacionales”, y proporcionan un
ambiente adecuado para gestionar una base de datos.

•Foreign Key: traducido al español como clave foránea, es una


limitación referencial entre dos tablas.

•Primary Key: o clave primaria en español, es una restricción


colocada a un campo o a una combinación de campos que identifica
de forma única a cada fila de una tabla.

•Tabla: se refiere al tipo de modelado de datos, y se emplea para


guardar los datos recogidos por un programa. Su estructura general
se asemeja a la vista general de un programa de Hoja de cálculo.

•Campo: Corresponde al nombre de la columna. Debe ser único y


además de tener un tipo de dato asociado.

•Registro: Corresponde a cada fila que compone la tabla. Allí se


componen los datos y los registros. Eventualmente pueden ser
nulos en su almacenamiento.

Вам также может понравиться