inner join vs outer join
Унутрашње придруживање против спољног спајања: Припремите се да истражите тачне разлике између унутрашњег и спољашњег спајања
Пре него што истражимо разлике између Иннер Јоин Вс Оутер Јоин, прво да видимо шта је СКЛ ЈОИН?
Клаузула о придруживању користи се за комбиновање записа или за манипулисање записима из две или више табела кроз услов придруживања. Услов придруживања показује како се колоне из сваке табеле међусобно подударају.
Придруживање се заснива на повезаној колони између ових табела. Најчешћи пример је спајање две табеле кроз колону примарног кључа и колону страног кључа.
Претпоставимо да имамо табелу која садржи плату запослених, а постоји још једна табела која садржи детаље о запосленима.
У овом случају, постојаће уобичајена колона попут ИД-а запосленика која ће се придружити ове две табеле. Ова колона ИД-а запосленог била би примарни кључ табела детаља о запосленом и страни кључ у табели зарада запослених.
Веома је важно имати заједнички кључ између два ентитета. Табелу можете сматрати ентитетом, а кључ као заједничку везу између две табеле која се користи за операцију спајања.
како извући .7з датотеке на мац
У основи постоје две врсте Придруживања у СКЛ-у, тј. Унутрашње придруживање и спољашње придруживање . Спољни спој се даље дели на три типа, тј. Лево спољно придруживање, десно спољашње придруживање и потпуно спољашње придруживање.
У овом чланку видећемо разлику између Унутрашње придруживање и спољашње придруживање детаљно. Укрштање и неједнако удруживање држаћемо ван опсега овог чланка.
Шта ћете научити:
- Шта је Иннер Јоин?
- Шта је спољашње придруживање?
- Разлика између унутрашњег и спољашњег спајања
- Перформансе
- МС Аццесс унутрашње и спољашње придруживање
- Лефт Јоин вс Лефт Оутер Јоин
- Лефт Оутер Јоин вс Ригхт Оутер Јоин
- Разлика између унутрашњег и спољашњег спајања у табеларном формату
- Унутрашње и спољашње придруживање против Уније
- Закључак
- Препоручено читање
Шта је Иннер Јоин?
Унутрашње спајање враћа само редове који имају подударне вредности у обе табеле (овде разматрамо да се спајање врши између две табеле).
Шта је спољашње придруживање?
Спољно придруживање укључује одговарајуће редове, као и неке неподударајуће редове између две табеле. Спољно придруживање се у основи разликује од унутрашњег придруживања по томе како се бави условом лажног поклапања.
Постоје 3 врсте спољашњег придруживања:
- Лево Спољно Придруживање : Враћа све редове из ЛЕФТ табеле и одговарајуће записе између обе табеле.
- Право спољашње придруживање : Враћа све редове из ДЕСНЕ табеле и одговарајуће записе између обе табеле.
- Потпуно спољашње придруживање : Комбинује резултат левог спољашњег и десног спољашњег споја.
Разлика између унутрашњег и спољашњег спајања
[слика извор ]
Као што је приказано на горњем дијаграму, постоје два ентитета, тј. Табела 1 и табела 2, а обе табеле деле неке заједничке податке.
Унутарње придруживање ће вратити заједничку површину између ових табела (зелено засјењено подручје на дијаграму изнад), тј. Све записе који су заједнички између табеле 1 и табеле 2.
Лево спољно придруживање вратиће све редове из табеле 1 и само оне редове из табеле 2 који су такође заједнички за табелу 1. Исправно спољашње придруживање учиниће управо супротно. Даће све записе из табеле 2 и само одговарајуће одговарајуће записе из табеле 1.
Даље, потпуно спољашње придруживање ће нам дати све записе из табеле 1 и табеле 2.
Почнимо са примером да то појаснимо.
Претпоставимо да имамо две табеле: ЕмпДетаилс и ЕмпСалари .
Табела ЕмпДетаилс:
Број запосленог | Име запосленог |
7 | Лили |
један | Јохн |
два | Самантха |
3 | Ниједан |
4 | Свиленкаста |
5 | РАМ |
6 | Арпит |
8 | Сита |
9 | Фарах |
10 | Јерри |
Табела плата плата:
Број запосленог | Име запосленог | ЗапослениПлата |
---|---|---|
Једанаест | Росе | 90000 |
један | Јохн | 50.000 |
два | Самантха | 120000 |
3 | Ниједан | 75000 |
4 | Свиленкаста | 25000 |
5 | РАМ | 150000 |
6 | Арпит | 80000 |
12 | Саксхи | 45000 |
13 | Јацк | 250000 |
Направимо Унутрашњи спој на ове две табеле и посматрајмо резултат:
Упит:
SELECT EmpDetails. EmployeeID, EmpDetails. EmployeeName, EmpSalary. EmployeeSalary FROM EmpDetails INNER JOIN EmpSalary ON EmpDetails. EmployeeID = EmpSalary. EmployeeID;
Резултат:
Број запосленог | Име запосленог | ЗапослениПлата |
---|---|---|
7 | Лили | НУЛА |
један | Јохн | 50.000 |
два | Самантха | 120000 |
3 | Ниједан | 75000 |
4 | Свиленкаста | 25000 |
5 | РАМ | 150000 |
6 | Арпит | 80000 |
У горњем скупу резултата можете да видите да је Иннер Јоин вратио првих 6 записа који су били присутни и у ЕмпДетаилс-у и у ЕмпСалари-у који имају одговарајући кључ, тј. ЕмплоиееИД. Дакле, ако су А и Б два ентитета, Унутрашње придруживање ће вратити скуп резултата који ће бити једнак „Записима у А и Б“, на основу одговарајућег кључа.
Погледајмо сада шта ће учинити Лефт Оутер Јоин.
Упит:
SELECT EmpDetails. EmployeeID, EmpDetails. EmployeeName, EmpSalary. EmployeeSalary FROM EmpDetails LEFT JOIN EmpSalary ON EmpDetails. EmployeeID = EmpSalary. EmployeeID;
Резултат:
Број запосленог | Име запосленог | ЗапослениПлата |
---|---|---|
један | Јохн | 50.000 |
два | Самантха | 120000 |
3 | Ниједан | 75000 |
4 | Свиленкаста | 25000 |
5 | РАМ | 150000 |
6 | Арпит | 80000 |
8 | Сита | НУЛА |
9 | Фарах | НУЛА |
10 | Јерри | НУЛА |
У горњем скупу резултата можете да видите да је лево спољно удруживање вратило свих 10 записа из ЛЕФТ табеле, тј. Табеле ЕмпДетаилс и како се првих 6 записа подудара, вратило је плату запослених за ове подударне записе.
Како остали записи немају одговарајући кључ у ДЕСНОЈ табели, тј. Табели ЕмпСалари, вратио је НУЛЛ који одговара тим. Будући да Лили, Сита, Фарах и Јерри немају одговарајући ИД запосленог у табели ЕмпСалари, њихова плата се приказује као НУЛЛ у скупу резултата.
Дакле, ако су А и Б два ентитета, лево спољно удруживање ће вратити скуп резултата који ће бити једнак „Записима у А НОТ Б“, на основу одговарајућег кључа.
А сада, посматрајмо шта ради Право Спољашње Придруживање.
Упит:
SELECT EmpDetails. EmployeeID, EmpDetails. EmployeeName, EmpSalary. EmployeeSalary FROM EmpDetails RIGHT join EmpSalary ON EmpDetails. EmployeeID = EmpSalary. EmployeeID;
Резултат:
Број запосленог | Име запосленог | ЗапослениПлата |
---|---|---|
НУЛА | НУЛА | 90000 |
један | Јохн | 50.000 |
два | Самантха | 120000 |
3 | Ниједан | 75000 |
4 | Свиленкаста | 25000 |
5 | РАМ | 150000 |
6 | Арпит | 80000 |
НУЛА | НУЛА | 250000 |
НУЛА | НУЛА | 250000 |
У горњем скупу резултата можете видети да је Десно Спољно Придруживање учинило управо супротно од Левог Придруживања. Вратила је све зараде са правог стола, односно табеле ЕмпСалари.
Али, како Росе, Саксхи и Јацк немају одговарајући ИД запосленика у левој табели, тј. Табелу ЕмпДетаилс, из леве табеле смо добили њихов ИД запосленог и ЕмплоиееНаме као НУЛЛ.
Дакле, ако су А и Б два ентитета, тада ће право спољашње спајање вратити скуп резултата који ће бити једнак „Записима у Б НЕ А“, на основу одговарајућег кључа.
Погледајмо и какав ће бити резултат ако радимо селекцију на свим колонама у обе табеле.
Упит:
SELECT * FROM EmpDetails RIGHT JOIN EmpSalary ON EmpDetails. EmployeeID = EmpSalary. EmployeeID;
Резултат:
Број запосленог | Име запосленог | Број запосленог | Име запосленог | ЗапослениПлата |
---|---|---|---|---|
НУЛА | НУЛА | Једанаест | Росе | 90000 |
један | Јохн | један | Јохн | 50.000 |
два | Самантха | два | Самантха | 120000 |
3 | Ниједан | 3 | Ниједан | 75000 |
4 | Свиленкаста | 4 | Свиленкаста | 25000 |
5 | РАМ | 5 | РАМ | 150000 |
6 | Арпит | 6 | Арпит | 80000 |
НУЛА | НУЛА | 12 | Саксхи | 250000 |
НУЛА | НУЛА | 13 | Јацк | 250000 |
Сада, кренимо у Фулл Јоин.
Потпуно спољашње спајање се врши када желимо све податке из обе табеле, без обзира да ли постоји подударање или не. Стога, ако желим све запослене, чак и ако не пронађем одговарајући кључ, покренућу упит као што је приказано доле.
Упит:
SELECT * FROM EmpDetails FULL JOIN EmpSalary ON EmpDetails. EmployeeID = EmpSalary. EmployeeID;
Резултат:
Број запосленог | Име запосленог | Број запосленог | Име запосленог | ЗапослениПлата |
---|---|---|---|---|
7 | Лили | НУЛА | НУЛА | НУЛА |
један | Јохн | један | Јохн | 50.000 |
два | Самантха | два | Самантха | 120000 |
3 | Ниједан | 3 | Ниједан | 75000 |
4 | Свиленкаста | 4 | Свиленкаста | 25000 |
5 | РАМ | 5 | РАМ | 150000 |
6 | Арпит | 6 | Арпит | 80000 |
8 | Сита | НУЛА | НУЛА | НУЛА |
9 | Фарах | НУЛА | НУЛА | НУЛА |
10 | Јерри | НУЛА | НУЛА | НУЛА |
НУЛА | НУЛА | Једанаест | Росе | 90000 |
НУЛА | НУЛА | 12 | Саксхи | 250000 |
НУЛА | НУЛА | 13 | Јацк | 250000 |
Из горњег скупа резултата можете видети да како се првих шест записа подудара у обе табеле, добили смо све податке без икаквог НУЛЛ-а. Следећа четири записа постоје у левој табели, али не и у десној, тако да су одговарајући подаци у десној табели НУЛЛ.
Последња три записа постоје у десној, а не у левој табели, стога имамо НУЛЛ у одговарајућим подацима из леве табеле. Дакле, ако су А и Б два ентитета, потпуно спољно удруживање вратиће скуп резултата који ће бити једнак „Записима у А И Б“, без обзира на одговарајући кључ.
Теоретски, то је комбинација левог и десног спајања.
Перформансе
Упоредимо унутрашње придруживање са левим спољашњим придруживањем на СКЛ серверу. Говорећи о брзини рада, леви спољни ЈОИН очигледно није бржи од унутрашњег.
Према дефиницији, спољашњи спој, био он леви или десни, мора извршити сав рад унутрашњег споја, заједно са додатним радом који продужава резултате. Очекује се да ће спољно спајање вратити већи број записа што додатно повећава његово укупно време извршавања само због већег скупа резултата.
Дакле, спољни спој је спорији од унутрашњег.
Штавише, могу постојати неке специфичне ситуације када ће лево спајање бити брже од унутрашњег, али не можемо даље да их замењујемо међусобно јер лево спољно спајање функционално није еквивалентно унутрашњем.
Размотримо случај када би лево придруживање могло бити брже од унутрашњег. Ако су табеле укључене у операцију придруживања премале, рецимо да имају мање од 10 записа и табеле немају довољно индекса да покрију упит, у том случају је Лево придруживање обично брже од унутрашњег придруживања.
Створимо две доње табеле и као пример направимо УНУТАРЊЕ ПРИДРУЖИВАЊЕ и ЛЕВО ВАЊСКО ПРИДРУЖИВАЊЕ:
CREATE TABLE #Table1 ( ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL ) INSERT #Table1 (ID, Name) VALUES (1, 'A') INSERT #Table1 (ID, Name) VALUES (2, 'B') INSERT #Table1 (ID, Name) VALUES (3, 'C') INSERT #Table1 (ID, Name) VALUES (4, 'D') INSERT #Table1 (ID, Name) VALUES (5, 'E') CREATE TABLE #Table2 ( ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL ) INSERT #Table2 (ID, Name) VALUES (1, 'A') INSERT #Table2 (ID, Name) VALUES (2, 'B') INSERT #Table2 (ID, Name) VALUES (3, 'C') INSERT #Table2 (ID, Name) VALUES (4, 'D') INSERT #Table2 (ID, Name) VALUES (5, 'E') SELECT * FROM #Table1 t1 INNER JOIN #Table2 t2 ON t2.Name = t1.Name
ИД | Име | ИД | Име | |
---|---|---|---|---|
Испод је визуализација унутрашњег спајања: | Испод је визуализација спољашњег споја | |||
један | један | ДО | један | ДО |
два | два | Б. | два | Б. |
3 | 3 | Ц. | 3 | Ц. |
4 | 4 | Д. | 4 | Д. |
5 | 5 | ИС | 5 | ИС |
SELECT * FROM (SELECT 38 AS bah) AS foo JOIN (SELECT 35 AS bah) AS bar ON (55=55);
ИД | Име | ИД | Име | |
---|---|---|---|---|
један | један | ДО | један | ДО |
два | два | Б. | два | Б. |
3 | 3 | Ц. | 3 | Ц. |
4 | 4 | Д. | 4 | Д. |
5 | 5 | ИС | 5 | ИС |
Као што видите горе, оба упита су вратила исти скуп резултата. У овом случају, ако прегледате план извршења оба упита, открићете да је унутрашње спајање коштало више од спољашњег. То је зато што за унутрашње удруживање СКЛ сервер врши хеш подударање, док угнежђене петље за лево удруживање.
Хасх подударање је обично брже од угнежђених петљи. Али, у овом случају, с обзиром да је број редова тако мали и нема индекса за коришћење (као што радимо спајање на колони имена), хеширање је испало најскупљи унутрашњи упит за придруживање.
Међутим, ако промените подударни кључ у упиту за придруживање из Наме у ИД и ако у табели постоји велики број редова, тада ћете открити да ће унутрашње спајање бити брже од левог спољашњег спајања.
МС Аццесс унутрашње и спољашње придруживање
Када користите више извора података у упиту МС Аццесс, тада примените ЈОИН за контролу записа које желите да видите, у зависности од тога како су извори података међусобно повезани.
У унутрашњем спајању, само сродни из обе табеле комбинују се у један скуп резултата. Ово је подразумевано придруживање у програму Аццесс и најчешће коришћено. Ако примените придруживање, али не изричито одредите који је то тип придруживања, онда Аццесс претпоставља да је то унутрашње удруживање.
У спољним спајањима, сви повезани подаци из обе табеле се правилно комбинују, плус сви преостали редови из једне табеле. У потпуном спољашњем спајању, сви подаци се комбинују где год је то могуће.
Лефт Јоин вс Лефт Оутер Јоин
У СКЛ серверу, кључна реч ектернал није обавезна када примените лево спољно спајање. Према томе, нема разлике ако напишете „ЛЕВО ОУТЕР ЈОИН“ или „ЛЕФТ ЈОИН“ јер ће вам оба постићи исти резултат.
ЛИЈЕВО ПРИДРУЖИВАЊЕ Б је еквивалентна синтакса А ЛИЈЕВО ВАЊСКО ПРИДРУЖИВАЊЕ Б.
Испод је листа еквивалентних синтакса на СКЛ серверу:
[слика извор ]
Лефт Оутер Јоин вс Ригхт Оутер Јоин
Ту разлику смо већ видели у овом чланку. Да бисте видели разлику, можете се обратити упитима Лефт Оутер Јоин и Ригхт Оутер Јоин и скупу резултата.
Главна разлика између левог и десног спајања лежи у укључивању редова који се не подударају. Лево спољно удруживање укључује неуспоредиве редове из табеле који се налази лево од клаузуле придруживања, док Десно спољно спајање укључује неуспоредиве редове из табеле која се налази десно од клаузуле о придруживању.
Људи се питају шта је боље користити, тј. Лево или Десно? У основи су то исте врсте операција, осим ако су њихови аргументи обрнути. Стога, када питате који спој да користите, заправо се питате да ли да напишете а. То је само ствар преференција.
Генерално, људи више воле да користе Лефт јоин у свом СКЛ упиту. Предложио бих вам да будете доследни у начину на који пишете упит како бисте избегли забуну у тумачењу упита.
До сада смо видели све о унутрашњем и свим спољашњим спојевима. Дозволите нам да брзо резимирамо разлику између Унутарњег и Спољног придруживања.
Разлика између унутрашњег и спољашњег спајања у табеларном формату
Иннер Јоин | Спољно придруживање |
---|---|
Приказује само редове који имају подударне вредности у обе табеле. | Укључује одговарајуће редове, као и неке неподударајуће редове између две табеле. |
У случају да постоји велики број редова у табелама и постоји индекс који се користи, ИННЕР ЈОИН је генерално бржи од ОУТЕР ЈОИН. | Генерално, ВАЊСКО ПРИДРУЖИВАЊЕ је спорије од УНУТАРЊЕГ ПРИДРУЖИВАЊА јер треба да врати већи број записа у поређењу са УНУТАРЊИМ ПРИДРУЖИВАЊЕМ. Међутим, могу постојати неки специфични сценарији у којима је ОУТЕР ЈОИН бржи. |
Када подударање није пронађено, оно не враћа ништа. | Када подударање није пронађено, у враћену вредност ступца ставља се НУЛЛ. |
Користите ИННЕР ЈОИН када желите да потражите детаљне информације о било којој одређеној колони. | Користите ОУТЕР ЈОИН када желите да прикажете листу свих информација у две табеле. |
ИННЕР ЈОИН делује као филтер. На обе табеле мора да постоји подударање да би унутрашње спајање вратило податке. | Они се понашају попут додавања података. |
Имплицитни запис придруживања постоји за унутрашње удруживање које наводи табеле које се спајају на начин одвојен зарезима у клаузули ФРОМ. Пример: СЕЛЕЦТ * ФРОМ продуцт, цатегори ВХЕРЕ продуцт.ЦатегориИД = цатегори.ЦатегориИД; | Не постоји имплицитна нотација спајања за спољно спајање. |
Унутрашње и спољашње придруживање против Уније
Понекад збуњујемо Јоин анд Унион и ово је такође једно од најчешће постављаних питања у СКЛ интервјуи . Већ смо видели разлику између унутрашњег споја и споја. Сада, да видимо како се ПРИДРУЖИВАЊЕ разликује од УНИЈЕ.
УНИОН поставља ред упита једни за другима, док јоин ствара картезијски производ и подставља га. Стога су УНИОН и ЈОИН потпуно различите операције.
Покренимо доња два упита у МиСКЛ-у и погледајте њихов резултат.
УНИОН Упит:
SELECT 28 AS bah UNION SELECT 35 AS bah;
Резултат:
Бах | |
---|---|
један | 28 |
два | 35 |
ПРИДРУЖИТЕ СЕ УПИТУ:
SELECT * FROM (SELECT 38 AS bah) AS foo JOIN (SELECT 35 AS bah) AS bar ON (55=55);
Резултат:
фоо | Бар | |
---|---|---|
један | 38 | 35 |
Операција УНИОН ставља резултат два или више упита у један скуп резултата. Овај скуп резултата садржи све записе који се враћају кроз све упите укључене у УНИОН. Дакле, у основи УНИОН комбинује два скупа резултата заједно.
Операција спајања преузима податке из две или више табела на основу логичких односа између ових табела, тј. На основу услова спајања. У упиту за придруживање подаци из једне табеле користе се за одабир записа из друге табеле. Омогућава вам повезивање сличних података који су присутни у различитим табелама.
Да бисте то врло једноставно разумели, можете рећи да УНИОН комбинује редове из две табеле, док спој комбинира колоне из две или више табела. Дакле, оба се користе за комбиновање података из н табела, али разлика лежи у начину комбиновања података.
Испод су сликовити прикази УНИОН-а и ЈОИН-а.
Горе наведено је сликовни приказ Операције спајања која приказује да сваки запис у скупу резултата садржи колоне из обе табеле, тј. Табеле А и Табеле Б. Овај резултат се враћа на основу услова придруживања примењеног у упиту.
Удруживање је углавном резултат денормализације (супротно нормализацији) и користи страни кључ једне табеле за тражење вредности колоне применом примарног кључа у другој табели.
Горе наведено је сликовни приказ операције УНИОН који приказује да је сваки запис у скупу резултата ред из било које од две табеле. Дакле, резултат УНИОН-а комбиновао је редове из табеле А и табеле Б.
Даље читање = >> МиСКЛ УНИОН је објаснио примерима
Закључак
У овом чланку видели смо главне разлике између Унутрашње придруживање и спољашње придруживање у СКЛ-у . Видели смо и класификацију спољашњег споја, тј. Левог, десног и пуног. Видели смо како свака од ових врста спајања функционише и како се међусобно разликују.
Такође смо извршили поређење перформанси између ових типова спајања. Такође смо разговарали о томе како се придруживање разликује од синдиката.
Такође прочитајте = >> Типови придруживања МиСКЛ
Надам се да би вам овај чланак помогао да разјасните сумње у погледу разлика између различитих врста спајања. Сигурни смо да ће вас ово заиста навести на основу жељеног скупа резултата да одлучите који ћете тип удруживања одабрати.
питања за инжењере мрежних инжењера 250 + питања и одговори објашњени пдф
Препоручено читање
- Тачна разлика између верификације и валидације са примерима
- Модем против рутера: знајте тачну разлику
- Разлика између СКЛ Вс МиСКЛ Вс СКЛ Сервер (са примерима)
- Водич за Питхон ДатеТиме са примерима
- ЛАН против ВАН-а против МАН-а: Тачна разлика између врста мреже
- Изрежи команду у Унику са примерима
- Синтакса наредбе Уник Цат, опције са примерима
- Употреба курсора у МонгоДБ са примерима