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

INSTITUTO DE EDUCACION SUPERIOR TECNOLOGICO PBLICO SAN ANTONIO DE PADUA - LAJAS

E.T.S. Ingeniera Informtica

MANUAL DE APUNTES

Administracin de Bases de Datos SQL

Lajas, octubre 2012 V 2012.10.1

Ing. Wilder Ojeda Rabanal

Pg. 1 de 15

Bases de Datos
Lajas, octubre 2012, V 2007.10.1

SQL

SQL (STRUCTURED QUERY LANGUAGE).........................................3


1.1 1.2 OBJETIVOS Y ALCANCE DE SQL ..............................................................................3 EVOLUCIN DEL MODELO RELACIONAL .................................................................4 DOMINIOS SQL2 .................................................................................................4 CREATE TABLE ..................................................................................................5 CONSULTAS DE VARIAS TABLAS ....................................................................6 EXISTS ..................................................................................................................6 IN ...........................................................................................................................6 ANY, ALL ..............................................................................................................7 BETWEEN............................................................................................................8 LIMITACIN DE LA LISTA DE RESULTADOS ..............................................8 SUBCADENAS (LIKE) .........................................................................................9 ORDENACIN (ORDER BY).............................................................................9 JOIN NATURAL Y OUTER JOIN ..................................................................... 10 FUNCIONES AGREGADAS .............................................................................. 11 GROUP BY .......................................................................................................... 12 EJEMPLO............................................................................................................ 13 INSERT ............................................................................................................... 14 DELETE.............................................................................................................. 14 UPDATE.............................................................................................................. 14

DEFINICIN DE DATOS EN SQL (DDL) ...........................................4


2.1 2.2

CONSULTAS SIMPLES ............................................................................5


3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8

CONSULTAS AVANZADAS ................................................................... 10


4.1 4.2 4.3 4.4

ACTUALIZACIN DE DATOS ............................................................. 14


5.1 5.2 5.3

6 7

VISTAS ...................................................................................................... 14 SINTAXIS SQL-2 ..................................................................................... 15


7.1 7.2 7.3 INTRODUCCIN .................................................................................................... 15 LENGUAJE DE DEFINICIN DE DATOS (DDL) ..................................................... 15 LENGUAJE DE MANIPULACIN DE DATOS (DML)................................................ 17

Bases de Datos
Lajas, octubre 2012, V 2007.10.1

SQL

1 SQL (Structured Query Language)


1.1 Objetivos y alcance de SQL
a) SQL es un lenguaje estndar(ISO) para definicin manipulacin en SGBD relacionales. b) El DML de SQL es un lenguaje de especificacin; es decir, las expresiones definen el resultado esperado, dejando que el SGBD se encargue de resolver el mejor mtodo para ejecutar dicha especificacin(optimizacin de la consulta); estos mtodos generados por el subsistema de proceso de consultas se denominan planes1 de acceso o planes de ejecucin de la consulta. c) La gramtica DML est basada en el clculo relacional orientado a tuplas. d) Permite: Definicin de tablas y vistas. Especificar un modelo de seguridad de acceso a los datos (definicin de usuarios, niveles de autorizacin o acceso a los datos). Definir restricciones de integridad declarativa. Especificar transacciones. El DML de SQL puede ser utilizado en lenguajes de programacin de propsito general como C o Pascal o bien en lenguajes especficos del fabricante (p.ej. PL/SQL en ORACLE, TRANSACT SQL en MS-SQL Server)..

Un plan de ejecucin de una consulta es un programa a bajo nivel, generado por el subsistema de proceso de consultas del SGBD relacional. Este plan de acceso contiene el mtodo de acceso a los datos en funcin de la situacin del esquema de la base de datos(esquema interno, donde figuran detalles de ndices, direccionamiento, etc.) y su volumetra (volmenes de datos de las tablas en la base de datos)..
1

Bases de Datos
Lajas, octubre 2012, V 2007.10.1

SQL

1.2 Evolucin del modelo relacional


P R E R E L A C I O N A L R E L A C I O N A L 1968 - 1970 1970 . . . 1973 - 1978 1978

Surge el modelo Desarrollos tericos Prototipos (Ingres, sistema R, etc. . .) QBE

1979 1980 1981 1982 1986 1987 1989 1989 1990 1990 1992 1995 1999

Oracle Ingres SQL DB2 SQL/ ANS SQL ISO (9075) SQL Addendum Manifiesto de los SGBO Modelo Relacional Versin 2 Manifiesto de los SGBO- 3G SQL 92 3er Manifiesto SQL 3

P O S T R E L A C I O N A L

2 Definicin de datos en SQL (DDL)


2.1 DOMINIOS SQL2
En SQL2 es posible declarar un dominio y usar su nombre. CREATE DOMAIN <nombre_dominio> AS <tipo_datos>; Entre los tipos de datos disponibles para atributos estn los numricos, cadena de caracteres, cadena de bit, fecha y hora. a) Los tipos de datos numricos incluyen nmeros enteros de diversos tamaos (INTEGER o INT, y SMALLINT) y nmeros reales de diversas precisiones (FLOAT, REAL, DOUBLE PRECISION). Podemos declarar nmeros con formato empleando DECIMAL(i,j) ( o DEC(i,j) NUMERIC(i,j)), donde i (precisin) es el nmero total de dgitos decimales y j (escala) el nmero de dgitos que aparecen despus del punto decimal. Los tipos de cadena de caracteres tienen longitud fija (CHAR(n) o CHARACTER(n) o variable VARCHAR (n) o CHAR VARYING (n) o CHARACTER VARYING (n).

b)

Bases de Datos
Lajas, octubre 2012, V 2007.10.1

SQL

c) Los tipos de datos de cadena de bit tienen longitud fija n (BIT(n)) o (BIT VARYING (n)). d) SQL2 cuenta con nuevos tipos de datos para fecha y hora DATE y TIME. Ej. CREATE DOMAIN importes AS DECIMAL(9,4);

2.2 CREATE TABLE


La estructura de datos soportada por SQL es la tabla como soporte a la definicin de una relacin del modelo RM/B. La instruccin CREATE TABLE sirve para especificar una nueva tabla CREATE DOMAIN codigos AS VARCHAR(4) NOT NULL; CREATE DOMAIN nombres AS VARCHAR(20); CREATE DOMAIN cantidades AS INTEGER; CREATE TABLE productos ( Pid codigos, Pdes nombres, Ppeso cantidades, Pprecio cantidades, PRIMARY KEY (pid) );

3 Consultas simples
La sentencia bsica para recuperar informacin en SQL es la sentencia SELECT. SELECT <lista de atributos> FROM <lista de tablas> WHERE <condicin>
Productos pid P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 pid P1 P2 P3 P10 P11

a)

Descripcin y cdigo de piezas de todas las piezas existentes.

SELECT pdesc, pid FROM Productos;

b) Piezas (todos los atributos) de peso mayor o igual a 30. pid SELECT * P2 FROM Productos P3 WHERE ppeso 30;

pdesc Televisor M2 Televisor M3

ppeso 30 35

pprecio 78000 97000

Bases de Datos
Lajas, octubre 2012, V 2007.10.1

SQL

3.1 CONSULTAS DE VARIAS TABLAS


a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad que tienen en stock.
acant 156 1234 69 120 345 5000 200 956 134 120 542 Almacenes aid adir A2 C/. Baja, 4 A3 Poligono Calonge, N12/a A4 P.I. Armilla, A-45 Productos pid pdesc P1 Televisor M1 P2 Televisor M2 P3 Televisor M3 P10 Mini TK67 P11 Mini TK68 ppeso 27 30 35 12 10

AExistencias Aid pid A2 P1 A2 P2 A2 P3 A2 P10 A2 P11 A3 P3 A4 P1 A4 P2 A4 P3 A4 P10 A4 P11

aloc Alcal de Guadaira Sevilla Granada pprecio 56000 78000 97000 112000 142000

SELECT AE.aid, acant FROM AExistencias AE, Productos P WHERE AE.pid = P.pid AND pdesc = Televisor M2;

AE.aid A2 A4

acant 1234 956

3.2 EXISTS
La funcin EXISTS sirve para comprobar si el resultado de una consulta anidada contiene tuplas. Rescribiendo la expresin anterior: a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad que tienen en stock. SELECT aid, acant FROM AExistencias AE WHERE EXISTS ( SELECT * FROM Productos P WHERE P.pid = AE.pid AND pdesc = Televisor M2 ) ; b) Cdigos de los almacenes que no tienen existencias de productos. SELECT aid FROM Almacenes A WHERE NOT EXISTS ( SELECT * FROM Aexistencias AE WHERE AE.aid = A.aid ) ;

3.3 IN
El operador de comparacin IN permite comparar un valor individual v (generalmente un nombre de atributo) con un conjunto de valores V (generalmente una consulta anidada). Devuelve TRUE si v es uno de los elementos de V. Pg. 6 de 21

Es posible rescribirla la consulta anterior utilizando el operador de comparacin IN. a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad que tienen en stock. SELECT aid, acant FROM AExistencias WHERE pid IN ( SELECT pid FROM Productos WHERE pdesc = Televisor M2 ) ; Tambin es posible utilizar IN con un conjunto explcito de valores: b) Cdigo y peso de los productos cuyo peso sea 10, 12 o 27
ppid P1 P10 P11 ppeso 27 12 10

SELECT ppid, ppeso FROM Productos WHERE ppeso IN (10, 12, 27) ;

3.4 ANY, ALL


Permiten comparar un valor individual v (nombre de atributo) con un conjunto de valores V (consulta anidada). El operador =ANY devuelve TRUE si el valor de v es igual a algn valor del conjunto V. Es equivalente a IN. a) Cdigos de los almacenes que tienen existencias del producto Televisor M2 y cantidad que tienen en stock.

SELECT aid, acant FROM AExistencias WHERE pid =ANY ( SELECT pid FROM Productos WHERE pdesc = Televisor M2 ) ; El operador =ALL devuelve TRUE si el valor de v es igual a todos los valores del conjunto V. Otros operadores que se pueden utilizar con ANY y con ALL son >, >=, <, <= y <>. El operador >ALL devuelve TRUE si el valor de v es mayor que todos los valores del conjunto V. b) Descripcin de los productos de precio superior a todos los productos que tiene el almacen A2.

SELECT pdesc FROM Productos WHERE pprecio > ALL ( SELECT pprecio FROM Productos P, Aexistencias AE WHERE P.pid = AE.pid AND aid = A2 ) ;

3.5 BETWEEN
c) Cdigo y peso de los productos cuyo peso est entre 10 y 27. SELECT ppid, ppeso FROM Productos WHERE ppeso BETWEEN 10 AND 27;
ppid P1 P10 P11 ppeso 27 12 10

3.6 LIMITACIN DE LA LISTA DE RESULTADOS


Para limitar los resultados de una consulta se pueden utilizar las palabras clave DISTINCT y TOP. DISTINCT. Elimina las tuplas repetidas del resultado de una consulta. a) Cdigo y localidad de los almacenes que tienen algn producto en existencia.
acant 156 1234 69 120 345 5000 200 956 134 120 542 AExistencias aid pid A2 P1 A2 P2 A2 P3 A2 P10 A2 P11 A3 P3 A4 P1 A4 P2 A4 P3 A4 P10 A4 P11

Almacenes aid Adir A2 C/. Baja, 4 A3 Poligono Calonge, N12/a A4 P.I. Armilla, A-45

aloc Alcal de Guadaira Sevilla Granada

SELECT DISTINCT A.aid, aloc FROM AExistencias AE, Almacenes A WHERE AE.aid = A.aid;

aid A2 A3 A4

Aloc Alcal de Guadaira Sevilla Granada

TOP2. Limita el nmero de filas. SELECT TOP N <lista de atributos> limita el nmero de filas a mostrar a N. b) En la consulta anterior obtener slo las dos primeras filas.

SELECT DISTINCT TOP 2 A.aid, aloc FROM AExistencias AE, Almacenes A WHERE AE.aid = A.aid;
aid A2 A3 Aloc Alcal de Guadaira Sevilla

TOP no es estndar. No se puede utilizar en WinRDBi

3.7 SUBCADENAS (LIKE)


Para comparar cadenas de caracteres se utiliza el operador de comparacin LIKE. Las cadenas parciales se especifican mediante los caracteres reservados % y -. a) Cdigos de piezas cuya descripcin empieza por Televisor Productos
Pid P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 pid P1 P2 P3

SELECT pid FROM Productos WHERE pdesc LIKE Televisor%; b)

Cdigo de productos que en la descripcin incluyen TK seguido por un carcter y termina en 8.


pid P11

SELECT pid FROM Productos WHERE pdesc LIKE %TK_8;

3.8 ORDENACIN (ORDER BY)


a) Cdigo de almacenes y cantidad de cada producto que tienen en stock, ordenado por almacn y dentro de cada almacn por cantidad de mayor a menor. Considerando nicamente los productos cuyas cantidades en stock en cada almacn estn entre 200 y 2000 AExistencias
aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 acant 156 1234 69 120 345 5000 200 956 134 120 542

SELECT aid, pid, acant FROM AExistencias WHERE acant BETWEEN 200 AND 2000 ORDER BY aid, acant DESC;

aid A2 A2 A4 A4 A4

pid P2 P11 P2 P11 P1

acant 1234 345 956 542 200

4 Consultas avanzadas
4.1 JOIN NATURAL y OUTER JOIN
a) Cdigo de almacn, cdigo y descripcin del producto y cantidad en stock.
acant 156 1234 69 120 345 5000 200 956 134 120 542 AExistencias aid pid A2 P1 A2 P2 A2 P3 A2 P10 A2 P11 A3 P3 A4 P1 A4 P2 A4 P3 A4 P10 A4 P11

Productos pid pdesc P1 Televisor M1 P2 Televisor M2 P3 Televisor M3 P10 Mini TK67 P11 Mini TK68

ppeso 27 30 35 12 10

pprecio 56000 78000 97000 112000 142000

SELECT aid, AE.pid, pdesc, acant FROM AExistencias AE, Productos P WHERE AE.pid = P.pid; Se puede especificar primero la reunin de las relaciones AExistencias y Productos y seleccionar luego los atributos y tuplas deseadas. La consulta quedara: SELECT aid, AE.pid, pdesc, acant FROM ( AExistencias AS AE JOIN Productos AS P ON AE.pid = P.pid ); (JOIN es equivalente a INNER JOIN) El resultado ser:
Aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 AE.pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Televisor M3 Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 acant 156 1234 69 120 345 5000 200 956 134 120 542

pid P1 P2 P3 P10 P11 P20

Al incluir el producto nuevo P20 en la tabla Productos:


Productos Pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Equipo Nuevo ppeso 27 30 35 12 10 10 pprecio 56000 78000 97000 112000 142000 100

La consulta: SELECT aid, AE.pid, pdesc, acant FROM ( AExistencias AS AE JOIN Productos AS P ON AE.pid = P.pid ); Devuelve el mismo resultado anterior. No se visualiza la tupla nueva ya que no tiene correspondencia en la tabla AExistencias. Para que aparezca dicha tupla se utiliza el join externo por la derecha. SELECT aid, AE.pid, pdesc, acant FROM ( AExistencias AS AE RIGHT JOIN Productos AS P ON AE.pid = P.pid ); El resultado ser:
aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 AE.pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Televisor M3 Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 Equipo Nuevo acant 156 1234 69 120 345 5000 200 956 134 120 542

(RIGHT JOIN es equivalente a RIGHT OUTER JOIN) De igual forma para obtener las tuplas de AExistencias que no tengan correspondencias en Productos se utilizara el LEFT JOIN (LEFT JOIN es equivalente a LEFT OUTER JOIN)

4.2 FUNCIONES AGREGADAS


COUNT devuelve el nmero de filas o valores especificados en una consulta. SUM, MAX, MIN, AVG se aplican a un conjunto o multiconjunto de valores numricos y devuelven respectivamente la suma, el valor mximo, el mnimo y el promedio de dicho valores. Estas funciones se pueden usar con la clusula SELECT o con la clusula HAVING. a)
pid P1 P2 P3 P10 P11

Numero de productos que existen.


pdesc Televisor M1 Televisor M2 Televisor M3 Mini TK67 Mini TK68 ppeso 27 30 35 12 10 pprecio 56000 78000 97000 112000 142000 COUNT (*) 5

SELECT COUNT (*) FROM Productos ;

b)
aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4

Calcular la suma de las cantidades, la cantidad mxima, la mnima, la media y contar todos los productos que existen en stock.
pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 Acant 156 1234 69 120 345 5000 200 956 134 120 542

SELECT SUM(acant), MAX(acant), MIN(acant), AVG(acant), COUNT(*) FROM AExistencias ;


SUM(acant) 8876 MAX(acant) MIN(acant) 5000 69 AVG(acant) 872 COUNT(*) 11

c) Contar los productos de los que haya existencia en algn almacn. COUNT (*) SELECT COUNT (DISTINCT pid) 5 FROM AExistencias ;

4.3 GROUP BY
Cuando se quiera aplicar las funciones agregadas a subgrupos de tuplas de una relacin agruparemos las tuplas que tienen el mismo valor para ciertos atributos. Los llamaremos atributos de agrupacin y podremos aplicar las funciones a cada uno de dichos grupos. Para especificar los atributos de agrupacin se utiliza la clusula GROUP BY. Los atributos de agrupacin pueden aparecer en la clusula SELECT. a) Calcular para cada almacn el nmero de productos en stock y la cantidad total.
aid A2 A2 A2 A2 A2 A3 A4 A4 A4 A4 A4 pid P1 P2 P3 P10 P11 P3 P1 P2 P3 P10 P11 acant 156 1234 69 120 345 5000 200 956 134 120 542 aid A2 A3 A4 COUNT(*) 5 1 5 SUM(acant) 1924 5000 1952

SELECT aid, COUNT(*), SUM(acant) FROM AExistencias GROUP BY aid;

HAVING HAVING especifica una condicin sobre el grupo de tuplas asociado a cada valor de los atributos de agrupacin (clases de equivalencia). Slo los grupos que cumplan la condicin entrarn en el resultado de la consulta. b) Para las tiendas que hayan hecho ms de un pedido al mismo almacn calcular la cantidad total pedida. Pedidos
pdid PD10 PD20 PD30 PD40 PD50 PD60 PD70 tid T1 T1 T2 T2 T4 T4 T4 aid A2 A2 A2 A4 A2 A4 A2 pid P1 P2 P10 P11 P10 P11 P11 cant 100 150 50 70 80 25 40 fecha 10/12/03 12/12/03 14/12/03 11/12/03 10/12/03 13/12/03 14/12/03

SELECT tid, aid, SUM(acant) FROM Pedidos GROUP BY aid, tid HAVING COUNT(*) > 1;

tid T1 T4 A2 A2

aid

SUM(acant) 250 120

4.4 EJEMPLO
a)

Almacn con mayor nmero de productos. Utilizando ALL SELECT AE.aid, Sum(AE.acant) FROM AE GROUP BY AE.aid HAVING Sum(AE.acant) >= ALL (SELECT Sum(AE.acant) FROM AE GROUP BY AE.aid); Utilizando TOP SELECT AE.aid, Sum(AE.acant) FROM AE GROUP BY AE.aid HAVING Sum(AE.acant) =

( SELECT TOP 1 Sum(AE.acant) FROM AE GROUP BY AE.aid ORDER BY 1 DESC);

Mediante SELECT anidados SELECT AE.aid, sum(AE.acant) FROM AE GROUP BY AE.aid HAVING sum(acant) = ( SELECT Max(total) FROM ( SELECT Sum(Sx.acant) as total FROM AE GROUP BY AE.aid ) );

5 Actualizacin de datos 5.1 INSERT


Sirve para aadir tuplas a la BD INSERT INTO Productos VALUES (P20, Cadena A100, 20,200); Se pueden aadir mltiples filas utilizando la clasula SELECT. INSERT INTO SELECT FROM WHERE ProductoPedidos (Pid, Nombre, Precio) Pid, Pdesc, Pprecio Productos pprecio >30;

5.2 DELETE
Elimina tuplas de una relacin. La eliminacin puede propagarse a tuplas de otras relaciones si tal accin est especificada en las restricciones de integridad referencial. DELETE FROM Productos WHERE pprecio >30;

5.3 UPDATE
Modifica los valores de los atributos. UPDATE Productos SET pprecio = 200 WHERE pid = P1; UPDATE SET WHERE Productos pprecio = pprecio * 1.2 pid IN (SELECT pid FROM pedidos) ;

6 Vistas
Una vista es una estructura tabular derivada de otras tablas. Una vista no se materializa en SQL; se genera en el momento de su ejecucin. CREATE VIEW Producto_pedido AS SELECT PD.pdid, PD.pid, P.pdesc, PD.cantidad FROM productos P, pedidos PD WHERE P.pid = PD.pid;

Pg. 14 de 21

TRABAJO AVERIGUAR DML Y DDL

Pg. 15 de 21

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