JOIN සහ INNER JOIN අතර වෙනස


1021

මෙම සම්බන්ධතා දෙකම මට එකම ප්‍රති results ල ලබා දෙනු ඇත:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

එදිරිව

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

කාර්ය සාධනයේ ප්‍රකාශ අතර වෙනසක් තිබේද?

විවිධ SQL ක්‍රියාත්මක කිරීම් අතර එය වෙනස්ද ?


2
මෙම ප්‍රශ්නය බලන්න: < stackoverflow.com/questions/448023?sort=newest >
ජොයෙල් කොහූර්න්

6
පැති සටහනක් ලෙස: CROSS JOIN යනු සම්බන්ධ වීමේ වර්ගය දැන ගැනීම හොඳය (එය INNER JOIN ට වඩා වෙනස් වේ).
සර්ජ්

Answers:


1113

ඒවා ක්‍රියාකාරීව සමාන වන නමුත් INNER JOINකියවීමට ටිකක් පැහැදිලි විය හැකිය, විශේෂයෙන් විමසුමට වෙනත් සම්බන්ධක වර්ග (එනම් LEFTහෝ RIGHTහෝ CROSS) ඇතුළත් කර තිබේ නම්.


11
සියලුම දත්ත පදනම් සඳහා මෙය සත්‍යයක්ද (උදා: SQL, postgres?) මෙය පැහැදිලි කරන ලියකියවිලි සඳහා සබැඳියක් කිසිවෙකු දන්නවාද?
චොග්

4
එය ANSI SQL ප්‍රමිතියකි. තවත් බලන්න: දායකත්වය . And.cmu.edu/~shadow/sql/sql1992.txt ; en.wikipedia.org/wiki/SQL-92
ඉන්දියානු

6
Van අයිවන්සින්හෝ: යතුරුපුවරු පහර යනු විමසුම් හෝ වැඩසටහන් සංකීර්ණතාවයේ මිනුම නොවේ. සැබෑ ජීවිත සංකීර්ණතාව පැමිණෙන්නේ නඩත්තු කිරීමේ හැකියාවෙනි, එහිදී කියවීමේ හැකියාව ප්‍රධාන කාර්යභාරයක් ඉටු කරයි. එය INNER JOIN යැයි කියන විට, එය කරන්නේ කුමක්ද යන්න පිළිබඳව ඔබට සහතික විය හැකි අතර එය එසේ විය යුතු යැයි සිතිය හැකි අතර, සරල JOIN එකක් ඔබව හෝ වෙනත් අයෙකු අතහැර යනු ඇත, ක්‍රියාත්මක කිරීම පිළිබඳව ප්‍රමිතිය පැවසුවේ කුමක්ද සහ INNER / පිටත / වම්පස අහම්බෙන් හෝ අරමුණකින් අතහැර දමා ඇත.
Tuukka Haapaniemi

246

නැත, කිසිදු වෙනසක් නැත, පිරිසිදු සින්ටැක්ටික් සීනි .


23
මම මේ සින්ටැක්ටික් සීනි යැයි නොකියමි. "පෙරනිමි" සම්බන්ධ වීමේ වර්ගය, "කෙටිමං" හෝ "අන්වර්ථය" සමහර විට.
mk12

63
පරිගණක විද්‍යාවේදී, සින්ටැක්ටික් සීනි යනු ක්‍රමලේඛන භාෂාවක් තුළ ඇති සින්ටැක්ස් වන අතර එය කියවීමට හෝ ප්‍රකාශ කිරීමට පහසු වන පරිදි නිර්මාණය කර ඇත . මග හැරීමේ හැකියාව INNERමෙම අර්ථ දැක්වීම යටතේ ඇති බව මම විශ්වාස කරමි .
ක්වාස්නෝයි

14
ඔබ අර්ථ දැක්වීම වචනානුසාරයෙන් අදාළ කරන්නේ නම්, ඔව්, නමුත් මම නිතරම දැක ඇත්තේ එය දේවල් සඳහා විකල්ප නම් පමණක් නොව වඩාත් රසවත් සින්ටැක්ස් සඳහා වෙන් කර ඇති බවයි.
mk12

10
මේ ප්රශ්නය විමසුවොත් බව @Quassnoi හුදු ඇත්ත, ඇති absense සංදර්ශන INNERකරන්නේ නෑ කියවීමට විමසුම පහසු. මා දන්නා සියල්ලටම, මෙහි ඇති පිළිතුරු මගින් එය ඉවත් නොකළේ නම් JOINහොඳින් අදහස් කළ හැකිය LEFT JOIN.
මාර්ටෙනිස්

2
@ ක්වාස්නෝයි ඔබේ අදහස් දැක්වීමේ හඳුන්වාදීමේ විකී ප්‍රකාශය සින්ටැක්ටික් සීනි සම්බන්ධයෙන් සත්‍ය වේ, නමුත් එය අර්ථ දැක්වීමක් ලෙස ප්‍රමාණවත් නොවේ. සින්ටැක්ටික් සීනි යනු සංකීර්ණ සින්ටැක්ස් විශේෂ අවස්ථා සඳහා සරල වාක්‍ය ඛණ්ඩයකි. INNER යනු “ශබ්ද වචනයක්” යැයි පැවසීම වඩාත් යෝග්‍ය වේ.
ෆිලිප්සි

147

INNER JOIN = එක්වන්න

ඔබ JOIN යන වචනය භාවිතා කරන විට වර්ගය නියම නොකරන්නේ නම් INNER JOIN පෙරනිමිය වේ.

ඔබට LEFT OUTER JOIN හෝ RIGHT OUTER JOIN භාවිතා කළ හැකිය, එවැනි අවස්ථාවකදී OUTER යන වචනය අත්‍යවශ්‍ය නොවේ, නැතහොත් ඔබට CROSS JOIN නියම කළ හැකිය.

හෝ

අභ්‍යන්තර සම්බන්ධතාවයක් සඳහා, වාක්‍ය ඛණ්ඩය:

තෝරන්න ...
TableA වෙතින්
[INNER] TableB සමඟ සම්බන්ධ වන්න

(වෙනත් වචන වලින් කිවහොත්, "INNER" යතුර අත්‍යවශ්‍ය නොවේ - ප්‍රති results ල එය සමඟ හෝ නැතිව සමාන වේ)



54

ඒ හා සමානව OUTER JOINs, වචනය "OUTER"අත්‍යවශ්‍ය නොවේ. එය තියෙන්නේ LEFTහෝ RIGHTපැහැදිලි කරයි බව ඉඟි පද JOIN"OUTER" JOIN.

කෙසේ වෙතත් කිසියම් හේතුවක් නිසා මම සැමවිටම භාවිතා "OUTER"කරන්නේ LEFT OUTER JOINහා කිසි විටෙකත් නොවේ LEFT JOIN, නමුත් මම කිසි විටෙකත් භාවිතා නොකරමි INNER JOIN, නමුත් මම භාවිතා කරන්නේ "JOIN":

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID

23
මම ඔබට ප්‍රතිවිරුද්ධ දෙයයි: මම නිතරම කියන්නේ “ඉනර් එක්වන්න” නමුත් මම කිසි විටෙකත් පිටත භාවිතා නොකරමි; එබැවින් "LEFT JOIN" සහ "RIGHT JOIN". අනුමාන කරන්න මම මගේ චරිතය නිරන්තරයෙන් තබා ගන්නවා!
ස්ටීවන් හෝල්ට්

10
@ ජොනතන්. අභ්‍යන්තර සම්බන්ධතාවයක දිශාව පිළිබඳ සංකල්පයක් නොමැත. පිටත සම්බන්ධ වීමෙන් අසමසම ප්‍රති results ල කට්ටල ලබා ගත හැකි අතර ඒවා දිශාව අනුව වෙනස් විය හැකිය. අභ්‍යන්තරයට ගැලපීම අවශ්‍ය වන බැවින් දිශාව වැදගත් නොවේ.
කාල් කීනින්ගර්

32

අනෙක් පිළිතුරු දැනටමත් සඳහන් කර ඇති පරිදි ඔබේ උදාහරණයේ වෙනසක් නැත.

අදාළ ව්‍යාකරණ ටිකක් මෙහි ලේඛනගත කර ඇත

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

සියල්ල විකල්ප බව පෙන්වයි. පිටුව තවදුරටත් එය පැහැදිලි කරයි

INNERගැලපෙන සියලුම පේළි යුගල ආපසු ලබා දෙන බව නියම කරයි. වගු දෙකෙන්ම අසමසම පේළි ඉවතලයි. සම්බන්ධ වීමේ වර්ගයක් නියම කර නොමැති විට, මෙය පෙරනිමිය වේ.

ව්යාකරණ ද එහිදී එක් කාල ඇති බව පෙන්නුම් කරන්නේ කොහොමද INNER ඇත නමුත් අවශ්ය විය. සම්බන්ධ වීමේ ඉඟියක් සඳහන් කිරීමේදී.

පහත උදාහරණය බලන්න

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

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

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.