Está en la página 1de 27

Principales Sentencias DDL CREATE TABLE El nombre de tabla surge porque, originalmente, los archivos de las bases de datos

s relacionales se llamaban relaciones. Se comenz a denominar tabla a los archivos lgicos, por su naturaleza bidimensional, para evitar confusiones. Por ejemplo (considerando el grupo de tablas n 1): CREATE TABLE S (S_NUMERO CHAR (5) NOT NULL, S_NOMBRE CHAR (20) NOT NULL, ESTADO SMALLINT NOT NULL, CIUDAD CHAR (15) NOT NULL); S es el nombre de la tabla a crear y entre parntesis estn declarados cada uno de los atributos, es decir las columnas o campos del archivo. El campo clave es SNRO. La tabla S representa a todos los proveedores que son de inters para el negocio en el cual la base de datos est dando servicio. SNRO representa el nmero de proveedor, indicando el tipo de carcter, en este caso char (alfabtico); not null. Not null significa que en ese campo no podr haber valores indefinidos (restriccin de integridad). SNOMBRE, representa el nombre completo del proveedor; carcter alfabtico, not null. ESTADO, representa un nmero que se le da a cada proveedor segn el inters del negocio; smallint (entero pequeo) acota la cantidad de bits que se van a utilizar para definir el nmero entero, not null. CIUDAD, representa la ciudad donde reside el proveedor; carcter alfabtico, not null. El campo clave siempre debe ser not null, esto es, debe tener un valor definido. As se consigue crear el archivo proveedor. El conjunto de sentencias create determina el esquema de la base de datos. ALTER TABLE Esta sentencia sirve para modificar la estructura de un archivo, agregar o eliminar campos. La usa el administrador de la base de datos. La sintaxis de esta sentencia es: ALTER TABLE NOMBRE_ARCHIVO ADD (COLUMNA TIPO DE DATO); Por ejemplo (considerando el grupo de tablas n 1): ALTER TABLE S ADD DESCUENTO SMALLINT; Esta sentencia agrega la columna descuento al archivo S. DROP TABLE El archivo especificado es removido del sistema y todos los ndices definidos en esa tabla son eliminados automticamente. Al realizar un programa deben existir tantas sentencias create como archivos tendr la base de datos y en cada sentencia create se especifican los nombres de los atributos. Si

el programa cre archivos transitorios y luego los elimin, debe haber tantas sentencias create como drop. AADIR DATOS Nos permite insertar filas en una tabla. La sintaxis de esta sentencia es: INSERT INTO NOMBRE TABLA VALUES (VALOR, VALOR, VALOR); Esto inserta los datos en la tabla, como una nueva fila, columna por columna, en el orden predefinido. Si quisiramos los dos primeros valores y dejar el ltimo, la sintaxis sera: INSERT INTO NOMBRE TABLA (CAMPO, CAMPO) VALUES (VALOR, VALOR); BORRAR DATOS Permite borrar una fila de datos. Por ejemplo: DELETE FROM NOMBRE DE TABLA WHERE ATRIBUTO= VALOR; Pero si hubiera otra fila que contiene ese valor determinado, tambin sera borrada. Para diferenciar una fila de la otra, lo que haremos ser aadir datos.

DELETE FROM NOMBRE TABLA WHERE ATRIBUTO=VALOR AND ATRIBUTO=VALOR AND ATRIBUTO=VALOR; ACTUALIZAR DATOS La sintaxis sera: UPDATE NOMBRE ATRIBUTO=VALOR; DE TABLA SET ATRIBUTO= VALOR WHERE

Sentencias De Manipulacin De Datos (DML) SELECT

Especifica a qu campos se est haciendo referencia, qu columnas quiere recuperar. Si en lugar del nombre del campo se coloca * se recuperan todas las columnas del archivo mencionado en la clusula from. FROM Se debe indicar qu archivo/s est/n involucrado/s en la consulta. WHERE Indica los requisitos que deben cumplir las filas a ser recuperadas, es decir, la condicin lgica. El nombre completo de un campo de una tabla tiene la siguiente sintaxis: NOMBRE_TABLA.NOMBRE_CAMPO. Esta forma de expresar un campo en la clusula select se utiliza cuando puede provocar confusin al intrprete de SQL, solamente el nombre de un campo sin especificar a qu tabla pertenece. La consulta ms simple que puede realizarse tiene dos clusulas: select y from. Por ejemplo (considerando el grupo de tablas n 1): SELECT JNRO, CIUDAD FROM J; Una sentencia algo ms compleja es, por ejemplo (considerando el grupo de tablas n 1): SELECT SNRO, ESTADO FROM S WHERE CIUDAD = PARS DISTINCT Recupera solo los datos que sean distintos, no da los mismos valores, es decir, elimina los duplicados. Por ejemplo (considerando el grupo de tablas n 1): SELECT DISTINCT PNRO FROM S P;

JOIN Join sirve para unir dos ms tablas cuando tengo que hacer una consulta y necesito respuestas que se encuentran en dos ms tablas. Para esto debo igualar las tablas por el campo que tienen en comn. Por ejemplo (considerando el grupo de tablas n 1): se desea recuperar todos los datos de proveedores y repuestos para aquellos proveedores y repuestos que estn ubicados en la misma ciudad. SELECT S.*, P.* FROM S, P WHERE S.CIUDAD = P.CIUDAD

ANIDAMIENTO Hay anidamiento cuando la respuesta a nuestra consulta requiere que en la sentencia where se incorpore una nueva consulta que ser resulta en primer lugar para luego resolver la otra. Por ejemplo (considerando el grupo de tablas n 1): se desea saber el nombre de los proveedores que suministran el repuesto de nmero de repuesto con valor P2. Los atributos se encuentran en archivos distintos: nmero de proveedor en el archivo SPJ y nombre proveedor en el archivo S. SELECT SNOMBRE FROM S WHERE SNRO IN (SELECT SNRO FROM SPJ WHERE PNRO = P2); Regla sobre las subconsultas: cuando se tiene una subconsulta como parte de una condicin where, la clusula select en la subconsulta tiene que tener columnas que concuerden en nmero y tipo con aquellas que formen parte de la condicin where de la subconsulta. En otras palabras, dada la clusula "where columnname = (select...);", select debe de tener slo una columna en ella, para coincidir con la salida en la clusula where, y estas debern de coincidir en tipo. OPERADORES RELACIONALES = Igual <> Distinto < Menor que > Mayor que <= Menor o igual a => Mayor o igual que Por ejemplo (considerando el grupo de tablas n 2): se desea recuperar todos los datos de cada empleado. SELECT NOMBRE, APELLIDO, DIRECCIN, CIUDAD, PROVINCIA FROM TABLA_DIRECCION_EMPLEADO; Por ejemplo (considerando el grupo de tablas n 2): se desea obtener el cdigo de empleado para aquellos que cobran un salario por encima de 50.000. SELECT COD_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE SALARIO = > 50000; Por ejemplo (considerando el grupo de tablas n 2): se desea obtener el cdigo de aquellos empleados que tienen cargo de encargado. SELECT COD_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE CARGO = 'ENCARGADO'; Condiciones Compuestas

AND Combina dos o ms condiciones, y muestra slo las filas que satisfacen todas las condiciones listadas. Por ejemplo (considerando el grupo de tablas n 2): SELECT COD_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE SALARIO=40000 AND CARGO = TCNICO OR Combina dos o ms condiciones, y devuelve las filas para las cuales alguna de las condiciones listadas es verdadera. AND & OR pueden ser combinadas. Por ejemplo (considerando el grupo de tablas n 2): se desea ver todos aquellos cdigos de empleados que ganan menos de 40.000 o tienen menos de 10.000 en beneficios listados juntos. SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE SALARIO < 40000 OR BENEFICIOS < 10000; Por ejemplo (considerando el grupo de tablas n 2): SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE CARGO = ('ENCARGADO' AND SALARIO=60000) OR BENEFICIOS=12000; Primero se encuentran las filas donde el salario es mayor de 60.000 y la columna del cargo es igual a encargado. Una vez tomada esta nueva lista de filas se buscar si hay otras filas que satisfagan la condicin que la columna de los beneficios sea mayor de 12.000. La operacin AND se ha hecho primero. Para realizar OR antes que AND: Por ejemplo (considerando el grupo de tablas n 2): se desea ver una lista de empleados que ganan un gran salario (50.000) o con un gran beneficio (10.000), y slo se quiere para aquellos empleados con el cargo de Encargado: SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE CARGO = 'ENCARGADO' AND (SALARIO=50000 OR BENEFICIO=10000); IN y BETWEEN Un mtodo fcil de usar condiciones compuestas es usando IN o BETWEEN. Por ejemplo (considerando el grupo de tablas n 2): si se quieren listar todos los encargados y tcnicos.

SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE CARGO IN ('ENCARGADO', 'TCNICO'); Listar aquellos que ganen ms de 30.000, pero menos o igual que 50.000 (considerando el grupo de tablas n 2). SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE SALARIO BETWEEN 30000 AND 50000; Listar todos los que no estn en este rango (considerando el grupo de tablas n 2). SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE SALARIO NOT BETWEEN 30000 AND 50000; NOT IN Lista todas las filas excluyendo aquellas de la lista IN. LIKE Por ejemplo (considerando el grupo de tablas n 2): se desea ver todas las personas para las cuales su apellido comience por L. SELECT ID_EMPLEADO FROM TABLA_ESTADISTICA_EMPLEADO WHERE APELLIDOS LIKE 'L%'; El % es usado para representar un posible carcter, ya sea nmero, letra o puntuacin, o para seleccionar todos los caracteres que puedan aparecer despus de L. El % puede ser usado en lugar de cualquier carcter en la misma posicin relativa a los caracteres dados. NOT LIKE Muestra filas que no cumplen la descripcin dada. ORDER BY Permite ordenar los resultados por algn criterio, como ser alfabticamente. Por ejemplo (considerando el grupo de tablas n 3): SELECT DISTINCT ID_VENDEDOR, APELLIDOPROPIETARIO, NOMBREPROPIETARIO FROM ANTIGEDAD, PROPIETARIO_ANTIGEDAD WHERE ID_VENDEDOR = ID_PROPIETARIO ORDER BY APELLIDOPROPIETARIO, NOMBREPROPIETARIO, ID_PROPIETARIO;

El resultado es un listado de todos los propietarios, en orden alfabtico por el apellido. ALIAS & IN/SUBCONSULTAS Por ejemplo (considerando el grupo de tablas n 3): se desea saber el apellido de aquellos propietarios que han formulado un pedido y en qu consiste ste, solamente listando aquellos cuyos pedidos pueden ser atendidos (esto es, hay un vendedor que posee el producto pedido). SELECT OWN.APELLIDOPROPIETARIO Apellido, ORD.PRODUCTOPEDIDO Producto Pedido FROM PEDIDO ORD, PROPIETARIO_ANTIGEDAD OWN WHERE ORD.ID_PROPIETARIO = OWN.ID_PROPIETARIO AND ORD.PRODUCTOPEDIDO IN (SELECT PRODUCTO FROM ANTIGEDAD); OWN & ORD Son alias; estos son dos nuevos nombres para las dos tablas listadas en la clusula from que son usados como prefijos de los nombres de las columnas en la consulta. Esto elimina ambigedades, especialmente en la clusula where donde ambas tablas tienen la columna ID_Propietario, y la notacin con punto establece que se refiere a dos diferentes ID_Propietario de dos tablas diferentes. La tabla de pedido est utilizada primero en la clusula from. Esto asegura que el listado es hecho basndose en esta tabla, y la tabla propietario_antigedad es solamente usada para la informacin complementaria (apellidos).

FUNCIONES AGREGADAS SUM () AVG () MAX () MIN () Devuelve el total de las filas, satisfaciendo todas las condiciones de una columna dada, cuando la columna dada es numrica. Devuelve la media de una columna dada. Devuelve el mayor valor de una columna dada. Devuelve el menor valor en una columna dada.

COUNT(*) Devuelve el nmero de filas que satisfacen las condiciones.

Por ejemplo (considerando el grupo de tablas n 3): SELECT SUM(SALARIO), AVG(SALARIO) FROM TABLA_ESTADISTICA_EMPLEADO; Esta consulta muestra el total de los salarios de la tabla, y la media salarial de todas las entradas en la tabla.

SELECT MIN(BENEFICIOS) FROM TABLA_ESTADISTICA_EMPLEADO WHERE CARGO = 'ENCARGADO'; Esta consulta devuelve el menor valor de la columna de beneficios, de los empleados que son encargados, el cual es 12.500. SELECT COUNT(*) FROM TABLA_ESTADISTICA_EMPLEADO WHERE CARGO = 'TCNICO'; Esta consulta nos dice cuntos empleados tienen la categora de tcnico. En el ejemplo, el resultado es 3. GROUP BY & HAVING Un uso especial de group by es asociar una funcin agregada (especialmente count) con grupos de filas. Por ejemplo (considerando el grupo de tablas n 3): suponer que la tabla antigedad tiene la columna precio, y que cada fila tiene un valor para esta columna. Se quiere recuperar el precio del

producto ms caro comprado por cada comprador. Habr que agrupar cada tipo de compra y obtener el mayor precio para cada grupo. SELECT ID_COMPRADOR, MAX(PRECIO) FROM ANTIGEDAD GROUP BY ID_COMPRADOR; Si slo se quiere ver el precio mximo de la compra, si ste es mayor que $1000, se usa la clusula having. SELECT ID_COMPRADOR, MAX(PRECIO) FROM ANTIGEDAD GROUP BY ID_COMPRADOR HAVING PRECIO > 1000; UPDATE Por ejemplo (considerando el grupo de tablas n 3): si se sabe que el hombre que compr la biblioteca tiene el nombre que no coincide con el nombre ingresado a la base de datos por un error de quien ingres los datos inicialmente y ste debiera ser John. UPDATE PROPIETARIO_ANTIGEDAD SET NOMBREPROPIETARIO = 'John'

WHERE ID_PROPIETARIO = (SELECT ID_COMPRADOR FROM ANTIGEDAD WHERE PRODUCTO = 'BIBLIOTECA'); Primero, la subconsulta encuentra el ID_comprador de la persona que compr la biblioteca, despus la consulta de salida actualiza el nombre. EXISTS & ALL Exists usa una subconsulta como condicin, donde la condicin es verdadera si la subconsulta dvuelve alguna fila, y falsa si la subconsulta no devuelve ninguna fila. Por ejemplo (considerando el grupo de tablas n3): un empleado quiere ver la lista de propietario_antigedad slo si hay sillas disponibles. SELECT NOMBREPROPIETARIO, APELLIDOPROPIETARIO FROM PROPIETARIO_ANTIGEDAD WHERE EXISTS (SELECT * FROM ANTIGEDAD WHERE PRODUCTO = 'Silla'); Si hay alguna silla en la columna antigedad, la subconsulta devolver una o varias filas, haciendo la clusula exists verdadera, haciendo que SQL liste los propietario_antigedad. Si no ha habido sillas, ninguna fila ser devuelta por la subconsulta. SELECT ID_COMPRADOR, PRODUCTO FROM ANTIGEDAD WHERE PRECIO = ALL (SELECT PRECIO FROM ANTIGEDAD); Esto devolver el precio de producto ms alto (o ms de un producto si hay un empate), y su comprador. La subconsulta devuelve una lista de todos los precios de la tabla antiguedad, y la consulta de salida va fila por fila de la tabla antiguedad y si el precio es mayor o igual a todos (o ALL) los precios en la lista, es listado, dando el precio del producto ms caro. La razn de "=" es que el mayor precio en la lista puede ser igual al de la lista, ya que este producto est en la lista de precios. UNION Hay ocasiones donde se puede querer ver los resultados de mltiples consultas a la vez combinando sus salidas; para esto se utiliza la clusula union. Por ejemplo (considerando el grupo de tablas n 3): se trata de recuperar todos los id_comprador de la tabla de antigedad junto con los id_propietario de la tabla de pedido: SELECT ID_COMPRADOR FROM ANTIGEDAD

UNION SELECT ID_PROPIETARIO FROM PEDIDO; SQL requiere que la lista de select coincida, columna por columna, en el tipo de datos. En este caso ID_comprador e ID_Propietario son del mismo tipo (integer). Adems, SQL elimina automticamente los duplicados cuando se usa UNION (como si ellos fueran dos "conjuntos"); en las consultas simples, hay que usar DISTINCT.

SELECT ID_PROPIETARIO, 'is in both PEDIDO & ANTIGEDAD' FROM PEDIDO, ANTIGEDAD WHERE ID_PROPIETARIO = ID_COMPRADOR UNION SELECT ID_COMPRADOR, 'is in ANTIGEDAD only' FROM ANTIGEDAD WHERE ID_COMPRADOR NOT IN (SELECT ID_PROPIETARIO FROM PEDIDO);

Se realiza una unin para listar todos los propietario que estn en ambas tablas, y pone una lnea etiqueta despus de id repitiendo la cita. Union une esta lista con la siguiente lista. la segunda lista es generada primero listando aquellos id que no estn en la tabla pedido, generando una lista de id excluidos de la consulta de unin. Entonces, cada fila en la tabla antigedad es revisada, y si el id_comprador no est en esta lista de exclusin, es listado con su etiqueta. VISTAS En SQL, se puede tener acceso a crear vistas. Lo que una vista hace es permitirte asignar resultados de una consulta a una tabla temporal, que se puede usar en otras consultas, pudiendo utilizar el nombre dado a la tabla de tu vista en la clusula from. Cuando se accede a una vista, la consulta que est definida en la sentencia est relacionada y los resultados de esta consulta son como cualquier otra tabla en la consulta que se escribi invocando la vista. Por ejemplo (considerando el grupo de tablas n 3): para crear una vista. CREATE VIEW ANTVIEW AS SELECT PRODUCTOPEDIDO FROM PEDIDO; Una consulta usando esta vista como tabla, donde la tabla es un listado de todos los productos pedido de la tabla pedido, puede ser: SELECT ID_VENDEDOR FROM ANTIGEDAD, ANTVIEW WHERE PRODUCTOPEDIDO = PRODUCTO;

Esta consulta muestra todos los id_vendedor de la tabla antigedad donde el producto aparece en la vista antview, la cual no es ms que todos los productos pedidos de la tabla pedido. El listado es generado yendo uno por uno por la tabla antigedad hasta donde hay una coincidencia con la vista antview. Las vistas pueden ser usadas para restringir el acceso a las bases de datos, as como para simplificar una consulta compleja.

3.9. Anexos 3.9.1. Ejemplo de Base de Datos Relacional: Chris Date Dadas las tablas: S (proveedores) cuya clave principal es SNRO. SNRO SNAME ESTADO CITY S1 SMITH 20 LONDON S2 JONES 10 PARIS S3 BLAKE 30 PARIS S4 CLARK 20 LONDON S5 ADAMS 30 ATHENS P (partes) cuya clave principal es PNRO PNRO PNAME COLORES WEIGHT P1 NUT RED 12 P2 BOLT GREEN 17 P3 SCREW BLUE 17 P4 SCREW RED 14 P5 CAM BLUE 12 P6 COG RED 19 J (proyecto) cuya clave principal es JNRO JNRO JNAME CITY J1 SORTER PARIS J2 PUNCH ROME J3 READER ATHENS J4 CONSOLE ATHENS J5 COLLATOR LONDON J6 TERMINAL OSLO J7 TAPE LONDON SPJ(que especifica qu proveedor, provee una determinada parte para un proyecto especifico)

CITY LONDON PARIS ROME LONDON PARIS LONDON

Su clave es compuesta y est definida por los atributos SNRO-PNRO-JNRO.


SNRO S1 S1 S2 S2 S2 S2 S2 S2 S2 S2 S3 S3 S4 S4 S5 S5 S5 S5 S5 S5 S5 S5 S5 S5 P1 P1 P3 P3 P3 P3 P3 P3 P3 P5 P3 P4 P6 P6 P2 P2 P5 P5 P6 P1 P3 P4 P5 P6 PNRO J1 J4 J1 J2 J3 J4 J5 J6 J7 J2 J1 J2 J3 J7 J2 J4 J5 J7 J2 J4 J4 J4 J4 J4 JNRO QTY 200 700 400 200 200 500 600 400 800 100 200 500 300 300 200 100 500 100 200 100 200 800 400 500

Hemos hecho algunas modificaciones en los nombres de los campos, respecto del ejercicio planteado por Date, ya que utilizaba caracteres reservados por SQL y , por ende, no es posible utilizarlos como nombres de atributos. As en la tabla S reemplazamos el campo STATUS por ESTADO, en la tabla P reemplazamos COLOR por COLORES. Asimismo no puede utilizarse el carcter especial #, por lo que utilizamos en su lugar la expresin NRO, en todas las tablas (SNRO, PNRO, JNRO).

Consultas simples: 1. Obtener todos los detalles de todos los proyectos SELECT JNRO,JNAME,CITY FROM J; JNRO J1 J2 J3 J4 JNAME SORTER PUNCH READER CONSOLE CITY PARIS ROME ATHENS ATHENS

J5 J6 J7

COLLATOR LONDON TERMINAL OSLO TAPE LONDON 2. Obtener todos los detalles de todos los proyectos realizados en Londres. SELECT JNRO, JNAME, CITY FROM J WHERE CITY=LONDON; JNRO

J5 J7

JNAME CITY COLLATOR LONDON TAPE LONDON

3. Obtener los nmeros de proveedores que suministraron partes al proyecto J1, ordenados por nmero de proveedor. SELECT DISTINCT SNRO FROM SPJ WHERE JNRO=J1 ORDER BY SNRO; SNRO S1 S2 S3 4. Obtener una lista de todas las combinaciones de colores de partes/ ciudades de partes, eliminando los duplicados. SELECT DISTINCT COLORES, CITY FROM P; COLORES CITY BLUE PARIS BLUE ROME GREEN PARIS RED LONDON Joins: 5. Obtener los nmeros de partes que hayan sido provistas por un proveedor en Londres. SELECT DISTINCT PNRO FROM SPJ, S WHERE SPJ.SNRO=S.SNRO AND CITY=LONDON; PNRO P1 P6

6. Obtener los nmeros de partes que hayan sido suministradas por un proveedor en Londres para un proyecto en Londres. SELECT DISTINCT PNRO FROM SPJ, S, J WHERE SPJ.SNRO=S.SNRO AND SPJ.JNRO=J.JNRO AND S.CITY=LONDON AND J.CITY=LONDON; PNRO P6 7. Obtener todos los pares de nombres de ciudades tal que un proveedor de la primera ciudad haya enviado partes a un proyecto en la segunda ciudad. SELECT DISTINCT S.CITY, J.CITY FROM S, SPJ, J WHERE S.SNRO=SPJ.SNRO AND SPJ.JNRO=J.JNRO; S.CITY ATHENS ATHENS ATHENS LONDON LONDON LONDON PARIS PARIS PARIS PARIS PARIS J.CITY ATHENS LONDON ROME ATHENS LONDON PARIS ATHENS LONDON OSLO PARIS ROME

8. Obtener los nmeros de partes provistas para cualquier proyecto por un proveedor de la misma ciudad que el proyecto. SELECT DISTINCT PNRO FROM SPJ, S, J WHERE SPJ.SNRO=S.SNRO AND SPJ.JNRO=J.JNRO AND S.CITY=J.CITY; PNRO P1 P2 P3

P4 P5 P6 9. Obtener los nmeros de proyectos que hayan sido provistos por al menos un proveedor que no se encuentre en la misma ciudad. SELECT DISTINCT J.JNRO FROM SPJ, S, J WHERE SPJ.SNRO=S.SNRO AND SPJ.JNRO=J.JNRO AND S.CITY<>J.CITY; JNRO J1 J2 J3 J4 J5 J6 J7

Otras funciones: 10. Para cada parte que haya sido enviada para algn proyecto, obtener el nmero de parte, el nmero de proyecto, y la cantidad total correspondiente. SELECT PNRO, JNRO, SUM (QTY) FROM SPJ GROUP BY PNRO, JNRO; PNRO P1 P1 P2 P2 P3 P3 P3 P3 P3 P3 P3 P4 P4 P5 P5 P5 J1 J4 J2 J4 J1 J2 J3 J4 J5 J6 J7 J2 J4 J2 J4 J5 JNRO Expr1002 200 800 200 100 600 200 200 700 600 400 800 500 800 100 400 500

P5 P6 P6 P6 P6

J7 J2 J3 J4 J7

100 200 300 500 300

11. Obtener nmeros de partes de aquellas partes suministradas para algn proyecto en una cantidad promedio mayor a 320. SELECT DISTINCT PNRO FROM SPJ GROUP BY PNRO, JNRO HAVING AVG (QTY)>320; PNRO P1 P3 P4 P5 P6 Subconsultas: 12. Obtener los nombres de proyectos de aquellos proyectos que hayan sido provistos por el proveedor S1. SELECT JNAME FROM J WHERE JNRO IN (SELECT JNRO FROM SPJ WHERE SNRO=S1); JNAME SORTER CONSOLE 13. Obtener los colores de partes provistas por el proveedor S1. SELECT DISTINCT COLORES FROM P WHERE PNRO IN (SELECT PNRO FROM SPJ WHERE SNRO=S1); COLORES RED

14. Obtener los nmeros de partes provistas para cualquier proyecto en Londres. SELECT DISTINCT PNRO FROM SPJ WHERE JNRO IN (SELECT JNRO FROM J WHERE CITY=LONDON); PNRO P3 P5 P6 15. Obtener los nmeros de proyectos de aquellos que usen al menos una parte disponible del proveedor S1. SELECT DISTINCT JNRO FROM SPJ WHERE PNRO IN (SELECT PNRO FROM SPJ WHERE SNRO=S1); JNRO J1 J4 16. Obtener los nmeros de proveedores de aquellos cuyo estado sea ms bajo que el del proveedor S1. SELECT SNRO FROM S WHERE ESTADO < (SELECT ESTADO FROM S WHERE SNRO=S1); SNRO S2

17. Repetir el ejercicio 14 utilizando EXISTS. SELECT DISTINCT PNRO FROM SPJ WHERE EXISTS (SELECT *

FROM J WHERE JNRO=SPJ.JNRO AND CITY=LONDON); PNRO P3 ID_SOCIO P5 0001 P6


0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015

APELLIDO LOPEZ GIMENEZ MUOS MANSILLA FERNANDEZ FARETA DIAZ MAZA BRUNI GARCA PRADA STAMATI GAUTO ALVIRA NAVAS

NOMBRE DIEGO EMILIO ROMINA FERNANDA GABRIEL MARCELO LEANDRO PAULA LUIS CORINA DIEGO NORMA JORGE PEDRO VERONICA

CIUDAD CORDOBA ROSARIO BS AS BS AS SANTA FE LA PLATA BS AS ROSARIO BS AS MENDOZA BS AS MENDOZA LA PLATA SANTA FE ROSARIO

3.9.2. Ejemplo de Base de Datos Relacional: Sociedad de criadores de perros de la raza ZZZ (modificado) Vale aclarar que a continuacin se expone uno de los ejemplos que han sido presentados en el CD del presente trabajo. Para ms detalles remitimos al mismo.

AMO CONCURSOS AO_CONCUROS 1997 1998 1998 1999 1999 2000 PERRO ID_PERRO 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 POSICIN ID_PERRO 101 101 101 102 105 105 105 106 107 107 TIPO_ CONCURSO ADIESTRAMIENTO ADIESTRAMIENTO VELOCIDAD VELOCIDAD ADIESTRAMIENTO VELOCIDAD VELOCIDAD ADIESTRAMINETO ADIESTRAMIENTO ADIESTRAMIENTO CIUDAD_CONCURSO AO_CONCURSO MAR DEL PLATA 1997 ROSARIO 1999 BS AS 1998 BS AS 2000 MAR DEL PLATA 1997 BS AS 1998 BS AS 2000 MAR DEL PLATA 1997 MAR DEL PLATA 1997 ROSARIO 1999 PUESTO 2do 2do 1ro 1ro NC NC 3ro 1ro 3ro 3ro NOMBRE_PERRO BOBI NEGRA TOBY CICLON SHIPZY TITA LOBA INDIA RAMBO DINAMITA OREJA CHUCHI DAISY MILI CHICHO LULA MANCHA LORENZO MIKA MAGGI SEXO MACHO HEMBRA MACHO MACHO MACHO HEMBRA HEMBRA HEMBRA MACHO MACHO MACHO HEMBRA HEMBRA HEMBRA MACHO HEMBRA MACHO MACHO HEMBRA HEMBRA TIPO_CONCURSO ADIESTRAMIENTO ESTRUCTURA VELOCIDAD ADIESTRAMIENTO ESTRUCTURA VELOCIDAD CIUDAD_CONCURSO MAR DEL PLATA BS AS BS AS ROSARIO CORDOBA BS AS

FECHA NACIMIENTO FECHA MUERTE 15-03-94 16-08-95 17-08-93 20-03-94 13-12-95 25-01-90 11-11-91 23-09-88 15-10-96 11-02-86 20-12-85 21-09-91 20-07-02 17-03-90 13-12-86 12-08-98 22-09-91 04-04-86 17-09-00 17-08-88 19-05-89 18-12-85 22-06-90 22-07-84 01-01-96

107 111 112 112 112 114 114 119 119 PROPIEDAD ID_SOCIO 0001 0002 0003 0003 0004 0004 0005 0005 0006 0007 0008 0009 0009 0010 0011 0011 0012 0012 0013 0013 0014 0014 0015 0015 0016 0016 PARENTESCO

VELOCIDAD ESTRUCTURA ESTRUCTURA ESTRUCTURA VELOCIDAD ESTRUCTURA ESTRUCTURA ADIESTRAMIENTO ESTRUCTURA

BS AS BS AS BS AS CORDOBA BS AS BS AS CORDOBA ROSARIO BS AS

1998 1998 1998 1999 1998 1998 1999 1999 1998

3ro 3ro 2do NC 2do NC 2do 1ro 1ro

ID_PERRO 119 115 102 104 101 109 103 111 107 119 105 103 105 102 105 106 101 112 113 117 113 119 103 119 104 120

FECHA_DESDE 01-01-91 10-04-86 23-07-84 25-05-94 16-03-94 15-02-86 21-07-02 25-10-91 15-01-92 21-09-00 15-12-95 20-08-93 05-09-02 20-08-95 13-12-95 23-01-90 15-03-94 17-03-90 13-12-86 19-05-89 25-12-90 22-06-90 17-08-93 20-09-92 20-03-94 22-07-84

FECHA_HASTA 20-09-00 17-09-00 01-01-96 20-02-96

20-07-02

31-08-02 20-07-02

16-03-94 25-12-89 12-08-98 01-01-91 20-08-93 21-09-00 25-05-94 01-01-96

PERRO1_ID_PERRO PERRO2_ID_PERRO TIPO_PARENTESCO 109 101 PADRE 70% 110 101 PADRE 20% 111 101 PADRE 10% 112 101 MADRE 117 102 PADRE 70%

118 111 116 115 110 109 119 118 115 111 120 110 109 118 106 109 110 115 113 118 110 115 113

102 102 102 103 103 103 103 104 104 104 104 105 105 105 105 119 119 119 119 117 117 117 117

PADRE 20% PADRE10% MADRE PADRE 70% PADRE 20% PADRE 10% MADRE PADRE 70% PADRE 20% PADRE 10% MADRE PADRE 70% PADRE 20% PADRE 10% MADRE PADRE 70% PADRE 20% PADRE 10% MADRE PADRE 70% PADRE 20% PADRE 10% MADRE

Consulta 1: Obtener ID y nombre de todos los perros SELECT ID_PERRO, NOMBRE_PERRO FROM PERRO;
ID_PERRO 101 102 103 104 105 106 107 108 109 110 111 NOMBRE_PERRO BOBI NEGRA TOBY CICLON SHIPZY TITA LOBA INDIA RAMBO DINAMITA OREJA

112 113 114 115 116 117 118 119 120

CHUCHI DAISY MILI CHICHO LULA MANCHA LORENZO MIKA MAGGI

Consulta 2: Recuperar el nombre, apellido y nmero de socio de los miembros que vivan en Bs. As. SELECT ID_SOCIO, APELLIDO, NOMBRE FROM AMO WHERE CIUDAD= "BS AS";
ID_SOCIO 0003 0004 0007 0009 0011 NOMBRE ROMINA FERNANDA LEANDRO LUIS DIEGO APELLIDO MUOS MANSILLA DIAZ BRUNI PRADA

Consulta 3: Obtener los tipos de concursos realizados en BS AS. SELECT DISTINCT TIPO_CONCURSO FROM CONCURSO WHERE CIUDAD_CONCURSO= "BS AS";
TIPO_CONCURSO ESTRUCTURA VELOCIDAD

Consulta 4: Obtener todos los datos de los perros que fueron padres o madres. SELECT DISTINCT PERRO.* FROM PERRO, PARENTESCO WHERE PERRO.ID_PERRO = PARENTESCO.PERRO1_ID_PERRO;
ID_PERRO NOMBRE_PERRO SEXO FECHA FECHA

106 109 110 111 112 113 115 116 117 118 119 120

TITA RAMBO DINAMITA OREJA CHUCHI DAISY CHICHO LULA MANCHA LORENZO MIKA MAGGI

HEMBRA MACHO MACHO MACHO HEMBRA HEMBRA MACHO HEMBRA MACHO MACHO HEMBRA HEMBRA

NACIMIENTO 25-01-90 11-02-86 20-12-85 21-09-91 17-03-90 13-12-86 04-04-86 17-08-88 19-05-89 18-12-85 22-06-90 22-07-84

MUERTE

20-07-02 12-08-98 17-09-00

01-01-96

Consulta 5: Obtener los datos de todas las perras que fueron madres. SELECT DISTINCT PERRO.* FROM PERRO, PARENTESCO WHERE PERRO.ID_PERRO = PARENTESCO.PERRO1_ID_PERRO and PARENTESCO.TIPO_PARENTESCO = "MADRE";
ID_PERRO 106 112 113 116 119 120 NOMBRE_PERRO TITA CHUCHI DAISY LULA MIKA MAGGI SEXO HEMBRA HEMBRA HEMBRA HEMBRA HEMBRA HEMBRA FECHA NACIMIENTO 25-01-90 17-03-90 13-12-86 17-08-88 22-06-90 22-07-84 FECHA MUERTE

12-08-98

01-01-96

Consulta 6: Obtener los datos de todos los perros que fueron padres. SELECT DISTINCT PERRO.* FROMO PERRO, PARENTESCO WHERE PERRO.ID_PERRO = PARENTESO.PERRO1_ID_PERRO and TIPO_PARENTESCO <> "MADRE";
ID_PERRO 109 110 111 115 117 118 NOMBRE_PERRO RAMBO DINAMITA OREJA CHICHO MANCHA LORENZO SEXO MACHO MACHO MACHO MACHO MACHO MACHO FECHA NACIMIENTO 11-02-86 20-12-85 21-09-91 04-04-86 19-05-89 18-12-85 FECHA MUERTE

20-07-02 17-09-00

Consulta 7: Obtener cdigo de identificacin y el nombre de los perros que lograron el 1er puesto en algn concurso. SELECT ID_PERRO, NOMBRE_PERRO FROM PERRO WHERE ID_PERRO IN (SELECT ID_PERRO FROM POSICION WHERE PUESTO = "1ro";
ID_PERRO 101 102 106 119 NOMBRE_PERRO BOBI NEGRA TITA MIKA

Consulta 8: Obtener los datos de los socios con sus respectivos perros. SELECT DISTINCT AMO.*, "es dueo de", PERRO.NOMBRE_PERRO FROM AMO, PERRO, PROPIEDAD WHERE PROPIEDAD.ID_SOCIO=AMO.ID_SOCIO PROPIEDAD.ID_PERRO=PERRO.ID_PERRO;
APELLIDO ALVIRA ALVIRA BRUNI BRUNI DIAZ FARETA FERNANDEZ FERNANDEZ GARCA GAUTO GAUTO GIMENEZ LOPEZ MANSILLA MANSILLA MAZA MUOS MUOS NAVAS NAVAS PRADA PRADA STAMATI NOMBRE PEDRO PEDRO LUIS LUIS LEANDRO MARCELO GABRIEL GABRIEL CORINA JORGE JORGE EMILIO DIEGO FERNANDA FERNANDA PAULA ROMINA ROMINA VERONICA VERONICA DIEGO DIEGO NORMA NOMBRE_PERRO DAISY MIKA SHIPZY TOBY MIKA LOBA OREJA TOBY NEGRA DAISY MANCHA CHICHO MIKA BOBI RAMBO SHIPZY CICLON NEGRA MIKA TOBY SHIPZY TITA BOBI

AND

STAMATI

NORMA

CHUCHI

Consulta 9: Indicar quines fueron dueos de LOBO (ID_PERRO = 110 ) SELECT DISTINCT AMO.ID_SOCIO, AMO.APELLIDO, AMO.NOMBRE FROM AMO, PROPIEDAD WHERE (AMO.ID_SOCIO IN (SELECT PROPIEDAD.ID_SOCIO FROM PROPIEDAD WHERE ID_PERRO = "110"));
ID_SOCIO 0001 0007 0014 0015 APELLIDO LOPEZ DIAZ ALVIRA NAVAS NOMBRE DIEGO LEANDRO PEDRO VERONICA

Consulta 10: Obtener todos los datos de los perros que obtuvieron el segundo lugar en algn concurso SELECT PERRO.* FROM PERRO WHERE ID_PERRO IN (SELECT ID_PERRO FROM POSICION WHERE PUESTO = "2do";
FECHA NACIMIENTO 17-03-90 15-03-94 15-03-94 22-09-91 17-03-90 FECHA MUERTE

ID_PERRO 112 101 101 114 112

NOMBRE_PERRO CHUCHI BOBI BOBI MILI CHUCHI

SEXO HEMBRA MACHO MACHO HEMBRA HEMBRA

Consulta 11: Indicar quienes fueron dueos de Shipzy (ID_PERRO=105) SELECT DISTINCT AMO.ID_SOCIO, AMO.APELLIDO, AMO.NOMBRE FROM AMO, PROPIEDAD WHERE (AMO.ID_SOCIO IN (SELECT PROPIEDAD.ID_SOCIO FROM PROPIEDAD WHERE ID_PERRO = "105"));
ID_SOCIO 0008 0009 APELLIDO MAZA BRUNI NOMBRE PAULA LUIS CIUDAD ROSARIO BS AS

0011

PRADA

DIEGO

BS AS

Consulta 12: Indicar todos los datos de los posibles padres de Mancha (ID_PERRO=117) SELECT PERRO.* FROM PERRO, PARENTESCO WHERE PERRO.ID_PERRO =PARENTESCO.PERRO1_ID_PERRO PARENTESCO.PERRO2_ID_PERRO=102 PARENTESCO.TIPO_PARENTESCO <>MADRE;
FECHA NACIMIENTO 19-05-89 18-12-85 21-09-91

And And

ID_PERRO 117 118 111

NOMBRE_PERRO MANCHA LORENZO OREJA

SEXO MACHO MACHO MACHO

FECHA MUERTE

20-07-02

Consulta 13: Recuperar los nombres de los perros que alguna vez concursaron en BS AS. SELECT DISTINCT PERRO.ID_PERRO, PERRO.NOMBRE_PERRO FROM PERRO, POSICIN WHERE POSICIN.ID_PERRO=PERRO.ID_PERRO POSICIN.CIUDAD_CONCURSO=BS AS;
ID_PERRO 101 102 105 107 111 BOBI NEGRA SHIPZY LOBA OREJA NOMBRE_PERRO

And

112 114 119 EJERCICIOS

CHUCHI MILI MIKA

2.2. Modelado Esttico - Uso del DBDesigner 2.2.1. Disear la BdeD (Perros ZZZ) 2.2.2. Transferencia del DBScheme al DBMS en forma automtica 2.2.3. Carga de la Base de Datos 2.2.4. Prctica de SQL usando el apunte de (Problema S-P-J de Chris DATE - Todos los Ejercicios! 2.2.5. Ejercicios de complejidad creciente en la BdeD de los Perros ZZZ hasta llegar a: Nombre y Apellido de Amos que sean o hayan sido dueos de Perros cuyos hijos

o nietos (de los Perros) hayan obtenido 1,2 o 3ros puestos en concurso de Velocidad o de Adiestramiento realizados o en Mza o en Cba. 2.1.6. Teniendo con origen el DBScheme de la BdeD en formato .txt, reconstituir el Diagrama Entidad Relacin (Ing. Reversa)