Informática, Programación
LEFT JOIN (SQL) - un exemplo, a descrición detallada, o uso do erro
En calquera base de datos relacional real, toda a información son distribuídas nunha táboa separada. Moitas das mesas están definidas no esquema de comunicación entre si. Con todo, coa axuda de consultas SQL é ben posible poñer unha conexión entre os datos, non embutidos no circuíto. Isto faise a través da realización dunha conexión de unirse, o que permite que constrúe unha relación entre calquera número de táboas, e mesmo conectarse información aparentemente dispares.
Este artigo pode falar especificamente sobre a unión externa esquerda. Antes de proceder á descrición deste tipo de conexión, engade nalgunhas táboas da base.
Preparando as táboas necesarias
Por exemplo, na nosa base de datos, non hai información sobre persoas e os seus bens inmobles. Resumo en base ás tres táboas: Pobos (persoas), Realty (inmobiliario), Realty_peoples (relacións de táboa, as persoas que desde o que propiedade pertence a). Supoña os seguintes datos almacenados nas táboas do pobo:
pobos | ||||
ID | L_NAME | F_Name | Middle_name | aniversario |
1 | Ivanova | daría |
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 | esperanza | P. | 1992/03/14 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 |
inmobiliario:
inmoble | |
ID | dirección |
1 | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
2 | Arkhangelsk, ul. Severodvinskaya, d. 84, q. 9 BR. 5 |
3 | rexión Arkhangelsk, Severodvinsk, r. Lenin, d. 134, q. 85 |
4 | rexión Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
5 | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
Relacións persoas - de propiedade:
Realty_peoples | ||
id_peoples | id_realty | tipo |
7 | 3 | Participación total conxunta |
8 | 3 | Participación total conxunta |
3 | 5 | propiedade |
7 | 1 | propiedade |
5 | 4 | partes comúns |
6 | 4 | partes comúns |
LEFT JOIN (SQL) - Descrición
composto de esquerda ten a seguinte sintaxe:
Table_A LEFT JOIN table_b [{ON predicado} | {USAR spisok_ con tolbtsov}] |
E esquemáticamente do seguinte xeito:
E esta expresión é traducida como "Seleccionar todos, sen excepción, liña da táboa A e Táboa B para amosar só as liñas correspondentes do predicado. Se a táboa se atopou na táboa de cadea para os pares A, logo enche as columnas resultantes Null - valores ".
Na maioría das veces, cando a conexión esquerda indícase ON, usando só se usa cando os nomes das columnas, que está prevista para facer a conexión son os mesmos.
LEFT JOIN - exemplos de uso
Coa conexión da esquerda vemos, as persoas da lista se hai Pobos propiedade. Para iso na parte esquerda xuntar exemplo de consulta SQL:
Pobos SELECT. *, Realty_peoples.id_realty, Realty_peoples.type DE Peoples LEFT JOIN Realty_peoples NO Peoples.id = Realty_peoples.id_peoples; |
Cos seguintes resultados:
Query1 | ||||||
ID | L_NAME | F_Name | Middle_name | aniversario | id_realty | tipo |
1 | Ivanova | daría | B. | 2000/07/16 | ||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | ||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | propiedade |
4 | Annina | amor | P. | 31.12.1989 | ||
5 | Gerasimovsky | esperanza | P. | 1992/03/14 | 4 | partes comúns |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | partes comúns |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 1 | propiedade |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 3 | Participación total conxunta |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Participación total conxunta |
Como podemos ver, Ivanova Darya Pugin Vladislav e Anninoy Lyubovi Non rexistrado dereitos inmobiliarios.
E o que recibimos, usando unha xuntanza interna INNER JOIN? Como vostede sabe, que exclúe as liñas non correspondentes, de xeito que tres de nosa mostra final sería simplemente descartado:
Query1 | ||||||
ID | L_NAME | F_Name | Middle_name | aniversario | id_realty | tipo |
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | propiedade |
5 | Gerasimovsky | esperanza | P. | 1992/03/14 | 4 | partes comúns |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | partes comúns |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 1 | propiedade |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 3 | Participación total conxunta |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Participación total conxunta |
Parece que a segunda versión tamén atende ás condicións do noso problema. Con todo, se comezar a achegar na outra, e outra mesa, tres persoas do resultado xa irremediablemente. conexión esquerda e dereita Polo tanto, na práctica, ao combinar varias táboas con máis frecuencia do que usa INNER JOIN.
Seguirá a ollar para a esquerda xuntar-se exemplos de SQL. Anexar unha táboa cos enderezos das nosas casas:
Pobos SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address dos pobos LEFT JOIN Realty_peoples NO Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty NO Realty.id = Realty_peoples.id_realty |
Agora temos non só unha especie de dereito, pero tamén a dirección de inmobles:
Query1 | |||||||
ID | L_NAME | F_Name | Middle_name | aniversario | id_realty | tipo | dirección |
1 | Ivanova | daría | B. | 2000/07/16 | |||
2 | Pugin | Vladislav | Nikolaevich | 1986/01/29 | |||
3 | Evgenin | Alexander | Federovich | 1964/04/30 | 5 | propiedade | Arkhangelsk, pl. Terekhina, d. 89, q. 13 |
4 | Annina | amor | P. | 31.12.1989 | |||
5 | Gerasimovsky | esperanza | P. | 1992/03/14 | 4 | partes comúns | rexión Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | partes comúns | rexión Arkhangelsk, Novodvinsk, ul. Proletarshaya, d. 16, q. 137 |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 3 | Participación total conxunta | rexión Arkhangelsk, Severodvinsk, r. Lenin, d. 134, q. 85 |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 1 | propiedade | Arkhangelsk, ul. Voronin, d. 7, kv.6 |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Participación total conxunta |
rexión Arkhangelsk, Severodvinsk, r. Lenin, d. 134, q. 85 |
LEFT JOIN - o uso típico de erro: táboa de procedemento non válida
erros básicos feitos na intersección externa esquerda mesas, dous:
- Seleccionado correctamente a orde de táboas para o cal os datos foron perdidos.
- Onde erros ao usar unha consulta unir táboas.
Considere primeiro erro. Antes da decisión de calquera problema debe ser claramente entendido que o que queremos chegar ao final. Neste exemplo anterior, tomamos cada unha das persoas, pero completamente perdido a información sobre o obxecto baixo o número 2, cuxo propietario non se atopou.
Se cambiamos as táboas nunha consulta nalgúns lugares, e quere comezar con «... De Realty LEFT JOIN Peoples ...» calquera propiedade, non teriamos perdido, non vai dicir a xente.
Pero non teña medo de conexión esquerda, optar polo completo externo, que está incluído nos resultados ea correspondencia, e non as liñas correspondentes.
Despois de todo, o volume da mostra é a miúdo moi grande, e os datos extra é realmente inútil. A principal cousa - para descubrir o que quere obter un resultado: de todas as persoas con unha lista dos seus bens dispoñibles ou a listaxe de propiedades cos seus propietarios (se).
LEFT JOIN - o uso típico de erro: Solicitude é correcta ao establecer as condicións en Onde
O segundo erro tamén está asociada coa perda de datos, e non sempre son inmediatamente aparentes.
Imos volver para a consulta cando saímos vía conexións de datos recibidos a todas as persoas ea súa propiedade existente. Teña en conta que o seguinte con asociación á esquerda exemplo SQL:
DE Peoples LEFT JOIN Realty_peoples NO Peoples.id = Realty_peoples.id_peoples; |
Supoña que queremos aclarar a solicitude e non emite os datos, onde o tipo de dereito - "propiedade". Se nós simplemente engadir, mediante LEFT JOIN SQL, un exemplo do seguinte condición:
...
Onde tipo <> "Property" |
imos perder os datos sobre as persoas que non teñen ningunha propiedade, xa que o Null valor nulo non é comparada como segue:
Query1 | ||||||
ID | L_NAME | F_Name | Middle_name | aniversario | id_realty | tipo |
5 | Gerasimovsky | esperanza | P. | 1992/03/14 | 4 | partes comúns |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | partes comúns |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 3 | Participación total conxunta |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Participación total conxunta |
Para evitar a aparición de erros por esta razón, é mellor para definir a condición de selección inmediatamente despois da conexión. Suxerimos considerar o seguinte coa esquerda xuntar exemplo SQL.
Pobos SELECT. *, Realty_peoples.id_realty, Realty_peoples.type dos pobos LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples e tipo <> "propiedad") |
O resultado será o seguinte:
Query1 | ||||||
ID | L_NAME | F_Name | Middle_name | aniversario | id_realty | tipo |
1 | Ivanova | daría | 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 | esperanza | P. | 1992/03/14 | 4 | partes comúns |
6 | Gerasimovsky | Oleg | Albertovich | 1985/01/29 | 4 | partes comúns |
7 | Sukhanovskaya | xurado | A. | 1976/09/25 | 3 | Participación total conxunta |
8 | Sukhanovskaya | Julia | Y. | 01.10.2001 | 3 | Participación total conxunta |
Así, seguindo o simple á esquerda xuntar exemplo SQL, recibimos unha lista de todas as persoas, movendo-se aínda máis, unha desas propiedades nunha equivalencia patrimonial / articulación.
Como conclusión, quere salientar unha vez máis que unha mostra de toda a información da base de datos teñen que ser tomadas de forma responsable. Moitos matices abertos diante de nós con asociación á esquerda exemplo simple SQL, a explicación de que - antes de comezar a escribir, aínda consulta básica, debería entender o que queremos chegar ao final. Boa sorte!
Similar articles
Trending Now