ক্রস যোগদান করুন এসকিউএল মধ্যে বনাম অন্তর্ভুক্ত যোগদান


150

মধ্যে পার্থক্য কি CROSS JOINএবং INNER JOIN?

যোগ দিন:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status], 
FROM   
    Customers 
CROSS JOIN 
    Movies

ভেতরের যোগ দিতে:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status]
FROM   
    Customers 
INNER JOIN 
    Movies ON Customers.CustomerID = Movies.CustomerID

কোনটি ভাল এবং আমি কেন একটি ব্যবহার করব?


15
CROSS JOINটেবিলগুলির সমস্ত সম্ভাব্য সংমিশ্রণের ফলাফল হবে। উদাহরণস্বরূপ, 100 টি সারি সহ টেবিল 1 এবং 100 সারি সহ টেবিল 2 এর ফলে 10000 রেকর্ড হবে।
বুড়ি

x CROSS JOIN yহলx INNER JOIN y ON 1=1
ফিলিপ্সি

উত্তর:


119

ক্রস জোনে সারিগুলি একত্রিত করা হয় না, যদি আপনার প্রতিটি টেবিলে 1 টি 1 টি মিলের সাথে 100 টি সারি থাকে তবে আপনি 10.000 ফলাফল পাবেন, ইনারজয়াইন কেবল একই পরিস্থিতিতে 100 টি সারি দেবে।

এই 2 টি উদাহরণ একই ফলাফল প্রদান করবে:

ক্রস জয়েন

select * from table1 cross join table2 where table1.id = table2.fk_id

ভেতরের যোগ দিতে

select * from table1 join table2 on table1.id = table2.fk_id

শেষ পদ্ধতিটি ব্যবহার করুন


7
এবং আমি বিশ্বাস করি আপনি লিখতে পারেন select * from table1 cross join table2 where table1.id = table2.fk_idযেমন select * from table1, table2 where table1.id = table2.fk_id(প্রতিস্থাপন cross joinসঙ্গে একটি ,)
modulitos

5
@ লুকাস যোগদানের জন্য পুরানো বাক্য গঠন যা তবে এটি কার্যকর হবে। আমি ক্লাউজেনের সংস্করণটি আরও বেশি পাঠযোগ্য বলে প্রস্তাব দিই।
ইলিকেোকোড

1
1 থেকে 1 ম্যাচ বলতে কী বোঝ? "একই পরিস্থিতি" বলতে আপনার অর্থ কী
Jwan622

1
@ মিলিটোকোড "যোগ দেওয়ার জন্য পুরানো বাক্য গঠন" পরিষ্কার নয়, আপনি এসকিউএল-89 এবং এসকিউএল -92 মান সম্পর্কে আরও ভাল কথা বলতে চান
ইভানজিনহো 25:18

আপনার অভ্যন্তরীণ যোগদান "100" একটি বিশেষ কেস যা আপনি ব্যাখ্যা করেন নি এবং আপনি সাধারণ ক্ষেত্রে ব্যাখ্যা করেন নি।
ফিলিপ্সি

186

ক্রস জয়েন এবং অভ্যন্তরীণ যোগদানের সর্বোত্তম উদাহরণ এখানে।

নিম্নলিখিত সারণী বিবেচনা করুন

সারণী: Teacher

x------------------------x
| TchrId   | TeacherName | 
x----------|-------------x
|    T1    |    Mary     |
|    T2    |    Jim      |
x------------------------x

সারণী: Student

x--------------------------------------x
|  StudId  |    TchrId   | StudentName | 
x----------|-------------|-------------x            
|    S1    |     T1      |    Vineeth  |
|    S2    |     T1      |    Unni     |
x--------------------------------------x

1. অভ্যন্তরীণ যোগদান

অভ্যন্তরীণ যোগদানটি সারণি উভয়কে সন্তুষ্ট করে এমন সারিগুলি নির্বাচন করে

আমাদের এমন শ্রেণীর শিক্ষক এবং তাদের সংশ্লিষ্ট ছাত্রদের খুঁজে বের করার প্রয়োজন বিবেচনা করুন। সেই অবস্থায় আমাদের আবেদন করতে হবে JOINবা INNER JOINহবে

এখানে চিত্র বর্ণনা লিখুন

প্রশ্ন

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId

ফলাফল

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

2. ক্রস যোগ দিন

ক্রস জয়েন প্রথম টেবিলের সমস্ত সারি এবং দ্বিতীয় টেবিলের সমস্ত সারি নির্বাচন করে এবং কার্টেসিয়ান পণ্য হিসাবে দেখায় অর্থাত্, সমস্ত সম্ভাবনার সাথে

বিবেচনা করুন আমাদের বিদ্যালয়ের সমস্ত শিক্ষক এবং শিক্ষার্থী শ্রেণি শিক্ষক নির্বিশেষে খুঁজে পেতে হবে, আমাদের আবেদন করা দরকার CROSS JOIN

এখানে চিত্র বর্ণনা লিখুন

প্রশ্ন

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 

ফলাফল

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T2    |     Jim     |    Vineeth  |
|    T2    |     Jim     |    Unni     |
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

1
চিত্র 2 এর কী জটিল: এটি ক্রস জোনের একটি যুক্তির উপাদানগুলিকে ঘিরে রেখেছে (রঙ অপ্রাসঙ্গিক) এবং একটি সংখ্যা (মান অপ্রাসঙ্গিক) এর সারি এবং একটি লাইন (বর্ণ অপ্রাসঙ্গিক) ফলাফল সারি row ব্যাগ যেমন টেবিলের জন্য এটা না একটি ভেন ডায়াগ্রাম: মান হিসাবে সারি জন্য, এটা ভুল ; সারিগুলির জন্য উপাদান হিসাবে তাদের ভাগ করা যায় না । টেবিলগুলির জন্য সেট হিসাবে আপনার ভেন চিত্রের দরকার নেই । চিত্র 1 JOIN কে ব্যাখ্যা করার জন্য একটি সাধারণ ভয়ানক প্রচেষ্টা। এর কীটিও জটিল: এটি কেবল সেট হিসাবে টেবিলের জন্য এবং কেবলমাত্র সমতুল্য & শুধুমাত্র একটি মান; এটি আউটপুট থেকে আলাদাভাবে ইনপুট উপস্থাপন করে। এটি সাধারণভাবে JOIN এর জন্য লিখুন ।
ফিলিপ্সি

চিত্র 1 দরকারী এবং জন্য বৃত্ত ভেন চিত্র ছেদ 4 রং প্রথম যেমন ঠিক কিনা: (দ্য ইনার) JOIN বনাম বাম, ডান & পূর্ণ (বাইরের) JOIN কিন্তু না বনাম ক্রস যোগ দিন। ছেদ সারিগুলি জোইনে রয়েছে, বাম / ডান সারিগুলি বাম / ডানদিকে যোগ দিয়ে অতিরিক্ত (নাল-প্রসারিত) সারি রয়েছে। এটা তোলে অন্তর্ভুক্ত ক্রস (দ্য ইনার) একটি বিশেষ ক্ষেত্রে হিসাবে যোগদান JOIN যেখানে অ ছেদ কোন সারি আছে।
ফিলিপ্সি

1
আপনার পরামর্শের জন্য ধন্যবাদ. যাইহোক, ওপি এই দুটি যোগদানের মধ্যে পার্থক্য জানতে চেয়েছে। আমি এই প্রশ্নের উত্তর এমনভাবে দিয়েছি যে কোনও শিক্ষানবিস সহজেই তাদের মধ্যে পার্থক্য বুঝতে পারে। যেমনটি আপনি বলেছেন, আমি কোনও উত্পাদন পরিবেশের মতো কীগুলি দিইনি। সহজেই বোঝার এটি একটি উদাহরণ। এবং এর জন্য Cross Join, আপনি কি মনে করেন যে কোনও Whereধারা দেওয়া না হলে এটি সমস্ত সারি ফিরিয়ে দেয় না ? আপনার মন্তব্যগুলি থেকে, কোনও শিক্ষানবিশকে বিভ্রান্ত করার আরও সম্ভাবনা রয়েছে !!! @ ফিলিপ্সি
সারথ আভানাভ

1
আমার মন্তব্যগুলি ইঙ্গিত করে যে ডায়াগ্রামগুলি ব্যাখ্যা করা খুব শক্ত এমনকি যদি কেউ জানেন যে তারা কী বলতে চাইছেন এবং এই বিষয়ের জন্য অনুপযুক্ত। "কী" দ্বারা (চিত্র 2 বা 1 এর) আমি "ডায়াগ্রামের অংশগুলি কী বোঝায় তা ব্যাখ্যা"। "এটি লিখুন" দ্বারা আমি বোঝাতে চাইছি ডায়াগ্রামের অংশগুলি কী বোঝায় তা খুব স্পষ্ট করে লেখার চেষ্টা করুন। আপনি দেখতে পাবেন যে ডায়াগ্রামগুলি জটিল এবং অভ্যন্তরীণ বনাম বনাম ক্রস জয়েনটি প্রদর্শিত হবে না! অর্থাৎ তারা আপনার উত্তরের অন্তর্ভুক্ত নয়। যোগদানকারীরা কী করে তা ব্যাখ্যা করার জন্য PS সারণী সম্পর্কিত সম্পর্কিত কীগুলির কোনও ভূমিকা নেই। পিপিএস যোগদানের মধ্যে পার্থক্যটি কেবলমাত্র অন্তর্ভুক্ত থাকে একটি যোগ থাকে।
ফিলিপ্সি

W3Schools অল্পক্ষণের w3schools.com/sql/sql_join_inner.asp যেখানে তারা ভেতরের যোগ দিতে জন্য ডায়াগ্রাম এর অনুরূপ টাইপ দিয়েছেন। ফিলিপ্সিটি মন্তব্য করার আগে আপনি ঠিক আছেন তা নিশ্চিত করুন
সারথ আভানাভ

69

ক্রস জয়েন = (অন্তর্) জয়েন = কমা (",")

টিএল; ডিআর এসকিউএল ক্রস যোগ, (ইনার) যোগ এবং কমা (",") এর মধ্যে একমাত্র পার্থক্য (মূল্যায়নের আদেশের চেয়ে কম অগ্রাধিকার প্রাপ্ত কমা) এটি হ'ল (INNER) JOIN রয়েছে যখন ক্রস যোগ এবং কমা হয় না।


মধ্যবর্তী পণ্য পুনরায়

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

এসকিউএল স্ট্যান্ডার্ড সংজ্ঞায়িত <কমা> পণ্য (7.5 1.b.ii), <ক্রস যোগদানের> <কমা> (7.7 1. একটি) মাধ্যমে এবং যোগদান করুন <সার্চ শর্ত> মাধ্যমে <কমা> প্লাস যেখানে (7.7 1.b মাধ্যমে )।

উইকিপিডিয়ায় যেমন লেখা আছে:

ক্রস জয়েন

ক্রস যোগ যোগদানের টেবিলগুলি থেকে সারিগুলির কার্তেসিয়ান পণ্য ফেরত দেয়। অন্য কথায়, এটি সারণী তৈরি করবে যা প্রথম সারণী থেকে প্রতিটি সারি দ্বিতীয় সারণির প্রতিটি সারি সংযুক্ত করে।

ভেতরের যোগ দিতে

[...] যোগদানের ফলাফলকে প্রথম টেবিলে সমস্ত রেকর্ডের কার্টেসিয়ান পণ্য (বা ক্রস জয়েন) গ্রহণের ফলাফল হিসাবে সংজ্ঞায়িত করা যেতে পারে (টেবিল বিতে প্রতিটি রেকর্ডের সাথে টেবিল এ-র প্রতিটি রেকর্ড একত্রিত করে) এবং তারপরে ফিরে আসার ফলাফল হিসাবে সমস্ত রেকর্ড যা যোগদানের পূর্বাভাসকে সন্তুষ্ট করে।

"অন্তর্নিহিত যোগদানের স্বরলিপি" কেবলমাত্র সलेक्ट স্টেটমেন্টের এফআরএম ক্লজে যোগদানের জন্য সারণীগুলি তালিকাভুক্ত করে তাদের আলাদা করার জন্য কমা ব্যবহার করে। এইভাবে এটি একটি ক্রস জয়েন নির্দিষ্ট করে

পুনরায় বাহ্য এ যোগদান করেছে এবং বনাম যেখানে তাদের মধ্যে দেখতে অন ব্যবহার বাঁদিকের শর্তাবলী যোগদান (বাইরের JOIN) বনাম ভেতরের যোগ দিতে

টেবিলের মধ্যে কলামগুলি কেন তুলনা করবেন?

যখন কোনও সদৃশ সারি নেই:

প্রতিটি টেবিল সারিগুলিকে ধারণ করে যা একটি নির্দিষ্ট ফিল-ইন-[নাম দেওয়া] খালি বিবৃতি টেম্পলেট থেকে সত্য বিবৃতি দেয়। (এটি থেকে সত্য প্রস্তাব দেওয়া হয়েছে - সন্তুষ্ট - একটি নির্দিষ্ট (বৈশিষ্ট্যযুক্ত) ভবিষ্যদ্বাণী ।)

  • একটি বেস টেবিলটি সারিগুলিকে ধারণ করে যা কিছু ডিবিএ-প্রদত্ত বিবৃতি টেম্পলেট থেকে সত্য বিবৃতি দেয়:

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • একটি যোগদানের অন্তর্বর্তী পণ্য হ'ল সারিগুলিকে ধরে রাখে যা এর অপারেশনগুলির টেম্পলেটগুলির এবং এর থেকে সত্য বিবৃতি দেয়:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    */
    FROM Customers C CROSS JOIN Movies M
  • আরও টেমপ্লেট দেওয়ার জন্য শর্তাবলী স্থিতিশীল। মানটি আবার সেই সারিগুলি যা সেই টেম্পলেটটি পূরণ করে:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    AND C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    AND C.Age = 18
    */
    FROM Customers C INNER JOIN Movies M
    ON C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    WHERE C.Age = 18

বিশেষত, টেবিলের মধ্যে (এসকিউএল) সমতার জন্য কলামগুলির তুলনা করার অর্থ এই যে কলামগুলির জন্য টেম্পেলের অংশযুক্ত অংশযুক্ত অংশ থেকে পণ্য থেকে রাখা সারিগুলির সমান (নন-নুল) মান রয়েছে। এটি কেবল কাকতালীয় যে টেবিলগুলির মধ্যে সমতা তুলনা করে প্রচুর সারি সাধারণত সরানো হয় - আপনার সারিগুলি চিহ্নিত করার জন্য যা প্রয়োজনীয় এবং পর্যাপ্ত তা প্রয়োজনীয়।

আপনার সারিগুলির সারণির জন্য কেবলমাত্র এসকিউএল লিখুন!

ক্যোয়ারির অর্থ (এবং সারণী বনাম শর্তাবলী) দেখুন:
দুটি পৃথক কলামের জন্য অন্য এসকিউএল টেবিলের সাথে ম্যাচের ডেটা কীভাবে পাবেন: অভ্যন্তরীণ যোগদান এবং / অথবা ইউনিয়ন?
কোনও মানব-পঠনযোগ্য বর্ণনা থেকে এসকিউএল কোয়েরি তৈরির জন্য কি থাম্বের কোনও নিয়ম রয়েছে?

ওভারলোডিং "ক্রস জয়েন"

দুর্ভাগ্যক্রমে "ক্রস জয়েন" শব্দটি এর জন্য ব্যবহৃত হয়:

  • মধ্যবর্তী পণ্য।
  • যোগ দিন।
  • (অন্তর্নিহিত) এমন কোনও ও যেখানে বা অন্য কোনও কলামের সাথে একটি টেবিল থেকে যে কোনও কলামের তুলনা করে না with (যেহেতু এটি মধ্যবর্তী পণ্য সারিগুলির মধ্যে অনেকগুলি ফিরিয়ে দেয়))

এই বিভিন্ন অর্থ বিভ্রান্ত হয়। (যেমন অন্যান্য উত্তর এবং মতামত এখানে।)

ক্রস যোগ বনাম (INNER) বনাম কমা ব্যবহার করুন

সাধারণ সম্মেলনটি হ'ল:

  • আপনি যখন টেবিলের মধ্যে কলামগুলি তুলনা না করেন কেবল তখনই ক্রস যোগ যোগ করুন। এটি দেখানোর জন্য যে তুলনার অভাব ছিল ইচ্ছাকৃত।
  • আপনি যখন টেবিলের মধ্যে কলামগুলি তুলনা করেন কেবল তখন এবং সাথেই (INNER) যোগদান করুন। (প্লাস সম্ভবত অন্যান্য শর্ত।)
  • কমা ব্যবহার করবেন না।

সাধারণত টেবিলে জোড়ায় না থাকা শর্তগুলিও একটি গোছের জন্য রাখা হয়। কোনও সঠিক, বাম বা পুরো (আউটর) যোগদানের সাথে যুক্তির জন্য যথাযথ সারি পেতে তাদের একটি (এন ইনার) যোগদান করতে হতে পারে।

পুনরায় "কমা ব্যবহার করবেন না" সুস্পষ্ট জোয়িনের সাথে কমা মিশ্রিত করা বিভ্রান্ত করতে পারে কারণ কমাতে কম অগ্রাধিকার রয়েছে। কিন্তু ক্রস যোগ, (ইনার) জয়েন্ট এবং কমা অর্থের মধ্যে অন্তর্বর্তী পণ্যের ভূমিকা দেওয়া, উপরোক্ত কনভেনশনটি একেবারেই ব্যবহার না করার পক্ষে যুক্তিগুলি নড়বড়ে। একটি ক্রস যোগ বা কমা একটি সত্য শর্তে ঠিক (অন্তর্ভুক্ত) যোগদানের মতো। একটি মধ্যবর্তী পণ্য, চালু এবং যেখানে সমস্ত প্রাসঙ্গিক একটি ভবিষ্যত প্রস্তাব করে। তবে অন্যটি অন্তর্ভুক্ত হবে এমনটি ভাবা যেতে পারে - বলুন, কেবলমাত্র ইনপুট সারিগুলির একটি জুড়ি পাওয়া যায় যা অন শর্তটিকে সন্তুষ্ট করে - তবে তবুও শর্তটি পূরণকারী ক্রস জোড় সারিগুলি ফেরত দেয়। এসকিউএল-এ কমা পরিপূরক করার একমাত্র কারণ ছিল OUTER লিখেযোগদান করে। অবশ্যই, একটি অভিব্যক্তি এর অর্থ পরিষ্কার করা উচিত; তবে যা স্পষ্ট তা নির্ভর করে বিষয়গুলির অর্থ কী নেওয়া হয়েছে তার উপর।

পুনরায় ভেন ডায়াগ্রাম দুটি ছেদকারী বৃত্ত সহ একটি ভেন চিত্রটি একই ইনপুটটির জন্য INNER, Left, RIGHT এবং সম্পূর্ণ যোগদানের জন্য আউটপুট সারিগুলির মধ্যে পার্থক্য চিত্রিত করতে পারে । এবং যখন অন শর্তহীন সত্য, অনন্য যোগদানের ফলাফল ক্রস যোগ হিসাবে সমান। এছাড়াও এটি ইন্টারস্যাক্ট, ইউনিয়ন এবং ছাড়ের ইনপুট এবং আউটপুট সারিগুলিকে চিত্রিত করতে পারে । এবং যখন উভয় ইনপুটগুলির একই কলাম থাকে, তখন ইন্টারস্যাক্ট ফলাফল স্ট্যান্ডার্ড এসকিউএল প্রাকৃতিক যোগদানের মতো হয়, এবং বাম ফলাফল এবং বাম অংশের সাথে জড়িত নির্দিষ্ট আইডিয়ামগুলির মতোই হয় EX তবে এটি কীভাবে (INNER) JOIN সাধারণভাবে কাজ করে তা চিত্রিত করে না । এটি কেবল প্রথম নজরেই প্রশংসনীয় বলে মনে হয় । এটি অংশগুলি জন্য ইনপুট এবং / অথবা আউটপুটবিশেষ ক্ষেত্রে সনাক্ত করতে পারেঅন, পিকে (প্রাথমিক কী), এফকে (বিদেশী কী) এবং / অথবা নির্বাচন করুন। সমস্ত এই দেখতে যা করতে হবে চিহ্নিত হয় ঠিক সেট বৃত্ত দ্বারা উপস্থাপিত উপাদান কি কি । (কোন বলার উপস্থাপনা স্পষ্ট কখনো ভুলবেন না।) (মনে রাখবেন যে সাধারণভাবে যোগদান জন্য আউটপুট সারি ইনপুট সারি থেকে আলাদা শিরোনাম আছে । এবং এসকিউএল টেবিল হয় ব্যাগ না সেট সারি NULLs মানের সঙ্গে ।)


6
+1 আমার এই উত্তরটি সবচেয়ে ভাল লেগেছে - অন্যরা মনে করে যে ফলাফলগুলি পৃথক হবে, তবে "ওএন" ধারাটি "যেখানে" দিয়ে প্রতিস্থাপন করা হয় তবে ফলাফলগুলি একই হয়
রনি

4
+1 একটি পরিষ্কার যোগ দেওয়ার জন্য ধন্যবাদ যে কোনও অন্তর্ভুক্ত জোনে অন ধারাটি বাদ দিলে ক্রস জোনে
সের্নো

"ইন্টারমিডিয়েট কনসেপ্টুয়াল এসকিউএল স্টাইলে কার্টেসিয়ান ক্রস প্রোডাক্ট" - এটি কি অন্যভাবে বলা, "এটি আসলে অর্ডার করা জোড়ের সেট নয় তবে আমি 'কার্টেসিয়ান পণ্য' বলতে এড়াতে পারি না"? :) নিজেই একজন অ-গণিতবিদ হিসাবে আমি যখন কারটিশিয়ান প্রোডাক্ট শব্দটির মুখোমুখি হয়েছি কেবল তখনই কেউ এসকিউএল এর ব্যাখ্যা দিচ্ছে CROSS JOIN। আমি অবাক হই যে কার্টেসিয়ান পণ্যটির সাথে ইতিমধ্যে পরিচিত কেউ এসকিউএল-এর কাছে প্রায়শই আসে তবে তা বের করতে অক্ষম CROSS JOIN
onedaywhen

1
@ মাওনাডেওহেন অপারেটর কার্টেসিয়ান পণ্য কিছু সেট দেওয়া অর্ডারযুক্ত টুপলগুলির একটি সেট প্রদান করে। ফল একটি কার্টিজিয়ান পণ্য। রিলেশনাল & এসকিউএল সংস্কৃতির দুঃখিতভাবে অপব্যবহার / জমিদার অপারেটার জন্য "কার্টিজিয়ান পণ্য" যে আহ্বান কিন্তু নয় কার্টিজিয়ান পণ্য। যেমন উইকিপিডিয়া! আমি এর বিরোধিতা করি - এটি কেবল বিভ্রান্ত / বিভ্রান্ত করে। তবুও এখানে দুর্ভাগ্যজনকভাবে আমি কেবল অস্পষ্টভাবে বর্ণনা করছি যে এসকিউএল ক্রস কীভাবে আমার নিজের কথায় কাজ করে এবং উইকিপিডিয়ায় পিছিয়ে যায়। আমি ফলাফলটিকে "ইন্টারমিডিয়েট কনসেপ্টুয়াল এসকিউএল-স্টাইল কার্টেসিয়ান ক্রস প্রোডাক্ট" লেবেল করি । হ্যাঁ "কার্টেসিয়ান" দুঃখজনকভাবে ইতিমধ্যে দূষিতদের জন্য যারা এটি ব্যবহার / প্রত্যাশা করেন।
ফিলিপ্সি 10'18

1
উচ্চ-রেটেড উত্তরগুলির বিপরীতে এটি সঠিক উত্তর। এটি এসকিউএল এর সাথে আদর্শ যে ছবিগুলির সাথে সূক্ষ্ম, যুক্তিসঙ্গত-সুরযুক্ত, ভাল-ফর্ম্যাট করা ব্যাখ্যাগুলি শিক্ষার সামগ্রীতে আধিপত্য বজায় রাখে, এমনকি ভাষাটির মৌলিক বিষয়গুলি বুঝতে বা সংজ্ঞায়িত করতে ব্যর্থ হয়েও।
চার্লস রডি

23

ভেতরের যোগ দিতে

যোগদান করা টেবিলগুলিতে মিল রয়েছে এমন কেবল সারিগুলি দেখায় যা অন্তর্ভুক্ত হিসাবে পরিচিত। এটি ক্যোয়ারিতে ডিফল্ট যোগদান এবং ডিজাইনার দেখুন।

অভ্যন্তরীণ যোগদানের জন্য সিনট্যাক্স

SELECT t1.column_name,t2.column_name
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.column_name=t2.column_name

ক্রস জয়েন

ক্রস জোড় যা টেবিলে কার্টেসিয়ান পণ্য তৈরি করে যা এতে যোগ দেয়। কার্টেসিয়ান পণ্যের আকার হ'ল প্রথম টেবিলের সারিগুলির সংখ্যা দ্বিতীয় সারণীতে সারি সংখ্যা দ্বারা গুণিত হয়।

ক্রস যোগদানের জন্য সিনট্যাক্স

SELECT * FROM table_name1
CROSS JOIN table_name2

অথবা আমরা এটি অন্য উপায়েও লিখতে পারি

SELECT * FROM table_name1,table_name2

ক্রস যোগ দেওয়ার জন্য নীচের কোয়েরিটি এখন দেখুন

উদাহরণ

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

অথবা

SELECT * FROM UserDetails, OrderDetails

11

অনুগ্রহ করে মনে রাখবেন, যদি একটি যেখানে একটি ক্লজ যুক্ত করা হয়, ক্রস যোগটি অভ্যন্তরীণ যোগদান হিসাবে আচরণ করে। উদাহরণস্বরূপ, নিম্নলিখিত লেনদেন-এসকিউএল অনুসন্ধানগুলি একই ফলাফল সেট উত্পাদন করে। দয়া করে http://technet.microsoft.com/en-us/library/ms190690(v=sql.105).aspx দেখুন


8

যোগ দিন

যেমনটি আমি এই নিবন্ধে ব্যাখ্যা করেছি , ক্রস যোগ যোগদানের অর্থ কার্টেসিয়ান পণ্য উত্পন্ন করা।

একটি কার্টেসিয়ান পণ্য দুটি সেট এ এবং বি নেয় এবং প্রদত্ত দুটি সেট সেট থেকে জোড়া রেকর্ডের সমস্ত সম্ভাব্য ক্রম উত্পাদন করে।

উদাহরণস্বরূপ, ধরে নিচ্ছেন আপনার নিম্নলিখিত ranksএবং suitsডাটাবেস সারণী রয়েছে:

র‌্যাঙ্কস এবং স্যুট টেবিল

এবং এর ranksনিম্নলিখিত সারি রয়েছে:

| name  | symbol | rank_value |
|-------|--------|------------|
| Ace   | A      | 14         |
| King  | K      | 13         |
| Queen | Q      | 12         |
| Jack  | J      | 11         |
| Ten   | 10     | 10         |
| Nine  | 9      |  9         |

যদিও suitsটেবিল নিম্নলিখিত রেকর্ড রয়েছে:

| name    | symbol |
|---------|--------|
| Club    |       |
| Diamond |       |
| Heart   |       |
| Spade   |       |

ক্রস যোগদানের জন্য নিম্নলিখিত প্রশ্নের মতো কোয়েরি করুন:

SELECT
   r.symbol AS card_rank,
   s.symbol AS card_suit
FROM
   ranks r
CROSS JOIN
   suits s

সমস্ত সম্ভাব্য অনুমতি ranksএবং suitesজোড়া উত্পন্ন করবে :

| card_rank | card_suit |
|-----------|-----------|
| A         |          |
| A         |          |
| A         |          |
| A         |          |
| K         |          |
| K         |          |
| K         |          |
| K         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| J         |          |
| J         |          |
| J         |          |
| J         |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 9         |          |
| 9         |          |
| 9         |          |
| 9         |          |

ভেতরের যোগ দিতে

অন্যদিকে, INNER JOIN দুটি যোগদানের ডেটা সেটের কার্টেসিয়ান পণ্য ফেরত দেয় না।

পরিবর্তে, অভ্যন্তরীণ যোগদান বাম পাশের টেবিল থেকে সমস্ত উপাদান নেয় এবং ডান পাশের টেবিলের রেকর্ডগুলির সাথে তাদের মিলায় যাতে:

  • যদি ডান পাশের টেবিলটিতে কোনও রেকর্ড মেলে না, তবে ফলাফল সেট থেকে বাম দিকের সারিটি ফিল্টার করা হবে
  • ডান পাশের টেবিলের সাথে কোনও মিলের রেকর্ডের জন্য, বাম-সারি সারিটি পুনরাবৃত্তি করা হয়েছে যেন সেই রেকর্ড এবং ডান পাশের টেবিলের সাথে সম্পর্কিত সমস্ত শিশু রেকর্ডের মধ্যে কার্টেসিয়ান পণ্য রয়েছে।

উদাহরণস্বরূপ, ধরে নিই যে আমাদের পিতা - মাতার postএবং চাইল্ড post_commentটেবিলের মধ্যে একের সাথে একাধিক টেবিলের সম্পর্ক রয়েছে যা নীচে দেখায়:

একাধিক টেবিল সম্পর্ক

এখন, যদি postটেবিলের নিম্নলিখিত রেকর্ড থাকে:

| id | title     |
|----|-----------|
| 1  | Java      |
| 2  | Hibernate |
| 3  | JPA       |

এবং post_commentsটেবিলে এই সারি রয়েছে:

| id | review    | post_id |
|----|-----------|---------|
| 1  | Good      | 1       |
| 2  | Excellent | 1       |
| 3  | Awesome   | 2       |

নিম্নলিখিত মত একটি অভ্যন্তরীণ যোগদান কোয়েরি:

SELECT
   p.id AS post_id,
   p.title AS post_title,
   pc.review  AS review
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id

postতাদের সম্পর্কিত সম্পর্কিত সমস্ত রেকর্ড অন্তর্ভুক্ত করতে চলেছে post_comments:

| post_id | post_title | review    |
|---------|------------|-----------|
| 1       | Java       | Good      |
| 1       | Java       | Excellent |
| 2       | Hibernate  | Awesome   |

মূলত, আপনি অন্তর্ভুক্ত হওয়া ফিল্টার ক্রস যোগ হিসাবে ভাবতে পারেন যেখানে কেবল মিলের রেকর্ডগুলি চূড়ান্ত ফলাফলের সেটটিতে রাখা হয়।

কীভাবে অভ্যন্তরীণ যোগদান করবেন সে সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটিও দেখুন


"অন্তর্ভুক্ত দুইটি ডেটা সেট ডেটার কার্টেসিয়ান প্রোডাক্ট ফিরিয়ে দেয় না" কিছুটা তখন x = INNER JOIN 1 = 1 এ ফিরে আসে। "পরিবর্তে" যখন আপনি যা বলার চেষ্টা করেন বাস্তবে (অবশ্যই) এটি 1 = 1 শর্তে ফিরে আসে। বুলেটগুলির ভাষা কোনও অভ্যন্তরীণ যোগদানের ফলাফলটি পরিষ্কারভাবে বর্ণনা করে না cept এটি কী বর্ণনা করে তা হ'ল এটি ক্রস কম সারিগুলিতে যোগদান করে যা শর্তটি পূরণ করে না। একইভাবে, "সংমিশ্রণগুলি" ব্যবহার করে আপনার ক্রস জয়েন ভাষা স্পষ্ট নয়।
ফিলিপ্সি

7

এসকিউএল সার্ভার এর সহজ স্বরলিপি গ্রহণ করে:

SELECT A.F, 
       B.G, 
       C.H 
  FROM TABLE_A A, 
       TABLE_B B, 
       TABLE_C C
 WHERE A.X = B.X 
   AND B.Y = C.Y

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

এটা প্রতারণা নয়।


2

অভ্যন্তরীণ অংশে ব্যবহার করে প্রশ্নগুলি লেখার সময় রেকর্ডগুলি উভয় টেবিলের থেকে শর্তটি উভয় টেবিলের উপর সন্তুষ্ট হলে, উভয় টেবিলের সাধারণ কলামের সঠিক ম্যাচ থেকে আসে।

ক্রস জয়েন ব্যবহার করে কোয়েরি লেখার সময় ফলাফলটি দুটি সারণীতে রেকর্ড সংখ্যার কার্টেসিয়ান পণ্যটির মতো is উদাহরণস্বরূপ, যদি টেবিল 1 এ 2 টি রেকর্ড থাকে এবং টেবিল 2 এ 3 টি রেকর্ড থাকে তবে ক্যোয়ারির ফলাফল 2 * 3 = 6 রেকর্ডস।

আপনার প্রয়োজন না হওয়া পর্যন্ত ক্রস যোগ দেওয়ার জন্য যাবেন না।


2
শুধুমাত্র যেখানে ক্লজটি অনুপস্থিত!
এপিটকা

2

ক্রস যোগ এবং অভ্যন্তরীণ যোগদান কেবল পার্থক্য সহ একই যে অভ্যন্তরীণ যোগে আমরা কারটিশিয়ান পণ্যটির ফলাফলগুলি কিছুটা বুলেটিনে ফিল্টার করি

table1
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    option1  |
|    A     |      B1     |    option2  |
x--------------------------------------x

table2
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    optionB1 |
|    A1    |      B1     |    optionB2 |
x--------------------------------------x

 cross join
  A,B,option1,A,B,optionB1
  A,B,option1,A1,B1,optionB2
  A,B1,option2,A,B,optionB1
  A,B1,option2,A1,B1,optionB2

 inner join on field1 (only with the value is the same in both tables)
  A,B,option1,A,B,optionB1
  A,B1,option2,A,B,optionB1

 inner join on field1
  A,B,option1,A,B,optionB1

এটি আমাদের ডেটা ডিজাইনের উপর রয়েছে যেখানে আমরা সিদ্ধান্ত নিই যে আমরা যোগদানের জন্য যে ক্ষেত্রটি ব্যবহার করছি তার একটিমাত্র কেস রয়েছে। উভয় টেবিলগুলিতে কেবল ক্রস যোগ দিন এবং বিশেষ বুলিয়ান এক্সপ্রেশন সম্পাদনকারী কেবল রেখাগুলি পান।

মনে রাখবেন যে আমরা যে ক্ষেত্রগুলিতে আমাদের যোগ দিচ্ছি তা যদি উভয় টেবিলের শূন্য হয় তবে আমরা ফিল্টারটি পাস করব। নালগুলি এড়াতে বা অনুমতি দেওয়ার জন্য অতিরিক্ত বিধি যুক্ত করা আমাদের বা ডাটাবেস প্রস্তুতকারকের। বেসিকগুলি মেনে চললে এটি কেবল একটি ক্রস জোড় এবং তার পরে ফিল্টার।


0

অভ্যন্তরীণ জোড় দুটি টেবিলের মধ্যে মিলিত রেকর্ডগুলির ফলাফল দেবে যেখানে ক্রস যোগ হিসাবে দুটি টেবিলের মধ্যে সম্ভাব্য সংমিশ্রণ দেয়।


0

এ = {1,5,3,4,6,7,9,8} বি = {2,8,5,4,3,6,9}

cross join কার্তেসিয়ান পণ্য এ ✖ বি = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3 as হিসাবে কাজ করুন ..., {6,6} .... {8,9} এবং এই দীর্ঘ ফলাফল সেটটি ফিরিয়ে দিয়েছে ..

inner joinকার্টেসিয়ান পণ্যটির মাধ্যমে এটি সম্পন্ন করার সময় এবং মেলানো জোড়গুলি বেছে নেওয়ার জন্য .. যদি মনে হয় এটি দুটি টেবিলের প্রাথমিক কী হিসাবে এবং এটি = বি অনুসন্ধান করার জন্য ক্লোজ অনুসন্ধানের জোড়গুলি অর্ডার করেinner join জোড়গুলি অর্ডার করে {5,5}, {4,4}, {6,6} বেছে নিন , {9,9} এবং এই আইডি সম্পর্কিত সম্পর্কিত ধারাটিতে জিজ্ঞাসিত কলামটি ফিরে এসেছে returned

যদি cross joina = b তে থাকে তবে এর ফলাফল একই ফলাফল হিসাবে সেট হয় inner join। সেক্ষেত্রে ব্যবহারও করুন inner join


-1

এটি আপনার প্রত্যাশিত আউটপুটটির উপর নির্ভর করে।

একটি টেবিলের সমস্ত সারিগুলিতে একটি ক্রস যোগ অন্য টেবিলের সমস্ত সারিগুলির সাথে মেলে। একটি অভ্যন্তরীণ একটি ক্ষেত্র বা ক্ষেত্রের ম্যাচ ম্যাচ। আপনার যদি 10 টি সারি সহ একটি সারণী থাকে এবং 10 টি সারি সহ অন্য একটি সারণী থাকে তবে দু'জন যোগদান করে আলাদা আচরণ করবে।

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

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


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