Estou confuso com as junções. Quero saber como escolher o join baseado no relacionamento entre as tabelas, ou os joins não tem dependência de relacionamento?
- se o relacionamento for "um para um", então "junção interna" é o melhor.
- se o relacionamento for "um para muitos", então?
- se o relacionamento for "muitos para um", então?
- se o relacionamento for "muitos para muitos", então a junção esquerda será a melhor.
Em vez de pensar em "tipo de multiplicidade de relacionamento baseada em junção", você deve começar a pensar no tipo de junção com base no que deseja que aconteça se não houver um relacionamento correspondente . Este é um lugar muito mais útil para começar.
Veja esta postagem de Jeff Atwood. Como você pode ver nos resultados da amostra ao lado de suas consultas,
inner joins
reduza o número de resultados eouter joins
permita mais resultados na comparação. Ambas as situações podem ser úteis.De um modo geral,
inner joins
deve ser preferidoouter joins
devido a motivos de desempenho, mas a força motriz para qual tipo de junção precisa ser o que você deseja que aconteça se não houver uma correspondência. Também na minha experiência, há uma preferência geral porleft outer joins
mais deright outer joins
.Como em qualquer coisa na vida, existem advertências e pegadinhas, mas este é um lugar muito melhor para começar.
Outra visualização útil: as junções SQL são fáceis