4. Desmistificando o SELECT no SQL Server: O FROM – 1ª Sub-Fase

Post 4/5. Este post é parte da série: Desmitificando o SELECT no SQL Server
Tempo de leitura estimado: 3 minutos

Há muito tempo eu comecei uma série chamada “Desmistificando o SELECT no SQL Server”. Você pode acompanhar os links na lateral desta página para ler os posts antigos. Eu acrescentei mais imagens e alterei um pouco o conteúdo para tentar ser mais claro. Fique à vontade!

No último post, eu mencionei que o FROM é dividido em sub-fases, que variam conforme o operador que está sendo executado. Para cada operador usado, uma série de sub-fases serão executadas. Por agora vamos falar somente das sub-fases dos operadores de JOIN (CROSS JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN).

Lembre-se que cada operador de JOIN sempre vai executar no mínimo a primeira sub-fase. Alguns irão executar todas, outros somente até a segunda. Mas sempre vão iniciar na primeira e ir avançando sub-fase por sub-fase. Também, para cada sub-fase, uma tabela virtual é gerada e servirá como entrada para a próxima sub-fase.

Cada sub-fase do FROM gera uma tabela virtual que é passada para a próxima sub-fase. A última sub-fase gera a tabela virtual do FROM.

Cada sub-fase do FROM gera uma tabela virtual que é passada para a próxima sub-fase. A última sub-fase gera a tabela virtual do FROM.

 

Caso necessite de mais informações sobre tabelas virtuais dê uma olhada no post sobre processamento lógico e físico desta série.

1ª SUB-FASE: Produto Cartesiano

Nesta fase, é feito um produto Cartesiano entre os inputs. Para quem não lembra o produto cartesiano vem lá da teoria de conjuntos. Ele é uma operação onde todos os elementos de um conjunto são combinados com todos os elementos de um outro conjunto. Isto gera um conjunto com TODAS AS COMBINAÇÕES POSSÍVEIS.

Trazendo para esse contexto, os elementos que iremos combinar são as linhas das duas tabelas. Nesta sub-fase será gerado uma tabela virtual contendo todas as combinações possíveis de linhas entre os dois inputs. Se o input da esquerda contém 5 linhas  e o input da direita contém 2 linhas, a tabela virtual gerada aqui vai conter 5 x 2 = 10 linhas. Cada linha da esquerda será associada com cada linha da direita, isto inclui, todas as suas colunas.

 Considere duas tabelas. Um produto cartesiano entre essas duas tabelas, combina cada linha da tabela da esquerda com cada linha da tabela da direita

Considere duas tabelas. Um produto cartesiano entre essas duas tabelas, combina cada linha da tabela da esquerda com cada linha da tabela da direita

Na imagem acima, cada linha da tabela “Naipes” foi combinada com cada linha da tabela “Cartas”.  O resultado foi uma tabela com todas as linhas e colunas das duas tabelas combinadas, lado a lado. Se o operador fosse um CROSS JOIN esta tabela seria passada para a próxima fase, o WHERE. Se fosse um INNER JOIN, por exemplo, esta tabela seria repassada para próxima sub-fase, onde a cláusula ON seria avaliada para cada linha. Veremos mais no próximo post.

Para simplificar, vamos dizer que nesta fase é retornada uma tabela virtual chamada “VFROM-1”.

RELEMBRANDO JOINS

Joins são operações que usamos para combinar linhas de dois inputs (duas tabelas). O resultado de uma operação de JOIN é uma tabela que contém as colunas dos dois inputs. Dependendo do JOIN, você pode especificar uma condição, isto é, uma lógica, para determinar as combinações de linhas que vão ser geradas. Os tipos de JOINS suportadores pelo SQL Servers são:

CROSS JOIN
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN

Este link, do BOOKS ONLINE contém mais informações.

Bom, por enquanto é só. No próximo post irei falar sobre as outras fases.  Até lá, vá revendo os tipos de JOINS. Para este momento entender e vê exemplos de JOINs irão facilitar ainda mais sua compreensão.

E como sempre, desculpem os erros de português. A cada post estou tentando melhorar e ser mais claro. Qualquer dúvida, sugestão, crítica, ou elogios, utilize os comentários! Seu feedback sempre é bem vindo!

Navegue na série<< 3. Desmistificando O SELECT no SQL SERVER: O FROM5. Desmistificando o SELECT no SQL Server: O FROM – 2ª Sub-fase >>

Leave a reply

Your email address will not be published.