Está en la página 1de 15

Lenguaje de Consulta Estructurado - SQL

 
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. 

La  cláusula WHERE  contiene una  condición  para  seleccionar  filas de las  tablas listadas en la 


cláusula  FROM.  Es  la  cláusula  más  versátil  del  SQL  y  puede  contener  una  gran  variedad  de 
condiciones. 

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. 

• Algunos  proveedores  imponen  limitaciones  y  nuevas  características  a  los  DBMS, 


por  lo  tanto,  antes  de  interactuar  con  la  base  de  datos  y  comenzar  a  usar  los 
comandos SQL, se debe revisar la sintaxis y la semántica de los DBMS.  

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

También podría gustarte