মধ্যে পার্থক্য কি UNIONএবং UNION ALL?
মধ্যে পার্থক্য কি UNIONএবং UNION ALL?
উত্তর:
UNIONসদৃশ রেকর্ডগুলি সরিয়ে দেয় (যেখানে ফলাফলগুলির সমস্ত কলাম একই হয়), UNION ALLনা।
UNIONপরিবর্তে ব্যবহার করার সময় একটি পারফরম্যান্স হিট হয় UNION ALL, যেহেতু ডুপ্লিকেট সারিগুলি মুছে ফেলার জন্য ডাটাবেস সার্ভারকে অতিরিক্ত কাজ করা আবশ্যক, তবে সাধারণত আপনি নকলগুলি চান না (বিশেষত প্রতিবেদনের বিকাশকালে)।
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
ফলাফল:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
ফলাফল:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
উভয় ইউনিয়ন এবং ইউনিয়ন দুটি পৃথক পৃথক এসকিউএল এর ফলাফলকে একত্রিত করে। তারা নকলগুলি হ্যান্ডেল করার ক্ষেত্রে পৃথক।
ইউনিয়ন ফলাফল নকল করে কোনও নকল সারি বাদ দিয়ে একটি DISTINCT সম্পাদন করে।
ইউনিয়ন সবগুলিই সদৃশগুলি সরিয়ে দেয় না এবং এটি ইউএনআইএন এর চেয়ে দ্রুত।
দ্রষ্টব্য: এই কমান্ডগুলি ব্যবহার করার সময় সমস্ত নির্বাচিত কলামগুলি একই ডেটা ধরণের হওয়া দরকার।
উদাহরণ: আমাদের দুটি টেবিল থাকলে, 1) কর্মচারী এবং 2) গ্রাহক




UNIONসদৃশ অপসারণ, যেখানে UNION ALLনা।
সরানোর জন্য সদৃশ ফলাফল সেট সাজানো করা আবশ্যক, এবং এই ইন পারে ইউনিয়নের কর্মক্ষমতার উপর প্রভাব ফেলতে, ডাটা ভলিউম উপর নির্ভর করে সাজানো হচ্ছে, এবং (ওরাকল জন্য বিভিন্ন RDBMS পরামিতি সেটিংস PGA_AGGREGATE_TARGETসঙ্গে WORKAREA_SIZE_POLICY=AUTOবা SORT_AREA_SIZEএবং SOR_AREA_RETAINED_SIZEযদি WORKAREA_SIZE_POLICY=MANUAL)।
মূলত, বাছাইটি দ্রুত হয় যদি এটি মেমরিতে চালিত করা যায় তবে তথ্যের পরিমাণ সম্পর্কে একই সতর্কতা প্রযোজ্য।
অবশ্যই, যদি আপনার ডুপ্লিকেট ছাড়াই ফিরিয়ে নেওয়া ডেটার প্রয়োজন হয় তবে আপনার ডেটা উত্সের উপর নির্ভর করে আপনাকে অবশ্যই ইউনিয়ন ব্যবহার করতে হবে ।
আমি "অনেক কম পারফরম্যান্ট" মন্তব্যটির যোগ্যতা অর্জনের জন্য প্রথম পোস্টে মন্তব্য করব, তবে এটি করার জন্য পর্যাপ্ত খ্যাতি (পয়েন্ট) নেই have
ORACLE এ: ইউনিয়ন BLOB (বা সিএলওবি) কলামের ধরণগুলিকে সমর্থন করে না, ইউনিয়ন সবই করে।
ইউনিয়ন এবং ইউনিয়ন সবের মধ্যে মূল পার্থক্য ইউনিয়ন অপারেশন ফলাফল সেট থেকে নকল সারিগুলি সরিয়ে দেয় তবে ইউনিয়ন সমস্ত যোগদানের পরে সমস্ত সারি প্রদান করে।
http://zengin.wordpress.com/2007/07/31/union-vs-union-all/ থেকে
আপনি সদৃশগুলি এড়াতে পারেন এবং এখনও এই জাতীয় ক্যোয়ারী চালিয়ে ইউনিয়ন ডায়াস্টিন্ট (যা আসলে ইউনিয়ন হিসাবে একই) এর চেয়ে অনেক বেশি দ্রুত চালাতে পারেন:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
AND a!=Xঅংশটি লক্ষ্য করুন । এটি ইউএনআইএন এর পরে অনেক দ্রুত।
UNION- UNIONসাবকিউরিয়াসমূহ দ্বারা প্রত্যাবর্তিত ডুপ্লিকেটগুলিও সরিয়ে দেয়, যেখানে আপনার দৃষ্টিভঙ্গি গ্রহণ করবে না।
কেবল এখানে আমার আলোচনার জন্য দুটি সেন্ট যুক্ত করতে: একজন UNIONঅপারেটরকে খাঁটি, সেট-ভিত্তিক ইউনিয়ন হিসাবে বুঝতে পারে - যেমন A = {2,4,6,8 set সেট করুন, বি = {1,2,3,4 সেট করুন }, একটি ইউনিয়ন বি = {1,2,3,4,6,8}
সেটগুলির সাথে কাজ করার সময়, আপনি 2 এবং 4 নম্বরটি দু'বার প্রদর্শিত হতে চাইবেন না, কারণ কোনও উপাদানটি সেটে রয়েছে বা নেই ।
এসকিউএল-এর বিশ্বে, আপনি দুটি সেট থেকে সমস্ত উপাদান একসাথে একটি "ব্যাগ" {2,4,6,8,1,2,3,4 see এ দেখতে চাইতে পারেন} এবং এই উদ্দেশ্যে টি-এসকিউএল অপারেটরটি সরবরাহ করে UNION ALL।
UNION ALLটি এসকিউএল দ্বারা "প্রস্তাবিত" নয়। UNION ALLএএনএসআই এসকিউএল স্ট্যান্ডার্ডের একটি অংশ এবং এমএস এসকিউএল সার্ভারের সাথে সুনির্দিষ্ট নয়।
ইউনিয়ন
দ্য UNIONকমান্ড অনেক মত, দুই টেবিল থেকে সম্পর্কিত তথ্য নির্বাচন করতে ব্যবহার করা হয় JOINকমান্ড। তবে, UNIONকমান্ডটি ব্যবহার করার সময় সমস্ত নির্বাচিত কলামগুলি একই ডেটা ধরণের হওয়া দরকার। এর সাথে UNION, শুধুমাত্র স্বতন্ত্র মানগুলি নির্বাচন করা হয়।
ইউনিয়ন
দ্য UNION ALLকমান্ড সমান UNIONযে ব্যতীত কমান্ড UNION ALLনির্বাচন সব মান।
Unionএবং এর মধ্যে পার্থক্যটি Union allহ'ল Union allসদৃশ সারিগুলি মুছে ফেলবে না, পরিবর্তে এটি কেবল আপনার ক্যোয়ারী নির্দিষ্টকরণের সাথে মানিয়ে সমস্ত সারণী থেকে সমস্ত সারি টানবে এবং এগুলি একটি টেবিলের সাথে সংযুক্ত করে।
একটি UNIONবিবৃতি কার্যকরভাবে SELECT DISTINCTফলাফল সেট উপর একটি করে। যদি আপনি জানেন যে সমস্ত রেকর্ড ফিরিয়ে দেওয়া আপনার ইউনিয়ন থেকে স্বতন্ত্র, UNION ALLপরিবর্তে ব্যবহার করুন, এটি দ্রুত ফলাফল দেয়।
কোন ডেটাবেস এটি গুরুত্বপূর্ণ তা নিশ্চিত নয়
UNIONএবং UNION ALLসমস্ত এসকিউএল সার্ভারে কাজ করা উচিত।
আপনার অপ্রয়োজনীয় এড়ানো উচিত UNIONতারা দুর্দান্ত পারফরম্যান্স ফাঁস। থাম্ব ব্যবহারের নিয়ম হিসাবে UNION ALLযদি আপনি নিশ্চিত না হন তবে কোনটি ব্যবহার করবেন।
ইউনিয়ন - স্বতন্ত্র রেকর্ডে ফলাফল
যখন
ইউনিয়ন সব - ডুপ্লিকেট সহ সমস্ত রেকর্ডে ফলাফল।
দু'জনেই অপারেটরগুলি ব্লক করা হচ্ছে এবং তাই আমি ব্যক্তিগতভাবে যেকোনো সময় ব্লকিং অপারেটরগুলির (জোড় ইউনিয়ন, ইন্টারসেকট, ইউনিয়ন সমস্ত ইত্যাদি) ব্যবহার করতে পছন্দ করি।
ইউনিয়ন সমস্ত চেকআউট নিম্নলিখিত উদাহরণের তুলনায় ইউনিয়ন অপারেশন কেন খারাপভাবে সম্পাদন করে তা চিত্রিত করার জন্য।
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/ এর আসল ব্যবহারের ক্ষেত্রে প্রযোজ্য নয় UNION ALL)।
unionএর joinগুলি এবং কিছু সত্যই দুষ্টু সমন্বয়ের সাহায্যে ফলাফল তৈরি করতে পারেন caseতবে এটি ক্যোয়ারীটি পড়া এবং বজায় রাখা অসম্ভবকে অসম্ভব করে তোলে এবং আমার অভিজ্ঞতাতে এটি পারফরম্যান্সের জন্যও ভয়াবহ। তুলনা করুন: 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
ইউনিয়ন দুটি টেবিল থেকে স্বতন্ত্র মান নির্বাচন করতে ব্যবহৃত হয় যেখানে ইউনিয়ন হিসাবে সমস্ত টেবিল থেকে নকল সহ সমস্ত মান নির্বাচন করতে ব্যবহৃত হয়
()দ্বিতীয়বার প্রদর্শিত হবে। আসলে, দ্বিতীয় চিন্তায়, union allফলাফলটি কোনও সেট নয়, আপনার কোনও ভেন ডায়াগ্রাম ব্যবহার করে এটি আঁকার চেষ্টা করা উচিত নয়!
(মাইক্রোসফ্ট এসকিউএল সার্ভার বুক অনলাইন থেকে)
ইউনিয়ন [সমস্ত]
উল্লেখ করে যে একাধিক ফলাফল সেটগুলি একত্রিত করতে হবে এবং একক ফলাফলের সেট হিসাবে ফিরে আসবে।
সব
ফলাফলগুলিতে সমস্ত সারি অন্তর্ভুক্ত করে। এর মধ্যে সদৃশ রয়েছে includes যদি নির্দিষ্ট না করা হয় তবে সদৃশ সারিগুলি সরানো হবে।
UNIONDISTINCTফলাফলগুলিতে সদৃশ সন্ধানের মতো সদৃশ সন্ধান করা সেক্ষেত্রে খুব বেশি সময় নিবে ।
SELECT * FROM Table1
UNION
SELECT * FROM Table2
এর সমতুল্য:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
DISTINCTফলাফলের উপর প্রয়োগের একটি পার্শ্ব প্রতিক্রিয়া ফলাফলগুলিতে বাছাই করা ক্রিয়াকলাপ ।
UNION ALLফলাফলগুলিতে ফলাফলকে নির্বিচারে আদেশ হিসাবে দেখানো হবে তবে UNIONফলাফলগুলিকে ফলাফলের ফলাফল হিসাবে প্রদর্শিত হবে ORDER BY 1, 2, 3, ..., n (n = column number of Tables)। আপনার কোনও সদৃশ সারি না থাকলে আপনি এই পার্শ্ব প্রতিক্রিয়াটি দেখতে পাবেন।
আমি একটি উদাহরণ যোগ করি,
ইউনিয়ন , এটি স্বতন্ত্র -> ধীরের সাথে একীভূত হচ্ছে, কারণ এর তুলনা করা প্রয়োজন (ওরাকল এসকিউএল বিকাশকারীতে, কোয়েরিটি নির্বাচন করুন, ব্যয় বিশ্লেষণ দেখতে F10 টিপুন)।
ইউনিয়ন সমস্ত , এটি স্বতন্ত্র -> দ্রুত ছাড়া মার্জ করা হচ্ছে is
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;
UNION দুটি কাঠামোগতভাবে সামঞ্জস্যপূর্ণ টেবিলের বিষয়বস্তুগুলিকে একক সম্মিলিত সারণীতে মার্জ করে।
UNIONএবং এর মধ্যে পার্থক্যটি UNION ALLহ'ল UNION willসদৃশ রেকর্ডগুলি বাদ দিন যেখানে UNION ALLসদৃশ রেকর্ডগুলি অন্তর্ভুক্ত থাকবে।
Unionফলাফল সেটটিকে আরোহী ক্রমে বাছাই করা হয় যেখানে UNION ALLফলাফল সেটটি সাজানো হয় না
UNIONDISTINCTএর ফলাফল সেটটিতে একটি সম্পাদন করে যাতে এটি কোনও সদৃশ সারি দূর করে দেয়। যেখানে UNION ALLসদৃশগুলি মুছে ফেলা হবে না এবং তাই এটি এর চেয়ে দ্রুত UNION*
দ্রষ্টব্য : এর কার্যকারিতা UNION ALLসাধারণত তুলনায় ভাল হবে UNION, যেহেতু UNIONকোনও নকল অপসারণের অতিরিক্ত কাজ করার জন্য সার্ভারের প্রয়োজন। সুতরাং, যেখানে এটি নিশ্চিত যে কোনও অনুলিপি থাকবে না, বা যেখানে ডুপ্লিকেট থাকা কোনও সমস্যা নয়, সেখানে UNION ALLকার্যকারিতার কারণে ব্যবহারের পরামর্শ দেওয়া হবে।
ORDER BY, বাছাই করা ফলাফলের নিশ্চয়তা দেওয়া হয় না। হতে পারে আপনার মনে কোনও নির্দিষ্ট এসকিউএল বিক্রেতার কথা রয়েছে (তারপরেও আরোহণের ক্রমটি ঠিক কী ...?) তবে এই প্রশ্নের কোনও বিক্রেতার = নির্দিষ্ট ট্যাগ নেই।
ধরুন আপনার কাছে দুটি টেবিল শিক্ষক এবং শিক্ষার্থী রয়েছে
উভয়ের 4 টি কলাম রয়েছে এর মতো আলাদা নামের সাথে
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
আপনি যে দুটি টেবিলের সমান সংখ্যক কলাম রয়েছে তার জন্য আপনি ইউনিয়ন বা ইউনিয়ন সমস্ত প্রয়োগ করতে পারেন। তবে তাদের আলাদা নাম বা ডেটা টাইপ রয়েছে।
আপনি যখন UNION2 টি টেবিলগুলিতে অপারেশন প্রয়োগ করেন , এটি সমস্ত সদৃশ প্রবেশগুলিকে উপেক্ষা করে (একটি সারণীতে সারির সমস্ত কলামের মান অন্য সারণির সমান)। এটার মত
SELECT * FROM Student
UNION
SELECT * FROM Teacher
ফলাফল হবে
আপনি যখন UNION ALL2 টি টেবিলগুলিতে অপারেশন প্রয়োগ করেন , এটি ডুপ্লিকেট সহ সমস্ত এন্ট্রি প্রদান করে (যদি 2 টেবিলের মধ্যে একটি সারির কোনও স্তরের মানের মধ্যে কোনও পার্থক্য থাকে)। এটার মত
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
কর্মক্ষমতা:
স্পষ্টতই ইউনিয়ন সমস্ত কর্মক্ষমতা হ'ল ইউএনএন যেহেতু তারা সদৃশ মানগুলি মুছে ফেলার জন্য অতিরিক্ত কাজ করে। আপনি এর থেকে চেক করতে পারে আনুমানিক সময় এক্সেকিউশন প্রেস দ্বারা Ctrl + L এ এমএস স্কুয়েল
UNIONঅভিপ্রায় জানাতে ব্যবহার করতে চান (অর্থাত্ কোনও নকল নয়) কারণ UNION ALLনিখুঁত পদে কোনও বাস্তব জীবনের পারফরম্যান্স লাভের সম্ভাবনা নেই।
খুব সাধারণ কথায় ইউএনওএন এবং ইউনিয়ন সকলের মধ্যে পার্থক্য হ'ল ইউনিয়ন সদৃশ রেকর্ড বাদ দেবে যেখানে ইউনিয়ন সকলের নকল রেকর্ড অন্তর্ভুক্ত থাকবে।
আমি আরও একটি জিনিস যুক্ত করতে চাই -
ইউনিয়ন : - ফলাফল সেটটি আরোহী ক্রমে বাছাই করা হয়।
ইউনিয়ন সমস্ত : - ফলাফল সেট বাছাই করা হয় না। দুটি ক্যোয়ারী আউটপুট কেবল সংযুক্ত হবে।
UNIONকরবে না । ব্যবহার না করে ফলস্বরূপ যে কোনও আদেশ আপনি দেখতে পাচ্ছেন order byতা খাঁটি কাকতালীয়। ডিবিএমএস হ'ল নকলগুলি সরিয়ে ফেলতে দক্ষ বলে মনে করে এমন কোনও কৌশল ব্যবহার করতে নিখরচায়। এটি বাছাই করা হতে পারে তবে এটি একটি হ্যাশিং অ্যালগরিদম বা সম্পূর্ণ আলাদা কিছু হতে পারে - এবং কৌশলটি সারিগুলির সংখ্যার সাথে পরিবর্তিত হবে। একজন unionযে প্রদর্শিত হয় 100 সারি দিয়ে সাজানো 100.000 সারি দিয়ে নাও হতে পারে
ORDER BYধারা যুক্ত করুন।
ইউনিয়ন বনাম ইউনিয়ন সকলের মধ্যে পার্থক্য q
এসকিউএল ইউনিয়ন কি?
দুই বা ততোধিক ডেটা সেট ফলাফল-সেট একত্রিত করতে ইউএনআইএন অপারেটর ব্যবহার করা হয়।
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
গুরুত্বপূর্ণ! ওরাকল এবং মাইএসকিএলের মধ্যে পার্থক্য: আসুন আমরা বলি যে t1 t2 এর মধ্যে সদৃশ সারি নেই তবে তাদের পৃথক পৃথকভাবে সদৃশ সারি রয়েছে। উদাহরণ: টি 1 এর বিক্রয় 2017 এবং 2018 থেকে টি 2 রয়েছে
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION ALL
SELECT T2.YEAR, T2.PRODUCT FROM T2
ORACLE ইউনিয়নে সমস্ত উভয় সারণী থেকে সমস্ত সারি নিয়ে আসে। মাইএসকিউএলে একই ঘটবে।
যাহোক:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
ইন ওরাকল , ইউনিয়ন উভয় টেবিল থেকে সব সারি নিয়ে আসে কারণ T1 এবং T2 মধ্যে কোন সদৃশ মান। অন্যদিকে মাইএসকিউএলে ফলসেটটিতে কম সারি থাকবে কারণ টেবিল টি 1 এর মধ্যে এবং টেবিল টি 2 এর মধ্যেও সারণি থাকবে!
ইউনিয়ন অন্যদিকে নকল রেকর্ডগুলি সরিয়ে দেয় ইউনিয়ন সবগুলি তা করে না। তবে একটি প্রক্রিয়াজাত হতে চলেছে এবং প্রচুর পরিমাণে ডেটা এবং কলাম এবং ডেটা ধরণের একই হওয়া উচিত check
যেহেতু ইউনিয়ন অভ্যন্তরীণভাবে সারিগুলি নির্বাচন করতে "স্বতন্ত্র" আচরণ ব্যবহার করে তাই সময় এবং কার্য সম্পাদনের ক্ষেত্রে এটি আরও ব্যয়বহুল। মত
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 এরও বেশি সারি দেয়
অগ্রাধিকার দৃষ্টিকোণ উভয় একই প্রাধান্য আছে।
যদি এটি না থাকে তবে ORDER BYএকটি UNION ALLসরে যাওয়ার সাথে সাথে সারিগুলি ফিরিয়ে আনতে পারে, তবে এটি UNIONআপনাকে একবারে পুরো ফলাফল সেট করার আগে ক্যোয়ারির একেবারে শেষ অবধি অপেক্ষা করতে বাধ্য করে। এটি একটি সময়ের বাইরে থাকা পরিস্থিতিতে পার্থক্য আনতে পারে - UNION ALLএটি সংযোগটি যেমন ছিল তেমন রাখে।
সুতরাং আপনার যদি সময়ের বাইরে সমস্যা থাকে এবং কোনও বাছাই হয় না এবং নকলগুলি কোনও সমস্যা না হয় UNION ALLতবে এটি সহায়ক হতে পারে rather
অভ্যাস হিসাবে সর্বদা ইউনিয়ন সমস্ত ব্যবহার করুন । যখন আপনাকে নকলগুলি মুছে ফেলতে হবে যা অত্যন্ত নোংরা হতে পারে এবং আপনি এখানে অন্যান্য মন্তব্যগুলিতে সমস্ত কিছু পড়তে পারেন শুধুমাত্র বিশেষ ক্ষেত্রে কেবল ইউনিয়ন ব্যবহার করুন।
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হবে না।
পার্থক্যটি হ'ল:
"ইউনিয়ন" সদৃশ সারিগুলি সরিয়ে দেয়।
"ইউনিয়ন সমস্ত" সদৃশ সারিগুলি সরায় না।