У реляційній алгебрі ми спочатку наводимо неофіційне визначення лівого (зовнішнього) з'єднання та продовжуємо доводити, що воно, перейменування, відбір, приєднання та проекція можуть будувати різницю, а також, що різниця, відбір та об'єднання можуть бути використані для побудови ліве (зовнішнє) з'єднання. Насправді ми зробимо це в зворотному порядку: ми покажемо, як побудувати ліві з'єднання за допомогою відмінностей, а потім покажемо, як побудувати відмінності, використовуючи ліві з'єднання.
Нехай і S мають схеми ( R ' , T ) і ( T , S ' ) відповідно, де R ' і S ' - це набори атрибутів однієї схеми, а не інша, а T - сукупність загальних атрибутів.RS( R', Т)(T,S′)R′S′T
Нехай буде нульовий кортеж для схеми S ' . Тобто це кортеж, що складається з усіх нульових значень для кожного атрибута S ′ . Тоді ми визначаємо ліве зовнішнє з'єднання так: це множина всіх кортежів ( r , t , s ), що належать до схеми ( R ' , T , S ' ), де ...w=(ϵ,ϵ,...,ϵ)S′S′R LEFT JOIN S
(r,t,s)(R′,T,S′)
- - кортеж R ;(r,t)R
- (a) - кортеж S або (b) s = w ;(t,s)Ss=w
- Якщо знаходиться у множині для s ≠ w , то ( r , t , w ) немає у множині.(r,t,s)s≠w(r,t,w)
Приклад: 'схеми s є ( 1 , 2 , 3 ) , S ' схеми s є , і ми маємо , що і . За (1) і (2) отримуємо проміжний результат . За (3) ми повинні видалити , оскільки маємо (наприклад) і . Таким чином, нам залишаєтьсяR(A1,A2,A3)SR = { ( 1 , 2 , 3 ) , ( 4 , 5 , 6 ) } S = { ( 2 , 3 , 4 ) , ( 2 , 3 , 6 ) } { ( 1 , 2 , 3 , 4 ) , ( 1(A2,A3,A4)R={(1,2,3),(4,5,6)}S={(2,3,4),(2,3,6)}( 1 , 2 , 3 , ϵ ) ( 1 , 2 , 3 , 4 ) s = 4 ≠ ϵ = w { ( 1 , 2 , 3 ,{(1,2,3,4),(1,2,3,6),(1,2,3,ϵ),(4,5,6,ϵ)}(1,2,3,ϵ)(1,2,3,4)s=4≠ϵ=w{(1,2,3,4),(1,2,3,6),(4,5,6,ϵ)}, очікуваний результат для лівого поєднання.
Теорема: R LEFT JOIN S
еквівалентна (R EQUIJOIN S) UNION ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
.
Доказ: (R EQUIJOIN S)
дає нам усе, що вимагається (1) та (2a). Ми стверджуємо, що ((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
надає нам усі форми, які (r, t, w)
вимагають (2b) та (3).
Щоб побачити це, спочатку зауважте, що (((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R)
це сукупність усіх кортежів у для яких у немає відповідного кортежа . Для цього достатньо відзначити, що проектуючи загальні атрибути з і (набір атрибутів ) і приймаючи різницю, залишається всі та тільки ті кортежі (зі схемою ), які представлені в але НЕ . За допомогою ми відновимо всі та тільки ті кортежі в які мають значення для атрибутів у які є в але не вS R S Т Т Р С Р Р Т Р SRSRSTTRSEQUIJOIN
RRTRS; а саме - саме той набір кортежів, про який ми досі заявляли.
Далі, зауважте, що схема (((PROJECT_T R) DIFFERENCE (PROJECT_T S))
is така ж, як у (а саме ), тоді як схема - . Операція , отже, декартовій твір, ми отримуємо все кортежі виду , де немає в , відповідна в .( R ′ , T ) w S ′ ( r , t , w ) ( t , s ) S ( r , t ) RR(R′,T)wS′JOIN
(r,t,w)(t,s)S(r,t)R
Щоб побачити, що це саме той набір кортежів, який нам потрібно було додати для R EQUIJOIN S
побудови R LEFT JOIN S
, врахуйте наступне: за допомогою побудови (3) виконується, оскільки R EQUIJOIN S
не може містити якщо містить (якби це було, то містити другу частину було б протиріччям); якби ми додали інше не в , тоді було б в відповідає в , і за визначенням , також буде в , протиріччя (3). Це завершує доказ.( r , t , w ) ( r , t , w ) ( r , t , w ) ( t , s ) S ( r , t ) R ( r , t , s )(r,t,s)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
(r,t,w)(r,t,w)(r,t,w)((((PROJECT_T R) DIFFERENCE (PROJECT_T S)) EQUIJOIN R) JOIN w)
(t,s)S(r,t)REQUIJOIN
(r,t,s)R LEFT JOIN S
Тепер ми показуємо, що ліве з'єднання можна використовувати для побудови різниці:
Теорема: R DIFFERENCE S
еквівалентнаPROJECT_T(SELECT_{t'=w}(R LEFT JOIN (SELECT_{s=s'}(((S JOIN RENAME_{T->T'}(S)))))))
Доказ: Зауважте, що тут і порожні, оскільки всі атрибути є спільними для отримання сенсу. Спочатку ми створюємо нове відношення з , дублюючи набір атрибутів у (обробляється і ), так що він складається з кортежів на наборі атрибутів де (обробляється the ). Ліве з'єднання залишає нас з кортежами форми де або . Тепер, щоб позбутися записів, які також з'являються в , ми повинні зберегти лише кортежі формиS ′ S S ( t , t ′ ) ( T , T ′ ) t = t ′ ( t , t ′ ) t = t ′ t ′ = w S ( t , w ) T ′R′S′DIFFERENCE
SSRENAME
JOIN
(t,t′)(T,T′)t=t′SELECT
(t,t′)t=t′t′=wS(t,w), який обробляється самим зовнішнім SELECT
. Останній PROJECT
позбавляється від тимчасового набору атрибутів і залишає нам різницю з точки зору вихідної схеми.T′
Приклад: Нехай і . Спочатку отримуємо з набором атрибутів d : . Операція дає нам декартовій твір з усіма дев'яти можливих спарювань; цей набір тут не пишеться з міркувань форматування. Потім Рагез це вниз до . Значення з дає . Дає . ДаєS = { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 , 8 ) } S T ′ { ( 3 , 4 ) , ( 5 , 6 ) , ( 7 ,R={(1,2),(3,4),(5,6)}S={(3,4),(5,6),(7,8)}SRENAME
T′{ ( 3 , 4 , 3 , 4 ) , ( 5 , 6 , 5 , 6 ) , ( 7 , 8 , 7 , 8 ) } R { ( 1 , 2 , ϵ , ϵ ) , ( 3 , 4 , 3 , 4 ) , ( 5 , 6 ,{(3,4),(5,6),(7,8)}JOIN
SELECT
{(3,4,3,4),(5,6,5,6),(7,8,7,8)}LEFT JOIN
R{ ( 1 , 2 , ϵ , ϵ ) } { ( 1 , 2 ) }{(1,2,ϵ,ϵ),(3,4,3,4),(5,6,5,6)}SELECT
{(1,2,ϵ,ϵ)}PROJECT
{(1,2)}, бажана відповідь.