sql - ইউনিয়ন ও ইউনিয়ন মধ্যে পার্থক্য কি সব?




union union-all (16)

ইউনিয়ন এবং ইউনিনিয়নের মধ্যে মৌলিক পার্থক্য হল ইউনিয়ন অপারেশন ফলাফল সেট থেকে সদৃশ সারিগুলি সরিয়ে দেয় তবে ইউনিয়ন সমস্ত যোগদান করার পরে সমস্ত সারি ফেরত দেয়।

http://zengin.wordpress.com/2007/07/31/union-vs-union-all/ থেকে

UNIONUNION ALL মধ্যে পার্থক্য কি UNION ALL ?


এটা ডাটাবেস গুরুত্বপূর্ণ যে নিশ্চিত না

UNION এবং UNION ALL সব SQL সার্ভারে কাজ করা উচিত।

আপনি অপ্রয়োজনীয় UNION এড়ানো উচিত তারা বিশাল কর্মক্ষমতা লিক হয়। থাম্ব ব্যবহার করার নিয়ম হিসাবে যদি আপনি নিশ্চিত না হন যে কোনটি ব্যবহার করতে চান।


ORACLE: UNION BLOB (বা CLOB) কলামের ধরনগুলিকে সমর্থন করে না, UNION সমস্ত করে।


UNION অন্য হাতে সদৃশ রেকর্ড মুছে দেয় ইউনিয়ন সব না। তবে একাধিক ডেটা যাচাই করতে হবে যা প্রক্রিয়া করা যাচ্ছে এবং কলাম এবং ডেটা টাইপ একই হতে হবে।

যেহেতু ইউনিয়ন অভ্যন্তরীণভাবে সারি নির্বাচন করার জন্য "স্বতন্ত্র" আচরণ ব্যবহার করে তাই এটি সময় এবং কর্মক্ষমতা পরিপ্রেক্ষিতে আরো ব্যয়বহুল। মত

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 সারি বেশী দেয়

অগ্রাধিকার দৃষ্টিকোণ উভয় একই অগ্রাধিকার আছে।


আমি একটি উদাহরণ যোগ করুন,

UNION , এটি স্বতন্ত্র -> ধীরগতির সাথে মিলিত হচ্ছে, কারণ এটি তুলনা করার প্রয়োজন হয় (ইন ওরাকল এসকিউএল ডেভেলপার ইন, কোয়েরি চয়ন করুন, খরচ বিশ্লেষণ দেখতে F10 টিপুন)।

ইউনিয়ন সব , এটা স্বতন্ত্র ছাড়া মার্জ হয় -> দ্রুত।

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;

আরেকটি জিনিস আমি যোগ করতে চাই

ইউনিয়ন : - ফলাফল সেট ascending ক্রম অনুসারে সাজানো হয়।

ইউনিয়ন সব : - ফলাফল সেট সাজানো হয় না। দুই প্রশ্নের আউটপুট শুধু যোগ করা হয়।


ইউনিয়ন - স্বতন্ত্র রেকর্ড ফলাফল

যখন

ইউনিয়ন সব - সদৃশ সহ সমস্ত রেকর্ড ফলাফল।

উভয় অপারেটরদের অবরুদ্ধ করছে এবং তাই আমি ব্যক্তিগতভাবে ব্লকিং অপারেটরস (ইউনিশন, ইন্টারেক্ট, ইউনিনিয়ান ইত্যাদি) এর উপর যোগদান ব্যবহার করে পছন্দ করি।

কেন ইউনিয়ন অপারেশন ইউনিয়ন তুলনায় দুর্বলভাবে সঞ্চালন করে তা উদাহরণস্বরূপ নিম্নলিখিত সব চেকআউট চেক আউট।

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'

নিম্নলিখিত ইউনিয়ন এবং সমস্ত ইউনিয়ন অপারেশন ফলাফল।

একটি ইউনিয়ন বিবৃতি কার্যকরভাবে ফলাফল সেট উপর একটি নির্বাচন DISTINCT না। আপনি যদি জানেন যে সমস্ত রেকর্ড ফেরত আপনার ইউনিয়ন থেকে অনন্য, পরিবর্তে সমস্ত ইউনিয়ন ব্যবহার করুন, এটি দ্রুত ফলাফল দেয়।

এক্সিকিউশন প্ল্যানের মধ্যে স্বতন্ত্র সাজানোর ক্রিয়াকলাপগুলির মধ্যে ইউনিয়ন ফলাফল ব্যবহার করে। এই বিবৃতি প্রমাণ করার প্রমাণ নীচে দেখানো হয়েছে:


ইউনিয়ন এবং ইউনিয়ন সব দুই বা আরও বেশি প্রশ্নের ফলাফল একত্রিত করা হয়।

UNION কমান্ডটি দুটি টেবিল থেকে স্বতন্ত্র এবং সম্পর্কিত তথ্য নির্বাচন করে যা সদৃশ সারিগুলিকে নির্মূল করবে।

অন্যদিকে, ইউনিনিয়ান সমস্ত কমান্ড উভয় টেবিল থেকে সমস্ত মান নির্বাচন করে যা সমস্ত সারি প্রদর্শন করে।


এখানে আলোচনায় আমার দুটি সেন্ট যোগ করার জন্য: এক বিশুদ্ধ, সেট-ভিত্তিক ইউনিনিয়ান হিসাবে একটি UNION অপারেটর বুঝতে পারে - যেমন A = ​​{2,4,6,8} সেট করুন, B = {1,2,3 সেট করুন, 4}, একটি ইউনিয়ন B = {1,2,3,4,6,8}

সেটগুলির সাথে ডিল করার সময়, আপনি সংখ্যা 2 এবং 4 দুইবার উপস্থিত হতে চাইবেন না, কারণ একটি উপাদানটি একটি সেটের মধ্যে থাকে না

এসকিউএল এর দুনিয়ায়, আপনি দুটি সেটের সমস্ত উপাদান একসাথে "ব্যাগ" {2,4,6,8,1,2,3,4} দেখতে চাইতে পারেন। এবং এই উদ্দেশ্যে টি-এসকিউএল অপারেটর UNION ALL অফার দেয়।


এটি একটি Venn diagramm সঙ্গে বুঝতে ভাল।

এখানে উৎস link । একটি ভাল বিবরণ আছে।


গুরুত্বপূর্ণ! ওরাকল এবং মাইস্কুলের মধ্যে পার্থক্য: ধরুন যে টি 1 টি 2 এর মধ্যে সদৃশ সারি নেই কিন্তু তাদের নিজস্ব সদৃশ সারি আছে। উদাহরণ: টি 1 2017 থেকে এবং টি ২88 থেকে বিক্রয় করেছে

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE UNION এ সমস্ত উভয় সারণী থেকে সমস্ত সারি fetches। একই MySQL ঘটবে।

যাহোক:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

ওআরএইচএলে , ইউএনওএন উভয় সারণির থেকে সমস্ত সারি আনতে পারে কারণ টি 1 এবং টি 2 এর মধ্যে কোন সদৃশ মান নেই। অন্যদিকে মাইএসকিউএলটিতে ফলাফলের কম সারি থাকবে কারণ টেবিলের T1 এর মধ্যে ডুপ্লিকেট সারি এবং টেবিলে T2 এর মধ্যেও থাকবে!


ধরুন আপনি দুটি টেবিল শিক্ষক এবং ছাত্র আছে

উভয় ভিন্ন নাম সহ 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 প্রয়োগ করতে পারেন। কিন্তু তাদের বিভিন্ন নাম বা তথ্য টাইপ আছে।

যখন আপনি ২ টেবিলগুলিতে UNION অপারেশনটি প্রয়োগ করেন, তখন এটি সমস্ত সদৃশ এন্ট্রিগুলিকে অবহেলা করে (একটি টেবিলের সারির সারির মানটি অন্য টেবিলে একই)। এটার মত

SELECT * FROM Student
UNION
SELECT * FROM Teacher

ফলাফল হতে হবে

যখন আপনি 2 টেবিলগুলিতে UNION ALL ক্রিয়াকলাপ প্রয়োগ করেন, তখন এটি সদৃশ (যদি 2 টি সারণিতে কোনও সারির যেকোন কলামের মানের মধ্যে কোন পার্থক্য থাকে) সহ সমস্ত এন্ট্রি ফেরত দেয়। এটার মত

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

আউটপুট

কর্মক্ষমতা:

স্পষ্টতই UNION সমস্ত কর্মক্ষমতা UNION হিসাবে সদৃশ মানগুলি মুছে ফেলার জন্য অতিরিক্ত কাজ করে। আপনি এটি এক্সিকিউশন আনুমানিক সময় থেকে MSSQLctrl + L প্রেস করে দেখতে পারেন


UNION সদৃশ মুছে ফেলা হয়, যখন UNION ALL না।

সদৃশগুলি সরানোর জন্য ফলাফল সেটটি বাছাই করা আবশ্যক, এবং এটি ক্রম অনুসারে ডেটা ভলিউমের উপর নির্ভর করে এবং বিভিন্ন RDBMS পরামিতিগুলির সেটিংসের উপর নির্ভর করে ( WORKAREA_SIZE_POLICY=AUTO সহ Oracle PGA_AGGREGATE_TARGET জন্য অথবা SORT_AREA_SIZE WORKAREA_SIZE_POLICY=MANUAL হলে SORT_AREA_SIZE এবং SOR_AREA_RETAINED_SIZE )।

মূলত, এটি মেমরির মধ্যে সঞ্চালিত হতে পারে, যদি দ্রুততর, কিন্তু তথ্য ভলিউম সম্পর্কে একই গুপ্তচর প্রযোজ্য।

অবশ্যই, যদি আপনার সদৃশ ছাড়াই ফেরত আসা ডেটার প্রয়োজন হয় তবে আপনার ডেটা উৎসের উপর নির্ভর করে আপনাকে UNION ব্যবহার করতে হবে

আমি "অনেক কম পারফরম্যান্স" মন্তব্য যোগ্যতা অর্জনের প্রথম পোস্টে মন্তব্য করেছি, তবে তা করতে অপর্যাপ্ত খ্যাতি (পয়েন্ট) আছে।


UNION সদৃশ রেকর্ডগুলি মুছে ফেলে (যেখানে ফলাফলগুলিতে সমস্ত কলাম একই), UNION ALL নয়।

UNION ALL পরিবর্তে UNION ব্যবহার করার সময় একটি কর্মক্ষমতা আঘাত হ'ল, যেহেতু ডাটাবেস সার্ভারকে সদৃশ সারিগুলি সরানোর জন্য অতিরিক্ত কাজ করতে হবে তবে সাধারণত আপনি ডুপ্লিকেটগুলি (বিশেষ করে যখন ডেভেলপমেন্টগুলি ডেভেলপ করছেন) করতে চান না।

ইউনিয়ন উদাহরণ:

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)

এসকিউএল ইউনিয়ন ইউনিয়ন ইউনিয়ন মধ্যে পার্থক্য

এসকিউএল ইউনিয়ন কি?

ইউনিনিয়ান অপারেটরটি দুই বা ততোধিক ডেটা সেটের ফলাফল-সেটটি একত্রিত করার জন্য ব্যবহার করা হয়।

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

ইউনিয়ন সহ ইউনিয়ন সব উদাহরণ সঙ্গে


মিলন
UNION কমান্ডটি দুটি টেবিল থেকে JOIN কমান্ডের মতো সম্পর্কিত তথ্য নির্বাচন করতে ব্যবহার করা হয়। তবে, UNION কমান্ডটি ব্যবহার করার সময় সমস্ত নির্বাচিত কলাম একই ডাটা টাইপ হতে হবে। UNION সঙ্গে, শুধুমাত্র স্বতন্ত্র মান নির্বাচন করা হয়।

ইউনিয়ন সব
UNION ALL কমান্ড UNION কমান্ডের সমান, ব্যতীত UNION ALL সমস্ত মান নির্বাচন করে।

UnionUnion all মধ্যে পার্থক্য হল যে Union all সদৃশ সারিগুলি মুছে ফেলবে না, পরিবর্তে এটি কেবল আপনার ক্যোয়ারী সুনির্দিষ্ট বিন্যাসগুলি সারণির সমস্ত সারিগুলিকে টেনে আনবে এবং একটি টেবিলের মধ্যে যুক্ত করবে।

একটি UNION বিবৃতি কার্যকরভাবে ফলাফল সেট উপর একটি SELECT DISTINCT না। আপনি যদি জানেন যে সমস্ত রেকর্ড ফেরত আপনার ইউনিয়ন থেকে অনন্য, পরিবর্তে UNION ALL ইউনিয়ন ব্যবহার করুন, এটি দ্রুত ফলাফল দেয়।





union-all