МиСКЛ ЈОИНС Водич: УНУТАРЊИ, ВАЊСКИ, ЛИЈЕВИ, ДЕСНИ, КРСТ

Anonim

Шта су ПРИДРУЖИВАЊА?

Удруживање помаже у преузимању података из две или више табела базе података. Табеле су међусобно повезане помоћу примарног и страног кључа.

Напомена: ЈОИН је најнеразумеванија тема међу СКЛ-има. Ради једноставности и лакоће разумевања, користићемо нову базу података за вежбање узорка. Како је приказано испод

ид име презиме мовие_ид
1 Адаме Смитх 1
2 Рави Кумар 2
3 Сусан Давидсон 5
4 Јенни Адрианна 8
6 Лее Понг 10
ид наслов категорија
1 КРЕЕД УБИТНИКА: ЗАМЕРИ Анимације
2 Реал Стеел (2012) Анимације
3 Алвин и веверице Анимације
4 Авантуре Тин Тин Анимације
5 Сигурно (2012) поступак
6 Сигурна кућа (2012) поступак
7 ГИА 18+
8 Крајњи рок 2009 18+
9 Прљава слика 18+
10 Марлеи и ја Романса

Врсте придруживања

Цросс ЈОИН

Цросс ЈОИН је најједноставнији облик ЈОИН-а који подудара сваки ред из једне табеле базе података са свим редовима другог.

Другим речима, даје нам комбинације сваког реда прве табеле са свим записима у другој табели.

Претпоставимо да желимо да добијемо све записе чланова у односу на све записе филмова, можемо користити скрипту приказану у наставку да бисмо добили жељене резултате.

SELECT * FROM `movies` CROSS JOIN `members`

Извршавање горње скрипте у МиСКЛ радном окружењу даје нам следеће резултате.

 
id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

ИННЕР ЈОИН

Унутрашњи ЈОИН се користи за враћање редова из обе табеле који задовољавају задати услов.

Претпоставимо да желите да добијете списак чланова који су унајмили филмове заједно са насловима филмова које су они унајмили. За то можете једноставно користити ИННЕР ЈОИН, који враћа редове из обе табеле који задовољавају задате услове.

SELECT members.`first_name` , members.`last_name` , movies.`title`FROM members ,moviesWHERE movies.`id` = members.`movie_id`

Извршавање горње скрипте дати

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Имајте на уму да се горња скрипта резултата такође може написати на следећи начин да би се постигли исти резултати.

SELECT A.`first_name` , A.`last_name` , B.`title`FROM `members`AS AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`

Спољни ПРИДРУЖЕНИ

МиСКЛ Оутер ЈОИНс враћају све записе који се подударају из обе табеле.

Може открити записе који се не подударају у спојеној табели. Враћа НУЛЛ вредности за записе спојене табеле ако није пронађено подударање.

Звучи збуњујуће? Погледајмо пример -

ЛЕВО ПРИДРУЖИТЕ

Претпоставимо да сада желите да добијете наслове свих филмова заједно са именима чланова који су их изнајмили. Јасно је да неке филмове нико није изнајмио. У ту сврху можемо једноставно да користимо ЛЕФТ ЈОИН .

ЛЕФТ ЈОИН враћа све редове из табеле са леве стране, чак и ако у табели с десне стране нису пронађени одговарајући редови. Ако у табели с десне стране није пронађено ниједно подударање, враћа се НУЛЛ.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON B.`movie_id` = A.`id`

Извршење горње скрипте у МиСКЛ воркбенцх-у даје. Можете видети да у враћеном резултату који је наведен у наставку, да за филмове који нису изнајмљени, поља имена чланова имају НУЛЛ вредности. То значи да ниједан подударни члан није пронашао табелу чланова за тај одређени филм.

 
title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

ПРАВО ПРИДРУЖИТЕ

ПРАВО ПРИДРУЖИВАЊЕ је очигледно супротност ЛЕВОМ ПРИДРУЖЕЊУ. ДЕСНО ПРИДРУЖИВАЊЕ враћа све колоне из табеле с десне стране, чак и ако у табели с леве стране нису пронађени одговарајући редови. Ако у табели са леве стране није пронађено ниједно подударање, враћа се НУЛЛ.

У нашем примеру, претпоставимо да треба да пронађете имена чланова и филмове које су они унајмили. Сада имамо новог члана који још увек није изнајмио ниједан филм

SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON B.`id` = A.`movie_id`

Извршавање горње скрипте у МиСКЛ радном окружењу даје следеће резултате.

 
first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

Клаузуле „ОН“ и „УСИНГ“

У горњим примерима упита ЈОИН користили смо клаузулу ОН да бисмо ускладили записе између табеле.

Клаузула УСИНГ такође се може користити у исту сврху. Разлика са УСИНГ је у томе што у обе табеле треба да имају идентична имена за подударне колоне.

До сада смо у табели „филмови“ користили њен примарни кључ са именом „ид“. То смо навели у табели „мемберс“ са именом „мовие_ид“.

Преименујмо поље "табеле" филмова у "ид" да би добило име "мовие_ид". То радимо како бисмо имали идентична подударна имена поља.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Даље, употребимо УСИНГ са горњим примером ЛЕФТ ЈОИН.

SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )

Поред употребе ОН и УСИНГ са ЈОИНс , можете користити и многе друге МиСКЛ клаузуле попут ГРОУП БИ, ВХЕРЕ и чак функције попут СУМ , АВГ итд.

Зашто бисмо требали користити удруживања?

Сад можда мислите, зашто користимо ЈОИН-ове када можемо да радимо исти задатак покрећући упите. Нарочито ако имате неко искуство у програмирању база података, знате да можемо покретати упите један по један, користите излаз сваког у узастопним упитима. Наравно, то је могуће. Али помоћу ЈОИН-ова посао можете обавити користећи само један упит са било којим параметрима претраге. С друге стране, МиСКЛ може постићи боље перформансе са ЈОИН-овима јер може користити индексирање. Једноставна употреба једног ЈОИН упита уместо извођења више упита смањује режијске трошкове сервера. Уместо употребе више упита, што доводи до више преноса података између МиСКЛ-а и апликација (софтвера). Даље, потребно је више манипулација подацима и на крају апликације.

Јасно је да помоћу ЈОИН-ова можемо постићи боље перформансе МиСКЛ-а и апликација.

Резиме

  • ЈОИНС нам омогућавају да комбинујемо податке из више табела у један скуп резултата.
  • ЈОИНС имају боље перформансе у поређењу са подупитима
  • ИННЕР ЈОИНС враћају само редове који испуњавају задате критеријуме.
  • ОУТЕР ЈОИНС такође могу вратити редове у којима није пронађено подударање. Непоређени редови се враћају кључном речи НУЛЛ.
  • Главни типови ЈОИН-а укључују Иннер, Лефт Оутер, Ригхт Оутер, Цросс ЈОИНС итд.
  • Клаузула која се често користи у ЈОИН операцијама је "ОН". Клаузула „УСИНГ“ захтева да одговарајуће колоне буду истог имена.
  • ЈОИНС се такође могу користити у другим клаузулама као што су ГРОУП БИ, ВХЕРЕ, СУБ КУЕРИЕС, АГРЕГАТЕ ФУНЦТИОНС итд.