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:
- Prawidłowo wybrany kolejność tabel, dla których dane zostały utracone.
- 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!