2012-05-03 138 views
10

Estoy haciendo una tarea relacionada con las uniones en Oracle. En algún punto me di cuenta, es decir, ¿cuál es la diferencia entre USAR y la cláusula ON.diferencia entre la cláusula ON y la cláusula de uso en sql

Sé que al utilizar la cláusula ON podemos unir tablas ilimitadas. ¿Es posible unir tablas ilimitadas usando la cláusula USING? ¿Cómo? podría explicarlo usando el ejemplo.

+1

[La documentación es bastante buena] (http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqljusing.html) –

Respuesta

22
  • La cláusula USING: Esto le permite especificar la clave de combinación por su nombre.

  • La cláusula ON: Esta sintaxis le permite especificar los nombres de columna para las claves de combinación en ambas tablas.

La cláusula USING

La cláusula USING se utiliza si varias columnas comparten el mismo nombre pero que no quieren unirse a usar todas estas columnas comunes. Las columnas que figuran en la cláusula USING no pueden tener ninguna fase de clasificación en la declaración, incluyendo la cláusula WHERE:

La cláusula ON

La cláusula ON se utiliza para unir tablas en la columna los nombres no coinciden en ambas tablas. Las condiciones de unión se eliminan de las condiciones de filtro en la cláusula WHERE:

Oracle

select department_name, city 
from departments 
JOIN locations 
USING (location_id); -- specify the same column name 
        -- for both of the tables for the join 
select department_name, city 
from departments dept 
join locations loc 
on (d.location_id = l.id); -- specify different column name 
          -- for the tables for the join. 
2

Ambos permiten la unión de tablas "ilimitado". La diferencia es que el uso requiere las columnas de combinación a tener el mismo nombre:

select emp.ename, dept.dname 
from emp join dept using (deptno); 

La versión en las obras también cuando las columnas de combinación tienen diferentes nombres:

select emp.ename, emp2.ename manager_name 
from emp join emp emp2 on (emp.mgr = emp2.empno); 
9

Además de las respuestas anteriores, un La diferencia importante es que la cláusula ON conserva las columnas de cada tabla unida por separado, y la cláusula USING fusiona las columnas de las tablas combinadas en una única columna. Esto puede ser importante si, por ejemplo, desea mantener las filas en su conjunto de resultados solo si no existe una fila coincidente en una de las tablas unidas. Para ello, habitualmente se utiliza una combinación externa, junto con una condición en la cláusula WHERE, como

SELECT t1.* 
    FROM TABLE_1 t1 
    LEFT OUTER JOIN TABLE_2 t2 
    ON (t2.KEY_FIELD = t1.KEY_FIELD) 
    WHERE t2.KEY_FIELD IS NULL 

En este caso, el supuesto es que TABLE_2.KEY_FIELD es parte de la clave principal en table_2, y por lo tanto, nunca puede ser NULL si los datos están realmente presentes en TABLE_2. Si, después de la unión anterior, se encuentra que TABLE_2.KEY_FIELD contiene NULL en el conjunto unido, significa que no se encontró ninguna fila TABLE_2 que coincida con la fila TABLE_1 correspondiente. Esto a veces puede ser útil.

Comparte y disfruta.

-2
SELECT s.SID, s.SNAME, a.CNAME, c.MAJOR 
FROM STUDENT s JOIN COLLEGE c 
ON s.SID = c.SID; 

SELECT SID, s.SNAME, a.CNAME, a.MAJOR 
FROM STUDENT s JOIN COLLEGE c 
USING (SID); 

La cláusula USING: Esto permite especificar la clave de combinación por su nombre.

El ON permite especificar los nombres de columna para las claves de combinación en ambas tablas.

+2

Usted solo está respondiendo la mitad de la pregunta. –

3

Adicional a las respuestas anteriores.

using Clause imprimirá la columna unida una sola vez.

A.id B.id 
1  1 
2  2 
3  3 

Select * from A JOIN B using(id);

salida será

id 
1 
2 
3 

Pero en la cláusula En estará

Select * from A JOIN B on A.id=B.id;

salida.

id  id 
1  1 
2  2 
3  3 
0

USING cláusula:

SELECT * FROM COUNTRIES JOIN CITIES USING (COUNTRY) 

La consulta anterior realiza una unión interna entre la mesa COUNTRIES y la mesa CITIES a condición de que COUNTRIES.COUNTRY es igual a CITIES.COUNTRY

ON cláusula:

SELECT * FROM COUNTRIES JOIN CITIES ON (COUNTRIES.COUNTRY = CITIES.COUNTRY) 

La consulta anterior realiza la operación de unión interna usando la cláusula on.

Cuestiones relacionadas