Left join (SQL) - пример, подробно описание, грешки при използването

Във всяка истинска релационна база данни цялата информация се разпределя в отделни таблици. Много от таблиците имат фиксирани връзки в схемата помежду си. Въпреки това, с помощта на SQL заявки е напълно възможно да се свържат данните, които не са включени в схемата. Това се постига чрез завършване на операцията connect, която ви позволява да изграждате взаимоотношения между произволен брой таблици и да свързвате дори привидно разпръснати данни. В тази статия ще говорим конкретно за лявата външна връзка. Преди да пристъпим към описанието на този тип връзка, ще добавим някои таблици към базата данни.

Подготовка на необходимите таблици

Да предположим, че нашата база данни съдържа информация за хората и техните недвижими имоти. Основната информация се основава на три таблици: Хора (хора), Realty (недвижими имоти), Realty_peoples (таблица с взаимоотношения, към кои от хората, чието имущество принадлежи). Да предположим, че следните данни се съхраняват в таблиците от хора:




Хора



id



) L_name



F_name



Middle_name



рожден ден




Борисовна


1



Иванова



Дарина 46
16072000



2



Пудин



Владислав

)

Николаевич



29011986



3



Евгений



Александър



Федорович



30041964



4



Annina


)
Любов



Павливна





Надежда (



120)


Павловна



14031992



6







Албертович 151) 7



Сухановски



Юрий



Андрийович


)



Юлия



25091976





Yuriivna



01102001

Недвижими имоти:

Realty





адрес



1


208) Архангелск, ул. Воронина, 7 кв. 6



2



Архангелск, ул. Северодвинск, 84 кв. 9 стаи 5



3



Архангелска област, Северодвинск, ул. Ленин, 134 кв. 85



4



Архангелска област, с. Новодвинск, ул. Пролетарская, 16 кв. 137



5



с. Архангелск, пл. Териохин, 89 кв. 13

Връзка хора - недвижими имоти:

Realty_peoples



id_peoples



id_realty
254)

тип



7



3



Обща обща собственост





обща съвместна собственост






3



5



Собственост



7

299)
1



имоти



5



4

)

Съвместна частична собственост



6



4



собственост Обща дял

Ляв присъединят (SQL) - Описание [331 ]
В лявата връзка има следния синтаксис:

Table_A НАЛЯВО УЧАСТВА table_B [{ON предикат} | ИЗПОЛЗВАНЕ spysok_stolbtsov {}]

и схематично както следва:
И този израз се превежда като "Избиране на всички, без изключение, линията на масата, а масата да донесе само съвпадение предиката он-лайн. Ако таблицата не намери чифт за редовете в таблица А, тогава попълнете получените стойности на NUL колоната. "


Често при извършване на ляв връзка сочи за използването използва само когато имената на колоните, които планират да се свържете съвпадат.

Ляв присъединят - примери за

в свързването на ляво можем да видим, ако всички хора в списък народи е на недвижими имоти. За да направите това, следвайте например ляв присъединят SQL заявка:

SELECT Peoples *, Realty_peoples.id_realty, Realty_peoples.type ОТ Peoples НАЛЯВО JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples.

и получават следните резултати:

Zapros1



ID стойност



L_name



F_name



Middle_name



Рождена



id_realty



тип

(от 381)
1



Иванова



Дариа (391 )


)


2



Pugin



Владислав



М.



29011986











3



Evga Девет



Александър



Федорович



30041964



5


462) Собственост



4



Анна



Любов







31121989





















6


14031992



4






Герасимовски



Олег



Албертович



29011985



4








7
552)

Сухановски



Юрий



Андрийович



25091976
)









Юрий



Андрийович



25091976



)



Обща собственост



8



Сухановская

613)
Юлия









01102001



3



Обща обща собственост

Както виждаме, Иванова Даря, Пугина Владислав и Анина Любова нямат регистрирани права на недвижими имоти. И какво ще получим като използваме Inner join връзка? Както знаете, това изключва несъответстващи линии, така че трима души в нашата окончателна извадка просто отпаднаха:

Query1



id



L_name



F_name








666) 3



Евгений



Александър



Федорович


)
30041964



5



имоти



5





Павловна



14031992
712)

4



Съвместен частен имот



6



Герасимовски



29011985














Съвместна частична собственост



7


764)

25091976



)




7



Сухановски



Yuriy



Andriyovich



25091976



3
800)

Обща собственост



8



Сухановская



Юлия














01102001



Обща обща собственост

Изглежда, че вторият вариант съответства по еднакъв начин на условията на нашата задача. Въпреки това, ако продължим да добавяме друга таблица, тогава три от резултата ще изчезнат безвъзвратно. Следователно, на практика, когато се комбинират много таблици, левите и десните съединения са много по-често използвани от Inner join.
Продължете да виждате примери от ляво присъединяване към 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 (836 )
Сега ние получаваме не само от вида на закона, но също така се занимава свойства:

Zapros1



Идентификационният номер
продукти


L_name



F_name



Middle_name



Рождена

(862 )
id_realty



тип



адрес



1



Ivanov



Дариа



Б.



16072000


)












2



Pugin



Владислав



N.



29011986















3

(942 )
Evhenyn



Александър



F.



30041964



5



на имота



г. Архангелск, пл. Териохин, 89 кв. 97


Любов






Анин
983) P.



31121989










(








стр



14031992



4



собственост Обща дял
(1029 )

Архангелска област, Новодвинск, ул. Пролетарская, 16 кв. 137



6



Gerasimovka
(1.041) (1.042) (1.043) Олег

(1.046)
Албертович











29011985

Архангелска област, гр. Новодвинск, ул. Пролетарская, 16 кв. 1076


7



Сухановски



Юрий


1079)



25091976



3




Обща обща собственост



Архангелска област, Северодвинск, ул. Ленин, 134 кв. Сухановски



Юрий







1111) Андреевич



25091976



1




имоти


)
Архангелск, ул. Воронина, 7 кв. 6



8



Сухановская



Юлия


1143) Yuriivna



01102001



3



Общ имот



Архангелска област, Северодвинск, ул. Ленин, 134 кв. 85

Ляво присъединяване - типични грешки при използване: неправилно подреждане на таблици

Основните позволени грешки в лявата външна връзка на масата са две:
  • Неправилно подбрана таблична последователност, поради която загубени данни.
  • Грешки при използване на Where в заявка с таблици за обединяване. Помислете за първата грешка. Преди решаването на проблема е необходимо да се разбере ясно какво точно искаме да получим накрая. В горния пример довеждаме всички до един човек, но напълно губим информацията за обекта под номер 2, чийто собственик не го правибе намерено.
    Ако поставим таблиците в заявката на места и ще започнем с „От реалност се присъедини към народите“, няма да загубим никакви недвижими имоти, които няма да кажем за хората.
    Обаче, не си струва, уплашен от лявата връзка, да се премести към пълната външна, която ще включва като резултат и съвпада, и не съвпада с редовете. В края на краищата, обемът на пробите често е много голям, а ненужните данни наистина нямат нищо общо. Най-важното е да разберете какво искате като резултат: всички хора със списък с имоти, които са им достъпни, или списък на всички имоти с техните собственици (ако има такива).

    Ляво присъединяване - типични грешки при използването: правилността на заявката, когато са зададени условията за избор

    Вторият проблем е загубата на данни и не винаги е очевидна. Ще се върнем към искането, когато с помощта на лявата връзка получихме данни за всички хора и тяхната собственост. Не забравяйте следното с използването на левия пример за присъединяване към sql:

    FROM PEOPLE LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

    Да предположим, че искаме да изясним заявката и да не показваме данните, когато видът на закона е „Собственост“. Ако просто добавим, използвайки лявото свързване sql, следващото условие:

    Къде е тип & lt; & gt; "Собственост"

    тогава ще загубим данни за хора, които нямат никакви недвижими имоти, защото празната Null стойност не се сравнява както следва:

    Query1



    id

























    Герасимовская





    14031992



    4


    1233)
    Частична собственост



    6



    Герасимовски



    Олег









    29011985



    4



    Имоти



    7



    Сухановски



    Юрий


    1278)



    25091976



    3




    Обща обща собственост


    (1 294) 8



    Сухановская



    Юлия



    Юрийна





    За да се предотврати появата на грешки поради тази причина, най-добре е да попитате условието за избор незабавно при свързването. Предлагаме да разгледаме следното от левия пример за свързване с sql.

    SELECT Peoples. *, Realty_peoples.id_realty, Realty_peoples.type ВЪВ ВРЪЗКА С НАСЛЕДНИ ЛИЦЕ Realty_peoples ON (Peoples.id = Realty_peoples.id_peoples И въведете & lt; & gt; "Свойство")

    Резултатът ще бъде следното:

    Query1



    id



    L_name



    F_name







    рожден ден



    id_realty



    тип



    1



    Иванов



    Дарина



    ) Borisovna



    16072000











    ) 2



    Пугин



    Владислав



    Николаевич



    29011986







    Евгений








    Федорович



    30041964











    4



    Анна



    любов
    1452)

    Павловна



    31121989








    1468)

    5



    Герасимовская



    Надия



    Павловна



    14031992



    4







    Олег









    Герасимовски 1510) Albertovich



    29011985



    4



    Съвместна частична собственост





    Андрийович






    1540)

    25091976



    3



    Обща собственост



    8









    ) 01102001


    (15 74) 3



    Обща обща собственост

    По този начин, чрез изпълнение на прост пример за ляво присъединяване на sql, имаме списък на всички хора, които изваждат допълнителната, от които недвижими имоти в частична /обща собственост.
    В заключение бих искал отново да подчертая, че подборът на информация от базата данни трябва да се третира отговорно. Много нюанси, открити пред нас с използването на левия съединявам sql един прост пример,обяснение за това кой - преди да започне да компилира дори елементарна заявка, трябва да разберем какво точно искаме да получим като резултат. Успех!
  • Свързани публикации