Unión interna
Puede utilizar una unión interna en una sentencia SELECT para recuperar únicamente las filas que satisfacen las condiciones de la unión en todas las tablas especificadas.
Puede solicitar una unión interna, ejecutando una sentencia SELECT en la que especifique las tablas a las que desea unir la cláusula FROM y especificar una cláusula WHERE o una cláusula ON para indicar la condición de unión. La condición de unión puede ser cualquier condición de búsqueda simple o compuesta que no contenga ninguna referencia de subconsulta.
En el tipo más simple de unión interna, la condición de unión es columna1=columna2.
Ejemplos
- Ejemplo
- Puede unir las tablas PARTS y PRODUCTS en la columna PROD# para formar una tabla de partes con sus proveedores y los productos que utilizan las partes. Considere las dos sentencias SELECT siguientes:
SELECT PART, SUPPLIER, PARTS.PROD#, PRODUCT FROM PARTS, PRODUCTS WHERE PARTS.PROD# = PRODUCTS.PROD#;SELECT PART, SUPPLIER, PARTS.PROD#, PRODUCT FROM PARTS INNER JOIN PRODUCTS ON PARTS.PROD# = PRODUCTS.PROD#;Cualquiera de estas sentencias produce el resultado siguiente:
PART SUPPLIER PROD# PRODUCT ======= ============ ===== ========= WIRE ACWF 10 GENERATOR MAGNETS BATEMAN 10 GENERATOR BLADES ACE_STEEL 205 SAW PLASTIC PLASTIK_CORP 30 RELAY- Un componente de la tabla PARTS (OIL) tiene un número de producto (160) que no está en la tabla PRODUCTS. Un producto (505, SCREWDRIVER) no tiene componentes listados en la tabla PARTS. OIL y SCREWDRIVER no aparecen en el resultado de la unión.
- La sintaxis explícita expresa que esta unión es una unión interna. Puede utilizar INNER JOIN en la cláusula FROM en lugar de la coma. ON (más que WHERE) especifica la condición de unión cuando se unen tablas explícitamente en la cláusula FROM.
- Si no especifica una cláusula WHERE en la primera forma de la consulta, la
tabla de resultados contiene todas las combinaciones posibles de filas para las
tablas que se identifican en la cláusula FROM. Puede obtener el mismo resultado
especificando una condición de unión que sea siempre verdadera en la segunda
forma de la consulta.
Considere esta consulta:
SELECT PART, SUPPLIER, PARTS.PROD#, PRODUCT FROM PARTS INNER JOIN PRODUCTS ON 1=1;El número de filas de la tabla de resultados es el producto del número de filas de cada tabla:
PART SUPPLIER PROD# PRODUCT ======= ============ ===== =========== WIRE ACWF 10 SCREWDRIVER WIRE ACWF 10 RELAY WIRE ACWF 10 SAW WIRE ACWF 10 GENERATOR OIL WESTERN_CHEM 160 SCREWDRIVER OIL WESTERN_CHEM 160 RELAY OIL WESTERN_CHEM 160 SAW OIL WESTERN_CHEM 160 GENERATOR ⋮
- Ejemplo
- Puede especificar condiciones de unión más complicadas para obtener
diferentes conjuntos de resultados. Para eliminar los proveedores que empiezan por
la letra A de la tabla de componentes, proveedores, números de producto y productos,
escriba una consulta como la del ejemplo siguiente:
SELECT PART, SUPPLIER, PARTS.PROD#, PRODUCT FROM PARTS INNER JOIN PRODUCTS ON PARTS.PROD# = PRODUCTS.PROD# AND SUPPLIER NOT LIKE 'A%';El resultado de la consulta es todas las filas que no tienen un proveedor que empieza con la letra A:
PART SUPPLIER PROD# PRODUCT ======= ============ ===== ========= MAGNETS BATEMAN 10 GENERATOR PLASTIC PLASTIK_CORP 30 RELAY - Ejemplo
- En este ejemplo se une la tabla
PROJ a sí misma utilizando una unión interna. La consulta devuelve el número y
nombre de cada proyecto principal, seguido del número y nombre del proyecto que
forma parte del mismo:
SELECT A.PROJNO AS "MAJOR PROJ", A.PROJNAME AS "MAJOR PROJ NAME", B.PROJNO AS "PROJ #", B.PROJNAME AS "PROJ NAME" FROM PROJ A, PROJ B WHERE A.PROJNO=B.MAJPROJ;En este ejemplo, A indica la primera instancia de la tabla PROJ y B indica una segunda instancia de esta tabla. La condición de unión es una condición en la que el valor de la columna PROJNO de la tabla PROJ A debe ser igual al valor de la columna MAJPROJ de la tabla PROJ B.
La tabla de resultados es similar al ejemplo siguiente:
MAJOR PROJ MAJOR PROJ NAME PROJ # PROJ NAME ========== =============== ====== ==================== AD3100 ADMIN SERVICES AD3110 GENERAL AD SYSTEMS AD3110 GENERAL AD SYSTEMS AD3111 PAYROLL PROGRAMMING AD3110 GENERAL AD SYSTEMS AD3112 PERSONNEL PROGRAMMG AD3110 GENERAL AD SYSTEMS AD3113 ACCOUNT.PROGRAMMING MA2100 WELD LINE AUTOMATION MA2110 W L PROGRAMMING MA2110 W L PROGRAMMING MA2111 W L PROGRAM DESIGN MA2110 W L PROGRAMMING MA2112 W L ROBOT DESIGN MA2110 W L PROGRAMMING MA2113 W L PROD CONT PROGS OP1000 OPERATION SUPPORT OP1010 OPERATION OP2000 GEN SYSTEMS SERVICES OP2010 SYSTEMS SUPPORT OP2010 SYSTEMS SUPPORT OP2011 SCP SYSTEMS SUPPORT OP2010 SYSTEMS SUPPORT OP2012 APPLICATIONS SUPPORT OP2010 SYSTEMS SUPPORT OP2013 DB/DC SUPPORT MA2100 WELD LINE AUTOMATION PL2100 WELD LINE PLANNINGEn este ejemplo, la coma en la cláusula FROM especifica implícitamente una unión interna y actúa del mismo modo que si se hubieran utilizado las palabras clave INNER JOIN. Cuando utiliza la coma para una unión interna, debe especificar la condición de unión en la cláusula WHERE. Cuando utiliza las palabras clave INNER JOIN, debe especificar la condición de unión en la cláusula ON.