Vous êtes sur la page 1sur 15

Curso Oracle Database Expert

Capitulo 8: Displaying Data from Multiple Tables

Mara Molina - Kevin Martnez - Tomas Gonzalez

Temas previos
- Primary Key - Foreign Key
Ayudan a conserva la integridad de los datos Usados en algunos tipos de Joins

Sin embargo no son requeridos

Tipos de Joins
- Inner Join y Outer Join - Equi Join y Non EquiJoin - Existen otros como Cross Joins y Natural Join

Inner Join [I]


Un Inner Join conecta dos o ms tablas si y solo si hay registros que coincidan en todas las tablas.
SELECT * | (Campo1[, Campo1, Campo1...]) FROM [SQUEMA.]Tabla1 [INNER] JOIN [SQUEMA.]Tabla2 ON [Tabla1.]fk_tabla1_id = [Tabla1.]tabla1_id;

Inner Join [II]


Antes de iniciar con los Outer Joins daremos una revisin a la antigua sintaxis de Inner Join
SELECT FROM WHERE ORDER BY S.SHIP_ID, S.SHIP_NAME, P.PORT_NAME SHIPS S, PORTS P S.HOME_PORT_ID = P.PORT_ID S.SHIP_ID;

Outer Join [I]


Un Outer Join despliega los mismos datos que el inner join, pero agrega registros que no necesariamente coinciden en todas las tablas Existen 3 tipos de Outer Join: LEFT, RIGHT y FULL.

Outer Join [II]: Left Outer Join


SELECT FROM ON ORDER BY SHIP_ID, SHIP_NAME, PORT_NAME SHIPS LEFT OUTER JOIN PORTS HOME_PORT_ID = PORT_ID SHIP_ID;

SHIP_ID 1 2 3 4 5 6

SHIP_NAME Codd Crystal Codd Elegance Codd Champion Codd Victorious Codd Grandeur Codd Prince

PORT_NAME Baltimore Tampa Tampa Charleston Charleston

Outer Join [III]: Right Outer Join


SELECT FROM ON ORDER BY SHIP_ID, SHIP_NAME, PORT_NAME SHIPS LEFT OUTER JOIN PORTS HOME_PORT_ID = PORT_ID SHIP_ID;

SHIP_ID 1 2 4 5 6

SHIP_NAME Codd Crystal Codd Elegance Codd Victorious Codd Grandeur Codd Prince

PORT_NAME Baltimore Tampa Tampa Charleston Charleston Miami

Outer Join [IV]: Full Outer Join


combina efectos de RIGHT OUTER JOIN y LEFT OUTER JOIN

01 SELECT SHIP_ID, SHIP_NAME, PORT_NAME 02 FROM SHIPS FULL OUTER JOIN PORTS 03 ON HOME_PORT_ID = PORT_ID 04 ORDER BY SHIP_ID;

Outer Join Syntax: (+)


El signo ms define un left outer join. 01 SELECT SHIP_ID, SHIP_NAME, PORT_NAME 02 FROM SHIPS, PORTS 03 WHERE HOME_PORT_ID = PORT_ID (+) 04 ORDER BY SHIP_ID;

Using Table Aliases


son prefijos para nombrar las tablas de una bd sin alias 01 SELECT EMPLOYEES.EMPLOYEE_ID, LAST_NAME, STREET_ADDRESS 02 FROM EMPLOYEES INNER JOIN ADDRESSES 03 ON EMPLOYEES.EMPLOYEE_ID = ADDRESSES.EMPLOYEE_ID; con alias 01 SELECT EM.EMPLOYEE_ID, LAST_NAME, STREET_ADDRESS 02 FROM EMPLOYEES EM INNER JOIN ADDRESSES AD 03 ON EM.EMPLOYEE_ID = AD.EMPLOYEE_ID

NATURAL Joins
columnas de tablas con un nombre en comun y une dichas tablas.
EMPLOYEE_ID es FOREIGN KEY en la tabla ADDRESSES, y PRIMARY KEY de la tabla EMPLOYEES.

01 SELECT EMPLOYEE_ID, LAST_NAME, STREET_ADDRESS 02 FROM EMPLOYEES NATURAL JOIN ADDRESSES; no requiere de una declaracin explcita de estas columnas, siempre que los nombres de las columnas sean idnticos

USING
es similar a la natural join, puede ser utilizado con inner y outer join. 01 SELECT EMPLOYEE_ID, LAST_NAME, STREET_ADDRESS 02 FROM EMPLOYEES LEFT JOIN ADDRESSES 03 USING (EMPLOYEE_ID);

Multitable Joins
puede conectar 2, 3, o ms tablas
01 SELECT P.PORT_NAME, S.SHIP_NAME, SC.ROOM_NUMBER 02 FROM PORTS P JOIN SHIPS S ON P.PORT_ID = S.HOME_PORT_ID 03 JOIN SHIP_CABINS SC ON S.SHIP_ID = SC.SHIP_ID;

Non-Equijoins

Vous aimerez peut-être aussi