Външни присъединявания на SQL

Стандартът SQL2 разшири концепцията за условни съединения. В стандарта SQL1, когато се присъединяваха към релации, бяха използвани само условията, посочени в клаузата WHERE на оператора SELECT, и в този случай, само кортежи от оригиналните релации, за които тези условия бяха дефинирани и истина, бяха обединени от посоченото условия в получената връзка. В действителност обаче често е необходимо да се присъединят таблици по такъв начин, че резултатът да включва всички редове от първата таблица и вместо онези редове от втората таблица, за които условието за присъединяване не е изпълнено, резултатът ще съдържа недефинирани стойности. Или обратно, всички редове от дясната (втората) таблица са включени, а липсващите части от редове от първата таблица са подплатени с нулеви стойности. Такива обединения бяха наречени външни съединения, за разлика от съединения, дефинирани от стандарта SQL1, който започна да се нарича вътрешен.

По принцип синтаксисът за частта FROM в стандарта SQL2 е както следва:

[име на синоним за таблица_1] [. ]

В тези дефиниции INNER означава вътрешно съединение, LEFT означава ляво съединение, т.е. резултатът включва всички редове на таблица 1, а части от получените кортежи, за които не е имало съответни стойности в таблица 2, се допълват с NULL стойности (недефинирани). Ключовата дума НАДЯСНО означава дясно външно съединение и за разлика от лявото съединение, в този случай всички редове на таблица 2 са включени в получената връзка, а липсващите части от таблица 1 са допълнени с нулеви стойности. Ключовата дума FULL определя пълна външна връзка присъединяване: и ляво, и дясно. При пълно външно съединение се извършват както дясно, така и ляво външно съединение и получената връзка включва всички редове от таблица 1, подплатени с нулеви стойности, и всички редове от таблица 2, също подплатени с нулеви стойности.

Ключовата дума OUTER означава външна, но ако са посочени ключовите думи FULL, LEFT, RIGHT, обединението винаги се счита за външно.

Нека разгледаме някои примери за външни съединения. Да се ​​върнем отново към базата данни на Session. Нека създадем връзка, при която всички оценки, получени от всички студенти на всички изпити, които трябваше да положат, ще стоят. Ако студентът не е издържал този изпит, вместо оценка той ще има неопределена стойност. За да направим това, ние последователно ще изпълним естественото вътрешно съединение на таблици R2 и R3 от атрибута Group и ще свържем получената връзка с лявото външно естествено съединение с таблицата R1, използвайки колоните Name и Discipline. В същото време стандартът позволява използването на скоби, тъй като резултатът от обединението може да бъде един от аргументите в частта от оператора SELECT.

SELECT Rl. Пълно име, R1. Дисциплина. Rl.Оценка

ОТ (R2 ЕСТЕСТВЕНО ВЪТРЕШНО ПРИСЪЕДИНЯВАНЕ R3) ЛЯВО ПРИСЪЕДИНЯВАНЕ Rl ИЗПОЛЗВАНЕ (име. Дисциплина)

Мрежи и телекомуникации

Мрежи и телекомуникации

Мрежи и телекомуникации

Нека разгледаме още един пример, за това нека вземем базата данни "Библиотека". Състои се от три отношения, имената на атрибутите се въвеждат тук с латински букви, което е необходимо в повечето търговски СУБД.

КНИГИ (ISBN, НАЗВАНЕ. АВТОР. КОУТОР. ГОДИНА, СТРАНИЦИ)

ЧИТАТЕЛ (NUM_READER. NAME_READER, ADRESS. HOOM_PHONE. WORK_PHONE. BIRTH_DAY)

ПРИМЕРНА (INV, ISBN, YES_NO. NUM_READER. DATE_IN. DATE_DUT)

Тук таблицата BOOKS описва всички книги в библиотеката, тя има следните атрибути: