UNION සහ UNION ALL අතර වෙනස කුමක්ද?


Answers:


1753

UNIONඅනුපිටපත් ඉවත් කරයි (ප්‍රති results ලවල ඇති සියලුම තීරු එක හා සමානයි), UNION ALLඑසේ නොවේ.

දත්ත සමුදා සේවාදායකයා අනුපිටපත් පේළි ඉවත් කිරීම සඳහා අමතර වැඩක් කළ යුතු නමුත් UNIONඒ වෙනුවට භාවිතා කිරීමේදී කාර්ය සාධන පහරක් UNION ALLඇත, නමුත් සාමාන්‍යයෙන් ඔබට අනුපිටපත් අවශ්‍ය නොවේ (විශේෂයෙන් වාර්තා සංවර්ධනය කිරීමේදී).

UNION උදාහරණය:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

ප්‍රති ult ලය:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION සියලු උදාහරණ:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

ප්‍රති ult ලය:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

179
මෙහි ඇඟවුම නම්, සමිතිය ක්‍රියාකාරීත්වය අඩු බැවින් එය අනුපිටපත් සඳහා
මැතිව් වොට්සන්

19
යුනියන් සියල්ලම සැබවින්ම වඩා ක්‍රියාකාරී වනු ඇත, විශේෂයෙන් විශේෂිත වර්ගීකරණයේ lack නතාවය හේතුවෙන්. මගේ සාමාන්‍ය පුරුද්ද නම් මට විශේෂයෙන් අනුපිටපත් අවශ්‍ය නොවන්නේ නම් UNION ALL භාවිතා කිරීමයි.
ඇඩම් කැවිනස්

6
මෙහි හොඳ අදහස් / පිළිතුරු රාශියක් ඇති බව දුටු නිසා මම විකී ධජය සක්‍රිය කර කාර්ය සාධනය පිළිබඳ සටහනක් එක් කළෙමි ...
ජිම් හාර්ට්

253
අන්තර්ජාලය වැනි ජාලය බාධකයක් වන සැබෑ ලෝකයේ අවස්ථා වලදී UNION සියල්ල UNION ට වඩා මන්දගාමී විය හැකිය. බොහෝ අනුපිටපත් පේළි මාරු කිරීමේ පිරිවැය විමසුම් ක්‍රියාත්මක කිරීමේ කාල ප්‍රතිලාභය ඉක්මවා යා හැක. මෙය එක් එක් සිද්ධිය අනුව විශ්ලේෂණය කළ යුතුය.
චාල්ස් බර්න්ස්

25
AdAdamCaviness ඔබේ අදහස් දැක්වීම අර්ථවත් නොවේ.
kojow7

285

UNION සහ UNION යන දෙකම එකිනෙකට වෙනස් SQL දෙකක ප්‍රති result ල සමඟ සංයුක්ත වේ. ඒවා අනුපිටපත් හැසිරවීමේ ක්‍රමයට වෙනස් වේ.

  • ඕනෑම අනුපිටපත් පේළි ඉවත් කරමින් UNION ප්‍රති result ල කට්ටලය මත DISTINCT සිදු කරයි.

  • UNION ALL අනුපිටපත් ඉවත් නොකරන අතර එම නිසා එය UNION ට වඩා වේගවත් වේ.

සටහන: මෙම විධානයන් භාවිතා කරන අතරතුර තෝරාගත් සියලුම තීරු එකම දත්ත වර්ගයට අයත් විය යුතුය.

උදාහරණය: අපට වගු දෙකක් තිබේ නම්, 1) සේවකයා සහ 2) පාරිභෝගිකයා

  1. සේවක වගු දත්ත:

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

  1. පාරිභෝගික වගු දත්ත:

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

  1. UNION උදාහරණය (එය සියලු අනුපිටපත් ඉවත් කරයි):

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

  1. UNION සියලු උදාහරණ (එය වාර්තා සමපාත කරයි, අනුපිටපත් ඉවත් නොකරයි, එබැවින් එය UNION ට වඩා වේගවත් වේ):

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


3
"තෝරාගත් සියලුම තීරු එකම දත්ත වර්ගයකින් යුක්ත විය යුතුය" - ඇත්ත වශයෙන්ම, දේවල් එතරම් තදින් නොවේ (සම්බන්ධතා ආකෘති දෘෂ්ටි කෝණයෙන් හොඳ දෙයක් නොවේ!). SQL ප්‍රමිතිය පවසන්නේ ඒවායේ තීරු විස්තර කරන්නාගේ නම හැරුණු විට සමාන විය යුතු බවයි.
onedaywhen

48

UNIONඅනුපිටපත් ඉවත් කරයි, නමුත් UNION ALLඑසේ නොවේ.

ඉවත් කිරීම සඳහා එහි ප්රතිඵලයක් කට්ටලයක් යථාර්ථය තේරුම් ගත යුතු අතර, මෙම අනුපිටපත් හැක හිඳගෙන, ලබන දත්ත ප්රමාණය අනුව, වෘත්තීය සමිති කාර්ය සාධනය, සහ විවිධ RDBMS පරාමිතීන් (ඔරකල් සඳහා වන සැකසුම් මත බලපෑමක් ඇති PGA_AGGREGATE_TARGETසමඟ WORKAREA_SIZE_POLICY=AUTOහෝ SORT_AREA_SIZEහා SOR_AREA_RETAINED_SIZEනම් WORKAREA_SIZE_POLICY=MANUAL).

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

ඇත්ත වශයෙන්ම, ඔබට අනුපිටපත් නොමැතිව දත්ත ආපසු ලබා දීමට අවශ්‍ය නම්, ඔබේ දත්තවල ප්‍රභවය මත පදනම්ව ඔබ UNION භාවිතා කළ යුතුය .

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


1
"අනුපිටපත් ඉවත් කිරීම සඳහා ප්‍රති set ල කට්ටලය වර්ග කළ යුතුය" - සමහර විට ඔබට විශේෂිත වෙළෙන්දෙකුගේ මතකයේ තිබිය හැකි නමුත් ප්‍රශ්නයෙහි විකුණුම්කරුට විශේෂිත ටැග් නොමැත. තිබුනත්, වර්ග කිරීමකින් තොරව අනුපිටපත් ඉවත් කළ නොහැකි බව ඔබට ඔප්පු කළ හැකිද?
onedaywhen

2
එකිනෙකට වෙනස් ප්‍රති the ල "ව්‍යංගයෙන්" වර්ග කරනු ඇත, මන්ද අනුපිටපත් ඉවත් කිරීම වර්ග කළ කට්ටලයක් මත ඉක්මන් වේ. මෙයින් අදහස් කරන්නේ ආපසු ලබා දුන් ප්‍රති set ල ඇත්ත වශයෙන්ම ඒ ආකාරයට වර්ග කර ඇති බවයි, නමුත් බොහෝ අවස්ථාවන්හිදී වෙනස් (සහ ඒ අනුව, UNION) අභ්‍යන්තරව ප්‍රති .ල සමූහය වර්ග කරයි.
ඩෙවිල්සුචිරෝ


22

UNION සහ UNION ALL අතර ඇති මූලික වෙනස වන්නේ වෘත්තීය සමිති ක්‍රියාකාරිත්වය නම් අනුපිටපත් පේළි ප්‍රති result ල කට්ටලයෙන් ඉවත් කිරීමයි. නමුත් යුනියන් සියල්ලම සම්බන්ධ වූ පසු සියලු පේළි ලබා දෙයි.

http://zengin.wordpress.com/2007/07/31/union-vs-union-all/ වෙතින්


13

ඔබට අනුපිටපත් වළක්වා ගත හැකි අතර තවමත් UNION DISTINCT (ඇත්ත වශයෙන්ම එය UNION හා සමාන වේ) ට වඩා වේගයෙන් ධාවනය කළ හැකිය.

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

මේ tag AND a!=Xකොටසක්. මෙය UNION පසුව වඩා වේගවත් වේ.


4
මෙය පේළි මඟ හරිනු ඇති අතර එමඟින් NULL අගයන් අඩංගු නම් අපේක්ෂිත ප්‍රති result ලය ලබා දීමට අපොහොසත් වේ. ද, එය එම ප්රතිඵලය ලෙස තවමත් නැවත නැත UNION- UNIONඔබගේ ප්රවේශය නැහැ බැවින්ද, මෙම subqueries විසින් ලබා ඇති බව අනුපිටපත් ඉවත් කරයි.
ෆ්‍රෑන්ක් ෂ්මිට්

RanFrankSchmitt - මෙම පිළිතුරට ස්තූතියි; උපසිරැසි පිළිබඳ මේ ටිකක් මට දැන ගැනීමට අවශ්‍ය දේමයි!
ඩොරඩස්

11

මෙහි ඇති සාකච්ඡාවට මගේ ශත දෙක එකතු කිරීම සඳහා: යමෙකුට UNIONක්‍රියාකරු පිරිසිදු, SET- නැඹුරු UNION ලෙස වටහා ගත හැකිය - උදා: A = {2,4,6,8 set, B = {1,2,3,4 සකසන්න. }, A UNION B = {1,2,3,4,6,8}

කට්ටල සමඟ කටයුතු කරන විට, ඔබ, අංක 2 සහ 4 දෙවරක් පෙනී අවශ්ය නොවන අංගයක් හෝ ලෙස බව හෝ නොවේ මාලාවක් දී.

SQL ලෝකයේ, ඔබට කට්ටල දෙකේ සියලුම අංග එක් "බෑගයක" {2,4,6,8,1,2,3,4 see එකට දැකීමට අවශ්‍ය විය හැකිය. මේ සඳහා T-SQL ක්‍රියාකරුට ඉදිරිපත් කරයි UNION ALL.


2
Nitpick: UNION ALLT-SQL විසින් "පිරිනමනු නොලැබේ". UNION ALLඑය ANSI SQL ප්‍රමිතියේ කොටසක් වන අතර MS SQL සේවාදායකයට විශේෂිත නොවේ.
ෆ්‍රෑන්ක් ෂ්මිට්

1
'නිට්පික්' අදහස් දැක්වීමෙන් ඔබට TSQL හි "යුනියන් ඕල්" භාවිතා කළ නොහැකි බව අඟවයි, නමුත් ඔබට හැකිය. ඇත්ත වශයෙන්ම, අදහස් දැක්වීමේදී එය නොකියයි , නමුත් එය කියවන කෙනෙකුට එය අනුමාන කළ හැකිය.
ජෝශප් ඩොගී

11

සංගමය
මෙම UNIONවිධානය බොහෝ දුරට සමාන, වගු දෙකක් සම්බන්ධ තොරතුරු තෝරා ගැනීමට භාවිතා වේ JOINවිධාන. කෙසේ වෙතත්, UNIONවිධානය භාවිතා කරන විට තෝරාගත් සියලුම තීරු එකම දත්ත වර්ගයට අයත් විය යුතුය. සමඟ UNION, තෝරාගෙන ඇත්තේ වෙනස් අගයන් පමණි.

UNION ALL
මෙම UNION ALLවිධානය සමාන වේ UNIONහැර, විධාන UNION ALLසියලු වටිනාකම් තෝරා.

අතර වෙනස Union හා Union allබවයි Union allඅනුපිටපත් පේළි ඉවත් නැහැ, ඒ වෙනුවට එය හුදෙක් ඔබගේ විමසුමට සුවිශේෂත්වයන් සරිලන සියලු මේස සියලු පේළි සිපර් සහ මේසයක් බවට එළඹේ.

UNIONප්‍රකාශයක් මඟින් SELECT DISTINCTසකසන ලද ප්‍රති results ල effectively ලදායී ලෙස සිදු කරයි . ආපසු ලබා දුන් සියලුම වාර්තා ඔබේ සංගමයෙන් අද්විතීය බව ඔබ දන්නේ නම්, UNION ALLඒ වෙනුවට භාවිතා කරන්න, එය වේගවත් ප්‍රති .ල ලබා දෙයි.


8

කුමන දත්ත සමුදායද යන්න වැදගත් යැයි විශ්වාස නැත

UNION සහ UNION ALL සියලු SQL සේවාදායකයන් මත ක්‍රියා කළ යුතුය.

අනවශ්‍ය UNIONඒවායින් ඔබ වැළකී සිටිය යුතුය . මාපට ඇඟිල්ල භාවිතා කිරීමේ රීතියක් ලෙස UNION ALLඔබ භාවිතා කළ යුත්තේ කුමක්දැයි විශ්වාස නැත්නම්.


මෙම ප්‍රශ්නයේ SQL සේවාදායක ටැගයක් නොමැත. මම හිතන්නේ සාමාන්‍යයෙන් හොඳම දේ කළ පමණින් අනුපිටපත් ලබා දෙන විකල්පය වැරදි උපදෙස් වේ.
onedaywhen

1
සියලු දෙනා RDBMS සඳහා සමාන පදයක් ලෙස "SQL සේවාදායකයන්" යන යෙදුම OP භාවිතා කළ බව මම අනුමාන කරමි (උදා: MySQL, PostGreSQL, Oracle, SQL Server). වචන යෙදීම අවාසනාවන්ත වුවත්, (ඇත්ත වශයෙන්ම, මම වැරදියට තේරුම් ගත හැකිය).
ෆ්‍රෑන්ක් ෂ්මිට්

RanFrankSchmitt: ඔබ ලැයිස්තුගත කර ඇති නිෂ්පාදන කිසිවක් සැබවින්ම RDBMS නොවේ :)
onedaywhen

1
විස්තාරණය කිරීමට සැලකිලිමත් වන්නේ කවදාද? අවම වශයෙන් en.wikipedia.org/wiki/Relational_database_management_system මා සමඟ එකඟ වන බවක් පෙනේ - එය මයික්‍රොසොෆ්ට් SQL සේවාදායකය, ඔරකල් දත්ත සමුදාය සහ MySQL ගැන පැහැදිලිවම සඳහන් කරයි. නැතහොත් ඔබ ඔරකල් සහ ඔරකල් දත්ත සමුදාය අතර වෙනස ගැන විකාරරූපීද?
ෆ්‍රෑන්ක් ෂ්මිට්

8

UNION - ප්‍රති results ල එකිනෙකට වෙනස් වාර්තා වන

අතර

UNION ALL - අනුපිටපත් ඇතුළු සියලුම වාර්තා වල ප්‍රති results ල ලබා දේ.

දෙදෙනාම ක්‍රියාකරුවන් අවහිර කරන අතර එබැවින් මම ඕනෑම වේලාවක අවහිර කිරීමේ ක්‍රියාකරුවන්ට (UNION, INTERSECT, UNION ALL ආදිය) JOINS භාවිතා කිරීමට කැමැත්තෙමි.

යුනියන් ඕල් චෙක්පත්වලට සාපේක්ෂව යූනියන් මෙහෙයුම දුර්වල ලෙස ක්‍රියා කරන්නේ ඇයිද යන්න පැහැදිලි කිරීම සඳහා පහත උදාහරණය.

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

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

UNION ALL සහ UNION මෙහෙයුම් වල ප්‍රති results ල පහත දැක්වේ.

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

යූනියන් ප්‍රකාශයක් මඟින් සකසා ඇති ප්‍රති results ල පිළිබඳ තේරීමක් කරයි. ආපසු ලබා දුන් සියලුම වාර්තා ඔබේ සංගමයෙන් අද්විතීය බව ඔබ දන්නේ නම්, ඒ වෙනුවට UNION ALL භාවිතා කරන්න, එය වේගවත් ප්‍රති .ල ලබා දෙයි.

UNION භාවිතා කිරීමෙන් ක්‍රියාත්මක කිරීමේ සැලැස්මේ සුවිශේෂී වර්ගීකරණ මෙහෙයුම් සිදු වේ. මෙම ප්‍රකාශය සනාථ කිරීම සඳහා සාධනය පහත දැක්වේ:

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


3
මෙම පිළිතුරෙහි ඇති සෑම දෙයක්ම දැනටමත් පවසා ඇති අතර, එය ප්‍රයෝජනවත් වීමට තරම් ව්‍යාකූල ය (වෘත්තීය සමිති විවිධ දේ කරන විට ඔවුන් සමඟ එක්වීමට යෝජනා කිරීම, ඔබ එයින් අදහස් කරන්නේ කුමක්ද යන්න හෝ එය අදාළ වන දත්ත සමුදා සේවාදායකයන් පැහැදිලි නොකර හේතුවක් ලෙස "අවහිර කිරීම" ලබා දීම), හෝ අතිශයින් නොමඟ යවන සුළුය (ඔබගේ තිර රුවෙහි ඇති ඔබේ ප්‍රතිශත සැබෑ තථ්‍ය භාවිතයට අදාළ නොවේ UNION/ UNION ALL).

අවහිර කිරීමේ ක්‍රියාකරුවන් TSQL හි ප්‍රසිද්ධ මෙහෙයුම්කරුවන් වේ. ක්‍රියාකරුවන් අවහිර කරන සෑම දෙයක්ම සම්බන්ධ වීමෙන් ලබා ගත හැකි නමුත් අනෙක් අතට නොවේ. සමිතිය සියල්ලම සමිතියට වඩා හොඳින් ක්‍රියා කරන්නේ ඇයිද යන්න සහ ක්‍රියාත්මක කිරීමේ සැලැස්මේ එය හරියටම කොතැනද යන්න පෙන්වීමට පැහැදිලි වර්ග කිරීමේ මෙහෙයුම පින්තූරයේ රවුම් කර ඇත. ප්‍රතිශත සමඟ සෙල්ලම් කිරීමට T1 සහ T2 වගු වලට තවත් දත්ත එක් කිරීමට නිදහස් වන්න!
DBA

ඔබට තාක්ෂණික unionවශයෙන් joins හා සමහර අප්රසන්න සංයෝජන භාවිතා කිරීමෙන් caseප්රති results ල ලබා ගත හැකිය , නමුත් එය විමසුම කියවීමට හා නඩත්තු කිරීමට අසමත් වන අතර මගේ අත්දැකීම් අනුව එය කාර්ය සාධනය සඳහා භයානක ය. සසඳන්න: select foo.bar from foo union select fizz.buzz from fizzඑරෙහිවselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
ඩෙවින් ලැමෝත්

ABDBA ඔබේ පිළිතුර අදාළ වන්නේ MS SQL සේවාදායකයේ පරිශීලකයින්ට පමණි. OP කිසි විටෙකත් ඔවුන් භාවිතා කරන RDBMS ගැන සඳහන් කර නැත - ඔවුන් MySQL, PostgreSQL, Oracle, SQLite, ...
ෆ්‍රෑන්ක් ෂ්මිට්

6

වගු දෙකකින් වෙනස් අගයන් තෝරා ගැනීමට යුනියන් භාවිතා වන අතර වගු වලින් අනුපිටපත් ඇතුළු සියලු අගයන් තෝරා ගැනීමට යුනියන් ලෙස භාවිතා වේ


6

වෙන් රූප සටහනකින් තේරුම් ගැනීම හොඳය.

මෙන්න ප්‍රභවයට සබැඳිය . හොඳ විස්තරයක් තිබේ.

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


5
ඔබගේ දෙවන පින්තූරයෙන් ඇඟවෙන්නේ ඔවුන් නොමැති විට දෙදෙනා අන්‍යෝන්‍ය වශයෙන් වෙන්ව සිටින බවයි. පින්තූරය පළමුවැන්නාට සමාන විය යුතු නමුත් ()දෙවන වරට 'ඡේදනය වන ඉලිප්සාකාරය' පෙන්විය යුතුය. ඇත්ත වශයෙන්ම, දෙවන සිතුවිලි මත, ප්‍රති union allresult ලය කට්ටලයක් නොවන නිසා, ඔබ වෙන් රූප සටහනක් භාවිතයෙන් එය ඇඳීමට කිසිදු උත්සාහයක් නොගත යුතුය!
onedaywhen

5

(මයික්‍රොසොෆ්ට් SQL සේවාදායක පොත් ඔන්ලයින් වෙතින්)

UNION [ALL]

බහු ප්‍රති result ල කට්ටල ඒකාබද්ධ කොට තනි ප්‍රති result ල කට්ටලයක් ලෙස ආපසු ලබා දිය යුතු බව නියම කරයි.

සියළු

ප්‍රති .ල වලට සියලු පේළි ඇතුළත් කරයි. මෙයට අනුපිටපත් ඇතුළත් වේ. නිශ්චිතව දක්වා නොමැති නම්, අනුපිටපත් පේළි ඉවත් කරනු ලැබේ.

UNIONප්‍රති .ල මත අනුපිටපත් පේළි සොයා ගැනීම සඳහා බොහෝ කාලයක් ගතවනු ඇත DISTINCT.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

සමාන වේ:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

ප්‍රති DISTINCTover ල මත අයදුම් කිරීමේ අතුරු ආබාධයක් වන්නේ ප්‍රති .ල මත වර්ග කිරීමේ මෙහෙයුමකි .

UNION ALLප්‍රති results ල අත්තනෝමතික අනුපිළිවෙලක් ලෙස පෙන්වනු ඇති නමුත් UNIONප්‍රති results ORDER BY 1, 2, 3, ..., n (n = column number of Tables)ල මත යොදන පරිදි ප්‍රති results ල පෙන්වනු ලැබේ . ඔබට අනුපිටපත් පේළියක් නොමැති විට ඔබට මෙම අතුරු ආබාධය දැකිය හැකිය.


5

මම උදාහරණයක් එකතු කරමි,

UNION , එය සැසඳිය යුතු නිසා එය වෙනස් -> මන්දගාමී වේ (ඔරකල් SQL සංවර්ධකයා තුළ, විමසුම තෝරන්න, පිරිවැය විශ්ලේෂණය බැලීමට F10 ඔබන්න).

UNION ALL , එය එකිනෙකට වෙනස් -> වේගයෙන් ඒකාබද්ධ වේ.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

සහ

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

2

UNION ව්‍යුහාත්මකව අනුකූල වන වගු දෙකක අන්තර්ගතය තනි ඒකාබද්ධ වගුවකට ඒකාබද්ධ කරයි.

  • වෙනස:

අතර වෙනස UNIONහා UNION ALLබවයි UNION willබැවින්ද පළමුෙවන් අනුපිටපත් වාර්තා UNION ALLඅනුපිටපත් වාර්තා ඇතුලත් වනු ඇත.

Unionප්‍රති set ල කට්ටලය ආරෝහණ අනුපිළිවෙලට වර්ග කර ඇති අතර UNION ALLප්‍රති ult ල කට්ටලය වර්ග කර නොමැත

UNIONDISTINCTඑහි ප්‍රති ult ල කට්ටලය මත ක්‍රියා කරන අතර එමඟින් ඕනෑම අනුපිටපත් පේළි ඉවත් කරනු ඇත. එනමුත් UNION ALLඅනුපිටපත් ඉවත් නොකරන අතර එය වඩා වේගවත් වේ UNION. *

සටහන : ඕනෑම අනුපිටපත් ඉවත් කිරීමේ අමතර වැඩක් කිරීමට සේවාදායකයාට අවශ්‍ය බැවින් කාර්ය සාධනය UNION ALLසාමාන්‍යයෙන් වඩා හොඳ වනු ඇත . එබැවින්, කිසිදු අනුපිටපතක් නොපවතින බවට හෝ අනුපිටපත් තිබීම ගැටළුවක් නොවන අවස්ථාවන්හිදී, කාර්ය සාධන හේතූන් මත භාවිතය නිර්දේශ කරනු ලැබේ.UNIONUNIONUNION ALL


1
"යූනියන් ප්‍රති ORDER BYult ල කට්ටලය ආරෝහණ අනුපිළිවෙලට වර්ග කර ඇත" - නොමැති නම් , වර්ග කළ ප්‍රති results ල සහතික නොවේ. සමහර විට ඔබ සතුව විශේෂිත SQL වෙළෙන්දෙකුගේ මතකයේ තිබේ (එසේ වුවද, නඟින අනුපිළිවෙල හරියටම කුමක්ද ...?) නමුත් මෙම ප්‍රශ්නයට විකුණුම්කරු = විශේෂිත ටැග් නොමැත.
onedaywhen

"ව්‍යුහාත්මකව අනුකූල වන වගු දෙකක අන්තර්ගතය ඒකාබද්ධ කරයි" - මම හිතන්නේ ඔබ මෙම කොටස ඉතා හොඳින් ප්‍රකාශ කර ඇත :)
onedaywhen

2

ඔබට ගුරුවරයා සහ ශිෂ්‍යයා මේස දෙකක් ඇතැයි සිතමු

ඇති දෙකම 4 විවිධ නම සමඟ තීරුව මේ වගේ

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

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

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

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

එකම තීරු ගණනක් ඇති වගු දෙක සඳහා ඔබට UNION හෝ UNION ALL අයදුම් කළ හැකිය. නමුත් ඔවුන්ට වෙනස් නමක් හෝ දත්ත වර්ගයක් ඇත.

ඔබ UNIONවගු 2 ක් මත ක්‍රියා කරන විට , එය සියලු අනුපිටපත් නොසලකා හරියි (වගුවක පේළියේ සියලුම තීරු අගය වෙනත් වගුවකට සමාන වේ). මෙවැනි

SELECT * FROM Student
UNION
SELECT * FROM Teacher

ප්රති result ලය වනු ඇත

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

ඔබ UNION ALLවගු 2 ක් මත ක්‍රියා කරන විට , එය සියලු ඇතුළත් කිරීම් අනුපිටපත් සමඟ ආපසු ලබා දෙයි (වගු 2 ක පේළියක ඕනෑම තීරු අගයක් අතර වෙනසක් තිබේ නම්). මෙවැනි

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

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

කාර්ය සාධනය:

පැහැදිලිවම යුනියන් සියලූම කාර්ය සාධන තිබීම වඩා යහපත් ය යුනියන් ඔවුන් අනුපිටපත් අගයන් ඉවත් කිරීමට අමතර කාර්ය ලෙස. ඔබ බව පරීක්ෂා කළ හැක කියාත්මක කාලය ඇස්තමේන්තු , මාධ්ය විසින් ctrl + L දී MSSQL


ඇත්තටම? පේළි හතරක ප්‍රති result ලයක් සඳහා?! මම හිතන්නේ මෙය ඔබට UNIONඅභිප්‍රාය ප්‍රකාශ කිරීමට භාවිතා කිරීමට අවශ්‍ය වන අවස්ථාවක් (එනම් අනුපිටපත් නැත) මන්ද යත්, UNION ALLසැබෑ ජීවිත කාර්ය සාධනයක් නිරපේක්ෂ ලෙස ලබා දීමට අපහසු බැවිනි .
onedaywhen

2

ඉතා සරල වචන වලින් කිවහොත්, UNION සහ UNION ALL අතර වෙනස වන්නේ UNION විසින් අනුපිටපත් වාර්තා අතහැර දමනු ඇති අතර UNION සියල්ලටම අනුපිටපත් ඇතුළත් වේ.


1

තවත් එක් දෙයක් මම එකතු කිරීමට කැමතියි-

යූනියන් : - ප්‍රති set ල කට්ටලය ආරෝහණ අනුපිළිවෙලට වර්ග කර ඇත.

සියල්ල ඒකාබද්ධ කරන්න : - ප්‍රති set ල කට්ටලය වර්ග කර නොමැත. විමසුම් ප්‍රතිදානය දෙකක් එකතු වේ.


සැබෑ ! UNION විසින් උප ප්‍රති .ල දෙකේ අනුපිළිවෙල වෙනස් කළ හැකිය.
ග්‍රැචස්

6
මේක වැරදියි. ඒ UNIONඇත නොවේ ආකාරයක නියෝගය අවතීර්ණය ප්රතිඵලය. භාවිතයෙන් තොරව ප්‍රති result ලයක් ලෙස ඔබ දකින ඕනෑම ඇණවුමක් order byපිරිසිදු අහඹු සිදුවීමකි. අනුපිටපත් ඉවත් කිරීම කාර්යක්ෂම යැයි සිතන ඕනෑම උපාය මාර්ගයක් භාවිතා කිරීමට ඩී.බී.එම්.එස්. මෙය වර්ග කිරීම විය හැකිය, නමුත් එය හැෂිං ඇල්ගොරිතමයක් හෝ සම්පූර්ණයෙන්ම වෙනස් දෙයක් විය හැකිය - තවද පේළි ගණන සමඟ උපාය වෙනස් වේ. ඒ unionබව පෙනෙන්නට පේළි 100 හිඳගෙන, 100,000 පේළි සමග විය නොහැකි විය
a_horse_with_no_name

2
විමසුමේ නියෝගයක් නොමැතිව, ඕනෑම අනුක්‍රමයකින් පේළි ආපසු ලබා දීමට RDBMS හට නිදහස තිබේ . UNION මෙහෙයුමක ප්‍රති set ලය “නැගීමේ අනුපිළිවෙලට” ආපසු ලබා දෙන බව නිරීක්ෂණය කිරීම දත්ත සමුදාය විසින් සිදු කරන ලද “වර්ග කිරීමේ අද්විතීය” මෙහෙයුමේ අතුරු duct ලයක් පමණි . නිරීක්ෂණය කරන ලද හැසිරීම සහතික නොවේ . එබැවින් ඒ මත විශ්වාසය තබන්න එපා. පිරිවිතරයන් නිශ්චිත අනුපිළිවෙලකට පේළි නැවත ලබා දීමට නම්, සුදුසු ORDER BYවගන්තියක් එක් කරන්න .
spencer7593

1

යූනියන් එදිරිව යූනියන් අතර වෙනස වර්ග අඩි

SQL හි යුනියන් යනු කුමක්ද?

දත්ත කට්ටල දෙකක හෝ වැඩි ගණනක ප්‍රති result ල කට්ටලය ඒකාබද්ධ කිරීමට UNION ක්‍රියාකරු භාවිතා කරයි.

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

යූනියන් එදිරිව යූනියන් සියල්ලම උදාහරණ සහිතව


1

වැදගත්! ඔරකල් සහ මිස්ක්ල් අතර වෙනස: t1 t2 අතර අනුපිටපත් පේළි නොමැති නමුත් ඒවාට තනි අනුපිටපත් ඇති බව කියමු. උදාහරණය: t1 හි විකුණුම් 2017 සිට සහ t2 2018 සිට ඇත

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE UNION හි සියලුම වගු වගු දෙකෙන්ම ලබා ගනී. MySQL හි ද එය සිදුවනු ඇත.

කෙසේවෙතත්:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

දී ඔරැකල්හි , T1 සහ T2 අතර කිසිදු අනුපිටපත් වටිනාකම් නැති නිසා යුනියන් වගු දෙකම සියලු පේළි කොටු ගවුමට. අනෙක් අතට MySQL හි ප්‍රති set ලයට පේළි අඩු වනු ඇත, මන්ද t1 වගුව තුළ සහ t2 වගුව තුළ අනුපිටපත් පේළි ඇති බැවිනි!


0

UNION අනෙක් අතට අනුපිටපත් ඉවත් කරයි UNION ALL එසේ නොකරයි. නමුත් යමෙකු සැකසීමට යන දත්ත විශාල ප්‍රමාණයක් පරික්ෂා කර බැලිය යුතු අතර තීරුව සහ දත්ත වර්ගය සමාන විය යුතුය.

පේළි තෝරා ගැනීම සඳහා වෘත්තීය සමිතිය අභ්‍යන්තරව “වෙනස්” හැසිරීම් භාවිතා කරන බැවින් කාලය හා ක්‍රියාකාරිත්වය අනුව එය වඩා මිල අධික වේ. මෙන්

select project_id from t_project
union
select project_id from t_project_contact  

මෙය මට වාර්තා 2020 ක් ලබා දෙයි

අනෙක් අතට

select project_id from t_project
union all
select project_id from t_project_contact

මට පේළි 17402 කට වඩා ලබා දෙයි

ප්‍රමුඛතා ඉදිරිදර්ශනය මත දෙකම එකම ප්‍රමුඛතාවයක් ඇත.


0

නොමැති නම් ORDER BY , UNION ALLපේළිය නැවත යන විට එය නැවත ගෙන එනු ඇත, නමුත් UNIONසම්පූර්ණ ප්‍රති result ලය එකවරම ලබා දීමට පෙර විමසුමේ අවසානය තෙක් ඔබ බලා සිටිනු ඇත. මෙය කල් ඉකුත් වූ තත්වයක වෙනසක් ඇති කළ හැකිය - aUNION ALL සම්බන්ධතාවය සජීවීව තබා ගනී.

එබැවින් ඔබට කල් ඉකුත් වීමේ ගැටලුවක් තිබේ නම් සහ වර්ග කිරීමක් නොමැති නම් සහ අනුපිටපත් ගැටළුවක් නොවේ නම් UNION ALLඑය ප්‍රයෝජනවත් විය හැකිය.


නමුත් ඔබේ පළමු ප්‍රති results ල කොටස එක් පේළියක් අනුපිටපත් කළ හැකිය: එය කෙතරම් ප්‍රයෝජනවත් ද?
onedaywhen

0

විමසුම් ප්‍රති .ල දෙකක් හෝ වැඩි ගණනක් ඒකාබද්ධ කිරීමට UNION සහ UNION සියල්ලම භාවිතා කරයි.

UNION විධානය මඟින් වගු දෙකකින් පැහැදිලි හා අදාළ තොරතුරු තෝරා ගන්නා අතර එමඟින් අනුපිටපත් පේළි ඉවත් වේ.

අනෙක් අතට, UNION ALL විධානය මඟින් වගු දෙකෙන්ම සියලු අගයන් තෝරා ගන්නා අතර එය සියලු පේළි පෙන්වයි.


0

පුරුද්දක් ලෙස, සෑම විටම UNION ALL භාවිතා කරන්න . අතිශයින්ම අවුල් සහගත විය හැකි අනුපිටපත් ඉවත් කිරීමට අවශ්‍ය වූ විට විශේෂ අවස්ථා වලදී UNION පමණක් භාවිතා කරන්න. අනෙක් අදහස් වලින් ඔබට මෙහි කියවිය හැකිය.


0

UNION ALLතවත් දත්ත වර්ග මත ද ක්‍රියා කරයි. උදාහරණයක් ලෙස අවකාශීය දත්ත වර්ග ඒකාබද්ධ කිරීමට උත්සාහ කරන විට. උදාහරණයක් වශයෙන්:

select a.SHAPE from tableA a
union
select b.SHAPE from tableB b

විසි කරනවා

The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.

කෙසේ වෙතත් union allඑසේ නොවේ.


-1

එකම වෙනස:

"UNION" අනුපිටපත් පේළි ඉවත් කරයි.

"UNION ALL" අනුපිටපත් පේළි ඉවත් නොකරයි.


13
පිළිගත් පිළිතුරට සාපේක්ෂව මෙය කිසියම් අගයක් එකතු කරන්නේ කෙසේද?
නික්

Ick නික් එය කෙටි පිළිතුරකි.
මොස්ටාෆා වටන්පූර්

මෙම දත්ත ලබා ගැනීම සඳහා පිළිගත් පිළිතුරෙන් සැලකිය යුතු කොටසක් කියවීමට සිදුවුවහොත් කෙටි කිරීම වාසියක් විය හැකිය. නමුත් මෙම අවස්ථාවේ දී පිළිගත් පිළිතුරේ මෙම සියලු තොරතුරු අඩංගු වන්නේ පළමු වාක්‍යයේම වන අතර ඉන් පසුව වෙනසෙහි ඇඟවුම් විස්තරාත්මකව සාකච්ඡා කරයි.
dmckee --- හිටපු උපපරිපාලක පූස් පැටවා
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.