muzruno.com

Ляво свързване (SQL) - пример, подробно описание, грешки при използване

Във всяка реална база данни, цялата информация се разпространява на отделни таблици. Много от масите са установили взаимоотношения във веригата помежду си. Въпреки това, с помощта на SQL queries

възможно е да се установи връзка между данните, които не се съдържат в схемата. Това се извършва чрез свързване на операцията за присъединяване, която ви позволява да изграждате отношения между произволен брой таблици и да свързвате дори привидно разнородни данни.

В тази статия ще говорим специално за лявата външна връзка. Преди да започнем да описваме този тип връзка, добавяме някои таблици към базата данни.

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

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

Peoples

идентификатор

L_name

F_name

Middle_name

рожден ден

1

Иванова

Дария

Б.

07.16.2000

2

Pugin

Владислав

Николаевич

01.29.1986

3

Evgenin

Александър

Federovich

30.04.1964

4

Анина

обичам

P.

12.31.1989

5

Gerasimovsky

надявам се

P.

14.03.1992

6

Gerasimovsky

Олег

Albertovich

29.01.1985

7

Sukhanovskaya

жури

А.

09.25.1976

8

Sukhanovskaya

Джулия

Y.

01.10.2001

За недвижими имоти:

недвижими имоти

идентификатор

адрес

1

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

2

Архангелск, ок. Severodvinskaya, 84, Apt. 9, стая. 5

3

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

4

Архангелски регион, Новговски, ул. Proletarskaya, 16, Apt. 137

5

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

За взаимоотношенията хората са недвижими имоти:

Realty_peoples

id_peoples

id_realty

тип

7

3

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

8

3

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

3

5

имот

7

1

имот

5

4

Собствена собственост

6

4

Собствена собственост

Ляво присъединяване (Sql) - описание

ляво се присъедини към sql пример

Лявата връзка има следния синтаксис:

Таблица_А ЛЯВОТО СЪБИРАНЕ table_B [{ON предикат} | {ИЗПОЛЗВАНЕ spisok_сtolbtsov}]

И изглежда така:ляво свържете SQL примери

И този израз се превежда като "Избира всички редове от таблица А без изключение и извежда само редове, съответстващи на предикат от таблица Б. Ако в таблица Б липсва двойка за редове от таблица А, тогава попълнете получените колони от нула със стойности. "

Най-често, когато се изпълнява лявата връзка, се указва ON, USING се използва само, когато имената на колоните, за които е планирана връзката, са еднакви.

Лявата връзка - примери за използване

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

SELECT Народи. *, Realty_peoples.id_realty, Realty_peoples.type

ОТ народите LEFT 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

30.04.1964

5

имот

4

Анина

обичам

P.

12.31.1989

5

Gerasimovsky

надявам се

P.

14.03.1992

4

Собствена собственост

6

Gerasimovsky

Олег

Albertovich

29.01.1985

4

Собствена собственост

7

Sukhanovskaya

жури

А.

09.25.1976

1

имот

7

Sukhanovskaya

жури

А.

09.25.1976

3

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

8

Sukhanovskaya

Джулия

Y.

01.10.2001

3

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

Както виждаме, ф Иванова Даря, Пугин Владислав и Анина Любов нямат регистрирани права върху недвижими имоти.

И какво бихме могли да използваме за вътрешно присъединяване? Както знаете, това изключва несъответстващи линии, така че трима души от последната ни извадка просто ще изчезнат:

Query1

идентификатор

L_name

F_name

Middle_name

рожден ден

id_realty

тип

3

Evgenin

Александър

Federovich

30.04.1964

5

имот

5

Gerasimovsky

надявам се

P.

14.03.1992

4

Собствена собственост

6

Gerasimovsky

Олег

Albertovich

29.01.1985

4

Собствена собственост

7

Sukhanovskaya

жури

А.

09.25.1976

1

имот

7

Sukhanovskaya

жури

А.



09.25.1976

3

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

8

Sukhanovskaya

Джулия

Y.

01.10.2001

3

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

Изглежда, че втората възможност отговаря и на условията на нашата задача. Все пак, ако продължаваме да добавяме все повече и повече маси, трима души от резултата ще изчезнат безвъзвратно. Следователно, на практика, когато се комбинират множество таблици, връзките отляво и отдясно се използват много по-често от Вътрешната връзка.

Продължаваме да разглеждаме примери с ляв join sql. Присъединете се към масата с адресите на нашите имоти:

SELECT Народи. *, Realty_peoples.id_realty, Realty_peoples.type, Realty.address

От народите

НАЛЯВО СЪБИРАНЕ Realty_peoples ON Peoples.id = Realty_peoples.id_peoples

НАЛЯВО СЪБИРАНЕ 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

30.04.1964

5

имот

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

4

Анина

обичам

P.

12.31.1989

5

Gerasimovsky

надявам се

P.

14.03.1992

4

Собствена собственост

Архангелски регион, Новговски, ул. Proletarskaya, 16, Apt. 137

6

Gerasimovsky

Олег

Albertovich

29.01.1985

4

Собствена собственост

Архангелски регион, Новговски, ул. Proletarskaya, 16, Apt. 137

7

Sukhanovskaya

жури

А.

09.25.1976

3

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

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

7

Sukhanovskaya

жури

А.

09.25.1976

1

имот

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

8

Sukhanovskaya

Джулия

Y.

01.10.2001

3

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

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

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

Основните допуснати грешки с лявата външна връзка на масите са две:

  1. Редът на таблиците, поради които данните са били изгубени, е неправилно избран.
  2. Грешки при използване на Къде се намира в заявка със слети таблици.

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

Ако ние се премества в таблиците на заявка на някои места, и ще започне с «hellip- От Realty ляво се присъединят Peopleshellip-» всеки един имот, не бихме загубили, няма да кажа за хората.

ляво се присъедини към SQL заявката пример

Въпреки това, не се плашете от лявата връзка, отидете на пълната външна, която ще включва като резултат и съвпада и не съвпада с линията.

В края на краищата размера на извадката често много големи и ненужните данни наистина нямат значение. Основното е да разберете какво искате да получите: всички хора със списък на наличните недвижими имоти или списък на всички недвижими имоти със собствениците им (ако има такива).

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

Втората грешка също е свързана със загубата на данни и не винаги е очевидна.

Нека да се върнем към заявката, когато използваме лявата връзка, получихме данни за всички хора и техните съществуващи недвижими имоти. Запомнете следното с ляв join sql пример:

ОТ народите LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples;

Да предположим, че искаме да прецизираме заявката, а не изходните данни, където видът на закона е "Property". Ако просто добавим, като приложим ляво съединяване sql, примерът е следното:

...

Където тип <> "Имот"

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

Query1

идентификатор

L_name

F_name

Middle_name

рожден ден

id_realty

тип

5

Gerasimovsky

надявам се

P.

14.03.1992

4

Собствена собственост

6

Gerasimovsky

Олег

Albertovich

29.01.1985

4

Собствена собственост

7

Sukhanovskaya

жури

А.

09.25.1976

3

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

8

Sukhanovskaya

Джулия

Y.

01.10.2001

3

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

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

SELECT Народи. *, Realty_peoples.id_realty, Realty_peoples.type

От народите

НАЛЯГАНЕ 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

30.04.1964

4

Анина

обичам

P.

12.31.1989

5

Gerasimovsky

надявам се

P.

14.03.1992

4

Собствена собственост

6

Gerasimovsky

Олег

Albertovich

29.01.1985

4

Собствена собственост

7

Sukhanovskaya

жури

А.

09.25.1976

3

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

8

Sukhanovskaya

Джулия

Y.

01.10.2001

3

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

По този начин, като направим един прост пример с лявото свързване sql, получихме списък на всички хора, като освен това извадихме кой от тях има недвижими имоти в споделена / съвместна собственост.

ляво присъединяване sql прост обяснение пример

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

Споделяне в социалните мрежи:

сроден