T.50 BASEDATOS

4

Click here to load reader

description

Ejercicios Tablas Base Datos

Transcript of T.50 BASEDATOS

  • Tema 50.- Combinacin externa derecha (rightJoin)

    "leftjoin" la primera tabla (izquierda) es la que busca coincidencias en la segunda tabla(derecha); en el "rightjoin" la segunda tabla (derecha) es la que busca coincidencias en la primeratabla (izquierda).Note: que la tabla que busca coincidencias ("editoriales") est en primer lugar porque es un "leftjoin"; en el "rightjoin" precedente, estaba en segundo lugar.Un "rightjoin" hace coincidir registros en una tabla (derecha) con otra tabla (izquierda); si un valor de la tabla de la derecha no encuentra coincidencia en la tabla izquierda, se genera una fila extra (una por cada valor no encontrado) con todos los campos correspondientes a la tabla izquierda seteados a "null". La sintaxis bsica es la siguiente:

    select CAMPOSfrom TABLAIZQUIERDArightjoin TABLADERECHAon CONDICION;

    Problema: Una librera almacena la informacin de sus libros para la venta en dos tablas, "libros" y"editoriales".Eliminamos ambas tablas, las creamos y agregamos dos restricciones "primarykey" sobre loscampos "cdigo" de las dos tablas:

    drop table libros;drop table editoriales;

    createtable libros(codigonumber(5),titulo varchar2(40),autor varchar2(30),codigoeditorialnumber(3));

    createtable editoriales(codigonumber(3),nombre varchar2(20));

    alter table librosadd constraint PK_librosprimarykey(codigo);

    alter table editorialesadd constraint PK_editorialesprimarykey(codigo);

    Ingresamos algunos registros en ambas tablas:insert into editoriales values(1,'Planeta');insert into editoriales values(2,'Emece');

  • Tema 50.- Combinacin externa derecha (rightJoin)

    insert into editoriales values(3,'Siglo XXI');insert into editoriales values(4,'Norma');

    insert into libros values(100,'El aleph','Borges',1);insert into libros values(101,'Martin Fierro','Jose Hernandez',1);insert into libros values(102,'Aprenda PHP','Mario Molina',2);insertinto libros values(103,'Java en 10 minutos',null,4);insertinto libros values(104,'El anillo del hechicero','Carol Gaskin',4);

    Solicitamos el ttulo y nombre de la editorial de los libros empleando un "rightjoin":

    selecttitulo,nombre as editorialfrom libros lrightjoin editoriales eoncodigoeditorial = e.codigo;

    Las editoriales de las cuales no hay libros, es decir, cuyo cdigo de editorial no est presente en "libros" aparece en el resultado, pero con el valor "null" en el campo "titulo"; caso de la editorial "Siglo XXI".Realizamos la misma consulta anterior agregando un "where" que restringa el resultadoconsiderando solamente los registros que encuentran coincidencia en la tabla izquierda:selecttitulo,nombre as editorialfrom libros lrightjoin editoriales eone.codigo=codigoeditorialwherecodigoeditorialisnotnull;Ya no aparece la editorial "Siglo XXI".

    Mostramos las editoriales que NO estn presentes en "libros" (que NO encuentran coincidencia en"editoriales"):select nombrefrom libros lrightjoin editoriales eone.codigo=codigoeditorialwherecodigoeditorialisnull;Solamente aparece la editorial "Siglo XXI"

    Primer problema: Una empresa tiene registrados sus clientes en una tabla llamada "clientes", tambin tiene una tabla "provincias" donde registra los nombres de las provincias.

    1- Elimine las tablas "clientes" y "provincias" y crelas:

  • Tema 50.- Combinacin externa derecha (rightJoin)

    drop table clientes; drop table provincias;

    createtable clientes (codigonumber(5),nombre varchar2(30),domicilio varchar2(30),ciudad varchar2(20),codigoprovincianumber(2),primary key(codigo));

    createtable provincias(codigonumber(2),nombre varchar2(20),primary key (codigo));

    2- Ingrese algunos registros para ambas tablas:insert into provincias values(1,'Cordoba');insert into provincias values(2,'Santa Fe');insert into provincias values(3,'Corrientes');insert into clientes values (101,'Lopez Marcos','Colon 111','Crdoba',1);insert into clientes values (102,'Perez Ana','San Martin 222','Cruz del Eje',1);insertinto clientes values (103,'Garcia Juan','Rivadavia 333','VillaMaria',1);insertinto clientes values (104,'Perez Luis','Sarmiento 444','Rosario',2);insert into clientes values (105,'Gomez Ines','San Martin 666','Santa Fe',2);insert into clientes values (106,'Torres Fabiola','Alem 777','La Plata',4);insert into clientes values (107,'Garcia Luis','Sucre 475','Santa Rosa',5);

    3- Muestre todos los datos de los clientes, incluido el nombre de la provincia empleando un "rightjoin".selectc.nombre,domicilio,ciudad, p.nombrefrom provincias pright join clientes concodigoprovincia = p.codigo;

    4- Obtenga la misma salida que la consulta anterior pero empleando un "leftjoin".selectc.nombre,domicilio,ciudad, p.nombrefrom clientes cleft join provincias poncodigoprovincia = p.codigo;

    5- Empleando un "rightjoin", muestre solamente los clientes de las provincias que existen en"provincias" (5 registros)

  • Tema 50.- Combinacin externa derecha (rightJoin)

    selectc.nombre,domicilio,ciudad, p.nombrefrom provincias pright join clientes con codigoprovincia = p.codigowhere p.codigo is not null;

    6- Muestre todos los clientes cuyo cdigo de provincia NO existe en "provincias" ordenados porciudad (2 registros)

    selectc.nombre,domicilio,ciudad, p.nombrefrom provincias pright join clientes con codigoprovincia = p.codigowhere p.codigo is nullorder by ciudad;