আমি ভাবছি কীভাবে এই সমস্ত আলাদা যোগদান করে ...
আমি ভাবছি কীভাবে এই সমস্ত আলাদা যোগদান করে ...
উত্তর:
সাধারণ উদাহরণ : আপনাকে একটি Students
টেবিল এবং একটি Lockers
টেবিল আছে বলে দেয় । এসকিউএল-এ, আপনি প্রথম যোগদানের ক্ষেত্রে যে সারণিটি নির্দিষ্ট করেছেন Students
তা হ'ল বাম টেবিল এবং দ্বিতীয়টি Lockers
হ'ল সঠিক সারণি।
প্রতিটি ছাত্রকে একটি লকারে নিয়োগ দেওয়া যেতে পারে, সুতরাং টেবিলে একটি LockerNumber
কলাম Student
রয়েছে। একাধিক শিক্ষার্থী সম্ভাব্যভাবে একটি একক লকারে থাকতে পারে, তবে বিশেষত স্কুল বছরের শুরুতে আপনার কিছু আগত শিক্ষার্থী লকার ছাড়াই থাকতে পারে এবং কিছু লকারে কোনও শিক্ষার্থী বরাদ্দ নেই।
এই উদাহরণের স্বার্থে, যাক আপনার 100 জন শিক্ষার্থী রয়েছে যার মধ্যে 70 টিতে লকার রয়েছে। আপনার কাছে মোট 50 টি লকার রয়েছে যার মধ্যে 40 টিতে কমপক্ষে 1 জন ছাত্র এবং 10 টি লকারের কোনও ছাত্র নেই।
অন্তর্ভুক্ত যোগদান " লকার সহ সমস্ত শিক্ষার্থী আমাকে দেখান " এর সমতুল্য ।
লকার ছাড়া কোনও শিক্ষার্থী, বা ছাত্র ছাড়া কোনও লকার অনুপস্থিত।
70 টি সারি প্রদান করে
বাম আউটয়ার জয়েন হবেন " আমাকে সমস্ত শিক্ষার্থী দেখান, তাদের যদি তাদের সাথে সম্পর্কিত লকার থাকে তবে "।
এটি একটি সাধারণ শিক্ষার্থীর তালিকা হতে পারে, বা কোনও লকার ছাড়াই শিক্ষার্থীদের সনাক্ত করতে ব্যবহৃত হতে পারে।
100 টি সারি প্রদান করে
রাইট আউট জয়েন হবে " আমাকে সমস্ত লকার প্রদর্শন করুন, এবং ছাত্ররা যদি তাদের থাকে তবে তাদের নিযুক্ত করা হবে "।
এটি এমন কোনও লকারকে সনাক্ত করতে ব্যবহার করা যেতে পারে যার কোনও শিক্ষার্থী বরাদ্দ নেই, বা এমন অনেকগুলি শিক্ষার্থী রয়েছে এমন লকার।
৮০ টি সারি (40 টি লকারে 70 জন শিক্ষার্থীর তালিকা, সাথে সাথে 10 জন লকার কোনও ছাত্র নেই) প্রদান করে
সম্পূর্ণ আউট জয়েন মূর্খ হবে এবং সম্ভবত খুব বেশি ব্যবহার হয় না।
" আমাকে সমস্ত ছাত্র এবং সমস্ত লকার দেখান, এবং আপনি যেখানে পারেন সেখানে সেগুলি মেলে "
110 টি সারি ফেরত দেয় (সমস্ত 100 শিক্ষার্থী, লকার ছাড়া এটি সহ 10 জন শিক্ষার্থী ছাড়া 10 জন লকার)
ক্রস জয়েনও এই দৃশ্যে মোটামুটি মূর্খ।
এটি lockernumber
ছাত্রদের টেবিলে লিঙ্কযুক্ত ক্ষেত্রটি ব্যবহার করে না , সুতরাং আপনি মূলত প্রতিটি সম্ভাব্য শিক্ষার্থী থেকে লকার জুটির একটি বৃহত দৈত্য তালিকাটি শেষ করেন, এটি আসলে বিদ্যমান কিনা।
5000 সারি (100 শিক্ষার্থী x 50 লকার) প্রদান করে। নতুন শিক্ষার্থীদের খালি লকারগুলির সাথে মেলে তুলতে প্রাথমিক পয়েন্ট হিসাবে (ফিল্টারিং সহ) কার্যকর হতে পারে।
SELECT * FROM students RIGHT OUTER JOIN lockers...
চেয়ে আলাদা ফলাফল হতে পারে SELECT * FROM lockers RIGHT OUTER JOIN students...
। দুর্দান্ত উত্তর, তবে এটি সম্পূর্ণ SQL
প্রশ্নের সাথে আপডেট দেখতে দেখতে পছন্দ করবে
যোগ দেওয়ার তিনটি মূল ধরণ রয়েছে:
INNER
যোগদান দুটি টেবিলের তুলনা করে এবং কেবল যেখানে ম্যাচ বিদ্যমান সেখানে ফলাফলগুলি প্রদর্শন করে। 1 ম সারণী থেকে রেকর্ডগুলি অনুলিপি করা হয় যখন তারা 2 য় একাধিক ফলাফলের সাথে মেলে। অন্তর্ভুক্ত হয় ফলাফল সেট ছোট করতে ঝোঁক, কিন্তু রেকর্ড নকল করা যেতে পারে কারণ এটি গ্যারান্টিযুক্ত না।CROSS
দুটি টেবিলের তুলনায় যোগ দিন এবং উভয় টেবিল থেকে সারিগুলির প্রতিটি সম্ভাব্য সংমিশ্রণটি ফিরিয়ে দিন। আপনি এই জাতীয় যোগদানের মাধ্যমে প্রচুর ফলাফল পেতে পারেন যা এমনকি অর্থবহ নাও হতে পারে, তাই সাবধানতার সাথে ব্যবহার করুন।OUTER
যোগ দুটি টেবিলের তুলনা করে এবং কোনও ম্যাচ উপলভ্য হলে ডেটা ফেরত দেয় বা অন্যথায় NULL মান দেয়। INNER যোগদানের মতো, এটি যখন অন্য টেবিলের একাধিক রেকর্ডের সাথে মেলে তখন এটি এক টেবিলের সারিগুলি নকল করে দেবে। আউটরের সাথে যোগ দেয় ফলাফল আরও বড় আকারে সেট করে, কারণ তারা নিজেরাই সেট থেকে কোনও রেকর্ড সরিয়ে ফেলবে না। NUL মানগুলি কখন এবং কোথায় যুক্ত করতে হবে তা নির্ধারণ করতে আপনাকে অবশ্যই একটি OUTER যোগদান করতে হবে:
LEFT
মানে 1 ম টেবিল থেকে সমস্ত রেকর্ড রাখুন যাই হোক না কেন এবং যখন দ্বিতীয় টেবিলটি মেলে না তখন NULL মান সন্নিবেশ করান। RIGHT
তার বিপরীত অর্থ: দ্বিতীয় সারণী থেকে সমস্ত রেকর্ড রাখুন যাই হোক না কেন এবং সে 1 ম টেবিলের সাথে মেলে না কেন নূন্যতম মান সন্নিবেশ করান। FULL
অর্থ উভয় টেবিল থেকে সমস্ত রেকর্ড রাখুন, এবং কোনও মিল নেই যদি উভয় টেবিলের মধ্যে একটি নাল মান valueোকান।প্রায়শই আপনি দেখতে পাবেন OUTER
কীওয়ার্ডটি সিনট্যাক্স থেকে বাদ যাবে। পরিবর্তে এটি কেবলমাত্র "বাম যোগদান", "সঠিক যোগদান", বা "সম্পূর্ণ যোগদান" হবে। এটি করা হয়েছে কারণ বাম, ডান বা সম্পূর্ণরূপে ইনার এবং ক্রস যোগদানের কোনও অর্থ নেই এবং তাই এগুলি একটি বাহ্যিক যোগদানকে নিস্পষ্টভাবে ইঙ্গিত করার জন্য এগুলি নিজেরাই যথেষ্ট।
আপনি কখন প্রতিটি ধরণের ব্যবহার করতে চাইতে পারেন তার উদাহরণ এখানে রয়েছে:
INNER
: আপনি "চালান" টেবিল থেকে সমস্ত সম্পর্কিত, তাদের সম্পর্কিত "ইনভয়েসলাইনস" ফিরিয়ে দিতে চান। এটি ধরে নিয়েছে যে প্রতিটি বৈধ চালানের কমপক্ষে একটি লাইন থাকবে।OUTER
: আপনি একটি নির্দিষ্ট চালানের জন্য সমস্ত "ইনভয়েস লাইন্স" রেকর্ডগুলি, তাদের সংশ্লিষ্ট "ইনভেন্টরি আইটেম" রেকর্ডার সাথে ফিরিয়ে দিতে চান। এটি এমন একটি ব্যবসা যা পরিষেবাও বিক্রয় করে, যেমন সমস্ত ইনভয়েস লাইনের একটি আইভেন্টরি আইটেম থাকে না।CROSS
: আপনার কাছে 10 সারি সহ একটি অঙ্কের সারণী রয়েছে, প্রতিটি হোল্ডিংয়ের মান '0' এর মাধ্যমে '9' হয়। আপনি এর সাথে যোগ দিতে একটি তারিখের সীমা সারণী তৈরি করতে চান, যাতে আপনি পরিসরের মধ্যে প্রতিটি দিনের জন্য একটি রেকর্ড শেষ করেন। ক্রস-এই টেবিলটি নিজের সাথে বারবার যোগদানের মাধ্যমে আপনি আপনার প্রয়োজন মতো পরপর সংখ্যক পূর্ণসংখ্যা তৈরি করতে পারবেন (আপনি 10 থেকে 1 তম পাওয়ার শুরু করলে প্রতিটি জোড় ঘটিতে 1 যোগ করে)। তারপরে পরিসরের জন্য আপনার মূল তারিখে সেই মানগুলি যুক্ত করতে DATEADD () ফাংশনটি ব্যবহার করুন।এখানে কেবল 4 ধরণের রয়েছে:
NULL
এবং প্রতিটি জন্য থাকে ডানদিকে টেবিলের মান। এর অর্থ বামে থাকা টেবিল থেকে প্রতিটি সারি কমপক্ষে একবার আউটপুটে উপস্থিত হবে। একটি "ক্রস জয়েন" বা "কার্টেসিয়ান জয়েন" হ'ল একটি অভ্যন্তরীণ যোগ, যার জন্য কোনও যোগদানের শর্ত নির্দিষ্ট করা হয়নি, ফলস্বরূপ সমস্ত জোড় সারি আউটপুট হয়।
পুরো যোগদানের বিষয়টি নির্দেশ করার জন্য রাসেলএহকে ধন্যবাদ, যা আমি বাদ দিয়েছি।
এসকিউএল যোগদানের পার্থক্য:
মনে রাখা খুব সহজ:
INNER JOIN
কেবল উভয় সারণীতেই রেকর্ডগুলি সাধারণ দেখায়।
OUTER JOIN
উভয় টেবিলের সমস্ত সামগ্রী একত্রিত হয় হয় সেগুলি মিলেছে কিনা not
LEFT JOIN
এর মতোই LEFT OUTER JOIN
- (প্রথম টেস্টের রেকর্ডগুলি নির্বাচন করুন (বাম-সর্বাধিক) ডান টেবিলের রেকর্ডের সাথে টেবিল)
RIGHT JOIN
এর মতোই RIGHT OUTER JOIN
- (বাম টেবিলের রেকর্ডের সাথে মিলে দ্বিতীয় (ডান-সর্বাধিক) সারণী থেকে রেকর্ড নির্বাচন করুন))
পরীক্ষা করে দেখুন (এসকিউএল) উইকিপিডিয়া এ যোগদান
বাম / ডান (বাহ্যিক) যোগ দিন - দুটি সারণী প্রদত্ত আপনার জোয়ারের বাম বা ডান টেবিলের মধ্যে উপস্থিত সমস্ত সারি ফেরত দেয়, এবং যোগ দফাটি ম্যাচ হলে নথটি অন্য দিক থেকে ফিরে আসবে বা শূন্যের জন্য ফিরে আসবে এই কলামগুলি
সম্পূর্ণ আউটটার - প্রদত্ত দুটি টেবিল সমস্ত সারি প্রদান করে এবং বাম বা ডান কলাম না থাকলে নালাগুলি ফিরে আসবে
ক্রস যোগ দেয় - কার্টেসিয়ান যোগ দিন এবং সাবধানে ব্যবহার না করা বিপজ্জনক হতে পারে
এটিকে আরও দৃশ্যমান করা সাহায্য করতে পারে। একটি উদাহরণ:
1 নং টেবিল:
ID_STUDENT STUDENT_NAME
1 Raony
2 Diogo
3 Eduardo
4 Luiz
টেবিল ২:
আইডিপুডেন্ট লকার
3 l1
4 l2
5 l3
আমি যখন পাই তখন কি পাই:
-Inner join of Table 1 and Table 2:
- Inner join returns both tables merged only when the key
(ID_STUDENT) exists in both tables
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
-Left join of Table 1 and Table 2:
- Left join merges both tables with all records form table 1, in
other words, there might be non-populated fields from table 2
ID_ESTUDANTE NOME_ESTUDANTE LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
-Right join of table 1 and table 2:
- Right join merges both tables with all records from table 2, in
other words, there might be non-populated fields from table 1
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
5 - l3
-Outter join of table 1 and table 2:
- Returns all records from both tables, in other words, there
might be non-populated fields either from table 1 or 2.
ID_STUDENT STUDENT_NAME LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
5 - l3
অভ্যন্তরীণ যোগদান : কেবল সারিগুলি দেখান, যখন এতে উভয় সারণী থেকে ডেটা থাকে।
বহিরাগত যোগদান : (বাম / ডান) : জোড় সারি ( গুলি ) দিয়ে বাম / ডান টেবিলের সমস্ত ফলাফল উপস্থিত থাকে বা না থাকলে তা দেখান।
প্রথমে আপনাকে বুঝতে হবে যোগ দিন কী করে? আমরা একাধিক টেবিল সংযুক্ত করি এবং যোগদান করা টেবিলগুলি থেকে নির্দিষ্ট ফলাফল পাই। এটি করার সহজ উপায় হ'ল ক্রস জয়েন ।
যাক, টেবিলএর দুটি ক এবং এ এবং বি রয়েছে এবং টেবিলবিতে তিনটি কলাম সি এবং ডি রয়েছে we তারপরে প্রকৃত ডেটা পেতে আমাদের প্রাথমিক কী ব্যবহার করে মিলতে হবে।
বাম: এটি বাম টেবিল থেকে সমস্ত রেকর্ড এবং ডান টেবিল থেকে মিলিত রেকর্ড ফিরিয়ে দেবে।
ডান: এটি বাম যোগদানের বিপরীতে ফিরে আসবে। এটি ডান টেবিল থেকে সমস্ত রেকর্ড এবং বাম টেবিল থেকে মিলিত রেকর্ডগুলি ফিরিয়ে দেবে।
আভ্যন্তরীণ: এটি ছেদ করার মতো। এটি উভয় টেবিল থেকে কেবল মিলিত রেকর্ডগুলি ফিরিয়ে দেবে।
বাইরের: এবং এটি ইউনিয়নের মতো। এটি উভয় সারণী থেকে সমস্ত উপলব্ধ রেকর্ড ফিরিয়ে দেবে।
কিছু সময় আমাদের সমস্ত ডেটা প্রয়োজন হয় না এবং এছাড়াও আমাদের কেবল সাধারণ তথ্য বা রেকর্ডের প্রয়োজন হয়। এই জয়েন পদ্ধতিগুলি ব্যবহার করে আমরা সহজেই এটি পেতে পারি। মনে রাখবেন বাম এবং ডান জোড় বাহ্যিক সংযুক্তি।
আপনি ক্রস জয়েন ব্যবহার করে সমস্ত রেকর্ড পেতে পারেন। এটি যখন কয়েক মিলিয়ন রেকর্ডে আসে তখন এটি ব্যয়বহুল হতে পারে। সুতরাং বাম, ডান, অভ্যন্তরীণ বা বাইরের জোড় ব্যবহার করে এটি সহজ করুন।
ধন্যবাদ