LEFT JOIN (SQL) – um exemplo, a descrição detalhada, o uso do erro
Em qualquer banco de dados relacional real, todas as informações são distribuídas em uma tabela separada. Muitas das mesas estão definidas no esquema de comunicação uns com os outros. No entanto, com a ajuda de consultas SQL é bem possível colocar uma ligação entre os dados, não embutidos no circuito. Isto é feito através da realização de uma conexão de se juntar, o que permite que você construa uma relação entre qualquer número de tabelas, e até mesmo conectar informações aparentemente díspares.
Este artigo irá falar especificamente sobre a junção externa esquerda. Antes de proceder à descrição desse tipo de conexão, adicione em algumas tabelas do banco.
Preparando as tabelas necessárias
Por exemplo, em nosso banco de dados, não há informações sobre pessoas e seus bens imóveis. Resumo com base nas três tabelas: Povos (pessoas), Realty (imobiliário), Realty_peoples (relações de tabela, as pessoas que a partir do que propriedade pertence a). Suponha os seguintes dados armazenados nas tabelas do povo:
povos |
||||
id |
L_NAME |
F_Name |
Middle_name |
aniversário |
1 |
Ivanova |
Daria |
B. |
2000/07/16 |
2 |
Pugin |
Vladislav |
Nikolaevich |
1986/01/29 |
3 |
Evgenin |
Alexander |
Federovich |
1964/04/30 |
4 |
Annina |
amor |
P. |
31.12.1989 |
5 |
Gerasimovsky |
esperança |
P. |
1992/03/14 |
6 |
Gerasimovsky |
Oleg |
Albertovich |
1985/01/29 |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
8 |
Sukhanovskaya |
Julia |
Y. |
01.10.2001 |
Imobiliário:
imóvel |
|
id |
endereço |
1 |
Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 |
Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 |
região Arkhangelsk, Severodvinsk, r. Lênin, d. 134, q. 85 |
4 |
região Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 |
Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Relações pessoas – de propriedade:
Realty_peoples |
||
id_peoples |
id_realty |
tipo |
7 |
3 |
Participação total conjunta |
8 |
3 |
Participação total conjunta |
3 |
5 |
propriedade |
7 |
1 |
propriedade |
5 |
4 |
partes comuns |
6 |
4 |
partes comuns |
LEFT JOIN (SQL) – Descrição
composto da esquerda tem a seguinte sintaxe:
Table_A LEFT JOIN table_b [{ON predicado} | {UTILIZAR spisok_ com tolbtsov}] |
E esquematicamente da seguinte forma:
E esta expressão é traduzida como "Selecionar Todos, sem exceção, linha da Tabela A e Tabela B para exibir somente as linhas correspondentes do predicado. Se a tabela foi encontrado na tabela de cadeia para os pares A, em seguida, preencha as colunas resultantes Null – valores".
Na maioria das vezes, quando a conexão esquerda é indicado ON, usando só é usado quando os nomes das colunas, que está prevista para fazer a conexão são os mesmos.
LEFT JOIN – exemplos de uso
Com a conexão da esquerda podemos ver, todas as pessoas da lista se existem Povos propriedade. Para fazer isso no lado esquerdo juntar exemplo de consulta SQL:
Povos SELECT. *, Realty_peoples.id_realty, Realty_peoples.type DE Peoples LEFT JOIN Realty_peoples NO Peoples.id = Realty_peoples.id_peoples; |
Com os seguintes resultados:
Query1 |
||||||
id |
L_NAME |
F_Name |
Middle_name |
aniversário |
id_realty |
tipo |
1 |
Ivanova |
Daria |
B. |
2000/07/16 |
||
2 |
Pugin |
Vladislav |
Nikolaevich |
1986/01/29 |
||
3 |
Evgenin |
Alexander |
Federovich |
1964/04/30 |
5 |
propriedade |
4 |
Annina |
amor |
P. |
31.12.1989 |
||
5 |
Gerasimovsky |
esperança |
P. |
1992/03/14 |
4 |
partes comuns |
6 |
Gerasimovsky |
Oleg |
Albertovich |
1985/01/29 |
4 |
partes comuns |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
1 |
propriedade |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
3 |
Participação total conjunta |
8 |
Sukhanovskaya |
Julia |
Y. |
01.10.2001 |
3 |
Participação total conjunta |
Como podemos ver, Ivanova Darya Pugin Vladislav e Anninoy Lyubovi Não registrado direitos imobiliários.
E o que temos recebido, usando uma junção interna INNER JOIN? Como você sabe, que exclui as linhas não correspondentes, de modo que três de nossa amostra final seria simplesmente descartado:
Query1 |
||||||
id |
L_NAME |
F_Name |
Middle_name |
aniversário |
id_realty |
tipo |
3 |
Evgenin |
Alexander |
Federovich |
1964/04/30 |
5 |
propriedade |
5 |
Gerasimovsky |
esperança |
P. |
1992/03/14 |
4 |
partes comuns |
6 |
Gerasimovsky |
Oleg |
Albertovich |
1985/01/29 |
4 |
partes comuns |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
1 |
propriedade |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
3 |
Participação total conjunta |
8 |
Sukhanovskaya |
Julia |
Y. |
01.10.2001 |
3 |
Participação total conjunta |
Parece que a segunda versão também atende às condições do nosso problema. No entanto, se começarmos a anexar na outra, e outra mesa, três pessoas do resultado já irremediavelmente. conexão Esquerda e Direita Portanto, na prática, ao combinar várias tabelas com muito mais frequência do que usado INNER JOIN.
Vai continuar a olhar para a esquerda juntar-se exemplos de SQL. Anexar uma tabela com os endereços das nossas casas:
Povos SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address dos povos LEFT JOIN Realty_peoples NO Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty NO Realty.id = Realty_peoples.id_realty |
Agora temos não só uma espécie de direito, mas também o endereço de imóveis:
Query1 |
|||||||
id |
L_NAME |
F_Name |
Middle_name |
aniversário |
id_realty |
tipo |
endereço |
1 |
Ivanova |
Daria |
B. |
2000/07/16 |
|||
2 |
Pugin |
Vladislav |
Nikolaevich |
1986/01/29 |
|||
3 |
Evgenin |
Alexander |
Federovich |
1964/04/30 |
5 |
propriedade |
Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 |
Annina |
amor |
P. |
31.12.1989 |
|||
5 |
Gerasimovsky |
esperança |
P. |
1992/03/14 |
4 |
partes comuns |
região Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 |
Gerasimovsky |
Oleg |
Albertovich |
1985/01/29 |
4 |
partes comuns |
região Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
3 |
Participação total conjunta |
região Arkhangelsk, Severodvinsk, r. Lênin, d. 134, q. 85 |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
1 |
propriedade |
Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 |
Sukhanovskaya |
Julia |
Y. |
01.10.2001 |
3 |
Participação total conjunta |
região Arkhangelsk, Severodvinsk, r. Lênin, d. 134, q. 85 |
LEFT JOIN – o uso típico de erro: tabela de procedimento inválida
erros básicos feitos na junção externa esquerda mesas, dois:
- Seleccionado correctamente a ordem de tabelas para o qual os dados foram perdidos.
- Onde erros ao usar uma consulta com unir tabelas.
Considere primeiro erro. Antes da decisão de qualquer problema deve ser claramente entendido que o que queremos chegar no final. Neste exemplo acima, tomamos cada uma das pessoas, mas completamente perdido as informações sobre o objeto sob o número 2, cujo proprietário não foi encontrado.
Se mudamos as tabelas em uma consulta em alguns lugares, e gostaria de começar com «… De Realty LEFT JOIN Peoples …» qualquer propriedade, não teríamos perdido, você não vai dizer sobre as pessoas.
Mas não tenha medo da conexão esquerda, mudar para o completo externo, que está incluído nos resultados e a correspondência, e não as linhas correspondentes.
Afinal de contas, o volume da amostra é frequentemente muito grande, e os dados extra é realmente inútil. A principal coisa – para descobrir o que você deseja obter um resultado: de todas as pessoas com uma lista de seus bens disponíveis ou toda a lista de propriedades com os seus proprietários (se houver).
LEFT JOIN – o uso típico de erro: Solicitação está correto ao definir as condições na Onde
O segundo erro também está associada com a perda de dados, e nem sempre são imediatamente aparentes.
Vamos voltar para a consulta quando saímos via conexões de dados recebidos para todas as pessoas e sua propriedade existente. Lembre-se o seguinte com associação à esquerda exemplo sql:
DE Peoples LEFT JOIN Realty_peoples NO Peoples.id = Realty_peoples.id_peoples; |
Suponha que queremos esclarecer o pedido e não emite os dados, onde o tipo de direito – "Propriedade". Se nós simplesmente acrescentar, usando LEFT JOIN sql, um exemplo da seguinte condição:
…
Onde tipo "Property" |
vamos perder os dados sobre as pessoas que não têm nenhuma propriedade, porque o Null valor nulo não é comparada como se segue:
Query1 |
||||||
id |
L_NAME |
F_Name |
Middle_name |
aniversário |
id_realty |
tipo |
5 |
Gerasimovsky |
esperança |
P. |
1992/03/14 |
4 |
partes comuns |
6 |
Gerasimovsky |
Oleg |
Albertovich |
1985/01/29 |
4 |
partes comuns |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
3 |
Participação total conjunta |
8 |
Sukhanovskaya |
Julia |
Y. |
01.10.2001 |
3 |
Participação total conjunta |
Para evitar a ocorrência de erros por esta razão, é melhor para definir a condição de seleção imediatamente após a ligação. Nós sugerimos considerar o seguinte com a esquerda juntar exemplo sql.
Povos SELECT. *, Realty_peoples.id_realty, Realty_peoples.type dos povos LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples e tipo "Imóvel") |
O resultado será o seguinte:
Query1 |
||||||
id |
L_NAME |
F_Name |
Middle_name |
aniversário |
id_realty |
tipo |
1 |
Ivanova |
Daria |
B. |
2000/07/16 |
||
2 |
Pugin |
Vladislav |
Nikolaevich |
1986/01/29 |
||
3 |
Evgenin |
Alexander |
Federovich |
1964/04/30 |
||
4 |
Annina |
amor |
P. |
31.12.1989 |
||
5 |
Gerasimovsky |
esperança |
P. |
1992/03/14 |
4 |
partes comuns |
6 |
Gerasimovsky |
Oleg |
Albertovich |
1985/01/29 |
4 |
partes comuns |
7 |
Sukhanovskaya |
júri |
A. |
1976/09/25 |
3 |
Participação total conjunta |
8 |
Sukhanovskaya |
Julia |
Y. |
01.10.2001 |
3 |
Participação total conjunta |
Assim, seguindo o simples à esquerda juntar exemplo sql, recebemos uma lista de todas as pessoas, movendo-se ainda mais, uma dessas propriedades em uma equivalência patrimonial / articulação.
Como conclusão, gostaria de enfatizar mais uma vez que uma amostra de todas as informações do banco de dados precisam ser tomadas de forma responsável. Muitas nuances abertos na frente de nós com associação à esquerda exemplo simples sql, a explicação de qual – antes de começar a escrever, mesmo consulta básica, você deve cuidadosamente para entender o que queremos chegar no final. Boa sorte!