ওরাকল "(+)" অপারেটর


155

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

ডিবিএমএস হ'ল ওরাকল

আমি এই মত পড়ে এমন একটি বিবৃতি বুঝতে পারি নি:

select ...
from a,b
where a.id=b.id(+)

আমি (+)অপারেটর সম্পর্কে বিভ্রান্ত হয়েছি এবং এটি কোনও ফোরামে পাওয়া যায়নি ... (উদ্ধৃতিগুলির মধ্যে + অনুসন্ধান করা কোনওরূপে কার্যকর হয়নি)।

যাইহোক, আমি এসকিউএল ডেভেলপারের 'এক্সপ্লেন প্ল্যান' ব্যবহার করেছি এবং আমি এগুলি বলে একটি আউটপুট পেয়েছি HASH JOIN, RIGHT OUTERetc.

আমি (+)কোয়েরির শেষে অপারেটরটি সরিয়ে দিলে কি কোনও পার্থক্য হবে ? ডাটাবেস (+)ব্যবহার করার আগে কিছু শর্ত পূরণ করতে হবে (যেমন কিছু সূচি থাকা ইত্যাদি) ব্যবহার করার আগে ?? আপনি যদি আমাকে একটি সাধারণ বোঝার ব্যবস্থা করতে পারেন, বা কয়েকটি ভাল লিঙ্ক যেখানে আমি এই সম্পর্কে পড়তে পারি তবে এটি বেশ সহায়ক হবে।

ধন্যবাদ!


1
এটি কোনও অপারেটর নয়। এটি কেবল সিনট্যাক্সের টুকরো যা জয়ন কী করে তা প্রভাবিত করে।
ফিলিপ্সি

উত্তর:


186

এটি আউটর জয়েনের জন্য অরাকল সুনির্দিষ্ট স্বরলিপি, কারণ এএনএসআই -৯৯ ফর্ম্যাট (পৃথক টেবিলের রেফারেন্সের ফ্লোম ক্লজে একটি কমা ব্যবহার করে) আউটারের সাথে যোগ দেয় না।

ক্যোয়ারীটি এএনএসআই -২৯ সিনট্যাক্সে আবার লিখিত হবে:

   SELECT ...
     FROM a
LEFT JOIN b ON b.id = a.id

এই লিঙ্কটি JOIN এর মধ্যে পার্থক্য বোঝাতে বেশ ভাল


এটি লক্ষ করা উচিত যে (+)কাজ করা সত্ত্বেও ওরাকল এটি ব্যবহার না করার পরামর্শ দেয় :

ওরাকল আপনাকে পরামর্শ দেয় যে আপনি ওরাকল যোগ অপারেটরের পরিবর্তে FROMক্লজ OUTER JOINসিনট্যাক্সটি ব্যবহার করুন । Oracle join অপারেটর ব্যবহার করে এমন আউটটার জয়েন কোয়েরিগুলি (+)নিম্নলিখিত নিয়ম এবং বিধিনিষেধের সাপেক্ষে, যা FROMক্লজ OUTER JOINসিনট্যাক্সের ক্ষেত্রে প্রযোজ্য না :


79
ঠিক তাই. (+) সোজা আমার মাথায় রাখতে (বাম দিকে বনাম ডান দিকের) রাখতে, আমি (+) "" কোনও মিল না পেলে NULL মান যুক্ত করা "হিসাবে ভাবতে চাই। উদাহরণস্বরূপ, "a.id = b.id (+)" এর অর্থ a.id এর সাথে কোনও মিল না থাকলে b.id কে NULL হতে দেয়
সৈকত

ধন্যবাদ..আমি অনুমান করি এটিকে ক্লজ থেকে যুক্ত করলে একই ফল পাওয়া উচিত !!
কিরণ এস

আপনি অফিশিয়াল ওরাকল ডকুমেন্টেশনে একটি লিঙ্ক রাখতে চাইতে পারেন: docs.oracle.com/html/A95915_01/sqopr.htm
ভারগান

27

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

select * from emp, dept where emp.dept_id=dept.dept_id(+)

সুতরাং সংক্ষেপে, (+) অপসারণ একটি তাত্পর্যপূর্ণ হতে পারে তবে আপনি আপনার ডেটার উপর নির্ভর করে কিছুক্ষণ খেয়াল করতে পারবেন না!


25

ওরাকলে, (+) জোইনের "inচ্ছিক" টেবিলকে বোঝায়। সুতরাং আপনার প্রশ্নে,

SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id(+)

এটি টেবিল 'বি' থেকে টেবিল 'এ' এর টেবিলের একটি বাম আউটারের সাথে যুক্ত। অন্য পক্ষের (tableচ্ছিক টেবিল 'বি') এর কোনও ডেটা না থাকলে এটি তার টেবিল 'এ' এর সমস্ত ডেটা ফেরত দেবে।

বাম বহির যোগদানের ডায়াগ্রাম

একই ক্যোয়ারির জন্য আধুনিক স্ট্যান্ডার্ড সিনট্যাক্সটি হবে

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b ON a.id=b.id

বা শর্টহ্যান্ড সহ a.id=b.id(সমস্ত ডাটাবেস দ্বারা সমর্থিত নয়):

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b USING(id)

যদি আপনি (+) অপসারণ করেন তবে এটি স্বাভাবিক অভ্যন্তরীণ যোগদানের কোয়েরি হবে

ওরাকল এবং অন্যান্য ডাটাবেস উভয় ক্ষেত্রেই পুরানো বাক্য গঠন:

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id

আরও আধুনিক বাক্য গঠন:

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
INNER JOIN b ON a.id=b.id

বা সহজভাবে:

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
JOIN b ON a.id=b.id

ইনার জয়েনের ডায়াগ্রাম

এটি কেবলমাত্র সমস্ত ডেটা ফিরে আসবে যেখানে 'a' এবং 'b' টেবিলগুলির আইডি 'মান উভয়ই সমান, যার অর্থ সাধারণ অংশ।

আপনি যদি আপনার জিজ্ঞাসাকে একটি ডান যোগদান করতে চান

এটি কেবল বাম জোয়ারের মতোই, তবে কোন টেবিলটি alচ্ছিক তা স্যুইচ করে।

ডান বহিরাগত যোগদানের ডায়াগ্রাম

ওল্ড ওরাকল সিনট্যাক্স:

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id(+)=b.id

আধুনিক স্ট্যান্ডার্ড সিনট্যাক্স:

SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
RIGHT JOIN b ON a.id=b.id

রেফ এবং সহায়তা:

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:6585774577187

বাম বহিরাগত + সাইন ইন ওরাকল 11 জি ব্যবহার করে যোগদান করুন

https://www.w3schools.com/sql/sql_join_left.asp


চেনাশোনা লেবেলগুলি "টেবিল 1" এবং "টেবিল 2" বাজে। চেনাশোনা উপাদানগুলির জন্য সহজ অর্থ আউটপুট সারি। তারপরে বাম ক্রিসেন্টে টেবিল 1 এর নাল-প্রসারিত সারি রয়েছে এবং ডান ক্রিসেন্টে টেবিল 2 এর নাল-প্রসারিত সারি রয়েছে। চেনাশোনাগুলির জন্য অন্যান্য অর্থ অস্পষ্ট। ডায়াগ্রামের অর্থ কী? আপনি কেন অন্য লোকের (খারাপ) উপস্থাপনা অন্ধভাবে অনুলিপি না করে এগুলিতে রেখেছিলেন?
ফিলিপ্সি 11

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

6

অনুশীলনে, + চিহ্নটি সরাসরি শর্তাধীন বিবৃতিতে এবং alচ্ছিক টেবিলের পাশে (শর্তাধীন শূন্য বা নাল মান ধারণ করার অনুমতি দেওয়া হয়) এর পাশে রাখা হয়।


(+) অবিলম্বে একটি কলাম নামের ডানদিকে রাখা হয়। এই উত্তরটি সে সম্পর্কে পরিষ্কার নয়। "অনুশীলন" এর অর্থ কী? (অলংকারবিদ্যা।) (এবং আপনি সম্ভবত না মানে "বিবৃতি" না।)
philipxy
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.