Външни асоциации

Докато вътрешните съединения съдържат само пресичането на два набора от данни, външните съединения разширяват този набор от несъответстващите данни на левия или десния набор от данни (Фигура 9.6).

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

асоциации

Фигура: 9.6. Външно съединение включва не само съвпадащи редове от два източника на данни, но и несъвпадащи редове извън пресечната точка на множества

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

Когато създавате заявки в конструктора, можете да промените типа на заявката от вътрешен, приет по подразбиране, към външен по всяко време. Това може да се направи с помощта на контекстното меню, както и прозореца със свойства на обединението (фиг. 9.7). Query Builder върши чудесна работа, като демонстрира типа на обединението, като използва специални символи за това.

В SQL кода външното присъединяване се декларира с ключовите думи отляво външно или дясно външно преди ключовата дума join (технически външната ключова дума не е задължителна).

НАЛЯВО | НАДЯСНО [ВЪНШНО] ПРИСЪЕДИНЯВАНЕ Таблица2 ВКЛ. Таблица.колона = Таблица2.колона

Въпреки че някои думи в SQL не са задължителни (като INNER или OUTER) или могат да бъдат съкратени (като proc за процедура), спазването на пълния синтаксис увеличава четливостта на вашия код. В същото време много разработчици пропускат незадължителния синтаксис.

външни

Puc. 9.7. Прозорецът на свойствата за присъединяване показва колоните, участващи в него. Тук можете да промените условието за присъединяване (=,>, count Добавяне на звездичка отдясно на знака за равенство в условието на клаузата

2005 г. където. Въпреки че този синтаксис работи в SQL Server 2000,

вече не се поддържа в SQL Server 2005. Вътрешните съединения на ANSI SQL-89 продължават да работят, но външните съединения изискват синтаксис на ANSI SQL-92.

и незадължителни външни ключове

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

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

Примерната база данни OBXKites използва подобна схема за приоритет на поръчките, така че отчитането на всички поръчки с техните приоритети изисква външно присъединяване.

ИЗБЕРЕТЕ OrderNumber, OrderPriorityName ОТ dbo. [Поръчка]

ЛЯВО ВЪНШНО ПРИСЪЕДИНЯВАНЕ dbo.OrderPriority ON [Поръчка] .OrderPrioritylD =

Това ляво външно присъединяване извлича всички поръчки и приоритети, които им съответстват (ако има такива). OBXKites_Populate скрипт. sql задава две поръчки с приоритет Rush (незабавно).

Връщащите се връзки (наричани още рекурсивни и естествени) използват незадължителни външни ключове. В базата данни за семейно счетоводство външните ключове са полетата Mot he ID и Father ID, свързани с полето за идентификация на майка и баща на Regson. Този незадължителен външен ключ позволява да се въвежда информация за хората, дори ако информацията на техния родител все още не е въведена в базата данни. В същото време, ако полетата MotherlD и FatherlD са попълнени, те трябва да посочат лицето, чиято информация е въведена в базата данни.