Компютри, Програмиране
Ляво присъединят (SQL) - пример, подробното описание, използването на грешката
Във всеки недвижими релационна база данни, цялата информация се разпространява по отделна таблица. Много от таблиците са изложени в схемата за комуникация помежду си. Въпреки това, с помощта на Sql заявки че е напълно възможно да се постави връзка между данните, които не са вградени във веригата. Това се прави чрез извършване на присъединят връзка, която ви позволява да се изгради връзка между произволен брой маси и дори се свържете привидно различни информация.
В тази статия ще говорим конкретно за лявата външна присъединят. Преди да се пристъпи към описанието на този тип връзка, добавете в някои таблиците в базата данни.
Подготовка на необходимите таблици
Например, в нашата база данни има информация за хора и техните недвижими имоти. Обобщение на базата на трите таблици: народите (хора), Realty (недвижими имоти), Realty_peoples (трапезни взаимоотношения, хората, които от какво имущество принадлежи). Да приемем, следната информация, съхранена в таблиците на хората:
Peoples | ||||
идентификатор | L_name | F_name | Middle_name | рожден ден |
1 | Иванова | Дария |
Б. | 07.16.2000 |
2 | Pugin | Владислав | Николаевич | 01.29.1986 |
3 | Evgenin | Александър | Federovich | 04.30.1964 |
4 | Анина | обичам | P. | 12.31.1989 |
5 | Gerasimovsky | надявам се | P. | 03.14.1992 |
6 | Gerasimovsky | Олег | Albertovich | 01.29.1985 |
7 | Sukhanovskaya | жури | А. | 09.25.1976 |
8 | Sukhanovskaya | Джулия | Y. | 01.10.2001 |
За недвижими имоти:
недвижими имоти | |
идентификатор | адрес |
1 | Архангелск, ул. Воронин, г. 7, kv.6 |
2 | Архангелск, ул. Severodvinskaya, д. 84, р. 9 BR. 5 |
3 | област Архангелск, Северодвинск, бр. Ленин, д. 134, р. 85 |
4 | област Архангелск, Новодвинск, ул. Proletarshaya, д. 16, р. 137 |
5 | Архангелск, пл. Terekhina, д. 89, р. 13 |
Връзки с хора - недвижими имоти:
Realty_peoples | ||
id_peoples | id_realty | тип |
7 | 3 | Общо съсобственост |
8 | 3 | Общо съсобственост |
3 | 5 | имот |
7 | 1 | имот |
5 | 4 | Общи части |
6 | 4 | Общи части |
Ляв присъединят (Sql) - Описание
Ляв съединение има следния синтаксис:
Table_A НАЛЯВО УЧАСТВА table_B [{ON предикат} | {ИЗПОЛЗВАНЕ spisok_ с tolbtsov}] |
И схематично, както следва:
А това се превежда като "Избиране на всички, без изключение, ред на таблица А и таблица В, за да покажете само съвпадащите редовете на предиката. Ако не са открити на масата в таблицата с низ за двойки А, след това попълнете получените колоните Null - ценности ".
Най-често, когато напусна връзката е посочено ON, като се използва се използва само, когато имената на колоните, които се планира да се направи връзката са едни и същи.
Ляв присъединят - примери за използване
С присъединяването на ляво можем да видим, всички хора от списъка, ако има население собственост. За да направите това в ляво се присъединят към SQL например заявка:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type ОТ Peoples НАЛЯВО JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Със следните резултати:
Query1 | ||||||
идентификатор | L_name | F_name | Middle_name | рожден ден | id_realty | тип |
1 | Иванова | Дария | Б. | 07.16.2000 | ||
2 | Pugin | Владислав | Николаевич | 01.29.1986 | ||
3 | Evgenin | Александър | Federovich | 04.30.1964 | 5 | имот |
4 | Анина | обичам | P. | 12.31.1989 | ||
5 | Gerasimovsky | надявам се | P. | 03.14.1992 | 4 | Общи части |
6 | Gerasimovsky | Олег | Albertovich | 01.29.1985 | 4 | Общи части |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 1 | имот |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 3 | Общо съсобственост |
8 | Sukhanovskaya | Джулия | Y. | 01.10.2001 | 3 | Общо съсобственост |
Както се вижда, Иванова Даря Pugin Владислав и Anninoy Lyubovi Не регистриран права на недвижими имоти.
И какво ще сме получили, като се използва вътрешна присъединят Вътрешна присъединя? Както знаете, той изключва несъвпадащи редове, така че три от нашата крайна проба просто щеше да отпадне:
Query1 | ||||||
идентификатор | L_name | F_name | Middle_name | рожден ден | id_realty | тип |
3 | Evgenin | Александър | Federovich | 04.30.1964 | 5 | имот |
5 | Gerasimovsky | надявам се | P. | 03.14.1992 | 4 | Общи части |
6 | Gerasimovsky | Олег | Albertovich | 01.29.1985 | 4 | Общи части |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 1 | имот |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 3 | Общо съсобственост |
8 | Sukhanovskaya | Джулия | Y. | 01.10.2001 | 3 | Общо съсобственост |
Тя ще изглежда, че втората версия също отговаря на условията на нашия проблем. Въпреки това, ако ние започваме да прикачите на друг, а друга маса, трима души от резултата вече безвъзвратно отминали. Поради това, на практика, когато се комбинират множество таблици много по-често се използва ляв и десен от Inner присъединят.
Ще продължи да се търси в ляво се присъединят към SQL примери. Прикрепете маса с адресите на къщите си:
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address ОТ Peoples НАЛЯВО JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples НАЛЯВО JOIN Realty ON Realty.id = Realty_peoples.id_realty |
Сега ние получаваме не само един вид право, но също така и на адреса на недвижими имоти:
Query1 | |||||||
идентификатор | L_name | F_name | Middle_name | рожден ден | id_realty | тип | адрес |
1 | Иванова | Дария | Б. | 07.16.2000 | |||
2 | Pugin | Владислав | Николаевич | 01.29.1986 | |||
3 | Evgenin | Александър | Federovich | 04.30.1964 | 5 | имот | Архангелск, пл. Terekhina, д. 89, р. 13 |
4 | Анина | обичам | P. | 12.31.1989 | |||
5 | Gerasimovsky | надявам се | P. | 03.14.1992 | 4 | Общи части | област Архангелск, Новодвинск, ул. Proletarshaya, д. 16, р. 137 |
6 | Gerasimovsky | Олег | Albertovich | 01.29.1985 | 4 | Общи части | област Архангелск, Новодвинск, ул. Proletarshaya, д. 16, р. 137 |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 3 | Общо съсобственост | област Архангелск, Северодвинск, бр. Ленин, д. 134, р. 85 |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 1 | имот | Архангелск, ул. Воронин, г. 7, kv.6 |
8 | Sukhanovskaya | Джулия | Y. | 01.10.2001 | 3 | Общо съсобственост |
област Архангелск, Северодвинск, бр. Ленин, д. 134, р. 85 |
Ляв присъединят - типичната употреба на грешка: невалиден маса процедура
Основни грешки, допуснати в лявата външна присъединят маси, две:
- Правилно избран от порядъка на маси, за които е загубен данни.
- Къде грешки, когато с помощта на заявка с присъединят таблици.
Помислете първо грешка. Преди решението на всеки проблем, трябва да бъдат ясно разбира, че това, което искаме да се получи в крайна сметка. В този пример по-горе, ние взехме всеки един от хората, но загубила напълно информацията за обекта под номер 2, чийто собственик не е намерен.
Ако ние се премества в таблиците на заявка на някои места, и ще започне с «... От Realty ляво се присъединят Peoples ...» всеки един имот, не бихме загубили, няма да кажа за хората.
Но не се плаши от лявата връзка, преминете към пълен външен, който е включен в резултатите и съвпадение, а не съответстващи редове.
В крайна сметка, на обема на извадката често е много голям, а допълнително данни практически безполезно. Основното нещо - да разбера какво искате да получите резултат: на всички хора със списък на разположение тяхното имущество или целия списък имот с техните собственици (ако има такива).
Ляв присъединят - типичната употреба на грешка: Искане е правилно при определяне на условията в Къде
Втората грешка е свързана и с загуба на данни, и не винаги са непосредствено очевидна.
Да се върнем към заявката, когато напуснахме чрез връзки, получени данни за всички хора и тяхното съществуващо имота. Не забравяйте следното с лявата присъединят SQL пример:
ОТ Peoples НАЛЯВО JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
Да предположим, че искаме да се изясни искането и не извежда данните, когато видът на закона - "собственост". Ако ние просто прибавяте с лявата се присъединят към SQL, пример за следното условие:
...
Къде тип <> "собственост" |
ще загубим данните за хора, които нямат собственост, защото нулевата нулевата стойност не е сравнение, както следва:
Query1 | ||||||
идентификатор | L_name | F_name | Middle_name | рожден ден | id_realty | тип |
5 | Gerasimovsky | надявам се | P. | 03.14.1992 | 4 | Общи части |
6 | Gerasimovsky | Олег | Albertovich | 01.29.1985 | 4 | Общи части |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 3 | Общо съсобственост |
8 | Sukhanovskaya | Джулия | Y. | 01.10.2001 | 3 | Общо съсобственост |
За да се предотврати възникването на грешки поради тази причина, най-добре е да се определят условията за избор веднага след връзката. Ние предлагаме да се има предвид следното с ляво се присъединят към SQL пример.
SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type ОТ Peoples НАЛЯВО JOIN Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples и тип <> "собственост") |
Резултатът ще бъде, както следва:
Query1 | ||||||
идентификатор | L_name | F_name | Middle_name | рожден ден | id_realty | тип |
1 | Иванова | Дария | Б. | 07.16.2000 | ||
2 | Pugin | Владислав | Николаевич | 01.29.1986 | ||
3 | Evgenin | Александър | Federovich | 04.30.1964 | ||
4 | Анина | обичам | P. | 12.31.1989 | ||
5 | Gerasimovsky | надявам се | P. | 03.14.1992 | 4 | Общи части |
6 | Gerasimovsky | Олег | Albertovich | 01.29.1985 | 4 | Общи части |
7 | Sukhanovskaya | жури | А. | 09.25.1976 | 3 | Общо съсобственост |
8 | Sukhanovskaya | Джулия | Y. | 01.10.2001 | 3 | Общо съсобственост |
По този начин, като следвате простите на ляво се присъединят към SQL пример, ние получихме списък на всички хора, движещи се по-нататък, един от тези имоти в собствения капитал / съсобственост.
В заключение бих искал още веднъж, че проба от всяка информация от базата данни трябва да се вземат отговорно да се подчертае. Много нюанси отвориха пред нас с лявата присъединят SQL прост пример, обяснението на които един - преди да започнете да пишете дори обикновена заявка, трябва внимателно да се разбере това, което искаме да се получи в крайна сметка. На добър час!
Similar articles
Trending Now