Ляво свързване (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) - описание
Лявата връзка има следния синтаксис:
Таблица_А ЛЯВОТО СЪБИРАНЕ table_B [{ON предикат} | {ИЗПОЛЗВАНЕ spisok_сtolbtsov}] |
И изглежда така:
И този израз се превежда като "Избира всички редове от таблица А без изключение и извежда само редове, съответстващи на предикат от таблица Б. Ако в таблица Б липсва двойка за редове от таблица А, тогава попълнете получените колони от нула със стойности. "
Най-често, когато се изпълнява лявата връзка, се указва 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 |
Ляво свързване - типични грешки при употреба: грешен ред на таблици
Основните допуснати грешки с лявата външна връзка на масите са две:
- Редът на таблиците, поради които данните са били изгубени, е неправилно избран.
- Грешки при използване на Къде се намира в заявка със слети таблици.
Помислете за първата грешка. Преди решаването на всеки проблем, си струва да разберем ясно какво точно искаме да получим в резултат на това. В горния пример извадихме всички хора, но абсолютно загубихме информация за обекта под номер 2, от който собственикът не бе намерен.
Ако ние се премества в таблиците на заявка на някои места, и ще започне с «hellip- От Realty ляво се присъединят Peopleshellip-» всеки един имот, не бихме загубили, няма да кажа за хората.
Въпреки това, не се плашете от лявата връзка, отидете на пълната външна, която ще включва като резултат и съвпада и не съвпада с линията.
В края на краищата размера на извадката често много големи и ненужните данни наистина нямат значение. Основното е да разберете какво искате да получите: всички хора със списък на наличните недвижими имоти или списък на всички недвижими имоти със собствениците им (ако има такива).
Ляво свързване - типични грешки при използването: правилността на заявката при задаване на условията в Къде
Втората грешка също е свързана със загубата на данни и не винаги е очевидна.
Нека да се върнем към заявката, когато използваме лявата връзка, получихме данни за всички хора и техните съществуващи недвижими имоти. Запомнете следното с ляв 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 прост пример, обяснението на които един - преди да започнете да пишете дори обикновена заявка, трябва внимателно да се разбере това, което искаме да се получи в крайна сметка. Успех!
- Базата данни е сложна система
- База данни за нормализиране
- Coalesce sql: описание, използване, примери
- SQL файл. SQL файлов формат: описание на разширението
- Как да комбинирате две таблици в `Word `хоризонтално или вертикално
- Създаването на MySQL база данни е част от всеки сайт
- MySQL - какво е това? Грешка в MySQL
- DB е ... Типове и свойства на базата данни
- SQL Къде: методи на прилагане и примери
- MySQL JOIN: описание, пример за използване на командата и препоръки
- SQL statement INNER JOIN: примери, синтаксис и функции
- Създаване на SQL таблица стъпка по стъпка
- Изтриване на изявление Изтриване на MySQL
- Изтриване на MySQL дубликати
- Как да създадете MySQL база данни
- Структура на базата данни
- Релационен модел на данни, бази данни, модели и схеми за проектиране
- Подробности за свързването на таблици за достъп
- Какви видове бази данни съществуват днес?
- Общи понятия на DBMS за достъп
- СУБД е система за управление на данните