789 Shares 8704 views

Jointure gauche (SQL) – un exemple, la description détaillée, l'utilisation de l'erreur

Quoi qu'il en soit réelle base de données relationnelle, toutes les informations sont distribuées sur une table séparée. La plupart des tableaux sont présentés dans le schéma de communication entre eux. Cependant, avec l'aide de requêtes SQL , il est tout à fait possible de mettre un lien entre les données, et non intégrés dans le circuit. Cela se fait en effectuant une connexion rejoindre, ce qui vous permet de construire une relation entre un certain nombre de tables, et même connecter des informations apparemment disparates.


Cet article va parler spécifiquement de la jointure externe gauche. Avant de procéder à la description de ce type de connexion, ajouter quelques tables de base de données.

Préparation des tables nécessaires

Par exemple, dans notre base de données, il y a des informations sur les personnes et leurs biens immobiliers. Résumé basé sur les trois tableaux: Peuples (personnes), immobilier (immobilier), Realty_peoples (Les relations de table, les gens qui, de ce que la propriété appartient). Supposons que les données suivantes stockées dans les tableaux du peuple:

peuples

ça

L_Name

f_name

Middle_name

anniversaire

1

Ivanova

Daria

B.

16/07/2000

2

Pugin

Vladislav

Nikolaïevitch

29.01.1986

3

Evgenin

Alexander

Federovich

30/04/1964

4

Annina

amour

P.

31.12.1989

5

Gerasimovsky

espoir

P.

14/03/1992

6

Gerasimovsky

Oleg

Albertovich

29/01/1985

7

Sukhanovskaya

jury

A.

25/09/1976

8

Sukhanovskaya

Julia

Y.

01.10.2001

Immobilier:

bien immobilier

ça

adresse

1

Arkhangelsk, ul. Voronin, d. 7, kv.6

2

Arkhangelsk, ul. Severodvinskaya, d 84., Q. 9 BR. 5

3

région d'Arkhangelsk, Severodvinsk, st. Lénine, d. 134, q. 85

4

région d'Arkhangelsk, Novodvinsk, ul. Proletarshaya, d 16., Q. 137

5

Arkhangelsk, pl. Terekhina, d 89., Q. 13

personnes Relations – propriété:

Realty_peoples

id_peoples

id_realty

type

7

3

Total des copropriété

8

3

Total des copropriété

3

5

propriété

7

1

propriété

5

4

parties communes

6

4

parties communes

Jointure gauche (Sql) – Description

Gauche a composé la syntaxe suivante:

TABLE_A LEFT JOIN table_B [{ON} prédicats | {UTILISATION spisok_ avec tolbtsov}]

Et schématiquement comme suit:

Et cette expression est traduit par « Sélectionner tout, sans exception, ligne du tableau A et le tableau B pour afficher uniquement les lignes correspondantes du prédicat. Si la table a été trouvée dans la table de chaînes pour les paires A, puis remplir les colonnes résultantes Null – valeurs ».

Le plus souvent, lorsque la connexion gauche est indiquée sur, est utilisé uniquement USING lorsque les noms de colonnes, qui est prévu pour la connexion sont les mêmes.

Jointure gauche – exemples d'utilisation

Avec la connexion de la gauche, nous pouvons voir, toutes les personnes de la liste si la propriété des peuples. Pour ce faire, dans la jointure gauche exemple de requête SQL:

Peuples SELECT. *, Realty_peoples.id_realty, Realty_peoples.type

Des peuples LEFT JOIN Realty_peoples SUR Peoples.id = Realty_peoples.id_peoples;

Avec les résultats suivants:

query1

ça

L_Name

f_name

Middle_name

anniversaire

id_realty

type

1

Ivanova

Daria

B.

16/07/2000

2

Pugin

Vladislav

Nikolaïevitch

29.01.1986

3

Evgenin

Alexander

Federovich

30/04/1964

5

propriété

4

Annina

amour

P.

31.12.1989

5

Gerasimovsky

espoir

P.

14/03/1992

4

parties communes

6

Gerasimovsky

Oleg

Albertovich

29/01/1985

4

parties communes

7

Sukhanovskaya

jury

A.

25/09/1976

1

propriété

7

Sukhanovskaya

jury

A.

25/09/1976

3

Total des copropriété

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Total des copropriété

Comme on le voit, Ivanova Darya Pugin Vladislav et Anninoy Lyubovi non Enregistrés droits immobiliers.

Et qu'est-ce que nous avons reçu, en utilisant une jointure jointure interne? Comme vous le savez, il exclut les lignes qui ne correspondent pas, donc trois de notre échantillon final serait tout simplement abandonné:

query1

ça

L_Name

f_name

Middle_name

anniversaire

id_realty

type

3

Evgenin

Alexander

Federovich

30/04/1964

5

propriété

5

Gerasimovsky

espoir

P.

14/03/1992

4

parties communes

6

Gerasimovsky

Oleg

Albertovich

29/01/1985

4

parties communes

7

Sukhanovskaya

jury

A.

25/09/1976

1

propriété

7

Sukhanovskaya

jury

A.

25/09/1976

3

Total des copropriété

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Total des copropriété

Il semblerait que la deuxième version répond également aux conditions de notre problème. Cependant, si nous commençons à fixer sur une autre, et une autre table, trois personnes du résultat déjà irrémédiablement disparu. Par conséquent, dans la pratique, lorsque l'on combine plusieurs tables beaucoup plus souvent utilisé la connexion gauche et droit de jointure interne.

Continuera à se tourner vers la gauche rejoindre des exemples sql. Joindre une table avec des adresses de nos maisons:

Peuples SELECT. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address

des peuples

LEFT JOIN Realty_peoples SUR Peoples.id = Realty_peoples.id_peoples

LEFT JOIN immobilier SUR Realty.id = Realty_peoples.id_realty

Maintenant, nous obtenons non seulement une sorte de loi, mais aussi l'adresse de l'immobilier:

query1

ça

L_Name

f_name

Middle_name

anniversaire

id_realty

type

adresse

1

Ivanova

Daria

B.

16/07/2000

2

Pugin

Vladislav

Nikolaïevitch

29.01.1986

3

Evgenin

Alexander

Federovich

30/04/1964

5

propriété

Arkhangelsk, pl. Terekhina, d 89., Q. 13

4

Annina

amour

P.

31.12.1989

5

Gerasimovsky

espoir

P.

14/03/1992

4

parties communes

région d'Arkhangelsk, Novodvinsk, ul. Proletarshaya, d 16., Q. 137

6

Gerasimovsky

Oleg

Albertovich

29/01/1985

4

parties communes

région d'Arkhangelsk, Novodvinsk, ul. Proletarshaya, d 16., Q. 137

7

Sukhanovskaya

jury

A.

25/09/1976

3

Total des copropriété

région d'Arkhangelsk, Severodvinsk, st. Lénine, d. 134, q. 85

7

Sukhanovskaya

jury

A.

25/09/1976

1

propriété

Arkhangelsk, ul. Voronin, d. 7, kv.6

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Total des copropriété

région d'Arkhangelsk, Severodvinsk, st. Lénine, d. 134, q. 85

Jointure gauche – l'utilisation typique d'erreur: table de procédure non valide

erreurs de base faites à la jointure externe gauche, deux tables:

  1. Correctement sélectionné l'ordre des tables pour lesquelles les données ont été perdues.
  2. Lorsque des erreurs lors de l'utilisation d'une requête avec tables de jointure.

Considérons tout d'abord erreur. Avant la décision de tout problème doit être clairement compris que ce que nous voulons à la fin. Dans cet exemple ci-dessus, nous avons pris chaque une des personnes, mais complètement perdu les informations sur l'objet sous le numéro 2, dont le propriétaire n'a pas été trouvé.

Si nous avons déplacé les tables dans une requête dans certains endroits, et commencerions par «… De gauche Realty rejoindre les peuples …» une propriété, nous ne l'aurions pas perdu, vous ne direz rien sur les gens.

Mais ne soyez pas peur de la connexion gauche, passez à pleine externe, qui est inclus dans les résultats et la mise en correspondance, et non les lignes correspondantes.

Après tout, le volume de l' échantillon est souvent très grande, et des données supplémentaires est en fait inutile. La principale chose – à savoir ce que vous voulez obtenir un résultat: de toutes les personnes avec une liste de leurs biens disponibles ou la liste complète des biens à leurs propriétaires (le cas échéant).

Jointure gauche – l'utilisation typique d'erreur: demande est correcte lorsque vous définissez les conditions dans le cas où

La deuxième erreur est également associée à la perte de données, et ne sont pas toujours immédiatement apparents.

Revenons à la question quand nous sommes partis via des connexions données reçues pour toutes les personnes et leurs biens existants. Rappelez-vous ce qui suit à rejoindre gauche exemple sql:

Des peuples LEFT JOIN Realty_peoples SUR Peoples.id = Realty_peoples.id_peoples;

Supposons que nous voulons clarifier la demande et ne transmet pas les données, où le type de droit – « Propriété ». Si nous ajoutons simplement, en utilisant jointure gauche sql, un exemple de la condition suivante:

Où tapez « propriété »

nous allons perdre les données sur les personnes qui ont pas de propriété, parce que la valeur null null n'est pas comparé comme suit:

query1

ça

L_Name

f_name

Middle_name

anniversaire

id_realty

type

5

Gerasimovsky

espoir

P.

14/03/1992

4

parties communes

6

Gerasimovsky

Oleg

Albertovich

29/01/1985

4

parties communes

7

Sukhanovskaya

jury

A.

25/09/1976

3

Total des copropriété

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Total des copropriété

Pour éviter les erreurs de se produire pour cette raison, il est préférable de définir la condition de sélection immédiatement lors de la connexion. Nous suggérons de considérer ce qui suit à la jointure gauche exemple sql.

Peuples SELECT. *, Realty_peoples.id_realty, Realty_peoples.type

des peuples

LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples type ET "Propriété")

Le résultat sera le suivant:

query1

ça

L_Name

f_name

Middle_name

anniversaire

id_realty

type

1

Ivanova

Daria

B.

16/07/2000

2

Pugin

Vladislav

Nikolaïevitch

29.01.1986

3

Evgenin

Alexander

Federovich

30/04/1964

4

Annina

amour

P.

31.12.1989

5

Gerasimovsky

espoir

P.

14/03/1992

4

parties communes

6

Gerasimovsky

Oleg

Albertovich

29/01/1985

4

parties communes

7

Sukhanovskaya

jury

A.

25/09/1976

3

Total des copropriété

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Total des copropriété

Ainsi, en suivant la simple à gauche par exemple rejoindre sql, nous avons reçu une liste de toutes les personnes, d'aller plus loin, une de ces propriétés dans une équité / copropriété.

En conclusion, je voudrais souligner encore une fois qu'un échantillon de toute information de la base de données doivent être prises de façon responsable. De nombreuses nuances ouvertes devant nous avec jointure gauche exemple simple sql, l'explication dont l'un – avant de commencer à écrire même requête de base, vous devez soigneusement comprendre ce que nous voulons à la fin. Bonne chance!