Inclusão em massa no SQL Server evitando cursores

Estava visualizando as atualizações do Facebook quando vi um post do Diego Nogare com um título que me chamou muita atenção “Edição #44 – Inclusão em massa no SQL Server evitando cursores“, logo, entrei no YouTube para ver o video e gostei muito, com isso, resolvi compartilhar com os seguidores do t-sql, vale muito a pena assistir, o video tem participação do Diego Nogare e quem das as dicas na prática é o Daniel Santos.

Apenas estou compartilhando o video, todos os créditos do mesmo são de:

Daniel Santos e Diego Nogare.

 

Junções (joins) – Non-equi joins

Quando a condição de junção envolve somente um operador de igualdade, a junção é chamada de equi join. Quando a condição de junção envolve qualquer operador, além do de igualdade, a junção é chamada de non-equi join. Como exemplo de um non-equi join, a consulta a seguir junta duas instâncias da tabela Employees para produzir pares exclusivos de funcionários.

SELECT
E1.empid,

E1.firstname,

E1.lastname,

E2.empid,

E2.firstname,

E2.lastname

FROM HR.Employees AS E1
JOIN HR.Employees AS E2
ON E1.empid < E2.empid;

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.