InformáticaProgramació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:

  1. Seleccionado correctamente a orde de táboas para o cal os datos foron perdidos.
  2. 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

 

 

 

 

Newest

Copyright © 2018 gl.delachieve.com. Theme powered by WordPress.