424 Shares 7384 views

LEFT JOIN (SQL) – przykład, szczegółowy opis, wykorzystanie błędu

W każdej rzeczywistej relacyjnej bazie danych wszystkie informacje są rozpowszechniane na oddzielnych tabelach. Wiele stołów nawiązało relacje między nimi. Jednak przy użyciu kwerend Sql całkiem możliwe jest nawiązanie połączenia między danymi, które nie są zawarte w schemacie. Można to zrobić, wykonując operację łączenia połączeń, która umożliwia budowanie relacji między dowolną liczbą tabel i łączenie nawet pozornie różnych danych.

W tym artykule będziemy mówić konkretnie o lewym połączeniu zewnętrznym. Zanim zaczniemy opisywać ten typ połączenia, dodajemy do bazy tabelę.

Przygotowanie niezbędnych tabel

Na przykład w naszej bazie danych znajdują się informacje o osobach i ich nieruchomościach. Podstawowe informacje opierają się na trzech tabelach: Ludzie (ludzie), Nieruchomości (nieruchomości), Osoby na rynku nieruchomości (stół z relacją, do kogo należy do nieruchomości). Załóżmy, że w tabelach są przechowywane następujące dane dla ludzi:

Ludy

Id

L_name

F_name

Nazwisko średnie

Urodziny

1

Iwanowo

Daria

Borisovna

16.07.2000

2

Pugin

Vladislav

Nikolayevich

01/29/1986

3

Evgeniin

Aleksander

Fedorowicz

04/30/1964

4

Annina

Miłość

Pavlovna

12/31/1989

5

Gerasimovskaya

Nadzieja

Pavlovna

03/14/1992

6

Gerasimovsky

Oleg

Albertowicz

01/29/1985

7

Suchanowski

Yuri

Andreevich

09/25/1976

8th

Sukhanovskaya

Julia

Yuryevna

10/01/2001

Nieruchomość:

Realty

Id

Adres

1

Arkhangelsk, ul. Voronina, 7, ok. 6

2

Arkhangelsk, ul. Severodvinskaya, 84, Apt. 9, pokój. 5

3

Region Arkhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85

4

Region Arkhangelsk, Nowodwinsk, ul. Proletarskaya, 16, Apt. 137

5

Arkhangelsk, pl. Terekhin, d. 89, Apt. 13

Dla relacji ludzie są nieruchomościami:

Osoby na prawach

Id_people

Id_realty

Typ

7

3

Wspólna własność wspólnego przedsiębiorstwa

8th

3

Wspólna własność wspólnego przedsiębiorstwa

3

5

Własność

7

1

Własność

5

4

Współwłasność

6

4

Współwłasność

Łączenie lewe (Sql) – opis

Lewe połączenie ma następującą składnię:

Tabela_A LEFT JOIN table_B [{ON predykat } | {UŻYTKOWANIE listy z kolumn }

Wygląda to tak:

Wyrażenie to jest tłumaczone jako "Zaznacz wszystkie wiersze z tabeli A bez wyjątku i wyprowadzanie tylko wierszy pasujących do predykatu z tabeli B. Jeśli w tabeli B nie było pary dla wierszy tabeli A, wypełnij kolumny Null z wartościami ".

Najczęściej po wykonaniu lewego połączenia określa się ustawienie WŁĄCZONE, USING jest używane tylko wtedy, gdy nazwy kolumn, dla których zaplanowane jest połączenie, są takie same.

Lewe złącze – przykłady użycia

Z pomocą lewego połączenia możemy zobaczyć, czy wszyscy ludzie z listy narodów mają nieruchomości. Aby to zrobić, wykonaj poniższy przykład w lewym przyłączeniu sql:

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type

FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Praktyki_użytkowników.do_obejmowania;

Otrzymujemy następujący wynik:

Żądanie1

Id

L_name

F_name

Nazwisko średnie

Urodziny

Id_realty

Typ

1

Iwanowo

Daria

Borisovna

16.07.2000

2

Pugin

Vladislav

Nikolayevich

01/29/1986

3

Evgeniin

Aleksander

Fedorowicz

04/30/1964

5

Własność

4

Annina

Miłość

Pavlovna

12/31/1989

5

Gerasimovskaya

Nadzieja

Pavlovna

03/14/1992

4

Współwłasność

6

Gerasimovsky

Oleg

Albertowicz

01/29/1985

4

Współwłasność

7

Suchanowski

Yuri

Andreevich

09/25/1976

1

Własność

7

Suchanowski

Yuri

Andreevich

09/25/1976

3

Wspólna własność wspólnego przedsiębiorstwa

8th

Sukhanovskaya

Julia

Yuryevna

10/01/2001

3

Wspólna własność wspólnego przedsiębiorstwa

Jak widać, Iwanowa Darya, Pugin Władysław i Annina Lyubov nie mają zarejestrowanych praw do nieruchomości.

I co byśmy skorzystali z łączenia wewnętrznego? Jak wiesz, wyklucza niedopasowane linie, więc trzy osoby z naszej ostatniej próbki mogłyby po prostu wypaść:

Żądanie1

Id

L_name

F_name

Nazwisko średnie

Urodziny

Id_realty

Typ

3

Evgeniin

Aleksander

Fedorowicz

04/30/1964

5

Własność

5

Gerasimovskaya

Nadzieja

Pavlovna

03/14/1992

4

Współwłasność

6

Gerasimovsky

Oleg

Albertowicz

01/29/1985

4

Współwłasność

7

Suchanowski

Yuri

Andreevich

09/25/1976

1

Własność

7

Suchanowski

Yuri

Andreevich

09/25/1976

3

Wspólna własność wspólnego przedsiębiorstwa

8th

Sukhanovskaya

Julia

Yuryevna

10/01/2001

3

Wspólna własność wspólnego przedsiębiorstwa

Wydaje się, że druga opcja spełnia również warunki naszego zadania. Jeśli jednak nadal będziemy dodawać coraz więcej stołów, trzy osoby z tego wyniku znikną nieodwracalnie. Dlatego w praktyce łączenie wielu tabel powoduje, że połączenia lewe i prawe są znacznie częściej używane niż łączenie wewnętrzne.

Kontynuujemy rozważanie przykładów z połączeniem po lewej stronie sql. Dołącz do tabeli z adresami naszych nieruchomości:

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

OD ludów

LEFT JOIN Realty_peoples ON Peoples.id = Użytkowników_do_obiektu_pliku

LEFT JOIN Realty na Realty.id = Realty_peoples.id_realty

Teraz dostajemy nie tylko formę prawa, ale także adresy nieruchomości:

Żądanie1

Id

L_name

F_name

Nazwisko średnie

Urodziny

Id_realty

Typ

Adres

1

Iwanowo

Daria

Borisovna

16.07.2000

2

Pugin

Vladislav

Nikolayevich

01/29/1986

3

Evgeniin

Aleksander

Fedorowicz

04/30/1964

5

Własność

Arkhangelsk, pl. Terekhin, d. 89, Apt. 13

4

Annina

Miłość

Pavlovna

12/31/1989

5

Gerasimovskaya

Nadzieja

Pavlovna

03/14/1992

4

Współwłasność

Region Arkhangelsk, Nowodwinsk, ul. Proletarskaya, 16, Apt. 137

6

Gerasimovsky

Oleg

Albertowicz

01/29/1985

4

Współwłasność

Region Arkhangelsk, Nowodwinsk, ul. Proletarskaya, 16, Apt. 137

7

Suchanowski

Yuri

Andreevich

09/25/1976

3

Wspólna własność wspólnego przedsiębiorstwa

Region Arkhangelsk, Severodvinsk, ul. Lenina, d. 134, apt. 85

7

Suchanowski

Yuri

Andreevich

09/25/1976

1

Własność

Arkhangelsk, ul. Voronina, 7, ok. 6

8th

Sukhanovskaya

Julia

Yuryevna

10/01/2001

3

Wspólna własność wspólnego przedsiębiorstwa

Region Arkhangelsk, Severodvinsk, ul. Lenin d. 134 q. 85

LEFT JOIN – typowe wykorzystanie błędu: Nieprawidłowa tabela procedury

Podstawowe błędy popełniane przy lewym sprzężenie zewnętrzne, dwa stoły:

  1. Prawidłowo wybrany kolejność tabel, dla których dane zostały utracone.
  2. Gdzie błędy przy użyciu kwerendy z tabel dołączyć.

Rozważmy pierwszy błąd. Przed podjęciem decyzji o jakichkolwiek problemów należy rozumieć, że to, co chcemy, aby w końcu. W tym przykładzie powyżej, wzięliśmy każdy z ludzi, ale całkowicie stracił informacje o obiekcie pod numerem 2, którego właściciel nie został znaleziony.

Gdybyśmy przenieśli tabel w zapytaniu w niektórych miejscach, i zacząć «… Od lewej przyłączenia nieruchomości Peoples …» każdą jedną właściwość, że nie byłby stracony, nie powie o ludziach.

Ale nie bój się z lewej związku przełączyć na pełny zewnętrzny, który jest zawarty w wynikach i dopasowania, a nie pasujące linie.

Po tym wszystkim, objętość próbki jest często bardzo duże, a dodatkowo dane są właściwie bezużyteczne. Najważniejsze – aby dowiedzieć się, co chcesz uzyskać wynik: wszystkich osób z listy dostępnych nieruchomości lub ich całą listę nieruchomości z ich właścicielami (jeśli występują).

LEFT JOIN – typowe wykorzystanie błędu: Zapytanie podczas ustalania warunków w którym jest poprawna

Drugi błąd jest również związane z utratą danych, a nie zawsze są od razu widoczne.

Wróćmy do zapytania kiedy wyszliśmy za pośrednictwem połączeń odebranych danych dla wszystkich ludzi i ich istniejącej nieruchomości. Pamiętaj, że po z lewej przyłączyć sql przykład:

Z Peoples LEFT JOIN Realty_peoples NA Peoples.id = Realty_peoples.id_peoples;

Załóżmy, że chcemy wyjaśnić wniosek i nie wypisywanie danych, których typ prawa – „Property”. Gdybyśmy po prostu dodać, korzystając z lewego dołączyć SQL przykład następujący warunek:

Gdzie typ "Property"

stracimy dane dotyczące osób, które nie mają właściwości, ponieważ wartość null null nie jest porównywana w następujący sposób:

QUERY1

id

L_name

F_name

Middle_name

urodziny

id_realty

typ

5

Gerasimovsky

nadzieja

P.

14.03.1992

4

części wspólne

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

części wspólne

7

Sukhanovskaya

jury

A.

25.09.1976

3

Razem współwłasność

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Razem współwłasność

Aby zapobiec występowaniu błędów z tego powodu, to najlepiej od razu ustawić warunek selekcji po połączeniu. Proponujemy, aby rozważyć następujące kwestie z lewej przyłączyć sql przykład.

SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type

Z Peoples

LEFT JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples i typ "Nieruchomość")

Wynik będzie następujący:

QUERY1

id

L_name

F_name

Middle_name

urodziny

id_realty

typ

1

Ivanova

Daria

B.

16.07.2000

2

Pugin

Vladislav

Nikołajewicz

29.01.1986

3

Evgenin

Alexander

Federovich

30.04.1964

4

Annina

miłość

P.

31.12.1989

5

Gerasimovsky

nadzieja

P.

14.03.1992

4

części wspólne

6

Gerasimovsky

Oleg

Albertovich

29.01.1985

4

części wspólne

7

Sukhanovskaya

jury

A.

25.09.1976

3

Razem współwłasność

8

Sukhanovskaya

Julia

Y.

01.10.2001

3

Razem współwłasność

W ten sposób, wykonując proste w lewo dołączyć sql przykład, otrzymaliśmy listę wszystkich ludzi, przechodząc dalej, jeden z tych właściwości w kapitale / współwłasności.

Na zakończenie chciałbym jeszcze raz podkreślić, że próbka jakichkolwiek informacji z bazy danych muszą być podejmowane w sposób odpowiedzialny. Wiele niuansów otworzyły się przed nami z lewej przyłączyć sql prosty przykład, z których jedno wyjaśnienie – zanim zaczniesz pisać nawet podstawowego zapytania, należy dokładnie zrozumieć, co chcemy uzyskać w końcu. Powodzenia!