Lewe sprzężenie (SQL) - przykład, szczegółowy opis, błędy użytkowania

W każdej prawdziwej relacyjnej bazie danych wszystkie informacje są rozpowszechniane w oddzielnych tabelach. Wiele tabel ma ze sobą stałe połączenia ze schematem. Jednak przy pomocy zapytań sql możliwe jest łączenie danych, które nie są zawarte w schemacie. Osiąga się to poprzez ukończenie operacji connect connect, która pozwala budować relacje między dowolną liczbą tabel i łączyć nawet pozornie rozproszone dane. W tym artykule omówimy konkretnie lewe połączenie zewnętrzne. Przed kontynuowaniem opisu tego typu połączenia dodamy kilka tabel do bazy danych.

Przygotowanie wymaganych tabel

Załóżmy, że nasza baza danych zawiera informacje o ludziach i ich nieruchomościach. Podstawowe informacje opierają się na trzech tabelach: Ludzie (ludzie), Nieruchomości (nieruchomości), Ludzie nieruchomości (tabela z relacjami, do której z ludzi należy własność). Załóżmy, że następujące dane są przechowywane w tabelach przez ludzi:




Ludy



id


(15 ) L_name



F_name



Middle_name



Urodziny




Borisovna


1



Iwanowa



Darina 46
16072000



2



Pudin



Vladislav
(61 )

Nikołajewicz



29011986



3



Eugeniusz



Alexander



Fedorovich



30041964



4



Annina

(98 )
Miłość



Pawlivna



, 31121989



5



Herasymovskaya



nadzieja



P.



, 14031992



6


,
Gerasimovka



Oleg



Albertovich



, 29011985



, 7



Suhanovskyy



, George



A.

(166 )
25091976



8



Suhanovskaya



Julia
,


Yu



01102001

nieruchomości

nieruchomości
(193 )

wartość identyfikatora



adresu



1



, str. Archangielsk ul. Voronina, 7 kv. 6



2



d. Archangielsk ul. Siewierodwińsk, 84 m kw. M. 9 pokoi 5



3



, obszar Archangielsk g. Siewierodwińsk, ul. Lenin, 134 kw. M. 85



4



obszar Archangielsk, str. Novodvynsk ul. Proletarskaya, 16 mkw. 137



5



d. Archangielsk pl. Teriokhin, 89 m². 13

U osób relations - nieruchomości:

Realty_peoples



id_peoples



id_realty



typu



, 7



3



współwłasność Całkowita



8



3



wspólną własnością Razem



3



5



obiektu



, 7



1



nieruchomości



5



4
(314 )

własności zwykłą



6



4



własności zwykłą

lewej przyłączenia (SQL) - Opis [331 ]
Lewa związek ma następującą składnię:

table_a lewe sprzężenie table_b [{O predykatu} | {UŻYWAJĄC list_stolbs}]

Wygląda to tak schematycznie:
I to wyrażenie jest tłumaczone jako „Zaznacz wszystko, bez wyjątku, wiersz tabeli, a tabela przynieść tylko predykat pasujący na linii. Jeśli tabela nie znajdzie pary dla wierszy w Tabeli A, wypełnij wynikowe wartości kolumny Null. "


Często podczas wykonywania lewy połączenia wskazuje na wykorzystaniu stosowane tylko wtedy, gdy nazwy kolumn, które planowane podłączenie zbieżne.

LEFT JOIN - przykłady

W związku z lewej strony widzimy, jeżeli wszystkie osoby znajdujące się na liście Peoples jest nieruchomość. Aby to zrobić, należy na przykład zapytań SQL lewej przyłączenia

SELECT Peoples * Realty_peoples.id_realty, Realty_peoples.type Z Peoples lewo Dołącz Realty_peoples NA Peoples.id = Realty_peoples.id_peoples;.

i otrzymuje się następujące wyniki:

Zapros1



wartość identyfikatora



L_name
,


F_name



Middle_name



urodzin



id_realty



typu



1



Ivanova



Darya (391 )


)


2



Pugin



Władysław



M.



, 29011986











3



Evga Dziewięć



Alexander



F



, 30041964



5



nieruchomości



4



Annino



Love

(477 )
P.



, 31121989









(493 )
5



Herasymovskaya



nadzieja



P.
,


, 14031992


,
4



własności zwykłą



6 (523 )


Gerasimovka



Oleg



Albertovich

(537 )
29011985


,
4



własności zwykłą



, 7



Suhanovskyy



, George



A.



, 25091976 (567 )


1



obiektu



, 7



Suhanovskyy



George



A.



25091976


(598 ) 3



Całkowita własność wspólną



8



Suhanovskaya



Julia



, Yu



, 01102001
,


3



wspólną własnością Razem

Jak widać w Iwanow-darii, Puhyna Vladislav Annino i miłość Brak zarejestrowanych praw własności. Co używaliśmy interkonekt Wewnętrzna przyłączyć? Jak wiecie, wyklucza odrębne linii, trzy osoby z naszej próbki końcowej po prostu padł:

Zapros1



wartość id



L_name



F_name








666) 3



Evhenyn



Alexander



F

(681 )
30041964



5



nieruchomości



5



Herasymovskaya



nadzieja



P.



, 14031992

,
,
4



własności zwykłą



6



Gerasimovka



Oleg



Albertovich



, 29011985 (7 39)


4



własność wspólna akcja



7





25091976



)
1



nieruchomości



7



Suhanovskyy



, George



A.



, 25091976



3
,


, wspólną własnością Łącznie



8



Suhanovskaya



Julia



Yu



, 01102001



3



wspólną własnością Razem

Wydaje się, że druga opcja po prostu spotkać nasz problem. Jeśli jednak będziemy kontynuować dodawanie kolejnej tabeli, trzy z wyników będą bezpowrotnie znikały. Dlatego w praktyce, przy łączeniu wielu tabel, związki lewy i prawy są znacznie częściej używane niż połączenia wewnętrzne.
Kontynuuj przeglądanie przykładów z lewego sprzężenia sql. Dołącz tabelę z adresami naszych obiektówNieruchomość.

Wybierz Peoples * Realty_peoples.id_realty, Realty_peoples.type, Realty.address OD Peoples LEFT JOIN Realty_peoples NA Peoples.id = Realty_peoples.id_peoples LEFT JOIN Realty NA Realty.id = Realty_peoples.id_realty (836 )
teraz mamy nie tylko prawo rodzaju, ale dotyczy również właściwości:

Zapros1



wartość id



L_name



F_name



Middle_name



Urodziny

(862 )
id_realty



typu



adresu



1
,


Ivanova



Darya



, B



, 16072000

, (894 )












2



Pugin



Władysław



N.



, 29011986















3

(942 )
Evhenyn



Alexander



F



, 30041964
,


5



obiektu



d. Archangielsk pl. Teriokhin, 89 m². 13



4



Annino



Love



P.



, 31121989















, 5
,
,
,
Herasymovskaya (1.008) (1.009) (1.010) (1.011) nadzieja



, P.



14031992



, 4



własności zwykłą (1.028) (1.029 )

, obszar Archangielsk, str. Novodvynsk ul. Proletarskaya, 16 mkw. 137



, 6



Gerasimovka



Oleg



Albertovich



29011985



4



własność wspólna akcja



Archangielsk region, miasto Nowodvinsk, ul. Proletarskaya, 16 mkw. 137



, 7



Suhanovskyy (1.072) (1.073) (1.074) (1.075), George (1.076) (1.077) (1.078)
, A.



25091976



3 (1.088) (1.089) (1.090) (1.091) Całkowita współwłasność



, obszar Archangielsk g. Siewierodwińsk, ul. Lenin, 134 kw. M. 85



, 7



Suhanovskyy (1.104) (1.105) (1.106) (1.107), George (1.108) (1.109) (1.110)
, A.



25091976



, 1



obiektu (1.124) (1.125) (1.126 )
Archangielsk, ul. Voronina, 7 kv. 6



, 8



Suhanovskaya (1.136) (1.137) (1.138) (1.139) Julia (1.140) (1.141) (1.142)
, Y.
,


01102001



3 (1.152) (1.153) (1.154) (1.155) współwłasność całkowita



, obszar Archangielsk g. Siewierodwińsk, ul. Lenin, 134 kw. M. 85

, z lewej przyłączenia - stosować typowe błędy: nieprawidłowe procedury tabeli

Błąd głównego dopuszczalnego w lewym łączenia zewnętrznego, dwie tabele:
  • Fałsz wybranej procedury tabel, z których utracone dane.
  • błędów przy zastosowaniu dalszych których połączony stolików.
  • Rozważ pierwszy błąd. Przed rozwiązaniem problemu należy dokładnie zrozumieć, co dokładnie chcemy uzyskać w końcu. W powyższym przykładzie, przywieźliśmy wszystkie pojedyncze osoby, ale całkowicie stracone dane o liczbie 2, w którym właściciel niezostał znaleziony.
    Jeśli przenieśliśmy tabele w miejscach zapytań i ruszy z nieruchomości «Od lewej przyłączyć Peoples» nie jest właściwością nie straciłaby nie można powiedzieć o ludziach.
    Jednakże, nie jest to konieczne, obawiając lewy połączenia, przełącznik pełny zewnętrzny, który to wynik i mecz i nie pasuje do linii. W końcu ilość próbek jest często bardzo duża, a niepotrzebne dane naprawdę nie mają nic wspólnego. Najważniejsze jest, aby dowiedzieć się, co chcesz: wszystkie osoby z listą dostępnych im nieruchomości lub listę wszystkich nieruchomości z ich właścicielami (jeśli są).

    , z lewej przyłączenia - zastosowanie typowe błędy poprawnego zapytania przy ustalaniu warunków Oznaczanie

    Innym problemem związanym z utratą danych, które nie zawsze są od razu widoczne. Wrócimy do wniosku, gdy za pomocą lewego połączenia otrzymamy dane o wszystkich ludziach i ich własności. Pamiętać następujący przez lewy sprzężenia SQL przykład:

    OD Peoples lewo Dołącz Realty_peoples NA Peoples.id = Realty_peoples.id_peoples;

    Załóżmy, że chcemy wyjaśnić zapytanie i nie wyświetlać danych, gdzie typem prawa jest "Właściwość". Jeśli po prostu dodamy, używając lewego sprzężenia sql, następujący warunek:

    Gdzie typ & gt; "Własność"

    może nastąpić utrata danych na temat ludzi, którzy nie mają właściwość, ponieważ pusta Null nie jest porównywana w następujący sposób:

    Zapros1



    wartość id (1.183) (1.184) (1.185) (1.186) L_name (1.187) (1.188) (1.189) (1.190) F_name (1.191) (1.192) (1.193) (1.194) Middle_name (1.195) (1.196) (1.197) (1.198 )








    Gerasimovskaya



    nadzieja



    , P.



    14031992



    , 4



    własność wspólna akcja



    6



    Gerasimovka



    Oleg



    Albertovich



    29011985



    , 4



    wspólne akcji Budynek



    , 7



    Suhanovskyy



    , George (1.275) (1.276) (1.277)
    , A.



    25091976



    3 (1.287) (1.288) (1.289) (1.290) Całkowita współwłasność


    (1 294), 8



    Suhanovskaya



    , Julia



    , Y.

    (1309 )
    01102001



    3



    współwłasność Razem

    aby zapobiec błędom tego powodu, to najlepiej zapytać warunek selekcji natychmiast po połączeniu. Proponujemy rozważyć następujące kwestie z lewego przykładu dołączenia do sql.

    SELECT Peoples * Realty_peoples.id_realty, Realty_peoples.type Z Peoples lewo Dołącz Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples typu I i lt; & gt, "Właściciel").

    Wynik będzie w sposób następujący:

    Zapros1



    wartość identyfikatora



    L_name



    F_name (1339 ) (1.340) (1.341) (1.342) Middle_name (1.343) (1.344) (1.345) (1.346) Data



    id_realty (1.351) (1.352) (1.353) (1.354) typ



    , 1



    Iwanow (1.363) (1.364) (1.365) (1.366) Darin (1.367) (1.368) (1.369) (1.370 ), B.



    16072000
    (1.376) (1.377) (1.378) (1.379) (1.380) (1.381) (1.382) (1.383) (1.384) (1.385) (1.386 ) 2 (1.387) (1.388) (1.389) (1.390) Pugin



    Władysław



    , N.



    29011986

    ,





    Eugeniusz



    Alexander



    , F.



    30041964
    (1.432) (1.433) (1.434) (1.435) (1.436 )





    , 4



    Annino



    Love



    , P.



    31121989
    (1.460) (1.461) (1.462) (1.463) (1.464) (1.465) (1.466) (1.467)


    , 5



    Herasymovskaya (1.475) (1.476) (1.477) (1.478) nadzieja



    , P. (1483 )


    14031992



    , 4



    , ich udział wspólny Czas odtwarzania



    , 6



    Gerasimovka (1.503) (1.504) (1.505) (1.506) Oleg (1.507) (1.508) (1.509)
    Albertovich



    29011985



    , 4



    własności zwykłą



    , ​​7



    Suhanovskyy (1.531) (1.532) (1.533) (1.534), George



    , A.



    25091976



    3 (1.547) (1.548) (1.549) (1.550) Całkowita współwłasność



    , 8 (1.555) (1.556) (1.557) (1.558) Suhanovskaya



    Julia



    , Y.


    (1570 ) 01102001


    (15 74) 3



    współwłasność Razem

    W ten sposób, wykonując proste z lewej przyłączyć sql przykład mamy listę wszystkich ludzi, poruszając ponadto w niektórych z nich nieruchomości w własność częściowa /wspólna.
    Podsumowując, chciałbym ponownie podkreślić, że wybór informacji z bazy danych powinien być traktowany w sposób odpowiedzialny. Wiele niuansów otwartych przed nami przy użyciu lewego sprzężenia sql jest prostym przykładem,wyjaśnienie, który z nich - zanim zaczniemy kompilować nawet elementarne żądanie, musimy dokładnie zrozumieć, co dokładnie chcemy uzyskać. Powodzenia!

    Powiązane publikacje