Једна од највећих благодати коришћења релационих база података као што је МиСКЛ је та што њена релациона структура омогућава лако складиштење и тражење информација у више табела.
Истражимо како да тачно преузмете податке које желите из више табела базе података и разне доступне спојеве који вам омогућавају да извучете тачне резултате које желите.
Иницијализирајте узорак базе података
Ово није потребно, али ако желите да пратите примере у овом чланку, можете локално иницијализовати узорак базе података помоћу наредби терминала у наставку:
гит клон https://github.com/mdizak/sample-select-db.git
цд сампле-селецт-дб
судо мискл судо мискл сампледб
мискл> ОДАБЕРИТЕ БРОЈ (*) ОД купаца;
Требали бисте добити резултат који наводи да у оквиру постоји 2000 редова купци сто.
Подразумевано / ИННЕР Јоин
Подразумевано придруживање које се користи унутар МиСКЛ базе података назива се ИННЕР јоин, и најчешће је и право напријед. Ово придруживање враћа све записе за које постоје подударни записи у обе табеле и одбацује све остале записе.
Јава пружа ЈДБЦ као део Јава СДК-а. У овом чланку погледајмо детаље повезивања са МиСКЛ базом података и извршавања упита са њом.
На пример, ако желите да видите име и презиме купца, плус износ и датум наруџбине за све наруџбе веће од 1000 УСД, можете користити следећу СКЛ изјаву:
СЕЛЕЦТ
ц.ид, ц.фирст_наме, ц.ласт_наме, о.омоунт, о.цреатед_ат
ОД
купци в, поруџбине о
ГДЕ
о.цустомер_ид = ц.ид И о.омоунт> = 1000;
Неколико напомена у вези са горњим упитом:
- Бира се пет различитих колона, три из табеле купаца и две из табеле поруџбина.
- У оквиру клаузуле ФРОМ две табеле су дефинисане, али суфиксиране словима „ц“ и „о“. Они једноставно наводе псеудониме у СКЛ-у, могу бити све што пожелите и користе се за скраћивање СКЛ упита.
- Тхе о.цустомер_ид = ц.ид је аспект придруживања упита и обезбеђује одговарајућу корелацију између купаца и поруџбина.
У наставку се налази другачији и технички исправнији синтаксички начин писања истог упита:
СЕЛЕЦТ
ц.ид, ц.фирст_наме, ц.ласт_наме, о.омоунт, о.цреатед_ат
ОД
купци ц УНУТРАШЊЕ ПРИДРУЖИВАЊЕ о
НА
цустомер_ид = ц.ид
ГДЕ
о.износ> = 1000;
Горњи упит има тенденцију да буде мало лакши за читање, јер лако можете видети спајање између табеле купаца и поруџбина. Ипак, за све намере, ова два упита су иста и произвешће потпуно исте записе.
ЛЕФТ се придружује
Леви спојеви ће вратити све записе из леве табеле који се такође подударају са записима из десне табеле и одбацити све остале записе. На пример, можда желите да видите укупан износ продаје за сваки производ у бази података, можете покушати да употребите упит као што је:
СЕЛЕЦТ
п.име, сума (итем.амоунт) КАО тамоунт
ОД
ордер_итемс ставка ЛЕФТ ЈОИН ПРОИЗВОДИ стр
НА
итем.продуцт_ид = п.ид
ГРОУП БИ итем.продуцт_ид НАРУЧИ ПО ТОМАНТ ДЕСЦ
То резултира лепим приказом у две колоне који приказује назив производа са укупним износом продаје и ради како се очекује. Упит је прошао све производе из табеле ордер_итемс, придружио их записима у табели производа и вратио укупан износ продаје сваког од њих.
ПРАВО Придружује се
Користећи горњи пример, узмите у обзир чињеницу да је горњи упит вратио само 19 записа, док је у бази укупно 22 производа. То је зато што је упит започео табелом ордерс_итемс и лево га придружио табели продуцтс, и с обзиром да неки производи никада нису наручени, не постоје записи о тим производима унутар ставки наруџби сто.
Шта се дешава ако желите да добијете листу свих производа са износима продаје, укључујући и производе који нису наручени? Покушајте правилно да се придружите следећим упитом:
СЕЛЕЦТ
п.име, сума (итем.амоунт) КАО тамоунт
ОД
ордер_итемс ставка ПРАВО ПРИДРУЖИТЕ се производима стр
НА
итем.продуцт_ид = п.ид
ГРОУП БИ п.ид НАРУЧИ ПО тамоунт ДЕСЦ
То је боље, а упит сада враћа пуних 22 производа, од којих три имају количину нула. То је зато што, уместо да користите ордер_итемс као примарну табелу која се спаја са табелом продуцтс, десно јоин преокреће редослед и спаја табелу продуцтс са табелом ордер_итемс.
Вишеструки удруживања у упит
Понекад имате потребу да спојите три или више табела заједно да бисте добили одређени скуп резултата.
На пример, можда желите листу свих купаца који су купили микроталасну пећницу (ИД производа 1), укључујући њихово име и датум поруџбине. Ово захтева СЕЛЕЦТ у три табеле, што се може урадити коришћењем два спајања са следећим упитом:
СЕЛЕЦТ
ц.фирст_наме, ц.ласт_наме, о.омоунт, о.цреатед_ат
ОД
купци ц УНУТРАШЊЕ ПРИДРУЖИВАЊЕ о
НА
ц.ид = о.цустомер_ид УНУТАРЊЕ ПРИДРУЖИВАЊЕ ставке_наредбе
НА
итем.ордер_ид = о.ид
ГДЕ
итем.продуцт_ид = 1 НАРУЧИ по о.цреатед_ат;
Овај упит враћа свих 426 поруџбина микроталасне и ради како се очекује. Прво подудара све купце са њиховим поруџбинама, а затим даље упите које резултат поставља подударање свих поруџбина само са оним из табеле ордер_итемс које садрже микроталасни производ (ид # 1).
Никада не користите потупите са ИН клаузулама
Као брзи прилог, по сваку цену увек бисте требали избегавати употребу подупита у оквиру својих СКЛ упита, као што су:
ОДАБЕРИТЕ име_презиме_ФРОМ купци ВХЕРЕ ид ИН (СЕЛЕЦТ цустомер_ид ФРОМ поруџбине ВХЕРЕ статус = 'одобрено' И износ <100);
Упити попут ових су веома неефикасни, користе велики број ресурса и треба их избегавати што је више могуће. Уместо тога, користите одговарајуће спојеве како је наведено у горњим одељцима. На пример, горњи упит треба преписати као:
ОДАБЕРИТЕ ц.фирст_наме, ц.ласт_наме ОД купаца ц ЛЕВО ПРИДРУЖИТЕ налоге о УКЉУЧЕНО о.цустомер_ид = ц.ид ГДЕ о.статус = 'одобрено' И о.износ <100;
Уштедите време помоћу СКЛ придруживања
Надамо се да ће вам овај чланак помоћи да вам покаже моћ релационих база података као што је МиСКЛ и како да их правите СКЛ упити који преузимају записе из више табела у оквиру једног упита помоћу спајања, омогућавајући вам да преузмете тачно жељене резултате.
Научили сте три различита спајања у СКЛ-у, како да замените имена ступаца и табела, користите вишеструка спајања у једном упиту и зашто треба да избегавате под-упите. Никада се више не бркајте покушавајући ручно да компајлирате различите скупове података у један и почните да користите удруживања како бисте импресионирали своје радне колеге и уштедели време.
Гоогле документи су сада канцеларијска снага. Уз помоћ ових додатака можете да учините да ваши Гоогле документи изгледају лепо и стилски.
- Програмирање
- СКЛ
- база података
Претплатите се на наш билтен
Придружите се нашем билтену за техничке савете, прегледе, бесплатне е-књиге и ексклузивне понуде!
Још један корак…!
Молимо потврдите своју адресу е-поште у е-поруци коју смо вам управо послали.