“INNER JOIN” සහ “OUTER JOIN” අතර වෙනස කුමක්ද?


4672

ද කොහොමද කරන්නේ LEFT JOIN, RIGHT JOINහා FULL JOINගැලපෙන?


64
පහත දැක්වෙන පිළිතුරු සහ අදහස් සහ ඒවායේ යොමු කිරීම් වලින් පැහැදිලි වන්නේ වෙන් රූපසටහන් මඟින් ක්‍රියාකරුවන් නියෝජනය කරන්නේ කෙසේද යන්නයි: රවුම් ඡේදනය වන ප්‍රදේශය A JOIN B හි පේළි සමූහය නියෝජනය කරයි. එක් එක් කවයට ආවේණික ප්‍රදේශය නිරූපණය කිරීමෙන් ඔබට ලැබෙන පේළි සමූහය JOIN B සඳහා සහභාගී නොවන වගුවේ පේළි සහ අනෙක් වගුවට අද්විතීය තීරු එකතු කිරීම සියල්ල NULL ලෙස සකසා ඇත. (බොහෝ දෙනා A සහ ​​B වෙත රවුම් වල නොපැහැදිලි ලිපි හුවමාරුවක් ලබා දේ)
ෆිලිප්සි

1
පහත දැක්වෙන න්‍යාය පදනම් කරගත් පිළිතුරු වලින් සැබෑ ලෝක යෙදුමකට පැනීම: මම බොහෝ විට අත්හදා බැලීමේ දත්ත සමඟ ක්‍රියා කරමි, ප්‍රොසෙසර් සැලසුම් පිළිබඳ මිණුම් සලකුණු ක්‍රියාත්මක කරමි. බොහෝ විට දෘඩාංග විකල්ප 2 ක් හෝ වැඩි ගණනක් අතර ප්‍රති results ල සංසන්දනය කිරීමට මම කැමැත්තෙමි. INNER JOIN යන්නෙන් අදහස් කරන්නේ මා දකින්නේ සියලු අත්හදා බැලීම්වල සාර්ථකව ක්‍රියාත්මක වූ මිණුම් සලකුණු පමණි; OUTER JOIN යන්නෙන් අදහස් කරන්නේ සමහර වින්‍යාසයන් ක්‍රියාත්මක කිරීමට අපොහොසත් වූ අත්හදා බැලීම් ඇතුළුව සියලු අත්හදා බැලීම් මට දැකිය හැකි බවයි. එවැනි අත්හදා බැලීම්වල අසාර්ථකත්වයන් මෙන්ම සාර්ථකත්වයන් දැකීම වැදගත්ය. බොහෝ RDBMSs හි හිඟයක් ඇති විට, OUTER JOIN ලබා ගැනීම සඳහා මම PerlSQL ලිවීම වැදගත්ය,
Krazy Glew

4
දැනටමත් බොහෝ පිළිතුරු සපයා ඇති නමුත් මෙම නිබන්ධනය සඳහන් කර ඇති බවක් මා දැක නැත. ඔබ වෙන්න් රූප සටහන් දන්නේ නම්, මෙය විශිෂ්ට නිබන්ධනයකි: blog.codinghorror.com/a-visual-explanation-of-sql-joins මට නම්, එය ඉක්මණින් කියවීමට තරම් සංක්ෂිප්ත නමුත් සමස්ත සංකල්පයම ග්‍රහණය කර ගෙන සියල්ල ක්‍රියාත්මක වේ නඩු ඉතා හොඳින්. වෙන් රූපසටහන් මොනවාදැයි ඔබ නොදන්නේ නම් - ඒවා ඉගෙන ගන්න. එසේ කිරීමට මිනිත්තු 5-10 ක් ගත වන අතර, ඔබට කට්ටල සමඟ වැඩ කිරීම සහ කට්ටලවල මෙහෙයුම් කළමනාකරණය කිරීම දෘශ්‍යමාන කිරීමට අවශ්‍ය සෑම අවස්ථාවකම එය උපකාරී වේ.
ඩැන්ටෙ ස්මිත්

15
AntDanteTheSmith No, මෙහි රූපසටහන් හා සමාන ගැටළු වලින් පීඩා විඳිති. මගේ බ්ලොග් සටහනට ඉහළින් සහ පහත දැක්වෙන බ්ලොග් සටහන බලන්න: "ජෙෆ් තම බ්ලොග් අඩවිය පිටු කිහිපයකින් ප්‍රතික්ෂේප කරයි". වෙන් රූපසටහන් කට්ටලවල අංග පෙන්වයි. මෙම රූප සටහන් වල ඇති කට්ටල මොනවාද සහ මූලද්‍රව්‍ය මොනවාද යන්න හරියටම හඳුනා ගැනීමට උත්සාහ කරන්න. කට්ටල වගු නොවන අතර මූලද්රව්ය ඒවායේ පේළි නොවේ . ඕනෑම වගු දෙකකට සම්බන්ධ විය හැකි බැවින් PKs සහ FKs අදාල නොවේ. සියලු ව්‍යාජ. ඔබ කරන්නේ අන් අය දහස් ගණනක් කර ඇති දේමයි - අපැහැදිලි හැඟීමක් ඇති කර ගත්තා (වැරදියට) උපකල්පනය කිරීම අර්ථවත් කරයි.
ෆිලිප්සි

3
ක්‍රිස් මම ඔබට මෙම ලිපිය කියවීමට නිර්දේශ කරමි: towardsdatascience.com/… ... සහ ඔබ පිළිගත් පිළිතුර (සමහර විට ත්‍යාගයක් ඇති තැනැත්තාට) වෙන් රූපසටහන් භාවිතා නොකරන පිළිතුරකට වෙනස් කිරීම ගැන සලකා බලන්න. දැනට පිළිගත් පිළිතුර බොහෝ පුද්ගලයින් නොමඟ යවයි. අපගේ ප්‍රජාවේ යහපත සහ අපගේ දැනුම පදනම් කරගෙන මෙය සිදු කරන ලෙස මම ඔබෙන් ඉල්ලා සිටිමි.
කොල්ම් භන්ඩල්

Answers:


6116

ඔබ අනුපිටපත් නොමැති තීරුවලට සම්බන්ධ වන බව උපකල්පනය කිරීම, එය ඉතා පොදු අවස්ථාවකි:

  • A සහ B වල අභ්‍යන්තර සම්බන්ධතාවයක් A ඡේදනය වීමේ ප්‍රති result ලය ලබා දෙයි, එනම් වෙන් රූප සටහනේ ඡේදනයක අභ්‍යන්තර කොටස .

  • A සහ B වල බාහිර සම්බන්ධතාවයක් A සංගමයේ ප්‍රති results ල ලබා දෙයි, එනම් වෙන් රූප සටහනේ සමිතියේ පිටත කොටස්.

උදාහරණ

ඔබට එක් වගුවක් බැගින් වගු දෙකක් ඇති අතර දත්ත පහත පරිදි වේ යැයි සිතමු.

A    B
-    -
1    3
2    4
3    5
4    6

(1,2) A ට අද්විතීය වන අතර (3,4) පොදු වන අතර (5,6) B ට අද්විතීය වේ.

අභ්යන්තර සන්ධි

සමාන විමසීම් එකක් භාවිතා කරමින් අභ්‍යන්තර සම්බන්ධතාවයක් වගු දෙකේ ඡේදනය ලබා දෙයි, එනම් ඒවාට පොදු පේළි දෙකකි.

select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

වම් පිටත බැඳීම

වම් පිටත සම්බන්ධ වීම මඟින් A හි සියලුම පේළි සහ B හි ඕනෑම පොදු පේළි ලබා දෙනු ඇත.

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

දකුණු පිටත බැඳීම

දකුණු පිටත බැඳීම මඟින් B හි සියලුම පේළි සහ A හි ඕනෑම පොදු පේළි ලබා දෙනු ඇත.

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

සම්පූර්ණ පිටත බැඳීම

සම්පූර්ණ බාහිර සම්බන්ධතාවයක් මඟින් ඔබට A සහ ​​B ඒකාබද්ධ වේ, එනම් A හි ඇති සියලුම පේළි සහ B හි ඇති සියලුම පේළි. A හි යම් දෙයකට අනුරූපී දත්තයක් B හි නොමැති නම්, B කොටස ශුන්‍ය වන අතර, අනෙක් අතට.

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5

42
4 වන වගුවේ B වගුවේ තවත් පේළියක් එක් කිරීමෙන් උදාහරණය වැඩි කිරීම හොඳ ය. මෙයින් පෙනෙනුයේ අභ්‍යන්තර බැඳීම් පේළි ගණනකට සමාන නොවිය යුතු බවයි.
softveda

473
කෙසේ වෙතත් මෙම ප්‍රකාශය විශිෂ්ට පැහැදිලි කිරීමකි: A සහ B වල බාහිර සම්බන්ධතාවයක් A සංගමයේ ප්‍රති results ල ලබා දෙයි, එනම් වේන් රූප සටහනේ සමිතියේ පිටත කොටස්. නිවැරදිව වාක්‍ය ඛණ්ඩනය කර නැත. බාහිර සම්බන්ධතාවයක් මඟින් පහත දැක්වෙන එකකට අමතරව B ඡේදනය වීමේ ප්‍රති results ල ලබා දෙනු ඇත: සියලුම A (වම් බැඳීම), සියලුම B (දකුණට සම්බන්ධ වීම) හෝ සියලුම A සහ ​​සියලුම B (පූර්ණ සම්බන්ධ වීම). මෙම අවසාන අවස්ථාව පමණක් සැබවින්ම යූනියන් බී. තවමත් හොඳින් ලිඛිත පැහැදිලි කිරීමකි.
තෝමස්

11
FULL JOIN යනු FULL OUTER JOIN හි අන්වර්ථයක් වන අතර LEFT JOIN යනු LEFT OUTER JOIN හි අන්වර්ථයකි.
ඩේමියන්

3
ඔව් විශිෂ්ට සහ විශිෂ්ට පැහැදිලි කිරීමක්. නමුත් b තීරුවේ අගයන් පිළිවෙලට නොවන්නේ ඇයි? එනම් එය 6,5 ක් නොව 5,6 ක් ද?
අමීර්

7
අමීර්, ස්තූතියි. බැඳීම ඇණවුමක් සහතික නොකරයි, ඔබට වගන්තියක් එකතු කිරීමට අවශ්‍ය වනු ඇත.
මාර්ක් හැරිසන්

734

වෙන් රූපසටහන් ඇත්තටම මා වෙනුවෙන් එය නොකරයි.

ඔවුන් හරස් සම්බන්ධයක් සහ අභ්‍යන්තර සම්බන්ධතාවයක් අතර වෙනසක් නොපෙන්වයි, උදාහරණයක් ලෙස, හෝ වඩාත් සාමාන්‍යයෙන් විවිධ ආකාරයේ එක්වීම් අතර වෙනසක් නොපෙන්වයි හෝ ඒවා ක්‍රියාත්මක වන්නේ කෙසේද යන්න පිළිබඳ තර්ක කිරීම සඳහා රාමුවක් සපයයි.

තාර්කික සැකසුම අවබෝධ කර ගැනීම සඳහා ආදේශකයක් නොමැති අතර එය කෙසේ හෝ ග්‍රහණය කර ගැනීම සාපේක්ෂව සරල ය.

  1. හරස් බැඳීමක් ගැන සිතන්න.
  2. ඇගයීමට ලක් කරන onතැන සූදානම ඇගයීමට එම තබා 1 පියවර සියලුම පේළි එරෙහිව වගන්තියtrue
  3. (පිටත බැඳීම් සඳහා පමණි) 2 වන පියවරේදී නැතිවූ ඕනෑම පිටත පේළි නැවත එකතු කරන්න.

(සැ.යු: ප්‍රායෝගිකව විමසුම් ප්‍රශස්තිකරුවා ඉහත සඳහන් තාර්කික විස්තරයට වඩා විමසුම ක්‍රියාත්මක කිරීමට වඩා කාර්යක්ෂම ක්‍රම සොයා ගත හැකි නමුත් අවසාන ප්‍රති result ලය සමාන විය යුතුය)

මම සම්පූර්ණ බාහිර සම්බන්ධතාවයේ සජීවිකරණ අනුවාදයකින් ආරම්භ කරමි . වැඩිදුර පැහැදිලි කිරීම පහත දැක්වේ.

රූප විස්තරය මෙහි ඇතුළත් කරන්න


පැහැදිලි කිරීම

ප්‍රභව වගු

සබැඳි විස්තරය මෙහි ඇතුළත් කරන්න

පළමුව CROSS JOIN(AKA කාටිසියානු නිෂ්පාදනයක්) සමඟ ආරම්භ කරන්න . මෙය ONවගන්තියක් නොමැති අතර වගු දෙකෙන් සෑම පේළි සංයෝජනයක්ම ආපසු ලබා දෙයි.

කුරුස බැඳීමකින් A. වර්ණ, B.Colour තෝරන්න B.

සබැඳි විස්තරය මෙහි ඇතුළත් කරන්න

අභ්‍යන්තර සහ පිටත එක්වීම් වලට "ඔන්" වගන්තියක් ඇත.

  • අභ්යන්තර සන්ධි. හරස් සම්බන්ධ වීමේ ප්‍රති .ලයේ සියලුම පේළි සඳහා “ඔන්” වගන්තියේ තත්වය තක්සේරු කරන්න. සත්‍ය නම් එකතු වූ පේළිය ආපසු එවන්න. එසේ නොමැතිනම් එය ඉවතලන්න.
  • වම් පිටත සම්බන්ධ වීම. අභ්‍යන්තර සම්බන්ධතාවයට සමාන වන අතර පසුව කිසිවක් නොගැලපෙන වම් වගුවේ ඕනෑම පේළි සඳහා දකුණු වගු තීරු සඳහා NULL අගයන් සමඟ ප්‍රතිදානය කරයි.
  • දකුණු පිටත බැඳීම. අභ්‍යන්තර වගුවට සමාන වන අතර පසුව දකුණු වගුවේ ඕනෑම පේළියකට නොගැලපෙන පේළි සඳහා මේවා වම් වගු තීරු සඳහා NULL අගයන් සමඟ ප්‍රතිදානය කරයි.
  • සම්පූර්ණ පිටත සම්බන්ධ වීම. අභ්‍යන්තර සම්බන්ධතාවයට සමාන වම් පිටත සම්බන්ධතාවයට සමාන වම් නොගැලපෙන පේළි සහ දකුණු පිටත සම්බන්ධතාවයට අනුව දකුණට නොගැලපෙන පේළි ආරක්ෂා කරන්න.

උදාහරණ කිහිපයක්

A.Colour, B.Colour තෝරාගන්න අභ්‍යන්තරයෙන් එක්වන්න A.Colour = B.Colour

ඉහත දැක්වෙන්නේ සම්භාව්‍ය සමානාත්මතාවයයි.

අභ්යන්තර සන්ධි

සජීවිකරණ අනුවාදය

රූප විස්තරය මෙහි ඇතුළත් කරන්න

A.Colour, B.Colour තෝරන්න. අභ්‍යන්තර වර්ණවලට A.Colour NOT IN ('කොළ', 'නිල්')

අභ්‍යන්තර සම්බන්ධ වීමේ කොන්දේසිය අනිවාර්යයෙන්ම සමානාත්මතා තත්වයක් නොවිය යුතු අතර එයට වගු දෙකෙන්ම (හෝ එක්කෝ) තීරු යොමු කිරීම අවශ්‍ය නොවේ. A.Colour NOT IN ('Green','Blue')කුරුසයේ එක් එක් පේළිය ඇගයීම මඟින් ප්‍රතිලාභ ලැබේ.

අභ්යන්තර 2

1 = 1 හි අභ්‍යන්තර සම්බන්ධතාවයකින් A. වර්ණ, B.Colour තෝරන්න

සම්බන්ධ වීමේ කොන්දේසිය හරස් සම්බන්ධ වීමේ ප්‍රති result ලයේ සියලුම පේළි සඳහා සත්‍ය ලෙස තක්සේරු කරයි, එබැවින් මෙය හරස් සම්බන්ධතාවයට සමාන වේ. පේළි 16 හි පින්තූරය මම නැවත නොකරමි.

A.Colour, B.Colour තෝරන්න වමේ පිටත සිට A.Colour = B.Colour

වම් මේසයේ සිට පේළියක් (වම් සම්බන්ධතාවයක් සඳහා) දකුණු අතේ මේසයේ සිට කිසිදු පේළියක් සමඟ සම්බන්ධ නොවන්නේ නම්, එහි ප්‍රති NULLvalues ​​ලයක් ලෙස අගයන් සමඟ සංරක්‍ෂණය කරනු ලැබේ . දකුණු අත තීරු.

ලොජ්

A.Colour, B.Colour තෝරන්න වමේ පිටත සිට A.Colour = B.Colour කොහෙද B.Colour NULL

මෙය හුදෙක් පෙර ප්‍රති result ලය සීමා කරන්නේ පේළි නැවත ලබා දීමට පමණි B.Colour IS NULL. මෙම විශේෂිත අවස්ථාවෙහිදී, මේවා දකුණු අත වගුවේ නොගැලපීමක් ඇති බැවින් සංරක්ෂණය කරන ලද පේළි වන අතර විමසුම මඟින් වගුවේ නොගැලපෙන තනි රතු පේළිය ලබා දෙයි B. මෙය අර්ධ අර්ධ සම්බන්ධයක් ලෙස හැඳින්වේ.

මෙම රටාව නිවැරදිව ක්‍රියාත්මක වීම සඳහා IS NULLකිසියම් NULLඅගයක් බැහැර කරනු ඇති බවට සහතික කිරීමේ පරීක්‍ෂණයක් සඳහා තීරුවක් තෝරා ගැනීම වැදගත් වන අතර ඒ සඳහා NULLවටිනාකමක් ඇති පේළි නැවත ගෙන ඒමෙන් වළකින්න. නොගැලපෙන පේළි වලට අමතරව තීරුව.

ලොජ් ශුන්‍යයි

A.Colour, B.Colour තෝරන්න නිවැරදි පිටත සිට A.Colour = B.Colour

දකුණු පිටත සන්ධි වම් පිටත සන්ධිවලට සමානව ක්‍රියා කරයි. ඒවා දකුණු මේසයෙන් නොගැලපෙන පේළි ආරක්ෂා කර වම් අත තීරු විස්තාරණය කරයි.

ROJ

A.Colour, B.Colour වෙතින් සම්පූර්ණ පිටතින් එක්වන්න A.Colour = B.Colour

සම්පූර්ණ පිටත බැඳීම් වම් සහ දකුණ සම්බන්ධතාවයේ හැසිරීම ඒකාබද්ධ කරන අතර වම් සහ දකුණු වගු දෙකෙන්ම නොගැලපෙන පේළි ආරක්ෂා කරයි.

FOJ

1 = 0 මත සම්පූර්ණ පිටතින් එක්වීමෙන් A.Colour, B.Colour තෝරන්න

හරස් සම්බන්ධයේ පේළි කිසිවක් 1=0පුරෝකථනයට නොගැලපේ . දෙපසින් ඇති සියලුම පේළි අනෙක් පැත්තෙන් මේසයේ සිට තීරුවල NULL සමඟ සාමාන්‍ය පිටත සම්බන්ධ වීමේ නීති භාවිතා කර සංරක්ෂණය කර ඇත.

FOJ 2

1 = 0 මත සම්පූර්ණ පිටත බැඳීමෙන් වර්ණ ලෙස තෝරා ගන්න (A.Colour, B.Colour)

පෙර විමසුමට සුළු සංශෝධනයක් කිරීමෙන් කෙනෙකුට UNION ALLවගු දෙකෙන් එකක් අනුකරණය කළ හැකිය .

UNION ALL

A.Colour, B.Colour තෝරන්න වමේ පිටත සිට A.Colour = B.Colour WHERE B.Colour = 'කොළ'

WHEREවගන්තිය (තිබේ නම්) සම්බන්ධ වීමෙන් පසුව තාර්කිකව ක්‍රියාත්මක වන බව සලකන්න . එක් පොදු දෝෂයක් නම් වම් පිටත සම්බන්ධතාවයක් සිදු කර පසුව නොගැලපෙන පේළි බැහැර කර අවසන් වන දකුණු වගුවේ කොන්දේසියක් සහිත WHERE වගන්තියක් ඇතුළත් කිරීමයි. ඉහත දැක්වෙන්නේ පිටත එක්වීමයි ...

ලොජ්

... ඊට පස්සෙ "කොහෙද" වගන්තිය ක්‍රියාත්මක වේ. NULL= 'Green'සත්‍ය ලෙස තක්සේරු නොකෙරෙන බැවින් පිටත සන්ධිය මගින් සංරක්ෂණය කර ඇති පේළිය ඉවතලනු ලැබේ (නිල් පාටින්) එකතු වීම effectively ලදායී ලෙස නැවත අභ්‍යන්තරයට පරිවර්තනය කරයි.

LOJtoInner

වර්ණය හරිත වන B සිට පේළි පමණක් ඇතුළත් කිරීම සහ A හි සියලුම පේළි නිවැරදි වාක්‍ය ඛණ්ඩය ඇතුළත් කිරීමට අදහස් කළේ නම්

A.Colour, B.Colour තෝරන්න වමේ පිටත සිට A.Colour = B.Colour සහ B.Colour = 'කොළ'

රූප විස්තරය මෙහි ඇතුළත් කරන්න

SQL Fiddle

මෙම උදාහරණ SQLFiddle.com හි සජීවීව ක්‍රියාත්මක වන ආකාරය බලන්න .


46
මෙය මට මෙන්ම වෙනන් රූපසටහන් වලටද ප්‍රයෝජනවත් නොවන අතර, මිනිසුන් වෙනස් වන අතර වෙනස් ආකාරයකින් ඉගෙන ගන්නා බව මම අගය කරමි. මෙය මා මීට පෙර දැක ඇති ආකාරයට වඩා හොඳින් ඉදිරිපත් කරන ලද පැහැදිලි කිරීමකි, එබැවින් මම @ypercube in ප්‍රසාද ලකුණු ප්‍රදානය කිරීම. WHERE වගන්තියට එදිරිව JOIN වගන්තියට අමතර කොන්දේසි දැමීමේ වෙනස පැහැදිලි කරන හොඳ වැඩ. ඔබට සුභ පැතුම්, මාටින් ස්මිත්.
ඕල්ඩ් ප්‍රෝ

22
Ld ඕල්ඩ්ප්‍රෝ වෙන්න් රූප සටහන් ඔවුන් යන තාක් දුරට හරි යැයි මම සිතමි, නමුත් ඔවුන් හරස් සම්බන්ධයක් නියෝජනය කරන්නේ කෙසේද යන්න ගැන නිහ are ව සිටියි, නැතහොත් එක් ආකාරයක සම්බන්ධතාවයක් වෙන්කර හඳුනා ගැනීම වැනි දේ ගැන අනාවැකි පළ කිරීම. එක්වීම තක්සේරු කිරීමේ මානසික ආකෘතිය හරස් සම්බන්ධ වීමේ ප්‍රති result ලයේ එක් එක් පේළියේ පුරෝකථනය කර පිටත සම්බන්ධතාවයක් නම් අසමසම පේළි වලට එකතු කර අවසානයේ මට වඩා හොඳ තැනක් තක්සේරු කරයි.
මාටින් ස්මිත්

18
Venn රූපසටහන් වෘත්තීය සමිති හා මංසන්ධි සහ වෙනස්කම් නියෝජනය කිරීම සඳහා හොඳ නමුත් සම්බන්ධ නොවේ. ඉතා සරල බැඳීම් සඳහා ඔවුන්ට සුළු අධ්‍යාපනික වටිනාකමක් ඇත, එනම් අද්විතීය තීරුවලට සම්බන්ධ වීමේ තත්වය ඇති තැනට සම්බන්ධ වේ.
ypercubeᵀᴹ

12
ආර්ත් - නෑ ඔයා වැරදියි. SQL Fiddle sqlfiddle.com/#!3/9eecb7db59d16c80417c72d1/5155 මෙය වෙන් රූපසටහනට නිදර්ශනය කළ නොහැකි දෙයකි.
මාටින් ස්මිත්

7
Ar මාටින් ස්මිත් වාව්, මම එකඟයි, මම සම්පූර්ණයෙන්ම වැරදියි! එක්-සිට-මැනිස් සමඟ වැඩ කිරීමට බොහෝ පුරුදු .. නිවැරදි කිරීමට ස්තූතියි.
ආත

188

වගු දෙකකින් දත්ත ඒකාබද්ධ කිරීම සඳහා බැඳීම් භාවිතා වන අතර එහි ප්‍රති result ලය නව තාවකාලික වගුවක් වේ. එක්වීම සිදු කිරීම සඳහා භාවිතා කළ යුතු කොන්දේසිය නියම කරන ප්‍රෙඩිකේට් යනුවෙන් හැඳින්වෙන දෙයක් මත පදනම්ව බැඳීම් සිදු කරනු ලැබේ. අභ්‍යන්තර සම්බන්ධතාවයක් සහ බාහිර සම්බන්ධතාවයක් අතර ඇති වෙනස නම්, අභ්‍යන්තර සම්බන්ධතාවයක් නැවත ලැබෙන්නේ සම්බන්ධ වීමේ පුරෝකථනය මත පදනම්ව සැබවින්ම ගැලපෙන පේළි පමණි. උදා: සේවක සහ ස්ථාන වගුව සලකා බලමු:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

අභ්‍යන්තර සම්බන්ධ වීම: - එක්වීම-පුරෝකථනය මත පදනම්ව වගු දෙකක ( සේවක සහ ස්ථානය )තීරු අගයන් ඒකාබද්ධ කිරීමෙන් අභ්‍යන්තර බැඳීම නවප්‍රතිresult ල වගුවක් නිර්මාණයකරයි. විමසුම සේවක පේළිය එක් එක් ස්ථානය පේළිය සමඟසංසන්දනයකර එක්වන අනාවැකිය තෘප්තිමත් කරන සියලු පේළි යුගල සොයා ගනී. NULL නොවන අගයන් ගැලපීමෙන් සම්බන්ධ වීමේ පුරෝකථනය සෑහීමකට පත්වන විට, ගැලපෙන එක් එක් පේළි යුගල සඳහා තීරු අගයන් සේවක හා ස්ථානය ප්රතිඵලයක් පේළිය බවට සංකලනය වී ඇත. අභ්‍යන්තර සම්බන්ධතාවයක් සඳහා වන SQL පෙනුම කෙබඳුදැයි මෙන්න:

select  * from employee inner join location on employee.empID = location.empID
OR
select  * from employee, location where employee.empID = location.empID

දැන්, SQL ධාවනය කිරීමේ ප්‍රති result ලය කෙබඳුදැයි මෙන්න: රූප විස්තරය මෙහි ඇතුළත් කරන්න

පිටත සම්බන්ධ වීම: - සම්බන්ධ වූ වගු දෙකෙහි එක් එක් වාර්තාවක් ගැලපෙන වාර්තාවක් තිබීම සඳහා බාහිර සම්බන්ධතාවයකට අවශ්‍ය නොවේ. ගැලපෙන වගුව එක් එක් වාර්තාවක් තබා ගනී other වෙනත් ගැලපෙන වාර්තාවක් නොතිබුණද. පිටත එකතු වන්නේ වම් පිටත සන්ධිවලට සහ දකුණු පිටත සන්ධිවලට ය. එය වගුවේ පේළි රඳවා තබා ගන්නේ (වමේ හෝ දකුණේ) මත ය.

වම් පිටත සම්බන්ධ වීම: - වගු සඳහා වම් පිටත සම්බන්ධතාවයේ (හෝ සරලව වම් සම්බන්ධතාවයේ)ප්‍රතිresult ලය සේවකයා සහ ස්ථානය සැමවිටම "වම්" වගුවේ ( සේවකයා )සියලුම වාර්තා අඩංගු වේ. "දකුණු" වගුව ( ස්ථානය ). ඉහත වගු භාවිතා කරමින් වම් පිටත සම්බන්ධ වීම සඳහා වන SQL පෙනුම කෙබඳුද යන්න මෙන්න:

select  * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional

දැන්, මෙම SQL ධාවනය කිරීමේ ප්‍රති result ලය කෙබඳු වනු ඇත්ද: රූප විස්තරය මෙහි ඇතුළත් කරන්න

දකුණු පිටත එක්වීම : - වගු ආපසු හරවා යැවීම හැරුණු විට දකුණු පිටත බැඳීම (හෝ දකුණට එක්වීම) වම් පිටත සම්බන්ධතාවයට සමීපව සමාන වේ. "දකුණු" වගුවේ ( ස්ථානය )සිට සෑම පේළියක්මඅවම වශයෙන් එක් වරක්වත් සම්බන්ධ වූ වගුවේ දිස්වනු ඇත. "වාම" වගු (කිසිදු ගැලපෙන පේළියේ නම් සේවක ) පවතී, NULL සිට තීරු දිස් වනු ඇත සේවක කිසිදු තරගය ඇති බව එම වාර්තා ස්ථානය . SQL පෙනුම මෙයයි:

select * from employee right outer join location  on employee.empID = location.empID;
//Use of outer keyword is optional

ඉහත වගු භාවිතා කරමින්, දකුණු පිටත සම්බන්ධතාවයේ ප්‍රති result ල කට්ටලය කෙබඳු වේදැයි අපට පෙන්විය හැකිය:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

සම්පුර්ණ පිටත බැඳීම්: - සම්පුර්ණ පිටත බැඳීම හෝ පූර්ණ සම්බන්ධ වීම යනු සම්බන්ධතාවයේ ප්‍රති results ලවල නොගැලපෙන පේළි ඇතුළත් කිරීමෙන් නොගැලපෙන තොරතුරු රඳවා තබා ගැනීමයි. අනෙක් වගුවට ගැලපෙන අගයක් තිබේද නැද්ද යන්න නොසලකා වගු දෙකේම සියලුම පේළි එයට ඇතුළත් වේ.

රූප මූලාශ්‍රය

MySQL 8.0 යොමු අත්පොත - සින්ටැක්ස් හා සම්බන්ධ වන්න

ඔරකල් එක්වන්න මෙහෙයුම්


3
මෙතෙක් හොඳම පිළිතුර, විකල්ප වාක්‍ය ඛණ්ඩය - එයයි මා සොයමින් සිටියේ, ස්තූතියි!
ජෝයි

1
වෙන් රූප සටහන් වැරදි ලෙස ලේබල් කර ඇත. ප්‍රශ්නය සහ වෙනත් පිළිතුරු පිළිබඳ මගේ අදහස් බලන්න. එසේම මෙම භාෂාව බොහෝමයක් දුප්පත් ය. උදා: "NULL නොවන අගයන් ගැලපීමෙන් සම්බන්ධ වීමේ පුරෝකථනය සෑහීමකට පත්වන විට, සේවකයාගේ සහ ස්ථානයෙහි ගැලපෙන එක් එක් පේළි යුගල සඳහා තීරු අගයන් ප්‍රති result ල පේළියකට සංයුක්ත වේ." නැත, "NULL නොවන අගයන් ගැලපීමෙන් සම්බන්ධ වීමේ පුරෝකථනය සෑහීමකට පත්වන විට" නොවේ. පේළි වල අගයන් සමස්තයක් ලෙස තත්වය සත්‍යද අසත්‍යද යන්න හැර වෙනත් වැදගත් නොවේ. සමහර අගයන් සත්‍ය තත්වයක් සඳහා NULL විය හැකිය.
ෆිලිප්සි

පැහැදිලිව සඳහන් කර නැතත්, මෙහි රූප සටහන් වෙන්න් රූප සටහන් වේ. වෙන් රූපසටහන්, සාමාන්‍යයෙන්, සම්බන්ධතාවයේ නිවැරදි ගණිතමය ලක්ෂණයක් නොවේ. වෙන් රූප සටහන් ඉවත් කිරීමට මම යෝජනා කරමි.
කොල්ම් භන්ඩල්

OlColmBhandal: ඉවත් කළ Venn රූප සටහන්
ajitksharma

වගු සහ ඊආර්ඩී ද ඇතුළුව පෙළ සඳහා කරුණාකර පෙළ / පින්තූර / සබැඳි භාවිතා නොකරන්න . පෙළ ලෙස ප්‍රකාශ කළ නොහැකි දේ සඳහා හෝ පෙළ වැඩි කිරීමට පමණක් රූප භාවිතා කරන්න. පින්තූර සෙවීම හෝ කැපීම හා ඇලවීම කළ නොහැක. රූපයක් සමඟ පුරාවෘත්තයක් / යතුරක් සහ පැහැදිලි කිරීමක් ඇතුළත් කරන්න.
ෆිලිප්සි

133

අභ්යන්තර සන්ධි

ගැලපෙන පේළි පමණක් ලබා ගන්න, එනම් A intersect B.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

වම් පිටත සම්බන්ධ වීම

පළමු වගුවෙන් සියලුම වාර්තා තෝරන්න, සහ සම්බන්ධිත යතුරු සමඟ ගැලපෙන දෙවන වගුවේ ඕනෑම වාර්තා තෝරන්න.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

සම්පූර්ණ පිටත සම්බන්ධ වීම

දෙවන වගුවෙන් සියලුම වාර්තා තෝරන්න, සහ සම්බන්ධිත යතුරු සමඟ ගැලපෙන පළමු වගුවේ ඕනෑම වාර්තා තෝරන්න.

රූප විස්තරය මෙහි ඇතුළත් කරන්න

SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

යොමුව


14
මෙවලමෙහි නම කුමක්ද? පේළි සහ වෙන්-රූප සටහන් පෙන්වන බැවින් එය සිත්ගන්නා සුළු බව මට පෙනේ
ග්‍රිජේෂ් චෞහාන්

2
@GrijeshChauhan ඔව් නමුත් ඔබට එය වයින් භාවිතයෙන් ක්‍රියාත්මක කිරීමට උත්සාහ කළ හැකිය .
තුෂාර් ගුප්තා - කියුරියෝතුෂාර්

2
ඔහ්! ඔව් මම .. මම වයින් භාවිතා කරමින්
SQLyog

1
ඔබේ පෙළ අපැහැදිලි සහ වැරදි ය. “ගැළපෙන පේළි පමණක්” යනු A & B හි හරස් සම්බන්ධතාවයේ පේළි වන අතර ලබා ගන්නා දේ (අභ්‍යන්තර සම්බන්ධ වීම B) යනු ඡේදනය වන B නොව (වමට සම්බන්ධ වන B) ඡේදනය වේ (දකුණට එක්වන B). "තෝරාගත්" පේළි A & B වලින් නොවේ, ඒවා A හරස් බැඳීම B වලින් සහ A & B වෙතින් පේළි වල ශුන්‍ය
විස්තාරක අගයන්ගෙන්

Us TusharGupta-curioustushar ඔබ "SQL උදාහරණ සඳහා භාවිතා කරන වගු" ඇතුළත් කළ යුතුය
මැනුවෙල් ජෝර්දාන්

112

සරල වචන වලින්:

අභ්යන්තර එක්වන පමණක් ගැලපෙන පේළි ලබා.

බාහිර සම්බන්ධතාවයක් එක් වගුවකින් ගැලපෙන පේළි සහ අනෙක් වගුවේ ඇති සියලුම පේළි ලබා ගන්නා අතර .... ප්‍රති result ලය රඳා පවතින්නේ ඔබ භාවිතා කරන්නේ කුමන එක මතද යන්න මත ය:

  • වමේ : දකුණු වගුවේ පේළි හා වම් මේසයේ ඇති සියලුම පේළි

  • දකුණ : වම් වගුවේ පේළි හා දකුණු මේසයේ ඇති සියලුම පේළි හෝ

  • සම්පුර්ණ : සියලුම වගු වල සියලුම පේළි. තරඟයක් තිබේද නැද්ද යන්න ගැටළුවක් නොවේ


1
@nomen මෙම පිළිතුර එයට ආමන්ත්‍රණය කරන බවක් නොවේ, නමුත් INNER JOIN යනු මංසන්ධියක් වන අතර වම් සහ දකුණු කට්ටල / කව වල (පිළිවෙලින්) වම් සහ දකුණු සම්බන්ධතාවයේ පේළි තිබේ නම් සම්පූර්ණ සම්බන්ධ වීම අනුරූපී UNION වේ. PS ආදානය එදිරිව ප්‍රතිදානයෙහි පේළි ගැන මෙම පිළිතුර පැහැදිලි නැත. එය "වම් / දකුණු වගුවේ" වම් / දකුණේ වම් / දකුණේ කොටසක් සමඟ ව්‍යාකූල වන අතර එය "ගැලපෙන පේළිය" එදිරිව "සියල්ල" භාවිතා කරයි.
ෆිලිප්සි

104

අභ්‍යන්තර සම්බන්ධතාවයක් පේළි පෙන්වන්නේ සම්බන්ධතාවයේ අනෙක් (දකුණු) පැත්තේ ගැලපෙන වාර්තාවක් තිබේ නම් පමණි.

සම්බන්ධතාවයේ අනෙක් (දකුණු) පැත්තේ ගැලපෙන පේළි නොතිබුණද, වම් පස එක් එක් වාර්තාව සඳහා පේළි (වමේ) පිටත සම්බන්ධ කිරීම පෙන්වයි. ගැලපෙන පේළියක් නොමැති නම්, අනෙක් (දකුණු) පැත්තේ ඇති තීරු NULL පෙන්වයි.


82

සම්බන්ධ වූ වගුවේ අදාළ හැඳුනුම්පතක් සහිත වාර්තාවක් තිබිය යුතුය.

පිටත සම්බන්ධ වීම දකුණු පැත්තට කිසිවක් නොතිබුණද වම් පැත්ත සඳහා වාර්තා ලබා දෙනු ඇත.

උදාහරණයක් ලෙස, ඔබට ඇණවුම් සහ ඇණවුම් විස්තර වගුවක් ඇත. ඒවා "OrderID" මගින් සම්බන්ධ වේ.

නියෝග

  • ඕඩර අංකය
  • පාරිභෝගිකයාගේ නම

ඇණවුම් විස්තර

  • OrderDetailID
  • ඕඩර අංකය
  • නිෂ්පාදන නාමය
  • Qty
  • මිල

ඉල්ලීම

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
 INNER JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

ආපසු එවනු ලබන්නේ ඇණවුම් විස්තර වගුවේ යමක් ඇති ඇණවුම් පමණි.

ඔබ එය OUTER LEFT JOIN ලෙස වෙනස් කළහොත්

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
  LEFT JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

ඕඩර් ඩෙටේල්ස් වාර්තා නොමැති වුවද එය ඇණවුම් වගුවෙන් වාර්තා ලබා දෙනු ඇත.

ඔබට මෙය භාවිතා කළ හැකිය, කිසිදු ඇණවුමක් නොමැති ඇණවුම් සොයා ගැනීමට, අනාථ වූ ඇණවුමක් දැක්වෙන වගන්තියක් වැනි ස්ථානයක් එකතු කිරීමෙන් WHERE OrderDetails.OrderID IS NULL.


1
සරල නමුත් යථාර්ථවාදී උදාහරණය මම අගය කරමි. මම වගේ ඉල්ලීමක් වෙනස් SELECT c.id, c.status, cd.name, c.parent_id, cd.description, c.image FROM categories c, categories_description cd WHERE c.id = cd.categories_id AND c.status = 1 AND cd.language_id = 2 ORDER BY c.parent_id ASCකිරීමට SELECT c.id, c.status, cd.name, c.parent_id, cd.description, c.image FROM categories c INNER JOIN categories_description cd ON c.id = cd.categories_id WHERE c.status = 1 AND cd.language_id = 2 ORDER BY c.parent_id ASCසාර්ථක (MySQL). අමතර කොන්දේසි ගැන මට විශ්වාසයක් නොතිබුණි, ඒවා හොඳින් මිශ්‍ර වේ ...
ෆිල්හෝ

68

සරල වචන වලින්:

අභ්‍යන්තර බැඳීම -> දෙමව්පියන්ගෙන් සහ ළමා වගු වලින් පමණක් පොදු වාර්තා ගන්න දෙමාපිය වගුවේ ප්‍රාථමික යතුර ගැලපෙන්නේ කොහේද ළමා වගුවේ විදේශ යතුර.

වමට සම්බන්ධ වීම ->

ව්‍යාජ කේතය

1.Take All records from left Table
2.for(each record in right table,) {
    if(Records from left & right table matching on primary & foreign key){
       use their values as it is as result of join at the right side for 2nd table.
    } else {
       put value NULL values in that particular record as result of join at the right side for 2nd table.
    }
  }

දකුණට එක්වීම : වම් සම්බන්ධතාවයට හරියටම ප්‍රතිවිරුද්ධයයි. මේසයේ නම වම් පසින් දකුණු පසින් දකුණට එක්වන්න, ඔබට LEFT JOIN ලෙස ප්‍රතිදානය ලැබේ.

පිටත සම්බන්ධ වීම : වගු දෙකේම සියලුම වාර්තා පෙන්වන්නNo matter what . ප්‍රාථමික, Forieign යතුර මත පදනම්ව වම් වගුවේ වාර්තා දකුණු වගුවට නොගැලපේ නම්, සම්බන්ධ වීමේ ප්‍රති N ලයක් ලෙස NULL අගය භාවිතා කරන්න.

උදාහරණයක් :

උදාහරණයක්

දැන් වගු 2 ක් සඳහා උපකල්පනය කරමු

1.employees , 2.phone_numbers_employees

employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   

මෙන්න, සේවක වගුව ප්‍රධාන වගුව, phone_numbers_employees යනු ළමා වගුවයි ( එහි ළමා වගුව emp_idසම්බන්ධ කරන විදේශීය යතුරක් ලෙස එය අඩංගු වේ employee.id.)

ඇතුළත එකතු වේ

වගු 2 ක වාර්තා පමණක් ගන්න සේවක වගුවේ ප්‍රාථමික යතුර (එහි හැඳුනුම්පත) ගැලපෙන්නේ ළමා වගුවේ විදේශීය යතුර දුරකථන_නම්බර්ස්_එම්ප්ලෝයිස් (emp_id) .

එබැවින් විමසුම වනුයේ:

SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

ඉහත විස්තර කර ඇති පරිදි ප්‍රාථමික යතුර = විදේශීය යතුර මත ගැලපෙන පේළි පමණක් ගන්න. ප්‍රාථමික යතුර හා නොගැලපෙන පේළි මෙහි එක්වීම නිසා විදේශීය යතුර මඟ හැරේ.

වමට සම්බන්ධ වේ :

දකුණු මේසයට ගැලපෙන පේළියක් තිබේද යන්න නොසලකා වම් එක්වීම වම් වගුවේ සියලුම පේළි රඳවා ගනී.

SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

පිටත සම්බන්ධ වේ :

SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

රූප සටහන අනුව එය පෙනෙන්නේ:

රූප සටහන


4
ප්‍රති result ලයට ප්‍රාථමික / අද්විතීය / අපේක්ෂක යතුරු සහ විදේශීය යතුරු සමඟ කිසිවක් කළ නොහැක. බේවියර් ඒවා ගැන සඳහන් නොකර විස්තර කළ හැකිය. හරස් සම්බන්ධයක් ගණනය කරනු ලැබේ, පසුව ON තත්වයට නොගැලපෙන පේළි පෙරහන් කරනු ලැබේ; පිටත සන්ධි පේළි සඳහා පෙරහන් කළ / අසමසම පේළි NULLs විසින් විස්තාරණය කරනු ලැබේ (LEFT / RIGHT / FULL අනුව සහ ඇතුළත් කර ඇත.
පිලිප්සි

SQL සම්බන්ධ වීම සැමවිටම ප්‍රාථමික / විදේශීය යතුරු සමඟ ගැලපීමක් යැයි උපකල්පනය කිරීම මෙම රූප සටහන වැරදි ලෙස භාවිතා කිරීමට හේතු වේ. කරුණාකර ඔබේ පිළිතුර ඒ අනුව සංශෝධනය කරන්න.
කොල්ම් භන්ඩාල්

58

INNER JOINගැලපීමක් ඇති වගු දෙකෙන්ම සියලු පේළි ආපසු ලබා දීමට ඔබ භාවිතා කරයි. එනම් ප්‍රති table ලයක් ලෙස ඇති වගුවේ සියලුම පේළි සහ තීරු වල අගයන් ඇත.

දී OUTER JOINඑහි ප්රතිඵලයක් වගුව හිස් තීරු තිබිය හැක. පිටත බැඳීම එක්කෝ LEFTහෝ විය හැකිය RIGHT.

LEFT OUTER JOIN දෙවන වගුවේ ගැලපීම් නොමැති වුවද පළමු පේළියේ සිට සියලු පේළි ලබා දෙයි.

RIGHT OUTER JOIN පළමු වගුවේ කිසිදු ගැලපීමක් නොතිබුණද, දෙවන වගුවෙන් සියලුම පේළි ලබා දෙයි.


56

සම්බන්ධ වීම සඳහා මෙය හොඳ පැහැදිලි කිරීමකි

මෙය සියලු ආකාරයේ බැඳීම් සඳහා හොඳ රූපසටහන් පැහැදිලි කිරීමකි

මූලාශ්‍රය: http://ssiddique.info/understanding-sql-joins-in-easy-way.html


1
මෙම සටහන මෙම රූප සටහන අර්ථ නිරූපණය කරන්නේ කෙසේද යන්න පැහැදිලිව විස්තර නොකරයි. ප්‍රශ්නය පිළිබඳ පළමු අදහස සහ මෙම පිටුවේ මගේ අනෙක් අදහස් ද බලන්න.
ෆිලිප්සි

54

INNER JOINවගු දෙක සංසන්දනය කිරීමේදී අවම වශයෙන් ගැලපීමක් අවශ්‍ය වේ. උදාහරණයක් ලෙස, A ٨ B (A ඡේදනය B) යන්නෙන් අඟවන A වගුව සහ වගුව.

LEFT OUTER JOIN හා LEFT JOIN සමාන වේ. එය වගු දෙකෙහිම ගැලපෙන සියලුම වාර්තා සහ වම් වගුවේ සියලු හැකියාවන් ලබා දෙයි.

ඒ හා සමානව, RIGHT OUTER JOINහා RIGHT JOINසමාන වේ. එය වගු දෙකෙහිම ගැලපෙන සියලුම වාර්තා සහ නිවැරදි වගුවේ සියලු හැකියාවන් ලබා දෙයි.

FULL JOINයනු අනුපිටපත් LEFT OUTER JOINහා RIGHT OUTER JOINරහිත සංයෝජනයකි .


43

පිළිතුර සෑම කෙනෙකුගේම අර්ථයෙන් ඇත, එබැවින් ප්‍රති .ල වල.

සටහන:
දී SQLiteනැත RIGHT OUTER JOINහෝ FULL OUTER JOIN.
ඒ වගේම MySQLකිසිම දෙයක් නැහැ FULL OUTER JOIN.

මගේ පිළිතුර ඉහත සටහන මත පදනම් වේ .

ඔබට මේ වගේ වගු දෙකක් ඇති විට:

--[table1]               --[table2]
id | name                id | name
---+-------              ---+-------
1  | a1                  1  | a2
2  | b1                  3  | b2

CROSS JOIN / OUTER JOIN:
ඔබට එම වගු දත්ත සියල්ලම මේ සමඟ CROSS JOINහෝ සමඟ තිබිය ,හැකිය:

SELECT * FROM table1, table2
--[OR]
SELECT * FROM table1 CROSS JOIN table2

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2
1  | a1   | 3  | b2
2  | b1   | 1  | a2
2  | b1   | 3  | b2

INNER JOIN: ඔබට භාවිතා කළ හැකි
සම්බන්ධතාවයක් මත පදනම්ව ඉහත ප්‍රති results ල වලට පෙරනයක් එක් කිරීමට අවශ්‍ය විට :table1.id = table2.idINNER JOIN

SELECT * FROM table1, table2 WHERE table1.id = table2.id
--[OR]
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2

වම් [පිටත] එකතු වන්න:
ඔබ භාවිතා කළ හැකිය එම relation-, මුගුරු ඉහත ප්රතිඵලය ගැන වගු එක් සියලු පේළි ඇති කිරීමට අවශ්ය වූ විට LEFT JOIN:
සඳහා ( දකුණු එක්වන වගු හුදෙක් වෙනස් ස්ථානය)

SELECT * FROM table1, table2 WHERE table1.id = table2.id 
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
--[OR]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id   | name 
---+------+------+------
1  | a1   | 1    | a2
2  | b1   | Null | Null

සම්පූර්ණ සම්බන්ධ වීම:
ඔබේ ප්‍රති results ලවල අනෙක් වගුවේ සියලුම පේළි ලබා ගැනීමට ඔබට අවශ්‍ය වූ විට ඔබට භාවිතා කළ හැකිය FULL OUTER JOIN:

SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
UNION ALL
SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1)
--[OR] (recommended for SQLite)
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id
WHERE table1.id IS NULL
--[OR]
SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id

--[Results:]
id   | name | id   | name 
-----+------+------+------
1    | a1   | 1    | a2
2    | b1   | Null | Null
Null | Null | 3    | b2

හොඳයි, ඔබේ අවශ්‍යතාවය පරිදි ඔබේ අවශ්‍යතාවය ආවරණය වන සෑම එකක්ම තෝරා ගන්න;).


full outer joinMySQL හි ද නොමැති බව ඔබට ඔබේ සටහනට එක් කළ හැකිය.
පොටෂින්

35

අභ්යන්තර සන්ධි.

සම්බන්ධ වීම යනු වගු දෙකකින් පේළි ඒකාබද්ධ කිරීමයි. ක අභ්යන්තර එක්වන නිර්ණායක මත පදනම් වූ වගු දෙකක් ඔබ විමසුම දී සඳහන් දක්වා ගැලපෙන උත්සාහයන්, සහ එකම එම තරගයේදී පේළි පැමිණේ. සම්බන්ධතාවයේ පළමු වගුවේ පේළියක් දෙවන වගුවේ පේළි දෙකකට ගැලපේ නම්, ප්‍රති .ලවල පේළි දෙකක් ආපසු ලැබෙනු ඇත. පළමු වගුවේ පේළියක් දෙවන පේළියට නොගැලපේ නම් එය ආපසු නොලැබේ; ඒ හා සමානව, දෙවන වගුවේ පළමු පේළියට නොගැලපෙන පේළියක් තිබේ නම්, එය ආපසු නොලැබේ.

පිටත බැඳීම.

සම්බන්ධ ඉතිරි දෙවන වගුවේ පේළි පළමු වගුව සිට පේළි ගලපන්න සොයා ගැනීමට උත්සාහ. එයට ගැලපීමක් සොයාගත නොහැකි නම්, එය පළමු වගුවේ සිට තීරු ආපසු ලබා දෙන අතර දෙවන වගුවේ ඇති තීරු හිස්ව තබයි (ශූන්‍ය).


28

රූප විස්තරය මෙහි ඇතුළත් කරන්න

  • INNER JOINවගු දෙකක් හෝ වැඩි ගණනක් සඳහා බොහෝ විට සම්බන්ධ වීම. එය ප්‍රාථමික යතුරු සහ ෆොරින්ග්කි සම්බන්ධතාවය යන දෙකෙහිම දත්ත ගැලපීම ලබා දෙයි.
  • OUTER JOINසමාන වේ INNER JOIN, නමුත් එයට NULLResultSet හි දත්තද ඇතුළත් වේ .
    • LEFT JOIN= INNER JOIN+ දකුණු වගුවේ ගැලපීම සමඟ වම් වගුවේ අසමසම දත්ත Null.
    • RIGHT JOIN= INNER JOIN+ වම් මේසයට ගැලපෙන දකුණු වගුවේ අසමසම දත්ත Null.
    • FULL JOIN= INNER JOIN+ ගැලපීම් සහිත දකුණු හා වම් වගු දෙකෙහි අසමසම දත්ත Null.
  • ස්වයං සම්බන්ධ වීම යනු SQL හි ප්‍රධාන පදයක් නොවේ, වගුවක දත්ත ස්වයං සම්බන්ධතාවයක් ලෙස දන්නා විට. භාවිතා කිරීම INNER JOINසහ OUTER JOINඅපට ස්වයං සම්බන්ධ වීමේ විමසුම් ලිවිය හැකිය.

උදාහරණයක් වශයෙන්:

SELECT * 
FROM   tablea a 
       INNER JOIN tableb b 
               ON a.primary_key = b.foreign_key 
       INNER JOIN tablec c 
               ON b.primary_key = c.foreign_key 

27

අනෙක් පිළිතුරු වල කාර්ය සාධනය සහ ප්‍රශස්තකරණය පිළිබඳ වැඩි විස්තර මා දකින්නේ නැත.

සමහර විට එය පමණක් දැන ගැනීම හොඳය INNER JOIN ඇසෝසියේටිව් එයින් අදහස් කරන්නේ ප්‍රශස්තකරණයට එය සමඟ සෙල්ලම් කිරීමට වඩාත්ම විකල්පය ඇති බවයි. එකම ප්‍රති .ලය තබා ගනිමින් එය වේගවත් කිරීම සඳහා සම්බන්ධ වීමේ අනුපිළිවෙල නැවත සකස් කළ හැකිය. ප්‍රශස්තිකරණයට වඩාත්ම සම්බන්ධ වීමේ ක්‍රම භාවිතා කළ හැකිය.

සාමාන්‍යයෙන් INNER JOINවිවිධ ආකාරයේ බැඳීම් වෙනුවට භාවිතා කිරීමට උත්සාහ කිරීම හොඳ පුරුද්දකි . (ඇත්ත වශයෙන්ම අපේක්ෂිත ප්‍රති result ල කට්ටලය සලකා බැලීමට හැකි නම්.)

මෙම අමුතු සහායක හැසිරීම ගැන හොඳ උදාහරණ කිහිපයක් සහ පැහැදිලි කිරීමක් මෙහි ඇත:


4
එක් ආකාරයක සම්බන්ධතාවයක් තවත් ආකාරයකට භාවිතා කිරීම “හොඳ පුරුද්දක්” විය නොහැක. ඔබ භාවිතා කරන කුමන සම්බන්ධතාවයද ඔබට අවශ්‍ය දත්ත තීරණය කරයි. ඔබ වෙනත් එකක් භාවිතා කරන්නේ නම් ඔබ වැරදිය. ප්ලස්, ඔරකල්හි අවම වශයෙන් මෙම පිළිතුර සම්පූර්ණයෙන්ම වැරදිය. එය සෑම දෙයකටම සම්පූර්ණයෙන්ම වැරදියි. ඔබට කිසිදු සාක්ෂියක් නොමැත. ඔබට සාක්ෂි තිබේද?
බෙන්

1. මම අදහස් කළේ භාවිතා කිරීමට උත්සාහ කරන්න . LEFT OUTER භාවිතා කරන බොහෝ දෙනෙක් හොඳ හේතුවක් නොමැතිව සෑම තැනකටම එක්වන බව මම දුටුවෙමි. (සම්බන්ධ වූ තීරු 'ශුන්‍ය නොවේ') එවැනි අවස්ථාවන්හිදී INNER බැඳීම් භාවිතා කිරීම වඩා හොඳය. 2. මට වඩා හොඳ සහායක නොවන හැසිරීම පැහැදිලි කරන සබැඳියක් මම එකතු කර ඇත්තෙමි.
ලාජෝස් වේරස්

මා දන්නා පරිදි බොහෝ වේලාවට INNER JOINවඩා මන්දගාමී LEFT JOINවන අතර අනපේක්ෂිත ප්‍රති results LEFT JOINල ඉවත් කිරීම සඳහා INNER JOINඑකතු කිරීම වෙනුවට මිනිසුන්ට භාවිතා කළ හැකිය ;). WHERENULL
shA.t

මෙම අදහස් මට ටිකක් අවිනිශ්චිතතාවයක් ඇති කළේය. INNERමන්දගාමී යැයි ඔබ සිතන්නේ ඇයි ?
ලාජෝස් වේරස්

එන්ජිම මත රඳා පවතී. gnu join, joinkeys, DB2, MySQL. ලිහිල් ටයිප් කිරීම හෝ පැහැදිලි වාත්තු කිරීම වැනි කාර්ය සාධන උගුල් බහුලව තිබේ.
mckenzm

26

බොහෝ සෙයින් ආදරය කරන රතු-සෙවන සහිත වෙන්න් රූප සටහන විවේචනය කිරීමෙන් පසුව, මම සිතුවේ මගේම උත්සාහයක් පළ කිරීම සාධාරණ බවය.

Ar මාටින් ස්මිත්ගේ පිළිතුර බොහෝ දුරට මෙම පොකුරේ හොඳම දේ වුවද, ඔහුගේ එකම වගුවේ එක් එක් වගුවේ ප්‍රධාන තීරුව පෙන්වන අතර, යතුරු නොවන තීරු ද පෙන්විය යුතු යැයි මම සිතමි.

මම අවසර අර්ධ පැයකින් කළ හැකි හොඳම, මම තවමත් එය ප්රමාණවත් හිතන්නේ නැහැ සංදර්ශන ද nulls ප්රධාන වටිනාකම් නොමැති වීම නිසා ඇති බව TableBහෝ OUTER JOINඑක්වන්නේ වඩා ඇත්තටම වෘත්තීය සමිති ය:

රූප විස්තරය මෙහි ඇතුළත් කරන්න



EarLearnByReading: දකුණු පස ඇති මගේ පින්තූරය දකුණු පිටත TableA a LEFT OUTER JOIN TableB bTableB B RIGHT OUTER JOIN TableA a
එක්වීමකි,

26

සඳහා නිශ්චිත ඇල්ගොරිතමය INNER JOIN, LEFT/RIGHT OUTER JOINපහත සඳහන් පරිදි වේ:

  1. පළමු වගුවෙන් එක් එක් පේළිය ගන්න: a
  2. එය අසල දෙවන වගුවේ ඇති සියලුම පේළි සලකා බලන්න: (a, b[i])
  3. ON ...එක් එක් යුගලයට එරෙහිව වගන්තිය තක්සේරු කරන්න :ON( a, b[i] ) = true/false?
    • තත්වය තක්සේරු කළ විට true, එම ඒකාබද්ධ පේළිය ආපසු එවන්න (a, b[i]).
    • කිසිදු ගැලපීමකින් තොරව දෙවන වගුවේ අවසානයට ළඟා වූ විට, මෙය අනෙක් වගුවේ සියලුම තීරු සඳහා භාවිතා කරමින් (අතථ්‍ය) යුගලයක් Outer Joinආපසු එවන්න:Null(a, Null) LEFT පිටත එක්වීම සඳහා හෝ (Null, b)දකුණු පිටත බැඳීම සඳහා. මෙය පළමු වගුවේ සියලුම පේළි අවසාන ප්‍රති .ලවල පවතින බව සහතික කිරීමයි.

සටහන:ON වගන්තියේ දක්වා ඇති කොන්දේසිය කිසිවක් විය හැකිය, එය ප්‍රාථමික යතුරු භාවිතා කිරීම අවශ්‍ය නොවේ (තවද ඔබට සෑම විටම වගු දෙකෙන්ම තීරු වෙත යොමු වීමට අවශ්‍ය නොවේ)! උදාහරණයක් වශයෙන්:

අභ්‍යන්තර බැඳීම එදිරිව. වම් පිටත සම්බන්ධ වීම


රූප විස්තරය මෙහි ඇතුළත් කරන්න

සටහන: වම් බැඳීම = වම් පිටත සම්බන්ධ වීම, දකුණට සම්බන්ධ වීම = දකුණු පිටත බැඳීම.


20

සරලම අර්ථ දැක්වීම්

අභ්‍යන්තර සම්බන්ධ වීම: වගු දෙකෙන්ම ගැලපෙන වාර්තා ලබා දෙයි.

සම්පූර්ණ පිටත සම්බන්ධ වීම: මේස දෙකෙන්ම අසමසම වාර්තා සඳහා නොගැලපෙන වාර්තා සඳහා වගු දෙකෙන්ම ගැලපෙන හා අසමසම වාර්තා ලබා දෙයි .

වම් පිටත සම්බන්ධ වීම: ගැලපෙන හා අසමසම වාර්තා ලබා දෙන්නේ වම් පැත්තේ ඇති වගුවෙන් පමණි .

දකුණු පිටත එක්වීම: ගැලපෙන හා අසමසම වාර්තා ලබා දෙන්නේ දකුණු පැත්තේ ඇති වගුවෙන් පමණි .

කෙටියෙන්

ගැලපෙන + වම් අසමසම + දකුණ අසමසම = සම්පූර්ණ පිටත සම්බන්ධ වීම

ගැලපෙන + වම් අසමසම = වම් පිටත සම්බන්ධ වීම

ගැලපෙන + දකුණ අසමසම = දකුණු පිටත එක්වීම

ගැලපේ = අභ්‍යන්තර සම්බන්ධ වීම


1
මෙය ඉතා දීප්තිමත් වන අතර කාල ශ්‍රේණි දර්ශක සඳහා අපේක්ෂිත පරිදි සම්බන්ධ නොවන්නේ මන්දැයි පැහැදිලි කරයි. තත්පරයක කාල මුද්දර අසමසම වේ.
yeliabsalohcin

1
elyeliabsalohcin ඔබ මෙහි "අපේක්ෂා කළ පරිදි" පැහැදිලි නොකරයි හෝ ප්‍රශ්නය පිළිබඳ ඔබේ අදහසෙහි "ක්‍රියා කරයි". එය ඔබ නොදැනුවත්වම අන් අය බලාපොරොත්තු වන පෞද්ගලික වැරදි වැටහීමකි. ඔබ කියවන විට වචන නොපැහැදිලි ලෙස සලකන්නේ නම් - පැහැදිලි ලිවීම වැරදි ලෙස අර්ථකථනය කිරීම සහ / හෝ අපැහැදිලි ලිවීම් පිළිගැනීම - ඔබ මෙහි ලියන විට මෙන් වැරදි වැටහීමක් අපේක්ෂා කළ හැකිය. ඇත්ත වශයෙන්ම මෙහි බොහෝ දෙනා මෙන් මෙම පිළිතුර අපැහැදිලි සහ වැරදි ය. ආදාන තීරු කට්ටල වෙනස් වන විට "අභ්‍යන්තර සම්බන්ධ වීම: වගු දෙකෙන්ම ගැලපෙන වාර්තා ලබා දීම" වැරදිය. එය යම් දෙයක් පැවසීමට උත්සාහ කරයි, නමුත් එය එසේ නොවේ . (මගේ පිළිතුර බලන්න.)
ෆිලිප්සි

9

සරල කොන්දේසි වලින්,

1. ඉනර් එක්වීම හෝ ඉක්වයින් එක්වීම: වගු දෙකේම තත්වයට පමණක් ගැලපෙන ප්‍රති set ල කට්ටලය ලබා දෙයි.

2. පිටත බැඳීම: පිටත සම්බන්ධ වීම කොන්දේසි ගැලපීමක් තිබුණත් නැතත් වගු දෙකෙන්ම සියලුම අගයන්ගේ ප්‍රති set ල ලබා දෙයි.

3. වමට සම්බන්ධ වන්න: වම් වගුව සහ දකුණු වගුවේ තත්ත්වය ගැලපෙන පේළි පමණක් සියලු වටිනාකම් resultset ආයෙත්.

4. නිවැරදි බැඳීම: සියලුම අගයන්හි ප්‍රති results ල දකුණු වගුවෙන් ලබා දෙන අතර වම් වගුවේ තත්වයට ගැලපෙන පේළි පමණි.

5. පූර්ණ සම්බන්ධ වීම : පූර්ණ සම්බන්ධ වීම සහ සම්පූර්ණ පිටත බැඳීම සමාන වේ.


5

SQL හි ප්‍රධාන වශයෙන් ප්‍රධාන වශයෙන් JOIN වර්ග 2 ක් ඇත: [INNER සහ OUTER]


උදාහරණ

ඔබට එක් වගුවක් බැගින් වගු දෙකක් ඇති අතර දත්ත පහත පරිදි වේ යැයි සිතමු.

A    B
-    -
1    3
2    4
3    5
4    6
7
8

(1,2,7,8) A ට අද්විතීය වන අතර (3,4) පොදු වන අතර (5,6) B ට අද්විතීය වේ.



  • (INNER) එක්වන්න :

INNER JOIN යතුර මඟින් කොන්දේසිය සෑහීමකට පත්වන තාක් කල් වගු දෙකෙන්ම සියලුම පේළි තෝරා ගනී. මෙම පදය මඟින් කොන්දේසිය තෘප්තිමත් වන වගු දෙකේම ඇති සියලුම පේළි ඒකාබද්ධ කිරීමෙන් ප්‍රති result ල කට්ටලය නිර්මාණය වනු ඇත, එනම් පොදු ක්ෂේත්‍රයේ අගය සමාන වේ.

අභ්යන්තර සන්ධි

select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

ප්‍රති ult ලය:

a | b
--+--
3 | 3
4 | 4


  • වමට (පිටත) එක්වන්න :

මෙම බැඳීම සම්බන්ධතාවයේ වම් පැත්තේ ඇති මේසයේ සියලු පේළි සහ සම්බන්ධතාවයේ දකුණු පැත්තේ මේසය සඳහා ගැලපෙන පේළි ලබා දෙයි. දකුණු පැත්තේ නොගැලපෙන පේළියක් නොමැති පේළි, ප්‍රති result ල කට්ටලය ශුන්‍ය වේ. LEFT JOIN ලෙසද හැඳින්වේ LEFT OUTER JOIN.

වමට සම්බන්ධ වන්න / වමට සම්බන්ධ වන්න

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

ප්‍රති ult ලය:

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4
7 | null
8 | null


  • නිවැරදි (පිටත) එක්වන්න : සියලුම වාර්තා දකුණු වගුවෙන් ලබා දෙයි, සහ ගැලපෙන වාර්තා වම් මේසයෙන් ලබා දෙයි

නිවැරදි බැඳීම / නිවැරදිව එක්වන්න

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

ප්‍රති ult ලය:

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6


  • සම්පූර්ණ (පිටත) එක්වන්න :

    FULL JOIN මඟින් LEFT JOIN සහ RIGHT JOIN යන දෙකෙහිම ප්‍රති result ල ඒකාබද්ධ කිරීමෙන් ප්‍රති result ල කට්ටලය නිර්මාණය වේ. ප්‍රති result ල-කට්ටලයට වගු දෙකේම සියලුම පේළි අඩංගු වේ. නොගැලපෙන පේළි, ප්‍රති result ල-කට්ටලය තුළ NULL අගයන් අඩංගු වේ.

සම්පුර්ණයෙන්ම සම්බන්ධ වන්න / සම්පූර්ණ සම්බන්ධ වන්න

select * from a FULL OUTER JOIN b on a.a = b.b;

ප්‍රති ult ලය:

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5
   7 | null
   8 | null

1
සාමාන්‍ය නඩුවේදී SQL සම්බන්ධ වීම විස්තර කිරීමට Venn රූප සටහන් ප්‍රමාණවත් නොවේ. SQL සම්බන්ධ වීමට වගු අතර පේළි එකින් එක ගැලපීම අවශ්‍ය නොවේ, උදා: විදේශීය යතුර එදිරිව ප්‍රාථමික යතුර භාවිතා කිරීම.
කොල්ම් භන්ඩල්

පේළියට නොගැලපෙන පරිදි ඔබ වගු 2 ට සම්බන්ධ වන්නේ කෙසේද? ඔබට සම්බන්ධ වීමට හැකි වන පරිදි ඔබට තීරු ප්‍රාථමික හෝ විදේශීය යතුරක් හෝ පොදු ක්ෂේත්‍රයක් අවශ්‍ය විය යුතුය. මම කල්පනා කරන්නේ ඇයි ඔබ මෙම පිළිතුර අවතක්සේරු කළේ කියා. SQL JOIN ක්‍රියා කරන ආකාරය පැහැදිලි කිරීමට ප්‍රභවය Venn රූප සටහනයි. බැඳීම් නියෝජනය කිරීමට ඔබට මීට වඩා හොඳ උදාහරණ තිබේද? එසේ නොවේ නම්, කරුණාකර එය ඉහළට ඔසවන්න, එවිට මිනිසුන්ට වඩා හොඳ විසඳුම් ලැබෙනු ඇත. ඔබට ස්තුතියි.
මයුර්

ඔබ තමයි රූපසටහන පෝස්ට් එකට දාන්නේ. රූප සටහන් සඳහා පුරාවෘත්තය කුමක්ද? - එක් එක් කට්ටලයේ අංග මොනවාද? වගු බෑග් කට්ටල නොවීම ගැන කුමක් කිව හැකිද? ඔයා කියන්නේ නැහැ. ඒවා කට්ටල නොවන එක් දෙයක් නම් ලේබලයට A & B පේළි ය. මෙම පිටුවේ ඇති සටහන් පිළිබඳ මගේ අදහස් බලන්න. මෙම ලිපිය වෙනත් තැනක දක්නට ලැබෙන වැරදි භාවිතය අන්ධ ලෙස පුනරාවර්තනය කරයි, නමුත් තේරුම් ගෙන හෝ ප්‍රශ්න කර නැත. තවද ඔබ මෙහි පෙළෙහි පවසන දේ අපැහැදිලි සහ වැරදි ය. දැනටමත් මෙහි ඇති බොහෝ පිළිතුරු වලට එය කිසිවක් එකතු නොකරයි. (සියල්ලන්ම පාහේ දුප්පත් වුවද.) PS කරුණාකර අදහස් දැක්වීමෙන් නොව සංස්කරණ හරහා පැහැදිලි කරන්න.
පිලිප්සි

සම්බන්ධ වීමට හෝ විමසීමට FKs අවශ්‍ය නොවේ. ඕනෑම වගු 2 ක් ඒවායේ තීරු සම්බන්ධ ඕනෑම කොන්දේසියකට සම්බන්ධ කළ හැකි අතර, ඕනෑම බාධක, ප්‍රේරක හෝ ප්‍රකාශයන් නොසලකා.
පිලිප්සි

3
  • අභ්‍යන්තර බැඳීම - සමාන විමසීම් එකක් භාවිතා කරමින් අභ්‍යන්තර සම්බන්ධතාවයක් මඟින් වගු දෙකේ ඡේදනය ලබා දෙයි , එනම් ඒවාට පොදු පේළි දෙකකි.

  • වම් පිටත එක්වීම - වම් පිටත එක්වීම මඟින් A හි සියලුම පේළි සහ B හි ඕනෑම පොදු පේළි ලබා දෙනු ඇත.

  • සම්පූර්ණ පිටත සම්බන්ධ වීම - පූර්ණ පිටත සම්බන්ධතාවයක් මඟින් ඔබට A සහ ​​B ඒකාබද්ධ වේ, එනම් A හි ඇති සියලුම පේළි සහ B හි ඇති සියලුම පේළි. A හි යම් දෙයක් B හි අනුරූප දත්තයක් නොමැති නම්, B කොටස ශුන්‍ය, සහ අනෙක් අතට


1
මෙය වැරදි සහ අපැහැදිලි ය. එක්වන්න ය නොවන වගු එම තීරු ඇති නම් සඳහා ඡේදනය. පිටත එක්වීම් වලට එකම තීරු නොමැති නම් A හෝ B වලින් පේළි නොමැත, එවැනි අවස්ථාවකදී ශුන්‍යයන් එකතු නොවේ. ඔබ යමක් කීමට උත්සාහ කළත් ඔබ එය නොකියයි. ඔබ නිවැරදිව හෝ පැහැදිලිව පැහැදිලි නොකරයි.
ෆිලිප්සි

ilphilipxy: ඔබේ ප්‍රකාශය පිළිබඳ එකඟ නොවීම. Join is not an intersection unless the tables have the same columnsඔබට අවශ්‍ය ඕනෑම තීරුවකට සම්බන්ධ විය හැකි අතර අගය ගැලපෙන්නේ නම් ඒවා එකට එකතු වේ.
සියදිවි නසාගැනීමේ

එම ප්‍රකාශය ඔබේ පිළිතුර තරම් අපැහැදිලි ය. . පැහැදිලි නැත.)
philipxy

මා අදහස් කළේ එක්වීම යනු එකම තීරු සහිත ආදාන ස්වාභාවික අභ්‍යන්තර සම්බන්ධතාවයක් වන විට යෙදවුම් වල ඡේදනය වීමක් පමණි. ඔබ "ඡේදනය" සහ "යුනියන්" යන වචන වැරදි ලෙස භාවිතා කරයි.
ෆිලිප්සි

3

1. අභ්‍යන්තර බැඳීම: එක්වීම ලෙසද හැඳින්වේ. එය වම් වගුවේ ඇති පේළි නැවත ලබා දෙයි, සහ දකුණු වගුව ගැලපීමක් තිබේ නම් පමණි . එසේ නොමැති නම්, එය ශුන්ය වාර්තා ලබා දෙයි.

උදාහරණයක්:

SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
INNER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

output1

2. සම්පූර්ණ පිටත බැඳීම: පූර්ණ සම්බන්ධ වීම ලෙසද හැඳින්වේ. එය වම් වගුවේ සහ දකුණු වගුවේ ඇති සියලුම පේළි නැවත ලබා දෙයි .

උදාහරණයක්:

SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
FULL OUTER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

output2

3. වම් පිටත සම්බන්ධ වීම: නැතහොත් සරලව වම් බැඳීම ලෙස හැඳින්වේ. එය වම් වගුවේ ඇති සියලුම පේළි සහ දකුණු වගුවෙන් ගැලපෙන පේළි (ඇත්නම්) ලබා දෙයි.

4. දකුණු පිටත බැඳීම: රයිට් ජොයින් ලෙසද හැඳින්වේ. එය වම් මේසයෙන් ගැලපෙන පේළි (ඇත්නම්) ලබා දෙයි, සහ දකුණු පේළියේ ඇති සියලුම පේළි.

එකතු වේ

සම්බන්ධ වීමේ වාසි

  1. වේගයෙන් ක්‍රියාත්මක කරයි.

2
මෙය නිවැරදි වන්නේ වගු එකම තීරු කට්ටලයක් ඇති විට පමණි. (එය මංසන්ධිය සමඟ අභ්‍යන්තර සම්බන්ධතාවය ව්‍යාකූල කරයි. මගේ වෙනත් අදහස් කියවන්න.
philipxy

2

පහත වගු 2 ක් සලකා බලන්න:

ඊ.එම්.පී.

empid   name    dept_id salary
1       Rob     1       100
2       Mark    1       300
3       John    2       100
4       Mary    2       300
5       Bill    3       700
6       Jose    6       400

ෙදපාර්තෙම්න්තුෙව්

deptid  name
1       IT
2       Accounts
3       Security
4       HR
5       R&D

අභ්යන්තර සන්ධි:

බොහෝ විට ලියා ඇත්තේ SQL විමසුම් වල JOIN ලෙස ය. එය ආපසු ලබා දෙන්නේ වගු අතර ගැලපෙන වාර්තා පමණි.

සියලුම සේවකයින් සහ ඔවුන්ගේ දෙපාර්තමේන්තු නම් සොයා ගන්න:

Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security

ඔබ ඉහත දුටු පරිදි, නිමැවුමේ EMPJose වෙතින් මුද්‍රණය නොකෙරේ , මන්ද එය දෙපාර්තමේන්තු වගුවේ dept_id නොගැලපේ. ඒ හා සමානව, සහ පේළි මුද්රණය නොමැත දෙපාර්තමේන්තුව6HRR&D එම්ප් වගුවේ ගැලපීමක් සොයාගත නොහැකි වූ වගුවෙන් .

ඉතින්, INNER JOIN හෝ JOIN, නැවත ලබා දෙන්නේ ගැලපෙන පේළි පමණි.

වමට සම්බන්ධ වන්න:

මෙය සියලු වාර්තා LEFT වගුවෙන් ලබා දෙන අතර RIGHT වගුවෙන් ගැලපෙන වාර්තා පමණි.

Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
6       Jose    

එබැවින්, ඔබ ඉහත ප්‍රතිදානය නිරීක්ෂණය කරන්නේ නම්, LEFT වගුවේ (Emp) සියලුම වාර්තා RIGHT වගුවෙන් ගැලපෙන වාර්තා සමඟ මුද්‍රණය කෙරේ.

HRසහ දෙපාර්තමේන්තු වගුවෙන් R&Dපේළි මුද්‍රණය නොකෙරේ.

එබැවින්, LEFT JOIN සියළුම පේළි වම් වගුවෙන් ආපසු ලබා දෙන අතර RIGHT වගුවෙන් ගැලපෙන පේළි පමණි.

මෙහි DEMO ද පරීක්ෂා කළ හැකිය .


2

සාමාන්‍ය අදහස

කරුණාකර පිලිතුරක් විසින් මාටින් ස්මිත් ඇතුළු සහ විශේෂයෙන් අතර වෙනස්කම් වඩා හොඳ illustations සහ විවිධ එක්වෙයි ගැන පැහැදිලි කිරීම් සඳහා FULL OUTER JOIN, RIGHT OUTER JOINසහ LEFT OUTER JOIN.

මෙම වගු දෙක JOINපහත දැක්වෙන s නිරූපණය සඳහා පදනමක් සපයයි :

පදනමක්

CROSS JOIN

ක්‍රොස්ජොයින්

SELECT *
  FROM citizen
 CROSS JOIN postalcode

මෙහි ප්‍රති result ලය වනුයේ සියලුම සංයෝජනයන්හි කාටිසියානු නිෂ්පාදන වේ. කිසිදු JOINකොන්දේසියක් අවශ්ය:

CrossJoinResult

අභ්යන්තර සන්ධි

INNER JOIN සරලවම සමාන වේ: JOIN

අභ්යන්තර සන්ධි

SELECT *
  FROM citizen    c
  JOIN postalcode p ON c.postal = p.postal

ප්‍රති result ලය වනුයේ අවශ්‍ය JOINකොන්දේසිය තෘප්තිමත් කරන සංයෝජන ය :

InnerJoinResult

පිටතින් එක්වන්න

LEFT OUTER JOIN සමාන වේ LEFT JOIN

වමට සම්බන්ධ වන්න

SELECT *
  FROM citizen         c
  LEFT JOIN postalcode p ON c.postal = p.postal

citizenප්‍රති match ලය වනුයේ තරඟ නොමැති වුවද සෑම දෙයක්ම වේ postalcode. නැවතත් JOINකොන්දේසියක් අවශ්ය වේ:

LeftJoinResult

සෙල්ලම් කිරීම සඳහා දත්ත

සියලුම උදාහරණ ඔරකල් 18 සී මත ධාවනය කර ඇත. ඒවා dbfiddle.uk වෙතින් ලබා ගත හැකි අතර එය වගු වල තිරපිටපත් පැමිණියේ ද ය.

CREATE TABLE citizen (id      NUMBER,
                      name    VARCHAR2(20),
                      postal  NUMBER,  -- <-- could do with a redesign to postalcode.id instead.
                      leader  NUMBER);

CREATE TABLE postalcode (id      NUMBER,
                         postal  NUMBER,
                         city    VARCHAR2(20),
                         area    VARCHAR2(20));

INSERT INTO citizen (id, name, postal, leader)
              SELECT 1, 'Smith', 2200,  null FROM DUAL
        UNION SELECT 2, 'Green', 31006, 1    FROM DUAL
        UNION SELECT 3, 'Jensen', 623,  1    FROM DUAL;

INSERT INTO postalcode (id, postal, city, area)
                 SELECT 1, 2200,     'BigCity',         'Geancy'  FROM DUAL
           UNION SELECT 2, 31006,    'SmallTown',       'Snizkim' FROM DUAL
           UNION SELECT 3, 31006,    'Settlement',      'Moon'    FROM DUAL  -- <-- Uuh-uhh.
           UNION SELECT 4, 78567390, 'LookoutTowerX89', 'Space'   FROM DUAL;

සමග ක්රීඩා කරන විට බොඳවුණ හතරේ පහර JOINසහWHERE

CROSS JOIN

CROSS JOINඑහි ප්‍රති ing ලයක් ලෙස පේළි සාමාන්‍ය අදහස / INNER JOIN:

SELECT *
  FROM citizen          c
  CROSS JOIN postalcode p
 WHERE c.postal = p.postal -- < -- The WHERE condition is limiting the resulting rows

අවශ්‍යතාවයේ ප්‍රති CROSS JOINresult ලය ලබා ගැනීම LEFT OUTER JOINසඳහා NULLපේළියක් එකතු කිරීම වැනි උපක්‍රම අවශ්‍ය වේ . එය මඟ හැරී ඇත.

අභ්යන්තර සන්ධි

INNER JOINකාටේෂියානු නිෂ්පාදන බවට පත්වේ. එය සාමාන්‍ය අදහස / CROSS JOIN:

SELECT *
  FROM citizen    c
  JOIN postalcode p ON 1 = 1  -- < -- The ON condition makes it a CROSS JOIN

ඉවත් කරන ලද තත්වයට නොගැලපෙන ප්‍රති results ල සමඟ හරස් බැඳීම ලෙස අභ්‍යන්තර බැඳීම සැබවින්ම දැකිය හැකි ස්ථානය මෙයයි. මෙහි ප්‍රති ing ලයක් ලෙස ඇති පේළි කිසිවක් ඉවත් නොකෙරේ.

ප්‍රති INNER JOINresult ලයක් ලබා ගැනීම LEFT OUTER JOINසඳහා උපක්‍රමද අවශ්‍ය වේ. එය මඟ හැරී ඇත.

පිටතින් එක්වන්න

LEFT JOINසාමාන්‍ය අදහස ලෙස පේළි වල ප්‍රති results ල / CROSS JOIN:

SELECT *
  FROM citizen         c
  LEFT JOIN postalcode p ON 1 = 1 -- < -- The ON condition makes it a CROSS JOIN

LEFT JOINසාමාන්‍ය අදහස ලෙස පේළි වල ප්‍රති results ල / INNER JOIN:

SELECT *
  FROM citizen         c
  LEFT JOIN postalcode p ON c.postal = p.postal
 WHERE p.postal IS NOT NULL -- < -- removed the row where there's no mathcing result from postalcode

වෙන් රූප සටහනේ ඇති කරදර

"Sql join cross internal outside" හි අනුරූප අන්තර්ජාල සෙවුමකින් Venn රූප සටහන් රාශියක් පෙන්වනු ඇත. මගේ මේසය මත මුද්‍රිත පිටපතක් තිබී ඇත. නමුත් නිරූපණය පිළිබඳ ගැටළු තිබේ.

කට්ටල න්‍යාය සඳහා වෙන් රූප සටහන විශිෂ්ටයි, එහිදී මූලද්‍රව්‍යයක් එක් හෝ දෙකෙහිම තිබිය හැකිය. නමුත් දත්ත සමුදායන් සඳහා, එක් "කට්ටලයක" මූලද්රව්යයක් වගුවක පේළියක් ලෙස මට පෙනේ, එබැවින් වෙනත් වගු වලද නොමැත. බහුවිධ වගු වල එක් පේළියක් වැනි දෙයක් නොමැත. පේළියක් මේසයට අද්විතීයයි.

ස්වයං සම්බන්ධ වීම යනු එක් එක් මූලද්‍රව්‍යය සැබවින්ම කට්ටල දෙකෙහිම එක හා සමාන වන මුල්ලකි. නමුත් එය තවමත් පහත කිසිදු ගැටලුවකින් නිදහස් නොවේ.

මෙම කට්ටලය Aවම්පස ඇති කට්ටලය ( citizenවගුව) නිරූපණය කරන අතර කට්ටලය පහත සාකච්ඡාවේ Bදකුණු පස ඇති කට්ටලය වේ postalcode.

CROSS JOIN

කට්ටල දෙකම සෑම අංගයක් අර්ථය අපට අවශ්ය, අනෙක් කට්ටලයක් සෑම අංගයක් සමග ගැලපෙන Aසෑම ප්රමාණය Bමූලද්රව්ය හා Bසෑම ප්රමාණය Aමෙම ලක්ෂයේ කාටිසීය නිෂ්පාදන නිසි නියෝජනය කිරීමට අංග. කට්ටලයක සමාන මූලද්‍රව්‍යයන් සඳහා සෙට් න්‍යාය සාදනු නොලැබේ, එබැවින් එය ප්‍රායෝගිකව / කළ නොහැකි දෙයක් ලෙස නිරූපණය කිරීමට වෙන් රූප සටහන් සොයා ගතිමි. එය එසේ නොවේUNION ගැලපෙන .

පේළි එකිනෙකට වෙනස් ය. මෙම UNIONමුළු පේලි 7 වේ. නමුත් ඒවා පොදු ප්‍රති SQLresults ල කට්ටලයක් සඳහා නොගැලපේ . මෙය කිසිසේත්ම ක්‍රියාත්මක වන ආකාරය නොවේ CROSS JOIN:

CrossJoinUnion1

එය මේ ආකාරයෙන් නියෝජනය කිරීමට උත්සාහ කිරීම:

CrossJoinUnion2Crossing

..but දැන් එය හුදෙක් වගේ INTERSECTION, එය නිසැකව ම ය කරන නොවේ . තව දුරටත් INTERSECTIONවිශේෂිත කට්ටල දෙකෙන් එකක මූලද්‍රව්‍යයක් නොමැත . කෙසේ වෙතත්, මෙය මෙයට සමාන සෙවිය හැකි ප්‍රති results ල මෙන් පෙනේ:

CrossJoinUnionUnion3

යොමු කිරීම සඳහා CROSS JOINs සඳහා සෙවිය හැකි එක් ප්‍රති result ලයක් Tutorialgateway හි දැකිය හැකිය . මේ වගේම INTERSECTIONහිස්.

අභ්යන්තර සන්ධි

මූලද්‍රව්‍යයක වටිනාකම රඳා පවතින්නේ JOIN තත්වය . සෑම පේළියක්ම එම තත්වයට අනන්‍ය වන කොන්දේසිය යටතේ මෙය නියෝජනය කළ හැකිය. අර්ථය id=xසත්‍ය වන්නේ එක් පේළියකට පමණි. වගුවේ පේළි වරක් A( citizenවගුවේ බහු පේළි තරග) B( postalcodeයටතේ) JOINතත්ත්වය, ප්රතිඵලය ලෙස එම ගැටලු ඇති CROSS JOIN: මෙම පේළිය වාර කිහිපයක් නියෝජනය කළ යුතු අතර, සහ න්යාය ඇත්තටම ඒ සඳහා ප්රතිපාදන නැත. අද්විතීයභාවය යටතේ, රූපසටහන කෙසේ වෙතත් ක්‍රියා කළ හැකි නමුත්, JOINරූප සටහනේ මූලද්‍රව්‍යයක් ස්ථානගත කිරීම තීරණය කරන්නේ තත්වය බව මතක තබා ගන්න . JOINගමන සඳහා පමණක් පේළියේ ඉතිරි කොටස සමඟ තත්වයේ අගයන් දෙස බැලීම :

InnerJoinIntersection - පුරවා ඇත

කොන්දේසියක් INNER JOINසහිත a භාවිතා කරන විට මෙම නිරූපණය සම්පූර්ණයෙන්ම බිඳ වැටේ .ON 1 = 1CROSS JOIN

ස්වයං- JOIN, පේළි ඇත්ත වශයෙන්ම වගු දෙකේම අනන්‍යතා මූලද්‍රව්‍යයන් වන නමුත් වගු දෙකම ලෙස නිරූපණය කරන Aඅතර Bඑය එතරම් සුදුසු නොවේ. උදාහරණයක් ලෙස පොදු ස්වයං-JOIN තුල පවතී කරවන තත්ත්වය Aගැලපෙන කිරීමට විවිධ බී අංගයක් ON A.parent = B.childසිට තරගය කරමින්, Aකිරීමට Bවෙන්වූ කොටස් මත. මේ හා සමාන උදාහරණ වලින් SQL:

SELECT *
  FROM citizen c1
  JOIN citizen c2 ON c1.id = c2.leader

SelfJoinResult

තේරුම ස්මිත් යනු ග්‍රීන් සහ ජෙන්සන් යන දෙදෙනාගේම නායකයාය.

පිටත එක්වන්න

එක් පේළියක අනෙක් වගුවේ පේළි වලට බහුවිධ ගැලපීම් ඇති විට නැවතත් කරදර ආරම්භ වේ. මෙය තවදුරටත් සංකීර්ණ වන්නේ මන්දOUTER JOIN හිස් කට්ටලයට ගැලපෙන පරිදි විය හැකි . එහෙත්, න්‍යාය අනුව ඕනෑම කට්ටලයක Cසහ හිස් කට්ටලයක එකමුතුව සැමවිටම යුක්ති සහගත ය C. හිස් කට්ටලය කිසිවක් එකතු නොකරයි. මෙහි නිරූපණය LEFT OUTER JOINසාමාන්‍යයෙන් ගැලපීමක් තිබේද නැද්ද යන්න නොසලකා Aපේළි Aතෝරාගෙන ඇති බව පෙන්වීමට සියල්ලම පෙන්වයි B. කෙසේ වෙතත් “ගැලපෙන මූලද්‍රව්‍යයන්ට” ඉහත නිදර්ශනයට සමාන ගැටළු ඇත. ඔවුන් තත්වය මත රඳා පවතී. හිස් කට්ටලය පහතට ඇවිද ඇති බව පෙනේ A:

LeftJoinIntersection - පුරවා ඇත

වගන්තිය - අර්ථවත් කිරීම

CROSS JOINස්මිත් හා තැපැල් කේතය සඳ මත ඇති සියලුම පේළි සොයා ගැනීම :

SELECT *
  FROM citizen          c
 CROSS JOIN postalcode  p
 WHERE c.name = 'Smith'
   AND p.area = 'Moon';

කොහේද - ප්‍රති .ලය

දැන් වෙන් රූප සටහන පරාවර්තනය කිරීමට භාවිතා නොවේ JOIN . එය භාවිතා කරන්නේ වගන්තිය සඳහා පමණිWHERE :

කොහෙද

..ඒක තේරුමක් තියෙනවා.

INTERSECT සහ UNION තේරුමක් ඇති විට

අන්තර්

පැහැදිලි කළ පරිදි INNER JOINඇත්ත වශයෙන්ම එය නොවේ INTERSECT. කෙසේ වෙතත් INTERSECTවෙනම විමසුම්වල ප්‍රති results ල මත s භාවිතා කළ හැකිය. මෙහි වෙනන් රූප සටහනක් අර්ථවත් කරයි, මන්ද වෙනම විමසුම් වල මූලද්‍රව්‍ය ඇත්ත වශයෙන්ම පේළි වන අතර ඒවා එක් ප්‍රති results ලයකට හෝ දෙකටම අයත් වේ. ඡේදනය විමසීම් දෙකෙහිම පේළිය ඇති තැන පමණක් ප්‍රති results ල ලබා දෙනු ඇත. මෙහි SQLප්‍රති result WHEREලය වනුයේ ඉහත පේළියට සමාන පේළියක් වන අතර වෙන් රූප සටහන ද සමාන වේ:

SELECT *
  FROM citizen          c
 CROSS JOIN postalcode  p
 WHERE c.name = 'Smith'
INTERSECT
SELECT *
  FROM citizen          c
 CROSS JOIN postalcode  p
 WHERE p.area = 'Moon';

සංගමය

OUTER JOINනො වේ UNION. කෙසේ වෙතත් UNIONඑකම කොන්දේසි යටතේ වැඩ කරන්න INTERSECT, එහි ප්‍රති all ලයක් ලෙස සියලු ප්‍රති results ල දෙකම ඒකාබද්ධ වේSELECT s :

SELECT *
  FROM citizen          c
 CROSS JOIN postalcode  p
 WHERE c.name = 'Smith'
UNION
SELECT *
  FROM citizen          c
 CROSS JOIN postalcode  p
 WHERE p.area = 'Moon';

එය සමාන වේ:

SELECT *
  FROM citizen          c
 CROSS JOIN postalcode  p
 WHERE c.name = 'Smith'
   OR p.area = 'Moon';

.. සහ ප්‍රති result ලය ලබා දෙයි:

සංගමය - ප්‍රති ult ලය

මෙහි දී වෙන් රූප සටහනක් අර්ථවත් කරයි:

සංගමය

එය අදාළ නොවන විට

වැදගත් සටහනක් , තේරීම් ගේ දෙකක් ප්රතිඵල වල ව්යුහය සංසන්දනය හෝ වෘත්තීය සමිති හැකි වන පරිදි එම විට මෙම පමණක් වැඩ බව ය. මේ දෙකේ ප්‍රති results ල මඟින් එය සක්‍රීය නොවේ:

SELECT *
  FROM citizen
 WHERE name = 'Smith'
SELECT *
  FROM postalcode
 WHERE area = 'Moon';

.. ප්‍රති results ල සමඟ ඒකාබද්ධ කිරීමට උත්සාහ කිරීම UNIONa

ORA-01790: expression must have same datatype as corresponding expression

වැඩිදුර උනන්දුව සඳහා JOINs සහ SQL විස්තර කරන විට වෙන් රූපසටහනට කියන්න එපා කියවන්න . දෙකම ආවරණය කරයි EXCEPT.


1

ඉතා නිවැරදි සම්බන්ධතා වීජ ගණිත උදාහරණ සමඟ මෙහි හොඳ පිළිතුරු රාශියක් ඇත . SQL කේතකරණ උභතෝකෝටිකයන් සහිත ආධුනික හෝ නවක කෝඩර සඳහා ප්‍රයෝජනවත් විය හැකි ඉතා සරල පිළිතුරක් මෙන්න.

මූලික වශයෙන්, බොහෝ විට, විමසුම් JOINඅවස්ථා දෙකක් දක්වා අඩු වේ:

සඳහා SELECTදත්ත වල උප කුලකයක් A:

  • ඔබ සොයන INNER JOINඅදාළ දත්ත භාවිතා කළ යුතුයB දත්ත සමුදාය නිර්මාණය අනුව පවතින බවත්;
  • දත්ත සමුදා සැලසුමකට අනුව ඔබ MIGHT හෝ MIGHT NOT සොයන LEFT JOINඅදාළ දත්ත භාවිතා කරන විට භාවිතා කරන්න .B

1

අතර වෙනස inner joinසහ outer joinපහත සඳහන් පරිදි වේ:

  1. Inner joinගැලපෙන ටුපල් මත පදනම් වූ ඒකාබද්ධ වගු outer joinවන අතර, ගැලපෙන හා අසමසම ටුපල් මත පදනම් වූ ඒකාබද්ධ වගුවකි.
  2. Inner joinඅසමසම පේළිය අතහැර දමා ඇති වගු දෙකකින් ගැලපෙන පේළිය outer joinඒකාබද්ධ කරන අතර, වගු දෙකකින් පේළි ඒකාබද්ධ කරන අතර අසමසම පේළි ශුන්‍ය අගයකින් පුරවනු ලැබේ.
  3. Inner joinඑය ඡේදනය වීමේ මෙහෙයුමක් හා outer joinසමාන ය.
  4. Inner joinවර්ග දෙකක් වන අතර outer joinවර්ග තුනක් වේ.
  5. outer joinවඩා වේගවත් inner join.

1
පිටත සම්බන්ධ වීමේ ප්‍රති result ලය අභ්‍යන්තර සම්බන්ධතාවයට සමාන නමුත් අමතර පේළි කිහිපයක් ඇත, එබැවින් පිටත බැඳීම වේගවත් වනු ඇතැයි ඔබ සිතන්නේ මන්දැයි මට අදහසක් නැත. අභ්‍යන්තර සම්බන්ධතාවයේ මෙම "වර්ග දෙක" කුමක්ද? මම හිතන්නේ ඔබ යොමු දක්වන්නේ සම්පූර්ණ, වමට සහ දකුණට පිටතින්ද?
මාටින් ස්මිත්

1
Ac M.achaibou කරුණාකර අනවශ්‍ය හැඩතල වෙනස් කිරීම් සිදුකරන්න එපා. ක්‍රියාකරුවන්ගේ නම් කේතයේ භාවිතා නොකරන්නේ නම් ඒවා කේත නොවේ. කරුණාකර අර්ථය පළ කිරීම සඳහා වෙනස්කම් නොකරන්න, කතුවරයාට අදහස් දැක්වීමක් කරන්න. ඔබට නියෝජිතයා නොමැති නම් ඔබ එසේ කරන තෙක් රැඳී සිටින්න. පෝස්ටරය මෙය අනුමත කළ නමුත් කරුණාකර එවැනි සංස්කරණයන් නොකරන්න. PS පිටත සම්බන්ධ වීම අභ්‍යන්තර සම්බන්ධතාවයට වඩා වේගවත් නොවේ.
ෆිලිප්සි
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.