Saturday, April 23, 2016

SQL Joins



SQL Joins තේරෙන සිංහලෙන්. 

අපි මෙහිදී කරන්නේ Database tables දෙකක හෝ කිහිපයක Data rows combine (සම්බන්ධ ) කරන එකයි. ඒ කියන්නේ අපි Database tables දෙකක නැත්නම් කිහිපයක තියෙන Data මොකක් හරි හේතුවක්(Unique ID) එකක් මත සම්බන්ධ කරලා යම් යම් නිගමන වලට හෝ ගණනය කිරීම් කරන්න පුලුවන්.
උදාහරණයක් කිව්වොත් Company එකක employee table එකයි salary table එකයි work table එකයි Join කරල එක් employee කෙනෙකුට අදාල මාසික වැටුප සෙවීම කියන්න පුලුවන්.

එහෙනම් අපි වැඩ පටන් ගමු... 
 
මුලින්ම කියන්න යන්නේ ගොඩක් අය වැඩිපුර භාවිතා කරන (Most common) Join වර්ගයක් ගැන..ඒ තමයි INNER JOIN එහෙම නැත්නම් SIMPLE JOIN. නමේ හැටියටම තමයි ඉතින්, මෙයා හරිම Simple. 
අපි දෙන ලද Condition එක True වෙන හැමData Row එකම Return කරන එක තමයි මේ Join එක කරන්නේ.
මෙන්න Syntax එක.. 
 
      SELECT <list>
      FROM table A
      INNER JOIN table B
      ON <condition>
  
  • මෙතන SELECT Keyword එක ලඟ <list> කියල තියෙන්නේ අපිට Select කර ගන්න ඕන Columns set එක. 
  • අන්තිමට <Condition> කියල තියෙන්නේ Join කරන condition එක. ඒ කියන්නේ අපි tables දෙක Join කරන්නේ මොන හේතුව නිසාද කියන එක. 
  • ඒ වගේම INNER JOIN Keyword එක වෙනුවට JOIN Keyword එක දුන්නත් වෙන්නේ මේ වැඩේම තමයි...
මේ තියෙන්නේ මම ඉදිරියට භාවිතා කරන Data set එක.

  Example එක බැලුවම වැඩිපුර තේරෙයි කථාව......!

 
මෙන්න මේ වගේ වැඩක් තමයි වෙන්නේ.

  
රූපයේ පාට වෙලා තියෙන කොටස තමයි Result එක විදියට අපිට ලැබෙන්නේ.එහෙමත් නැත්නම් A U B (A ජේදනය B).




මීළඟට මම කියන්න යන්නේ තවත් ඉතා පහසු Join එකක් ගැන. ඒ තමයි LEFT OUTER JOIN.
මේකෙදි වෙන්නේ, Left table ( table 1 ) එකේ හැම row එකක්ම හා right table ( table 2 ) එකේ Condition එකට ගැලපෙන rows පමණක් return වෙනවා.

මේ තියෙන්නේ syntax එක,

     SELECT <list>
     FROM table A
     LEFT OUTER JOIN table B
     ON <condition>
  • LEFT OUTER JOIN වෙනුවට LEFT JOIN කියල දුන්නත් code එක වැඩකරනවා.
  රූපයකින් පෙන්නුවොත් මෙන්න මේ වගේ වැඩක් තමයි වෙන්නේ..


 රූපයේ පාට වෙලා තියෙන කොටස තමයි Result එක විදියට අපිට ලැබෙන්නේ





දැන් අපි join වර්ග දෙකක් දන්නවා..එහෙනම් දැන් ඉගෙන ගත්තා වගේම join එකක් බලමු.

දැන් අපි ඉගෙන ගන්නේ, RIGHT OUTER JOIN

නම දැක්කම තේරෙනවා නේද මොකද වෙලා තියෙන්නේ කියලා..left වෙනුවට right ඇවිත්.
ඔව් ඇත්තටම වෙන්නෙත් ඒකම තමයි...
මේ join එකේදි right table එකේ හැම row එකක්ම හා ඊට අදාල left table එකේ rows returnවෙනවා.
Syntax එකෙත් වෙනස් වෙන්නේ keyword එක විතරයි.
    
      SELECT <list>
      FROM table A
      RIGHT OUTER JOIN table B
      ON <condition>

  මේ බලන්න example එක.


මෙන්න තියෙනවා සුපුරුදු රූප සටහන.













හරි..දැන අපි බලමු FULL OUTER JOIN එක ගැන.

මෙයා කරන්නේ left join එකෙයි right join එකෙයි දෙක්කේම එකතුව. ඒ කියන්නේ එකෙයි left table එකෙයි right tableහැම row එකක්ම returnකරනවා.

     SELECT <list>
     FROM table A
     FULL OUTER JOIN table B
     ON <condition>

Syntax එකෙත් ලොකු වෙනසක් නෑ නේද..සුපුරුදු පරිදි keyword එක විතරයි වෙනස් වෙන්නේ.
ඒ උනාට ප්‍රශ්නේ තමයි මේකMySQL වල වැඩ කරන්නේ නෑ. error එකක් එනවා නේද?


 
මේ link එකේ වැඩි විස්තර තියෙනවා. 


ඉතින් Full join එක කරන වැඩේ අපිට මෙන්න මේ විදියට කරන්න පුලුවන්. ඒකට SQL UNION කියන keyword එක යොදා ගන්නවා.

                                                     මම Full join එක මොකක්ද කියලා කියන කොට කිව්ව දේ තමයි මෙතනදි මම කලේ, ඒ තමයි Left join එකයි Right join එකයි එකතු කලා, එකතු කරන්න යොදා ගත්තේ UNION keywordඑක.
දැන් බරපතල වැඩ ටික ඉවරයි. දැන් කියල දෙන joins දෙකම වැඩිය අමාරු ඒව නෙමයි.

මුලින්ම බලමු මොකද්ද මේ Cross Join එක කියන්නේ කියලා. Cartesian JOIN කියලා කියන්නෙත් මේ Join එකටම තමයී.
 මෙයා left table වල හැම row එකකටම right table වල හැම row එකක්ම match කරනවා. Programming වලින් කිව්වොත් for loop එකක් ඇතුලෙ for loopඑකක් දැම්මා වගේ වැඩක්.(Nested for loops).

මෙන්න Syntax එක..
     SELECT <list>
    FROM table A
    CROSS JOIN table B

මෙයාට condition වලින් වැඩක් නෑ කියලා තේරෙනවා නේ. 
මෙන්න අපේ example එකේ result එක. Rows 70 ආව විදිය තේරෙනවා නේ.(10 * 7)




 
දැන් මම කියල දෙන්න යන්නේ තවත් Simple join එකක්. ඒ තමයි Self join.
මෙයා එකම table එක join කරනවා. ඕන වෙන්නේ මොකටද කියලා අහන්න එපා.මේවත් ඕන වෙනවා හොඳේ..
  
     SELECT <list>
    FROM table A t1
    INNER JOIN table A t2
    ON <condition>

මෙන්න අපේ සුපුරුදු example එක.



 Joins ගැන කියන්න තියෙන්නේ මේ ටික තමයි..මොනවහරි ප්‍රශ්ණ තියෙනවා නම් Comments කරන්න...
එහෙනම් තවත් post එකකින් හමු වෙමු..!!!

5 comments:

SQL Joins

SQL Joins තේරෙන සිංහලෙන්.  අපි මෙහිදී කරන්නේ Database tables දෙකක හෝ කිහිපයක Data rows combine ( සම්බන්ධ ) කරන එකයි . ඒ කියන...