Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BASE DE DATOS
SEMANA 5
[ BASE DE DATOS ]
CONTENIDO
Presentación ……………………………………… 3
1. DESARROLLO TEMÁTICO ………………………. 3
• Comandos para definición de datos ………… 3
• Comandos para manipulación de datos ……. 7
• Vistas …………………………………………. 16
Conclusiones ………………………………………. 14
1.1. BIBLIOGRAFÍA …………………………………. 14
2 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
Presentación
En esta lectura aprenderemos los fundamentos del lenguaje estándar de modelo relacional,
conocido como Lenguaje de Consulta Estructurado (SQL). El lenguaje se compone de
comandos que permiten a los usuarios crear bases de datos y estructuras de tabla, realizar
varios tipos de manipulación y administración de datos y consultar la base de datos para
extraer información útil. Todo el software de SGBD soporta SQL.
SQL es un lenguaje no procedimental, es decir, el usuario especifica lo que se debe hacer,
pero no cómo ha de hacerse. Resumiendo, SQL está enfocado en la manipulación de datos
(inserción, actualización, eliminación y consulta) y la administración de datos (creación de
tablas, índices y vistas).
1. DESARROLLO TEMÁTICO
SQL fue desarrollado en los laboratorios de investigación de IBM en San José, California
durante los años 70 por Chamberlin. El nombre inicial fue SEQUEL (Structures English Query
Language), para 1980 el producto se empezó a llamar SQL.
Las órdenes de SQL se pueden usar interactivamente como lenguaje de consulta o se pueden
insertar en programas de aplicación.
Las funciones de SQL encajan en dos amplias categorías:
• Es un lenguaje de definición de datos: SQL incluye comandos para crear las
estructuras de tabla de base de datos, así como también para definir derechos de
acceso a base de datos.
• Es un lenguaje de manipulación de datos: incluye comandos para insertar,
actualizar, eliminar y consultar datos dentro de las tablas de bases de datos.
Comandos para definición de datos
SQL permite crear las tablas dentro de una base de datos. Primero, examinaremos el modelo
de base de datos que se explorará en esta lectura.
Para demostrar los comandos SQL. En esta lectura, se utilizará una base de datos compuesta
por dos tablas: PRODUCTO y PROVEEDOR (ver Figura 1. Modelo de Base de Datos
Producto/Proveedor). A continuación el modelo lógico de la base de datos:
[ BASE DE DATOS ] 3
Figura 1. Modelo de Base de Datos Producto/Proveedori
El modelo de base de datos de la figura 1 refleja las siguientes reglas del negocio:
• Un proveedor puede surtir muchos productos.
• Algunos proveedores (aún) no surten productos (por ejemplo, una lista de
proveedores puede incluir proveedores potenciales).
• Si un producto es surtido por un proveedor, ese producto es surtido por un solo
proveedor.
• Algunos productos no son surtidos por un proveedor (por ejemplo, algunos
productos pueden ser producidos o adquiridos en el mercado abierto).
Por consiguiente, existe una relación 1:M entre PROVEEDOR y PRODUCTO, con
opcionalidades a ambos lados de la relación.
/* Base de Datos: Para demostrar los comandos SQL para definición de los datos, se utilizará
una base de datos simple compuesta sólo de dos tablas: PRODUCTO, PROVEEDOR. Esta base
de datos se modela físicamente usando SQBD PostgreSQL tal y como se muestra a
continuación: */
‐‐ Control de transacciones
BEGIN;
4 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
SAVEPOINT FIRST;
/* La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla
con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben
cumplir esas columnas. */
‐‐ Definición de la tabla proveedor
CREATE TABLE proveedor
(
/* La definición de la llave primaria contienen tanto una especificación NOT NULL como una
especificación UNIQUE. Estas especificaciones hacen que se cumplan los requerimientos de
integridad de entidades. */
v_code int4 NOT NULL,
v_name varchar(30) UNIQUE NOT NULL,
v_contact varchar(30) NOT NULL,
v_areacode int4 NOT NULL,
v_phone bigint NOT NULL,
v_state varchar(20) NOT NULL,
v_order char NOT NULL,
‐‐ Condiciones que deben cumplirse:
CONSTRAINT v_areacode_chk CHECK(v_areacode BETWEEN 000 AND 999),
CONSTRAINT v_order_chk CHECK (v_order in ('Y','N')),
‐‐ Definición de las llaves
CONSTRAINT v_code_pk PRIMARY KEY(v_code)
);
‐‐ Definición de un dominio: un dominio es el conjunto de valores permisibles para una
columna.
CREATE DOMAIN discount_rate AS numeric(5,2);
[ BASE DE DATOS ] 5
‐‐ Definición de la tabla producto
CREATE TABLE producto
(
p_code int4 UNIQUE NOT NULL,
p_descript varchar(35) NOT NULL,
p_indate date NOT NULL default now(),
p_onhand smallint NOT NULL,
p_min smallint NOT NULL,
p_price numeric(8,2) NOT NULL,
p_discount discount_rate NOT NULL,
v_code int4 NOT NULL,
CONSTRAINT p_code_pk PRIMARY KEY(p_code),
CONSTRAINT p_discount_chk CHECK (p_discount BETWEEN 15 AND 25),
CONSTRAINT p_indate_chk CHECK (p_indate <= now()),
CONSTRAINT p_code_fk FOREIGN KEY(v_code) REFERENCES proveedor(v_code)
MATCH SIMPLE
/* Como la lista de proveedores incluye a los que están en reserva, no se desea eliminar a uno
de ellos de la lista si por lo menos un producto se refiere a este proveedor (ON DELETE
RESTRICT) */
ON DELETE RESTRICT
ON UPDATE CASCADE
INITIALLY DEFERRED
/* Posibles acciones:
NO ACTION: Produce un error indicando que un DELETE ó UPDATE creará una violación de la
clave foránea definida.
RESTRICT: Produce un error indicando que un DELETE ó UPDATE creará una violación de la
clave foránea definida.
CASCADE: Borra ó actualiza automáticamente todas las referencias activas.
SET NULL: Define las referencias activas como NULL.
SET DEFAULT: Define las referencias activas como el valor por defecto (si está definido) de
las mismas.
Acción por defecto: NO ACTION */
/* Llaves foráneas:
INITIALLY DEFERRED chequeo de integridad al final de la transacción
INITIALLY INMEDIATE chequeo de integridad durante toda la transacción (por defecto)
NOT DEFERRABLE indica que el chequeo no se puede postergar
6 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
DEFERRABLE indica que el chequeo se puede postergar (por defecto)
Para mayor información, referirse a: http://www.arpug.com.ar/trac/wiki/sql‐createtable.html
*/
);
/* La sentencia CREATE INDEX sirve para crear un índice sobre una o varias columnas de una
tabla.Para repasar conceptos básicos sobre índices puede referirse a:
http://www.aulaclic.es/sql/b_8_4_1.htm
http://www.postgresql.org/docs/8.2/static/sql‐createindex.html
http://www.ibiblio.org/pub/linux/docs/LuCaS/Postgresql‐
es/web/navegable/todopostgresql/sql‐createindex.html */
CREATE INDEX p_code_index ON producto(p_price DESC, p_indate ASC);
END;
Comandos para Manipulación de Datos
Para el ingreso de datos se requiere el uso del comando INSERT, ingresar datos en una tabla.
La estructura básica del comando INSERT se ve así:
‐‐ PROVEEDOR
INSERT INTO proveedor VALUES(21224, 'UBIQUANDO', 'JAIME PEREZ', 576, 3468973,
'SANTANDER', 'Y');
INSERT INTO proveedor VALUES(21225, 'BRYSON', 'SMITHSON', 615, 2233234, 'FLORIDA', 'Y');
INSERT INTO proveedor VALUES(21226, 'SUPERLOO', 'FLUSHING', 904, 2158995, 'MIAMI',
'N');
‐‐ PRODUCTO
INSERT INTO producto VALUES(11, 'SOFTWARE ACADEMICO', '02/06/1987', 25, 5, 250000, 15,
21224);
INSERT INTO producto VALUES(12, 'SOFTWARE INVENTARIOS', '02/07/2005', 21, 0, 190000,
24, 21225);
INSERT INTO producto VALUES(13, 'SOFTWARE CARTERA', '06/09/2008', 15, 7, 450000, 18,
21226);
INSERT INTO producto VALUES(14, 'SOFTWARE NEGOCIOS', '01/12/2009', 10, 3, 280000, 22,
21225);
INSERT INTO producto VALUES(15, 'SOFTWARE BOLSA DE VALORES', '02/09/2002', 8, 2,
390000, 20, 21224);
[ BASE DE DATOS ] 7
El SQL provee una gran variedad de capacidades de manipulación de datos para actualización
y consultas a la base de datos, las que dependen solo de la estructura lógica de la base de
datos, no de su estructura física. SQL no es sensible a mayúsculas ni minúsculas, es decir, las
trata por igual. Las palabras clave son SELECT, FROM y WHERE.
Un ejemplo de una consulta simple es:
π <nombre_empl, edad_empl> (σ <cargo=”profesor”> (empleado));
SQL:
SELECT nombre_empl, edad_empl
FROM empleado
WHERE cargo = “profesor”
La cláusula SELECT proyecta las columnas deseadas en el resultado de la consulta, las cuales
siempre serán las columnas de una tabla relacional. También se puede incluir varias columnas
o incluir valores calculados y valores literales.
La clausula FROM lista una o más tablas que son referenciadas en al consulta. Todas las
columnas listadas en las cláusulas SELECT o WHERE deben hallarse en una de las tablas de la
cláusula FROM.
Uso de comandos para manipulación de datos
‐‐ Listar todos los atributos y todas las filas de la tabla producto:
BEGIN;
SELECT *
FROM producto;
END;
‐‐ Actualizar: se utiliza UPDATE para corregir ingresos de datos.
BEGIN;
UPDATE producto
SET p_min = 4
WHERE p_code = 12;
END;
8 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
‐‐ Eliminar filas de la tabla: se usa el comando DELETE.
BEGIN;
DELETE
FROM producto
WHERE p_code = 15;
END;
‐‐ Listar parcialmente el contenido de una tabla.
BEGIN;
SELECT p.p_descript, p.p_indate, p.p_price, p.v_code
FROM producto p
WHERE p.v_code = 21225;
END;
‐‐ USO DE OPERADORES MATEMÁTICOS (=, <, <=, >, >=, < > Ó !=)
‐‐ no igual a
BEGIN;
SELECT *
FROM producto
WHERE v_code <> 21225;
END;
‐‐ menor que o igual a
BEGIN;
SELECT p_descript, p_onhand, p_min, p_price
FROM producto
WHERE p_price <= 300000;
END;
‐‐ Operadores matemáticos en fechas
BEGIN;
SELECT p_descript, p_onhand, p_min, p_price
FROM producto
WHERE p_indate < '01/12/2005';
END;
‐‐ DATE TIME
BEGIN;
SELECT *
[ BASE DE DATOS ] 9
FROM producto
WHERE date_part('month', p_indate)= 6;
END;
‐‐ Operadores lógicos: and, or y not
BEGIN;
SELECT p_descript, p_onhand, p_min, p_price
FROM producto
WHERE v_code = 21225 or v_code = 21224;
END;
BEGIN;
SELECT p.p_descript, p.p_onhand, p.p_min, p_price
FROM producto p
WHERE p.p_price < 300000 and p.p_indate > '02/08/2004';
END;
‐‐ Uso del BETWEEN para definir límites de atributo
BEGIN;
SELECT p.p_descript, p.p_onhand, p.p_min, p_price
FROM producto p
WHERE p.p_price BETWEEN 100000 AND 300000;
END;
‐‐ Uso de IS NULL para buscar un valor de atributo nulo o vacio.
BEGIN;
SELECT p_code, p_descript
FROM producto
WHERE p_min IS NULL;
END;
‐‐ Uso del operador condicional LIKE
BEGIN;
SELECT v_name, v_contact
FROM proveedor
WHERE v_contact LIKE 'S%';
END;
‐‐ UPPER: para eliminar la sensibilidad a las mayúsculas o las minúsculas.
BEGIN;
SELECT v_name, v_contact
FROM proveedor
WHERE UPPER(v_contact) LIKE 'S%';
10 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
END;
‐‐ USO DE COMANDOS PARA ADMINISTRACIÓN DE DATOS AVANZADOS
‐‐ Uso de ALTER TABLE
BEGIN;
ALTER TABLE producto
ALTER COLUMN p_price TYPE numeric(9,2);
END;
‐‐ Ordenar una lista
BEGIN;
SELECT *
FROM producto
ORDER BY p_price DESC;
END;
‐‐ Uso de DISTINCT, diseñado para producir una lista de los valores que son distintos unos de
otros
BEGIN;
SELECT DISTINCT v_code
FROM producto;
END;
‐‐ FUNCIONES AGREGADAS DEL SQL (COUNT, MIN, MAX, SUM, AVG)
‐‐ AVG
BEGIN;
SELECT AVG(p_price)
FROM producto;
END;
‐‐ SUM
BEGIN;
SELECT SUM(p_price)
FROM producto;
END;
‐‐ COUNT
BEGIN;
SELECT COUNT(DISTINCT v_code)
[ BASE DE DATOS ] 11
FROM producto;
END;
‐‐ MAX
BEGIN;
SELECT MAX(p_price)
FROM producto;
END;
‐‐ MIN
BEGIN;
SELECT MIN(p_price)
FROM producto;
END;
‐‐ Ejemplo
BEGIN;
SELECT p_code, p_descript, p_price
FROM producto
WHERE p_price = (SELECT MAX(p_price) FROM producto);
END;
‐‐ Agrupamiento de Datos
BEGIN;
SELECT MIN(p_price)
FROM producto
GROUP BY p_min;
END;
‐‐ Uso de HAVING, que se aplica a los resultados del comando GROUP BY.
BEGIN;
SELECT v_code, SUM(p_onhand) AS SumQTY
FROM producto
GROUP BY v_code
HAVING (SUM(p_onhand)>5)
ORDER BY SUM(p_onhand) DESC;
END;
‐‐ JOIN DE TABLAS
BEGIN;
SELECT p.p_descript, p.p_price, v.v_name, v.v_contact, v.v_areacode, v.v_phone
FROM producto p, proveedor v
WHERE p.v_code = v.v_code
ORDER BY p.p_price;
12 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
END;
‐‐ LEFT JOINS
/* Mostrará todas las filas PROVEEDOR y todas las PRODUCTO correspondiente Mayor
información: http://www.postgresql.org/docs/9.0/static/queries‐table‐expressions.html */
BEGIN;
SELECT proveedor.v_code, proveedor.v_name
FROM proveedor
LEFT JOIN producto ON proveedor.v_code = producto.v_code;
END;
‐‐ CROSS JOIN
BEGIN;
SELECT *
FROM proveedor
CROSS JOIN producto;
END;
‐‐ INNER JOIN
BEGIN;
SELECT *
FROM proveedor
INNER JOIN producto ON proveedor.v_code = producto.v_code;
END;
‐‐ FULL JOIN
BEGIN;
SELECT *
FROM proveedor
FULL JOIN producto ON proveedor.v_code = producto.v_code;
END;
‐‐ JOIN
BEGIN;
SELECT *
FROM proveedor
JOIN producto ON proveedor.v_code = producto.v_code;
END;
[ BASE DE DATOS ] 13
Vistas
Existe otra clase de relaciones SQL, llamadas VISTAS, que no existen físicamente y se definen
con una expresión muy similar a una consulta. Las vistas se pueden consultar como si
existieran físicamente, y en algunos casos hasta es posible modificarlas.
/* Con elcomando CREATE VIEW puede crearse una tabla (virtual) lógica. Esta tabla lógica
sólo existe en la memoria, aunque puede tratarse como si fuera una tabla real. */
BEGIN;
CREATE VIEW producto_1 AS
SELECT p_descript, p_onhand, p_price
FROM producto
WHERE p_price > 120000;
END;
‐‐ Visualizar la vista
BEGIN;
SELECT *
FROM producto_1;
END;
Conclusiones
• SQL es el lenguaje de manejo de datos relacionales más importante que existe
actualmente. Se ha convertido en el estándar para el intercambio de información.
1.1. BIBLIOGRAFÍA
• C.J. Date, Introducción a los Sistemas de Bases de Datos, 5. ª edición, Adison Wesley
Iberoamericana, 1993.
• Korth y A. Siulberschatz, Fundamentos de Bases de Datos, 4. ª edición, McGraw‐Hill,
Madrid, 2002.
14 [ POLITÉCNICO GANCOLOMBIANO EN ALIANZA CON WHITNEY INTERNATIONAL SYSTEM ]
• Elmasri, R. & Navathe, S.B. “Fundamentals Of Database Systems” Third Edition.
Addison‐ Wesley Pubs. 2000.
• Rob, Peter.; Coronel, Carlos. “Sistemas de Bases de Datos: diseño, implementación y
administración”, Quinta Edición, THOMSON, 2002.
i
Carreño. G. Johany. A. Modelo de Base de Datos Producto/Proveedor. Diseño realizado en la herramienta
MicroOLAP. 2010.
[ BASE DE DATOS ] 15