WHERE ক্লজ দ্বারা যোগদান করা কোয়েরিগুলির সাথে কোনও আসল যোগদান করে কোয়েরিগুলির মধ্যে কি কোনও উপাদানগত পার্থক্য রয়েছে?


32

ইন জানুন এসকিউএল হার্ড উপায় (ব্যায়াম ছয়) , লেখক উপহার নিম্নলিখিত ক্যোয়ারী:

SELECT pet.id, pet.name, pet.age, pet.dead
    FROM pet, person_pet, person
    WHERE
    pet.id = person_pet.pet_id AND
    person_pet.person_id = person.id AND
    person.first_name = "Zed";

এবং তারপরে বলতে থাকে যে:

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

এটা কি সত্যি? কেন অথবা কেন নয়?


3
আমি মনে করি না সেখানে আছে, তবে আপনি কোয়েরি কার্যকর করতে কোনও পার্থক্য আছে কিনা তা দেখার জন্য আপনি একটি ব্যাখ্যা করার চেষ্টা করতে পারেন।
গ্র্যান্ডমাস্টারবি

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

7
যোগদান করুন খুব সুন্দরভাবে অভিপ্রায়টি (টেবিলগুলিতে যোগদান) স্থানান্তরিত করে এটি প্রকৃত ফিল্টারগুলির জন্য পুরো অংশটি ছেড়ে দেয় এবং এটি পড়ার জন্য আরও কিছুটা সহজ করে তোলে। (মাআনির অন্যান্য বিপর্যয় ছাড়াও)
ম 00

2
আপনি যদি এসকিউএল হার্ড ওয়ে শিখছেন তবে লেখক যদি সহজ যোগ দিতে লেখার বিরক্ত না হন! যেমন টমাসস যোগ হিসাবে JOIN ব্যবহার করে উদ্দেশ্যগুলি পরিষ্কার করা হয়, এবং যেখানে ক্লজ অনেক সহজ হয়ে যায়। এছাড়াও JOIN গুলি ব্যবহার করে সেট তত্ত্বকে আরও ভালভাবে বোঝায় যা এসকিউএলকে আন্ডারপাইন করে।
ড্যানিয়েল হোলিনরাকে

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

উত্তর:


23

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

লেখক যে সংকীর্ণ পরিস্থিতিতে তৈরি করেছেন এটি সত্য:

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

শিক্ষণ অগ্রগতির অংশ হিসাবে, আমি মনে করি এটি ভাঙ্গা সহজ এবং একটি প্রাকৃতিক অগ্রগতি লাভ করা সহজ:

Select * from table
select this, something, that from table
select this from table where that = 'this'
select this from table join anothertable on this.id = that.thisid

টেবিলগুলিতে যোগদান এবং ফিল্টার করার ধারণাগুলি আসলে একই নয়। এখন সঠিক সিনট্যাক্স শেখা যখন আপনি শিখতে বাহ্য যোগদান করে যদি না লেখক মত পুরানো / অবচিত জিনিষ শিক্ষার উপর ইচ্ছুক আরো উদ্বর্ত হবে: *= or =*


5
জোয়িন স্টেটমেন্টটি যুক্ত করার কারণটি ছিল কারণ বাহ্যিক যোগদানগুলিতে প্রকাশের কোনও মান ছিল না, সুতরাং প্রতিটি ডাটাবেস বিক্রেতাকে এর জন্য নিজস্ব "বিশেষ" (বেমানান) বাক্য গঠন ছিল। আইআইআরসি ওরাকল *=বা =*বাম বা ডান বাহ্যিক যোগদানের ইঙ্গিত দিয়েছিল বা অন্যটি যা আমি কেবল |=অপারেটর ব্যবহার করে কেবল সমর্থিত বাম বাহ্যিক যোগদান করে ।
টিএমএন

1
@ টিএমএন আইআইআরসি ওরাকল ব্যবহৃত হয়েছিল +=বা এটি সম্ভবত ছিল =+। আমি বিশ্বাস করি *=লেনদেন-এসকিউএল (সিবাস এবং পরে এমএস-এসকিউএল) ছিল। তবুও, ভাল পয়েন্ট।
ডেভিড

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

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

12

এটি ধীরে ধীরে ক্যোরি অপটিমাইজার এবং কীভাবে এটি ক্যোয়ারিকে প্রবাহিত করে তার উপর নির্ভর করে (আপনি যা লিখবেন তা আসলে কার্যকর হয় না)। যাইহোক, এই উক্তিটির সাথে বড় সমস্যাটি হ'ল এটি সম্পূর্ণরূপে এড়িয়ে যায় যে বিভিন্ন ধরণের যোগদান রয়েছে যা সম্পূর্ণ ভিন্নভাবে কাজ করে। উদাহরণস্বরূপ, যা বলা হচ্ছে তা (তাত্ত্বিকভাবে) সত্য inner joinsতবে এটি outer joins( left joinsএবং right joins) ক্ষেত্রে সত্য নয় hold


9
+1 অন্যান্য ধরণের যোগদানের জন্য। আমার যোগদানের বেশিরভাগই হয় হয় INNER JOINবা হয় LEFT OUTER JOIN। তারা "অত্যন্ত বিভ্রান্তিকর" নয়। এসকিউএল অত্যন্ত বিভ্রান্ত হতে পারে, তবে এটি এর উদাহরণ নয়।
এমজিডব্লিউ 854

বিষয় বন্ধ কিন্তু বিবৃতি পৃথক হতে হবে যোগদানের ধরনের গুলি বা যোগদানের ধরনের ?
user1451111

9

লেখক একটি সাধারণ ক্ষেত্রে উপস্থাপন করেছেন যেখানে পুরানো বা নতুন বাক্য গঠন ব্যবহার করা যেতে পারে। আমি তার / তার বক্তব্যের সাথে একমত হই না যে এতে যোগ দেয় অতি বিভ্রান্তিকর, কারণ সারণীতে যোগদান করা একটি মৌলিক এসকিউএল ক্যোয়ারী ধারণা concept সুতরাং, সম্ভবত কোনও মতামতযুক্ত বক্তব্য উচ্চারণ করার পাশাপাশি একাধিক সারণী ক্যোয়ারী উদাহরণ দেওয়ার আগে জোইনস কীভাবে কাজ করে তা ব্যাখ্যা করার আগে লেখকের কিছুটা সময় ব্যয় করা উচিত ছিল।

নতুন সিনট্যাক্স ব্যবহার করা উচিত। এর মূল যুক্তিটি হ'ল আপনার ক্যোয়ারিতে এইটি থাকবে:

  • মানদণ্ড নির্বাচন করুন
  • মানদণ্ডে যোগদান করুন
  • ফিল্টার মানদণ্ড

পুরানো শৈলী ব্যবহার করে, যোগদান এবং ফিল্টার মানদণ্ড একত্রিত হয় যা আরও জটিল ক্ষেত্রে বিভ্রান্তির কারণ হতে পারে।

এছাড়াও, কেউ ফিল্টার ক্লজে যোগদানের মানদণ্ড ভুলে কার্টেসিয়ান পণ্য পেতে পারেন:

 person_pet.person_id = person.id

পুরানো বাক্য গঠন ব্যবহার করে।

নতুন সিনট্যাক্সটি ব্যবহার করে এই সংযুক্তিটি কীভাবে হওয়া উচিত তা কীভাবে গুরুত্বপূর্ণ যা আপনি কোনও ইনার, বাম আউটয়ার ইত্যাদি চান তা গুরুত্বপূর্ণ specif সুতরাং এটি জোইন সিনট্যাক্সের ক্ষেত্রে আরও স্পষ্ট which যা IMHO টেবিলে যোগদানের সাথে অপরিচিত তাদের পাঠযোগ্যতা বৃদ্ধি করে।


5

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


5

আমি এসকিউএল শিখেছি, *=বাইরের যোগদানের সিনট্যাক্স সহ । আমার কাছে এটি অত্যন্ত স্বজ্ঞাত যেহেতু সমস্ত সম্পর্কের ক্ষেত্রে সমান প্রাধান্য দেওয়া হয়েছিল এবং প্রশ্নগুলির একটি সিরিজ হিসাবে প্রশ্ন স্থাপনের আরও ভাল কাজ করেছিলেন: আপনি কী চান? এগুলি আপনি কোথা থেকে চান? আপনি কোনটি চান?

এমনটি করে joinবাক্য গঠন, এটা সম্পর্ক প্রতি চিন্তার প্রক্রিয়া আরও জোরালোভাবে বিঘ্নিত। এবং ব্যক্তিগতভাবে, আমি টেবিলগুলি এবং সম্পর্কের সাথে মিশ্রিত কোডটি কোডটি খুব কম পাঠযোগ্য বলে মনে করি।

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


7
এটি একটি রিলেশনাল ডাটাবেস, সুতরাং সম্পর্কগুলি কোনও প্রশ্নের জন্য বেশ গুরুত্বপূর্ণ। সত্যিকারের ফিল্টারগুলি (foo.x = 5) সম্পর্কের সাথে (foo.x = বার.এক্স) মিশ্রিত করে এমন কোনও ক্যোয়ারীটি অনুধাবন করা আমার ব্যক্তিগতভাবে অনেক কঠিন find ইঞ্জিন এটিকে সহজেই একটি যোগদানের জন্য অনুকূল করতে পারে, তবে কোনও সেটগুলি এবং উপগ্রহের বিপরীতে কোনও মানুষকে মূলত এটি সম্পর্কে সারিবদ্ধভাবে যুক্তি জানাতে হবে।
অ্যারোনআট 16'15

4

এটি বিবেচনা করার দুটি ভিন্ন দিক রয়েছে: পারফরম্যান্স এবং রক্ষণাবেক্ষণ / পাঠযোগ্যতা

Maintainability / পঠনযোগ্যতার

আমি একটি পৃথক ক্যোয়ারী বেছে নিয়েছি কারণ এটি এমন কিছু যা আমি মনে করি যে আপনি পোস্ট করেছেন এমন মূল ক্যোয়ারীর চেয়ে ভাল / খারাপ উদাহরণ।

আপনার কাছে কি আরও ভাল দেখাচ্ছে এবং আরও পাঠযোগ্য?

select
    e.LoginID,
    DepartmentName = d.Name
from HumanResources.Employee e
inner join HumanResources.EmployeeDepartmentHistory edh
on e.BusinessEntityID = edh.BusinessEntityID
inner join HumanResources.Department d
on edh.DepartmentID = d.DepartmentID
where d.Name = 'Engineering';

অথবা ...

select
    e.LoginID,
    DepartmentName = d.Name
from HumanResources.Employee e, 
HumanResources.EmployeeDepartmentHistory edh,
HumanResources.Department d
where e.BusinessEntityID = edh.BusinessEntityID
and edh.DepartmentID = d.DepartmentID
and d.Name = 'Engineering';

আমার ব্যক্তিগতভাবে, প্রথমটি বেশ পাঠযোগ্য। আপনি দেখতে পাচ্ছেন যে আমরা টেবিলগুলিতে যোগ দিচ্ছি INNER JOIN, যার অর্থ আমরা পরবর্তী সারণির সাথে মেলে এমন সারিগুলি টানছি (অর্থাত্ "BusinessEntityID এ কর্মচারীদের সাথে কর্মচারীতে যোগদান করুন এবং সেই সারিগুলি অন্তর্ভুক্ত করুন")।

পরেরটি, কমা আমার কাছে কিছুই বোঝায় না। এটি আমাকে অবাক করে দেয় যে আপনি এই সমস্ত WHEREধারাটির পূর্বাভাস দিয়ে কী করছেন ।

প্রাক্তনটি আরও পড়েন যেমন আমার মস্তিষ্ক চিন্তা করে। আমি প্রতিদিন সারাদিন এসকিউএল দেখি এবং কমাগুলিতে যোগ দেয়। যা আমাকে আমার পরবর্তী পয়েন্টে নিয়ে যায় ...

এই ধরণের প্রশ্নগুলি কাজের জন্য "যোগ দেয়" নামে পরিচিত হওয়ার অন্যান্য উপায় রয়েছে

তারা সবাই যোগ দেয়। এমনকি কমাগুলিও একটি যোগদান। লেখক তাদের সত্যিকারের পতন বলে না এই সত্যটি .... এটি সুস্পষ্ট নয়। এটা সুস্পষ্ট হওয়া উচিত। আপনি সুনির্দিষ্ট ডেটাতে যোগদান করছেন, আপনি নির্দিষ্ট করুন JOINবা না কেন ,

কর্মক্ষমতা

এটি অবশ্যই স্পষ্টভাবে আরডিবিএমএস-নির্ভর হতে চলেছে। আমি কেবল মাইক্রোসফ্ট এসকিউএল সার্ভারের পক্ষে কথা বলতে পারি। পারফরম্যান্স-ভিত্তিতে এগুলি সমতুল্য। তুমি কিভাবে জান? সম্পাদন-পরবর্তী পরিকল্পনাগুলি ক্যাপচার করুন এবং দেখুন এসকিউএল সার্ভার এই বিবৃতিগুলির প্রত্যেকটির জন্য ঠিক কী করছে:

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

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

সারাংশ

কমা ব্যবহার করবেন না। স্পষ্ট JOINবিবৃতি ব্যবহার করুন ।


যেখানে আমি বুঝতে পেরেছিলাম যে WHERE ক্লজগুলির সাথে বৈকল্পিক সমান এবং আপনার উভয় উদাহরণ আমার কাছে খুব পাঠযোগ্য। WHERE এবং কমাগুলির সাথে একটি আরও বেশি পঠনযোগ্য। যেখানে এটি নিচে নেমেছে, আমি মনে করি, এটি বৃহত জটিল প্রশ্নগুলিতে রয়েছে, এটি তুলনামূলক সহজ বিষয় নয়।
রবার্ট হার্ভে

পয়েন্ট হ'ল, কমা বৈচিত্রটি কোনও সম্পর্কযুক্ত যোগ নয় তা ভাবা মোটেই সঠিক নয়।
টমাস স্ট্রিংগার

আমি মনে করি আপনি যোগদানের সাথে কমাগুলি ভুলভাবে ব্যাখ্যা করছেন। কমাগুলি কেবল পৃথক সারণী; এটি এমন কটি শর্ত যা কমাগুলিতে নয়, যোগ দেয়।
রবার্ট হার্ভে

1
আমি খুব স্পষ্টভাবে বলতে পারি যে ভবিষ্যদ্বাণীপূর্ণ অনুচ্ছেদে যা ঘটেছিল তাতে কোনও যোগ নেই। আমি মনে করি আপনি আপনার সম্পর্কিত সম্পর্কিত প্রশ্নের সমাধানগুলি ভুলভাবে ব্যাখ্যা করছেন pre আপনি কি কমাগুলি ছাড়াই কমাতে যোগদানের চেষ্টা করেছেন? এটি এখনও কাজ করে। এটি একটি cartesian যোগদান। কমা ব্যবহার করে আপনি কী অর্জন করছেন বলে মনে করেন? আপনি অক্ষরগুলি সংরক্ষণ করার চেষ্টা করছেন দয়া করে এটি বলবেন না।
থমাস স্ট্রিংগার

1
আমি বলব প্রথমটিটি ভাল কারণ আপনার উদ্দেশ্যগুলি পরিষ্কার। অস্পষ্টতা অনেক কম।
ড্যানিয়েল হোলিনরাকে

4

না, এটি মোটেও সত্য নয়। লেখক বিভ্রান্তির জন্য তাঁর পাঠকদের সেট আপ করছেন, এবং উত্সাহিত করছেন কার্গো-কাল্ট প্রোগ্রামিং যা মানক সিনট্যাক্স এবং তিনি পছন্দ করেন এমন এই পুরানো বৈকল্পিকের মধ্যে খুব শক্তিশালী কাঠামোগত পার্থক্য এড়িয়ে চলে। বিশেষত, একটি বিশৃঙ্খল WHERE ক্লজটি কী তাকে তার ক্যোয়ারী বিশেষ করে তোলে তা নির্ধারণ করা আরও শক্ত করে তোলে।

তার উদাহরণ পাঠককে তার অর্থের একটি মানসিক মানচিত্র তৈরি করতে পরিচালিত করে যার মধ্যে ভয়ঙ্কর অশান্তি রয়েছে।

SELECT pet.id, pet.name, pet.age, pet.dead
    FROM pet, person_pet, person
    WHERE
    pet.id = person_pet.pet_id AND
    person_pet.person_id = person.id AND
    person.first_name = "Zed";

মোটামুটিভাবে, উপরেরটি হ'ল:

সমস্ত পোষা প্রাণী, ব্যক্তি_পাট এবং যে সমস্ত ব্যক্তির পোষা আইডি কোনও ব্যক্তির_পেটের পোষা_দুটির সাথে মিলে যায় তার জন্য পোষ্যের আইডি, নাম, এজিই এবং ডিএডি পান এবং সেই রেকর্ডের ব্যক্তি_আইডি এমন ব্যক্তির ব্যক্তির সাথে মিলিত হয় যার FIRST_NAME "জেড"

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

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

কোয়েরিতে যদি ক্লিনারটি লেখা থাকে তবে

SELECT pet.id, pet.name, pet.age
FROM pet
  JOIN person_pet ON pet.id = person_pet.pet_id
  JOIN person ON person.id = person_pet.person_id
WHERE 
  person.first_name = "Zed";

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


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


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

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

3

গাই ক্লাসিক ত্রুটি করছে। তিনি একটি নির্দিষ্ট বাস্তবায়ন সহ একটি বিমূর্ত ধারণা শেখানোর চেষ্টা করছেন। যত তাড়াতাড়ি আপনি এটি করবেন আপনি এই ধরণের গন্ডগোল into

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

বাম এবং ডান যোগ দেয়, যুক্তিযুক্ত হতে পারে তারা খুব বেশি গুরুত্ব দেয় না। আউটার যোগ দিন, ভাল আপনি পুরানো *=এবং =*বাক্য গঠন ব্যবহার করতে পারেন ।

এখন আপনি যুক্তি দিতে পারেন যে বাক্য গঠনটি সহজ, তবে কেবল সাধারণ প্রশ্নের জন্য। আপনি এই সংস্করণটি দিয়ে একটি জটিল প্রশ্ন করার চেষ্টা শুরু করার সাথে সাথেই আপনি একটি ভয়াবহ জগাখিচুড়ি করতে পারেন। "নতুন" সিনট্যাক্সটি প্রবর্তন করা হয়নি তাই আপনি জটিল প্রশ্নগুলি করতে পারতেন, তাই আপনি পাঠযোগ্য এবং অতএব রক্ষণাবেক্ষণের পদ্ধতিতে জটিল প্রশ্নগুলি করেন।


3
"শিখুন এক্স হার্ড ওয়ে" একটি ভিন্ন শিক্ষার পদ্ধতি। আপনি কোডটি লিখুন, এবং তারপরে এটি পরে বুঝতে পারবেন।
রবার্ট হার্ভে

7
@ রবার্টহারভে এটি ভিন্ন শিক্ষার পদ্ধতি নয়, এটি আদর্শ। পরে কেবল তখন ঘটতে পারে যখন চাকাগুলি বন্ধ হয়ে যায় in এসকিউএল লেখার মতো অনেক লোকের সাথে মোকাবিলা করা হয়েছে যারা এই পদ্ধতিতে কোনও আস্থা রাখার জন্য একটি সারণী কোষের আয়তক্ষেত্রাকার অ্যারে বলে মনে করেন।
টনি হপকিনসন

2

উদাহরণটি অভ্যন্তরীণ JOINs সহ সাধারণ সংস্কারের সমতুল্য। পার্থক্যটি কেবলমাত্র জিন সিনট্যাক্সের অনুমতি দেয় এমন অতিরিক্ত সম্ভাবনার মধ্যে রয়েছে। উদাহরণস্বরূপ, আপনি জড়িত দুটি টেবিলের কলামগুলিতে ক্রমটি ক্রম নির্দিষ্ট করতে পারেন; উদাহরণস্বরূপ https://stackoverflow.com/a/1018825/259310 দেখুন

প্রাপ্ত জ্ঞান হ'ল সন্দেহ হয়, আপনার প্রশ্নগুলি সেভাবে লেখার জন্য যা সেগুলি আরও পাঠযোগ্য। তবে যোগদান করুন বা কোথায় form


উত্তম উত্তর, যদিও আপনি বিবৃতিতে WHEREক্লজটি ব্যবহার করেন বা রাখেন না JOINকেন ক্যোরি অপ্টিমাইজারের উপর নির্ভর করে আসলে একটি পারফরম্যান্স প্রভাব ফেলতে পারে। আমি এটি একাধিকবার হতে দেখেছি।
লক করুন

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

2

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

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

কোন মতপার্থক্য আছে? হ্যাঁ, আছে। প্রথমটি হ'ল একটি অন ক্লজ সহ কোনও অন্তর্গত যোগদান লেখকের উদ্দেশ্যকে পুরানো শৈলীর যোগদানের চেয়ে আরও স্পষ্টভাবে প্রকাশ করে। অন ​​ক্লজটি আসলে একটি যোগদানের শর্ত এবং অন্য কোনও ধরণের নিষেধাজ্ঞার বিষয়টি আরও স্পষ্ট নয়। এটি এমন কোড তৈরি করে যা পুরানো শৈলীর চেয়ে পড়ার সময় INNER জয়েন ব্যবহার করে easier অন্য কারও কোড বজায় রাখার সময় এটি গুরুত্বপূর্ণ।

দ্বিতীয় পার্থক্যটি হ'ল নতুন স্টাইলটি ক্যোয়ারী অপ্টিমাইজারের পক্ষে বিজয়ী কৌশলটি আবিষ্কার করা প্রান্তিকভাবে সহজ করে তোলে। এটি খুব ছোট প্রভাব, তবে এটি আসল।

তৃতীয় তফাতটি হ'ল আপনি যখন অন্তর্ভুক্ত হওয়া (বা কেবল সরল যোগ) ব্যবহার করা শিখেন তখন বাম যোগ ইত্যাদি শিখতে সহজ করে তোলে etc.

তা ছাড়া এখানে কোনও বৈষয়িক পার্থক্য নেই।


0

আপনি সেট এবং আনুষ্ঠানিক যুক্তির শর্তাবলী বিবেচনা যদি এটি নির্ভর করে .....

আপনি যদি তা না করেন তবে "যোগদান" কীওয়ার্ডটি ব্যবহার না করে আনুষ্ঠানিক যুক্তি থেকে এসকিউএল পর্যন্ত আরও সহজ অগ্রগতি লাভ করে।

তবে যদি 99% লোকের মতো আপনি নিজের গণিতের ডিগ্রিতে আনুষ্ঠানিক যুক্তি উপভোগ করেন না, তবে যোগদানের কীওয়ার্ডটি শিখতে সহজ। এসকিউএলকে আনুষ্ঠানিক যুক্তিযুক্ত প্রশ্নগুলি লেখার জন্য কেবলমাত্র অন্য উপায় হিসাবে উপস্থাপন করা হত ....

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