এসকিউএল সার্ভার: ক্রস যোগ এবং ফুল আউটার জয়েনের মধ্যে পার্থক্য কী?


194

এসকিউএল সার্ভারে ক্রস যোগ এবং ফুল আউটার জোনের মধ্যে পার্থক্য কী?

তারা কি একই, না? দয়া করে ব্যাখ্যা করুন. কেউ এই উভয় ব্যবহার করবে?

উত্তর:


243

ক্রস জোড় দুটি সারণীর মধ্যে একটি কার্টেসিয়ান পণ্য তৈরি করে, সমস্ত সারিগুলির সমস্ত সম্ভাব্য সংমিশ্রণ ফিরিয়ে দেয়। এর কোনও onধারা নেই কারণ আপনি কেবল সমস্ত কিছুর সাথে যোগ দিচ্ছেন।

একটি full outer joinএকটি তার সংমিশ্রণ left outerএবং right outerযোগদান করুন। এটি উভয় টেবিলের সমস্ত সারি ফিরিয়ে দেয় যা ক্যোয়ারির whereধারাটির সাথে মেলে এবং এমন ক্ষেত্রে যেখানে onশর্তটি এই সারিগুলির জন্য সন্তুষ্ট হতে পারে না এটি nullঅপ্রজনিত ক্ষেত্রগুলির জন্য মান রাখে ।

এই উইকিপিডিয়া নিবন্ধে টেবিলগুলির একটি নমুনা সেট দেওয়া আউটপুট উদাহরণ সহ বিভিন্ন ধরণের যোগদানের ব্যাখ্যা করে।


তাহলে বড় টেবিলের ক্ষেত্রে FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id সবসময় কি দ্রুত হবে FROM t1,t2 WHERE t1.id=t2.id?
আলেক্সকোভেলস্কি

দুটি টেবিলের মধ্যে কয়েকটি ম্যাচ থাকলে @alexkovelsky অভ্যন্তরীণ যোগদানগুলি প্রায়শই ত্বরান্বিত হয়, কারণ সূচির ব্যবহারের অর্থ এটি কোনও সারণির কোনও সারিতে সমস্ত সারি পড়তে বিরক্ত করে না। একটি সম্পূর্ণ বাহ্যিক যোগদানের জন্য সর্বদা উভয় সারণীতে (বা সম্পর্কিত সূচী) সমস্ত সারি পড়তে হবে। যে ক্ষেত্রে সূচিগুলি পর্যাপ্ত নয়, বা প্রয়োজনীয় কলামগুলি আউটপুট দেওয়ার জন্য অন্তর্নিহিত হিপগুলি পড়তে হবে তারপরে একটি সম্পূর্ণ বাহ্যিক জোড়টি প্রায়শই অভ্যন্তরীণ জোড়ার চেয়ে ধীর হয়।
অ্যান্ড্রু হিল

1
কি outer joinদ্রুত বা cross join?
শাফিজাদেহ

2
@ শাফিজাদেহ - তারা বিভিন্ন কাজ করে।
ডনি

9
আমি যদি সত্যের সাথে যোগ দিতে পারি তবে কী হবে? ফলাফল / পারফরম্যান্স কি কোনও ক্রস জোনের সাথে মিলিত হবে?
আর্কিটেক্টনিক

65

একটি জিনিস যা সর্বদা কারও কাছে সুস্পষ্ট নাও হতে পারে তা হ'ল খালি টেবিলের সাথে ক্রস যুক্ত হওয়া (বা ফলাফল সেট) ফলাফল ফাঁকা সারণিতে (এম x এন; সুতরাং এম x 0 = 0)

একটি সম্পূর্ণ বহিরাগত যোগদানের এম এবং এন উভয় 0 না থাকলে সর্বদা সারি থাকে।


32

আমি অন্যান্য উত্তরে একটি গুরুত্বপূর্ণ দিক যুক্ত করতে চাই, যা আমাকে এই বিষয়টি সর্বোত্তম উপায়ে ব্যাখ্যা করেছিল:

যদি 2 টি যুক্ত টেবিলগুলিতে এম এবং এন সারি থাকে তবে ক্রস জোনে সর্বদা (এম x এন) সারি তৈরি হবে তবে সম্পূর্ণ বাহ্যিক জোড় MAX (M, N) থেকে (M + N) সারি তৈরি করবে (প্রকৃতপক্ষে কতগুলি সারি রয়েছে তার উপর নির্ভর করে) "অন" প্রিডিট) ম্যাচ করুন।

সম্পাদনা করুন:

লজিক্যাল ক্যোয়ারী প্রসেসিং দৃষ্টিকোণ থেকে, ক্রস জয়েন সর্বদা এম x এন সারি উত্পাদন করে। ফুল আউটার জয়েনের সাথে যা ঘটে তা হ'ল বাম এবং ডান উভয় টেবিলই "সংরক্ষণ করা" রয়েছে, যেন বাম এবং ডানদিক উভয়ই যুক্ত হয়ে গেছে। সুতরাং সারিগুলি, বাম এবং ডান উভয় সারণী থেকে ফলাফলের তালিকায় যুক্ত করা হয়েছে, প্রিনিকেটটিকে সন্তুষ্ট নয়।


2
সম্ভাব্য 1 টি-বহু ম্যাচ বাদ দিয়ে কি এই সীমাগুলি রয়েছে? একটি সম্পূর্ণ বাহ্যিক যোগদান এখনও (এম এক্স এন) সারি উত্পাদন করতে সক্ষম।
ম্যাক্সওয়েলব

1
ট্র্যাফিক টি থেকে ক্রোসে যোগ দিন প্রাপক যোগ করুন এবং সিলেক্ট করুন COUPBIG (*) নির্বাচন করুন ট্র্যাফিক থেকে সম্পূর্ণ প্রাপককে যোগদান করুন (১ = 1) তারা একই।
urlreader

2
আপনার সেরা উত্তর। মূলত: cross joinটেবিলগুলি এক গুণ করে; full outer joinকতগুলি সারি মেলে তার উপর নির্ভর করে একটি এটিকে সবচেয়ে খারাপ অবস্থায় যুক্ত করে ..
ব্রায়ান পিটারসন

হ্যাঁ .. আমি এই গণিতটির সন্ধান করছিলাম - MAX (M, N) থেকে (M + N) সারিগুলিতে উত্পাদন করুন .. ধন্যবাদ ভোট দিয়েছেন।
অরূপ রক্ষিত

1
এটা ভুল. সারিগুলিতে সম্পূর্ণ যুক্ত হয়ে সারিগুলিতে অন্তর্ভুক্ত থাকে ইউনিয়ন সমস্ত মিল নেই বাম টেবিলের সারিগুলি নাল-প্রসারিত ইউনিয়ন সমস্ত মিল নেই ডান টেবিল সারি নাল-প্রসারিত। সুতরাং সম্পূর্ণ যোগদান করে এম * এন সারিগুলি ফিরিয়ে দিতে পারে - সম্ভবত ম্যাক্স (এম, এন) এবং এম + এন উভয়ের চেয়ে বেশি। তবে যাইহোক এম ও এন এর ফাংশন হিসাবে ফিরে আসা ন্যূনতম এবং সর্বাধিক সংখ্যক সারিগুলি কেবল কার্যকর নয় । যা দরকারী তা হ'ল সম্পূর্ণ যোগদানের একটি পরিষ্কার সংজ্ঞা - অন্তর্ভুক্ত হওয়া সারণী এবং মেলে না এমন সারিগুলির শর্তাবলী।
ফিলিপ্সি

15

ক্রস জয়েন: ক্রস দুটি বা ততোধিক টেবিল থেকে সারিগুলির প্রতিটি সংমিশ্রণ নিয়ে ফলাফল তৈরি করে। এর অর্থ যদি টেবিল এ এর ​​3 টি সারি থাকে এবং টেবিল বিতে 2 টি সারি থাকে তবে একটি ক্রস জোনে 6 টি সারি হবে। দুটি টেবিলের মধ্যে কোনও সম্পর্ক স্থাপন করা হয়নি - আপনি আক্ষরিকভাবে কেবল প্রতিটি সম্ভাব্য সংমিশ্রণটি উত্পাদন করেন।

সম্পূর্ণ বাহ্যিক যোগদান: সম্পূর্ণ আউট জয়েন "বাম" বা "ডান" নয় - এটি উভয়ই! এটিতে JOIN এ অংশ নেওয়া উভয় সারণী বা ফলাফল সেট থেকে সমস্ত সারি অন্তর্ভুক্ত রয়েছে। JOIN এর "বাম" পাশে সারিগুলির জন্য কোনও মিল নেই সারি যখন উপস্থিত থাকে, আপনি "ডানদিকে" ফলাফল সেট থেকে নাল মান দেখতে পাবেন। বিপরীতে, যখন JOIN এর "ডান" পাশের সারিগুলির জন্য কোনও মিল নেই সারিগুলি উপস্থিত থাকে, আপনি "বামে" ফলাফল সেট থেকে নাল মান দেখতে পাবেন।


15

এসকিউএল সার্ভারের CROSS JOIN and FULL OUTER JOINজন্য আলাদা। CROSS JOINফিল্টারের মানদণ্ড বা কোনও শর্ত নির্বিশেষে কেবল দুটি টেবিলের কার্টেসিয়ান পণ্য।

FULL OUTER JOINLEFT OUTER JOIN and RIGHT OUTER JOINদুটি টেবিলের অনন্য ফলাফল সেট দেয় । টেবিলের দুটি কলাম ম্যাপ করার জন্য এটি অন ক্লোজও প্রয়োজন।

সারণি 1 এ 10 টি সারি রয়েছে এবং সারণি 2 এ 20 টি সারি রয়েছে যা নির্দিষ্ট কলামগুলিতে 5 টি সারি মিলেছে।

তারপরে CROSS JOINফলাফল সেটে 10 * 20 = 200 টি সারি ফিরবে।

FULL OUTER JOIN ফলাফল সেট 25 সারি ফিরে আসবে।

FULL OUTER JOIN(বা অন্য কোনও জোইন) সর্বদা কম বা তার সমান ফলাফল নির্ধারণ করে Cartesian Product number

FULL OUTER JOINসমান দ্বারা প্রত্যাবর্তিত সারিগুলির সংখ্যা (দ্বারা সারিগুলির সংখ্যা LEFT OUTER JOIN) + (দ্বারা সারিগুলির সংখ্যা RIGHT OUTER JOIN) - (সারি দ্বারা সারিগুলির সংখ্যা INNER JOIN)।


8

তারা একই ধারণা, ফিরে আসা NULL মান বাদে।

নিচে দেখ:

declare @table1 table( col1 int, col2 int );
insert into @table1 select 1, 11 union all select 2, 22;

declare @table2 table ( col1 int, col2 int );
insert into @table2 select 10, 101 union all select 2, 202;

select
    t1.*,
    t2.*
from @table1 t1
full outer join @table2 t2 on t1.col1 = t2.col1
order by t1.col1, t2.col1;

/* full outer join
col1        col2        col1        col2
----------- ----------- ----------- -----------
NULL        NULL        10          101
1           11          NULL        NULL
2           22          2           202
*/

select
    t1.*,
    t2.*
from @table1 t1
cross join @table2 t2
order by t1.col1, t2.col1;

/* cross join
col1        col2        col1        col2
----------- ----------- ----------- -----------
1           11          2           202
1           11          10          101
2           22          2           202
2           22          10          101
*/

1
দুর্দান্ত উদাহরণ!
লুকাস 925

1
বাস্তব তথ্য উদাহরণের জন্য ধন্যবাদ। এটি আরও পরিষ্কার করে তোলে।
DTC

5

ক্রস যোগ দিন : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm

TLDR; 2 টেবিলের মধ্যে সমস্ত সম্ভাব্য সংমিশ্রণ তৈরি করে (কার্থেসিয়ান পণ্য)

(পূর্ণ) বহিরাগত যোগদান : http://www.w3schools.com/Sql/sql_join_full.asp

TLDR; উভয় সারণীতে প্রতিটি সারি ফেরত দেয় এবং একই মান রয়েছে এমন ফলাফলও রয়েছে (CONDITION এর সাথে মেলে)


2

একটি সম্পূর্ণ বাহ্যিক জোড় একটি বাম বাহ্যিক জোড় এবং ডান বাহ্যিক জোড় একত্রিত করে। ফলাফল সেট উভয় সারণী থেকে শর্তগুলি পূরণ করে যেখানে সারিগুলি সরিয়ে দেয় তবে কোনও মিল নেই সেখানে নাল কলামগুলি দেয়।

ক্রস জয়েন একটি কার্টেসিয়ান পণ্য যা টেবিলগুলিতে যোগদানের জন্য কোনও শর্তের প্রয়োজন হয় না। ফলাফল সেটটিতে সারি এবং কলামগুলি রয়েছে যা উভয় টেবিলের একটি গুণ।


1

এখানে একটি উদাহরণ রয়েছে যেখানে সম্পূর্ণ আউটর জয়েন এবং ক্রস জয়েন দুজনেই নূলে ফিরে না পেয়ে একই ফলাফলের সেটটি প্রদান করে। সম্পূর্ণ আউট জয়েনের জন্য অন ক্লজে 1 = 1 নোট করুন:

declare @table1 table (     col1    int,    col2    int ) 
declare @table2 table (     col1    int,    col2    int )

insert into @table1 select  1, 11   union all select    2, 22   

insert into @table2 select  10, 101 union all select     2, 202

select  *
from    @table1 t1 full outer join @table2 t2
    on  1 = 1
(২ টি সারি প্রভাবিত)

(২ টি সারি প্রভাবিত)
কল 1 কল 2 কল 1 কল 2
----------- ----------- ----------- -----------
1 11 10 101
2 22 10 101
1 11 2 202
2 22 2 202
select  *
from    @table1 t1 cross join @table2 t2
কল 1 কল 2 কল 1 কল 2
----------- ----------- ----------- -----------
1 11 10 101
2 22 10 101
1 11 2 202
2 22 2 202

(4 টি সারি প্রভাবিত)

1

এসকিউএল সম্পূর্ণ আউট জয়েন

  • সম্পূর্ণ আউটার জয়েন ম্যাচ নির্বিশেষে বাম টেবিল (টেবিল 1) এবং ডান টেবিল (টেবিল 2) থেকে সমস্ত সারি প্রদান করে।

  • সম্পূর্ণ আউটর জয়েন কীওয়ার্ডটি বাম আউটর জয়েন এবং রাইট আউটর জয়েন উভয়ের ফলাফলকে একত্রিত করে

  • এসকিউএল পূর্ণ বহিরাগত যোগদান পুরোপুরি যোগ হিসাবে পরিচিত

তথ্যসূত্র: http://datasciencemadesimple.com/sql-full-outer-join/

এসকিউএল ক্রস যোগ দিন

  • এসকিউএল ক্রসে যোগদান করুন প্রথম সারণির প্রতিটি সারি দ্বিতীয় সারণির প্রতিটি এবং প্রতিটি সারি দিয়ে ম্যাপ করা হয়।

  • ক্রস জয়েন অপারেশনের ফলাফল সেট দ্বারা উত্পাদিত সারিগুলির সংখ্যা দ্বিতীয় সারণীতে সারি সংখ্যা দ্বারা গুণিত প্রথম সারণীতে সারি সংখ্যার সমান।

  • ক্রস জোইন কার্টেসিয়ান পণ্য / কার্টেসিয়ান যোগ হিসাবেও পরিচিত

  • টেবিল এ-এর সারিগুলির সংখ্যা এম, টেবিল বি এর সারিগুলির সংখ্যা n এবং ফলস্বরূপ সারণিতে এম * এন সারি থাকবে

তথ্যসূত্র: http://datasciencemadesimple.com/sql-cross-join/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.