Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

sql junta-se como diagrama de venn


Concordo com Cade sobre as limitações dos diagramas de Venn aqui. Uma representação visual mais apropriada pode ser essa.

Tabelas



SELECT A.Colour, B.Colour FROM A CROSS JOIN B SQL Fiddle


A junção cruzada (ou produto cartesiano) produz um resultado com cada combinação das linhas das duas tabelas. Cada tabela tem 4 linhas, então isso produz 16 linhas no resultado.


SELECIONE A.Cor, B.Cor DE A INNER JOIN B ON A.Cor =B.Cor Fiddle SQL


A junção interna retorna logicamente todas as linhas da junção cruzada que correspondem à condição de junção. Neste caso, cinco fazem.


SELECT A.Colour, B.Colour FROM A INNER JOIN B ON A.Colour NOT IN ('Green','Blue') SQL Fiddle


A condição de junção interna não precisa necessariamente ser uma condição de igualdade e não precisa fazer referência a colunas de ambas (ou mesmo de nenhuma) das tabelas. Avaliando A.Colour NOT IN ('Green','Blue') em cada linha dos retornos de junção cruzada.



Uma condição de junção interna de 1=1 seria avaliado como verdadeiro para cada linha na junção cruzada, então os dois são equivalentes (SQL Fiddle ).

SELECIONE A.Cor, B.Cor DE UM EXTERIOR ESQUERDO JOIN B ON A.Cor =B.Cor Fiddle SQL


As junções externas são avaliadas logicamente da mesma maneira que as junções internas, exceto que, se uma linha da tabela esquerda (para uma junção esquerda) não se unir a nenhuma linha da tabela à direita, ela será preservada no resultado com NULL valores para as colunas da direita.


SELECIONE A.Cor, B.Cor DE A ESQUERDA OUTER JOIN B ON A.Cor =B.Cor ONDE B.Cor É NULO Fiddle SQL


Isso simplesmente restringe o resultado anterior para retornar apenas as linhas em que B.Colour IS NULL . Neste caso em particular, essas serão as linhas que foram preservadas, pois não tiveram correspondência na tabela à direita e a consulta retornará a única linha vermelha não correspondida na tabela B . Isso é conhecido como anti-semi-junção.

É importante selecionar uma coluna para IS NULL teste que não é anulável ou para o qual a condição de junção garante que qualquer NULL os valores serão excluídos para que esse padrão funcione corretamente e evite apenas trazer de volta linhas que tenham um NULL valor para essa coluna além das linhas não correspondidas.


SELECIONE A.Cor, B.Cor DE A RIGHT OUTER JOIN B ON A.Cor =B.Cor Fiddle SQL


As junções externas à direita agem de maneira semelhante às junções externas à esquerda, exceto que preservam as linhas não correspondentes da tabela à direita e null estende as colunas da esquerda.


SELECIONE A.Cor, B.Cor DE UM FULL OUTER JOIN B ON A.Cor =B.Cor Fiddle SQL


As junções externas completas combinam o comportamento das junções esquerda e direita e preservam as linhas não correspondentes das tabelas esquerda e direita.