SQL> @&1 SQL> @BD_EJ1_createBD.sql SQL> /* @BD_EJ1_createBD.sql */ SQL> SET ECHO ON SQL> SQL> /* Crear las tablas usadas en los ejemplos */ SQL> CREATE TABLE R1( 2 A1 char(1), 3 A2 number(2), 4 A3 char(1)); Tabla creada. SQL> SQL> CREATE TABLE R2( 2 A3 char(1), 3 A4 number(2)); Tabla creada. SQL> SQL> CREATE TABLE R3( 2 A3 char(1), 3 A4 number(2)); Tabla creada. SQL> SQL> /* mostrar la información básica de las tablas */ SQL> @BD_EJ1_infoBD.sql SQL> /* @BD_EJ1_infoBD.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar la información básica de las tablas */ SQL> SELECT * FROM CAT WHERE TABLE_NAME like 'R%'; TABLE_NAME TABLE_TYPE ------------------------------ ----------- R1 TABLE R2 TABLE R3 TABLE R5 TABLE SQL> SQL> DESCRIBE R1; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- A1 CHAR(1) A2 NUMBER(2) A3 CHAR(1) SQL> DESCRIBE R2; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- A3 CHAR(1) A4 NUMBER(2) SQL> DESCRIBE R3; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- A3 CHAR(1) A4 NUMBER(2) SQL> @BD_EJ1_infoBD.sql SQL> /* @BD_EJ1_infoBD.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar la información básica de las tablas */ SQL> SELECT * FROM CAT WHERE TABLE_NAME like 'R%'; TABLE_NAME TABLE_TYPE ------------------------------ ----------- R1 TABLE R2 TABLE R3 TABLE R5 TABLE SQL> SQL> DESCRIBE R1; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- A1 CHAR(1) A2 NUMBER(2) A3 CHAR(1) SQL> DESCRIBE R2; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- A3 CHAR(1) A4 NUMBER(2) SQL> DESCRIBE R3; Nombre ¿Nulo? Tipo ----------------------------------------- -------- ---------------------------- A3 CHAR(1) A4 NUMBER(2) SQL> @BD_EJ1_insertData.sql SQL> /* @BD_EJ1_insertData.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar los datos existentes en las tablas */ SQL> @BD_EJ1_deleteData.sql SQL> /* @BD_EJ1_deleteData.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar los datos de las tablas */ SQL> SQL> DELETE FROM R1; 0 filas suprimidas. SQL> SQL> DELETE FROM R2; 0 filas suprimidas. SQL> SQL> DELETE FROM R3; 0 filas suprimidas. SQL> SQL> /* mostrar los datos de las tablas */ SQL> @BD_EJ1_showData.sql SQL> /* @BD_EJ1_showData.sql */ SQL> SET ECHO ON SQL> SQL> SET SERVEROUTPUT ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 200 SQL> SQL> column A1 format A2 SQL> column A2 format 9 SQL> column A3 format A2 SQL> column A4 format 9 SQL> SQL> /* mostrar los datos de las tablas */ SQL> SELECT * FROM R1; ninguna fila seleccionada SQL> SQL> SELECT * FROM R2; ninguna fila seleccionada SQL> SQL> SELECT * FROM R3; ninguna fila seleccionada SQL> SQL> /* añadir algunos datos a las tablas, para probar */ SQL> SET ECHO OFF 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. 1 fila creada. SQL> SQL> SET SERVEROUTPUT ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 200 SQL> SQL> column A1 format A2 SQL> column A2 format 9 SQL> column A3 format A2 SQL> column A4 format 9 SQL> SQL> /* mostrar los datos de las tablas */ SQL> SELECT * FROM R1; A1 A2 A3 -- -- -- a 1 x a 1 y b 2 x b 2 z b 1 s c 3 y 6 filas seleccionadas. SQL> SQL> SELECT * FROM R2; A3 A4 -- -- x 7 y 9 SQL> SQL> SELECT * FROM R3; A3 A4 -- -- x 7 y 9 t 6 SQL> @BD_EJ1_preg_1.sql SQL> /* @BD_EJ1_preg_1.sql */ SQL> SET ECHO ON SQL> SQL> SET SERVEROUTPUT ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 200 SQL> SQL> column A1 format A2 SQL> column A2 format 9 SQL> column A3 format A2 SQL> column A4 format 9 SQL> SQL> /* producto cartesiano de R1 y R2 SQL> */ SQL> SELECT * FROM R1, R2; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y x 7 b 2 x x 7 b 2 z x 7 b 1 s x 7 c 3 y x 7 a 1 x y 9 a 1 y y 9 b 2 x y 9 b 2 z y 9 b 1 s y 9 c 3 y y 9 12 filas seleccionadas. SQL> SQL> SELECT * FROM R1 CROSS JOIN R2; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y x 7 b 2 x x 7 b 2 z x 7 b 1 s x 7 c 3 y x 7 a 1 x y 9 a 1 y y 9 b 2 x y 9 b 2 z y 9 b 1 s y 9 c 3 y y 9 12 filas seleccionadas. SQL> SQL> SELECT * FROM R1, R2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 x y 9 a 1 y x 7 a 1 y y 9 b 1 s x 7 b 1 s y 9 b 2 x x 7 b 2 x y 9 b 2 z x 7 b 2 z y 9 c 3 y x 7 c 3 y y 9 12 filas seleccionadas. SQL> SQL> SELECT * FROM R1 CROSS JOIN R2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 x y 9 a 1 y x 7 a 1 y y 9 b 1 s x 7 b 1 s y 9 b 2 x x 7 b 2 x y 9 b 2 z x 7 b 2 z y 9 c 3 y x 7 c 3 y y 9 12 filas seleccionadas. SQL> SQL> /* JOIN de R1 y R2 SQL> */ SQL> SELECT * FROM R1 INNER JOIN R2 ON (R1.A3 = R2.A3) ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 2 x x 7 c 3 y y 9 SQL> SELECT * FROM R1 INNER JOIN R2 USING (A3) ORDER BY A1, A2, A3, A4; A3 A1 A2 A4 -- -- -- -- x a 1 7 y a 1 9 x b 2 7 y c 3 9 SQL> SQL> SELECT * FROM R1 NATURAL JOIN R2 ORDER BY A1, A2, A3, A4; A3 A1 A2 A4 -- -- -- -- x a 1 7 y a 1 9 x b 2 7 y c 3 9 SQL> SQL> SELECT A1, A2, A3, A4 FROM R1 NATURAL JOIN R2 ORDER BY A1, A2, A3, A4; A1 A2 A3 A4 -- -- -- -- a 1 x 7 a 1 y 9 b 2 x 7 c 3 y 9 SQL> SQL> /* JOIN externo de R1 y R3 por la izquierda SQL> */ SQL> SELECT * FROM R1 LEFT OUTER JOIN R3 ON R1.A3 = R3.A3 2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 1 s b 2 x x 7 b 2 z c 3 y y 9 6 filas seleccionadas. SQL> SQL> SELECT * FROM R1 LEFT OUTER JOIN R3 USING (A3) 2 ORDER BY A1, A2, A3, A4; A3 A1 A2 A4 -- -- -- -- x a 1 7 y a 1 9 s b 1 x b 2 7 z b 2 y c 3 9 6 filas seleccionadas. SQL> SQL> SELECT * FROM R1, R3 WHERE R1.A3 = R3.A3(+) 2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 1 s b 2 x x 7 b 2 z c 3 y y 9 6 filas seleccionadas. SQL> SQL> SELECT * FROM R3 RIGHT OUTER JOIN R1 USING (A3) 2 ORDER BY A1, A2, A3, A4; A3 A4 A1 A2 -- -- -- -- x 7 a 1 y 9 a 1 s b 1 x 7 b 2 z b 2 y 9 c 3 6 filas seleccionadas. SQL> SQL> /* JOIN externo de R1 y R3 por la derecha SQL> */ SQL> SELECT * FROM R1 RIGHT OUTER JOIN R3 ON R1.A3 = R3.A3 2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 2 x x 7 c 3 y y 9 t 6 SQL> SQL> SELECT * FROM R1, R3 WHERE R1.A3(+) = R3.A3 2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 2 x x 7 c 3 y y 9 t 6 SQL> SQL> SELECT A1, A2, R1.A3, R3.A3, A4 FROM R3 LEFT OUTER JOIN R1 ON R1.A3 = R3.A3 2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 2 x x 7 c 3 y y 9 t 6 SQL> SQL> SELECT A1, A2, A3, A4 FROM R3 LEFT OUTER JOIN R1 USING (A3) 2 ORDER BY A1, A2, A3, A4; A1 A2 A3 A4 -- -- -- -- a 1 x 7 a 1 y 9 b 2 x 7 c 3 y 9 t 6 SQL> SQL> /* JOIN externo de R1 y R2 por la izquierda y la derecha SQL> */ SQL> SELECT * FROM R1 FULL OUTER JOIN R3 ON R1.A3 = R3.A3 2 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- a 1 x x 7 a 1 y y 9 b 1 s b 2 x x 7 b 2 z c 3 y y 9 t 6 7 filas seleccionadas. SQL> SQL> SELECT * FROM R1 FULL OUTER JOIN R3 USING (A3) 2 ORDER BY A1, A2, A3, A4; A3 A1 A2 A4 -- -- -- -- x a 1 7 y a 1 9 s b 1 x b 2 7 z b 2 y c 3 9 t 6 7 filas seleccionadas. SQL> SQL> /* JOIN externo de R1 y R3 por la izquierda y la derecha (como en álgebra) SQL> */ SQL> SELECT A1, A2, A3, A4 FROM R1 NATURAL JOIN R3 2 UNION 3 SELECT A1, A2, A3, NULL AS A4 FROM R1 WHERE A3 NOT IN (SELECT A3 FROM R3) 4 UNION 5 SELECT NULL, NULL, A3, A4 FROM R3 WHERE A3 NOT IN (SELECT A3 FROM R1) 6 ORDER BY A1, A2, A3, A4; A1 A2 A3 A4 -- -- -- -- a 1 x 7 a 1 y 9 b 1 s b 2 x 7 b 2 z c 3 y 9 t 6 7 filas seleccionadas. SQL> SQL> SELECT A1, A2, A3, A4 FROM R1 NATURAL JOIN R3 2 UNION 3 SELECT A1, A2, R1.A3, A4 FROM R1 LEFT OUTER JOIN R3 ON R1.A3 = R3.A3 WHERE R3.A3 IS NULL 4 UNION 5 SELECT A1, A2, R3.A3, A4 FROM R1 RIGHT OUTER JOIN R3 ON R1.A3 = R3.A3 WHERE R1.A3 IS NULL 6 ORDER BY A1, A2, A3, A4; A1 A2 A3 A4 -- -- -- -- a 1 x 7 a 1 y 9 b 1 s b 2 x 7 b 2 z c 3 y 9 t 6 7 filas seleccionadas. SQL> SQL> SELECT A1, A2, A3, A4 FROM R1 NATURAL FULL OUTER JOIN R3 2 ORDER BY A1, A2, A3, A4; A1 A2 A3 A4 -- -- -- -- a 1 x 7 a 1 y 9 b 1 s b 2 x 7 b 2 z c 3 y 9 t 6 7 filas seleccionadas. SQL> SQL> /* tuplas de R1 que no tienen correspondencia en R3 SQL> */ SQL> SELECT * FROM R1 LEFT OUTER JOIN R3 ON R1.A3 = R3.A3 2 WHERE R3.A3 IS NULL 3 ORDER BY A1, A2, R1.A3, A4; A1 A2 A3 A3 A4 -- -- -- -- -- b 1 s b 2 z SQL> SQL> SELECT A1, A2, R1.A3 FROM R1 LEFT OUTER JOIN R3 ON R1.A3 = R3.A3 2 WHERE R3.A3 IS NULL 3 ORDER BY A1, A2, R1.A3; A1 A2 A3 -- -- -- b 1 s b 2 z SQL> SQL> SELECT * FROM R1 WHERE A3 NOT IN (SELECT A3 FROM R3) 2 ORDER BY A1, A2, R1.A3; A1 A2 A3 -- -- -- b 1 s b 2 z SQL> @BD_EJ1_showData.sql SQL> /* @BD_EJ1_showData.sql */ SQL> SET ECHO ON SQL> SQL> SET SERVEROUTPUT ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 200 SQL> SQL> column A1 format A2 SQL> column A2 format 9 SQL> column A3 format A2 SQL> column A4 format 9 SQL> SQL> /* mostrar los datos de las tablas */ SQL> SELECT * FROM R1; A1 A2 A3 -- -- -- a 1 x a 1 y b 2 x b 2 z b 1 s c 3 y 6 filas seleccionadas. SQL> SQL> SELECT * FROM R2; A3 A4 -- -- x 7 y 9 SQL> SQL> SELECT * FROM R3; A3 A4 -- -- x 7 y 9 t 6 SQL> @BD_EJ1_deleteData.sql SQL> /* @BD_EJ1_deleteData.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar los datos de las tablas */ SQL> SQL> DELETE FROM R1; 6 filas suprimidas. SQL> SQL> DELETE FROM R2; 2 filas suprimidas. SQL> SQL> DELETE FROM R3; 3 filas suprimidas. SQL> SQL> /* mostrar los datos de las tablas */ SQL> @BD_EJ1_showData.sql SQL> /* @BD_EJ1_showData.sql */ SQL> SET ECHO ON SQL> SQL> SET SERVEROUTPUT ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 200 SQL> SQL> column A1 format A2 SQL> column A2 format 9 SQL> column A3 format A2 SQL> column A4 format 9 SQL> SQL> /* mostrar los datos de las tablas */ SQL> SELECT * FROM R1; ninguna fila seleccionada SQL> SQL> SELECT * FROM R2; ninguna fila seleccionada SQL> SQL> SELECT * FROM R3; ninguna fila seleccionada SQL> @BD_EJ1_dropBD.sql SQL> /* @BD_EJ1_dropBD.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar las tablas creadas */ SQL> SQL> DROP TABLE R1; Tabla borrada. SQL> SQL> DROP TABLE R2; Tabla borrada. SQL> SQL> DROP TABLE R3; Tabla borrada. SQL> SQL> /* mostrar la información básica de las tablas */ SQL> @BD_EJ1_infoBD.sql SQL> /* @BD_EJ1_infoBD.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar la información básica de las tablas */ SQL> SELECT * FROM CAT WHERE TABLE_NAME like 'R%'; TABLE_NAME TABLE_TYPE ------------------------------ ----------- R5 TABLE SQL> SQL> DESCRIBE R1; ERROR: ORA-04043: el objeto R1 no existe SQL> DESCRIBE R2; ERROR: ORA-04043: el objeto R2 no existe SQL> DESCRIBE R3; ERROR: ORA-04043: el objeto R3 no existe SQL> set echo off fin de la ejecucion de K:\BD_2017\desarrollo\pruebas_ORACLE\BD_EJ1_scripts.sql