Junções (joins) – Inner joins

Um inner join aplica duas fases de processamento lógico de consulta – aplica o produto cartesiano entre duas tabelas de entrada como o cross join e, em seguida, filtra as linhas com base em um predicado que você especifica. Assim como o cross join, os inner joins têm duas sintaxes padrão.

  1.  SELECT E.EMPID, E.FIRSTNAME, E.LASTNAME, O.ORDERID

FROM HR.EMPLOYEES AS E

JOIN SALES.ORDERS AS O ON (E.EMPID = O.EMPID);

No exemplo acima, podemos verificar que não existe a palavra inner  pois a mesma é opcional porque um inner join é o padrão, assim você pode apenas especificar a palavra chave join.

Exemplo usando a palavra inner:

  1.  SELECT E.EMPID, E.FIRSTNAME, E.LASTNAME, O.ORDERID

FROM HR.EMPLOYEES AS E

INNER JOIN SALES.ORDERS AS O ON (E.EMPID = O.EMPID);

A outra forma de se escrever a frase SQL acima é:

  1. SELECT E.EMPID, E.FIRSTNAME, E.LASTNAME, O.ORDERID

FROM HR.EMPLOYEES AS E, SALES.ORDERS AS O

WHERE E.EMPID = O.EMPID;

Podemos observar que no exemplo acima não existe nenhuma cláusula on.



 

Junções (joins) – Cross joins

Logicamente, um cross join é o tipo mais simples de junção. Um cross join implementa somente uma fase de processamento lógico de consulta – um produto cartesiano. Essa fase opera sobre as duas tabelas fornecidas como entradas para junção e produz um produto cartesiano das duas.  Isto é, é feita a correspondência de cada linha de uma entrada com todas as linhas de outra. Assim se você tiver m linhas de uma tabela e n linhas na outra receberá m x n linhas no resultado.

Existem duas maneiras de realizar:

  • SELECT C.CUSTID, E.EMPID

FROM SALES.CUSTOMERS AS C

CROSS JOIN HR.EMPLOYEES  AS E;

  • SELECT C.CUSTID, E.EMPID

FROM  SALES.CUSTOMERS AS C, HR.EMPLOYEES  AS E

Não há nenhum diferença de lógica ou de desempenho entre as duas sintaxes.