ওরাকল এর সাথে মাইএসকিউএল সমতুল্য


উত্তর:


16

এখানে নেই. (যতক্ষণ না) কেউ এর বিকাশ না করে (মাইএসকিউএল ওপেন সোর্স, যে কেউ অবদান রাখতে পারে can)

এএনএসআই / আইএসও এসকিউএল WITHকীওয়ার্ডটি সাধারণ টেবিল এক্সপ্রেশন (সিটিই) সংজ্ঞায়িত করতে ব্যবহৃত হয় এবং এটি এক বা একাধিক নেস্টেড রেফারেন্স সহ জটিল প্রশ্নগুলি সহজতর করে। এটি ওরাকল, পোস্টগ্রিস, এসকিউএল-সার্ভার, ডিবি 2 এ উপলব্ধ তবে মাইএসকিউএলে নেই।

চূড়ান্ত ক্যোয়ারিতে রেফারেন্স থাকতে পারে (সাধারণত FROMধারাটিতে তবে তারা অন্য কোনও অংশে থাকতে পারে) সাধারণ টেবিলের যে কোনও ব্যক্তির কাছে এক বা একাধিকবার উল্লেখ করা যেতে পারে। উত্সযুক্ত টেবিলগুলি ব্যবহার করে মাইএসকিউএলে কোয়েরিটি (সিটিই ছাড়াই) লেখা যেতে পারে তবে উল্লেখগুলি বারবার তৈরি করতে হয়।

50-এর দশকে এবং জুলাই মাসে এবং একই বছরে জন্মগ্রহণকারী সমস্ত ব্যক্তির সংখ্যা দেখানো একটি নির্বোধ জিজ্ঞাসার উদাহরণ:

WITH a AS
    ( SELECT name, birthdate, YEAR(birthdate) AS birthyear
      FROM persons
      WHERE birthdate >= '1950-01-01' AND birthdate < '1960-01-01' 
    ) 
, b AS
    ( SELECT birthyear, COUNT(*) AS cnt
      FROM a
      GROUP BY birthyear 
    ) 
SELECT a.name, a.birthdate, b.cnt AS number_of_births
FROM a JOIN b
  ON a.birthyear = b.birthyear 
WHERE MONTH(a.birthdate) = 7 ;

মাইএসকিউএল এ এটি লেখা যেতে পারে:

SELECT a.name, a.birthdate, b.cnt AS number_of_births
FROM 
    ( SELECT name, birthdate, YEAR(birthdate) AS birthyear
      FROM persons
      WHERE birthdate >= '1950-01-01' AND birthdate < '1960-01-01' 
    ) AS a 
  JOIN 
    ( SELECT birthyear, COUNT(*) AS cnt
      FROM 
        ( SELECT name, birthdate, YEAR(birthdate) AS birthyear
          FROM persons
          WHERE birthdate >= '1950-01-01' AND birthdate < '1960-01-01' 
        ) AS aa
      GROUP BY birthyear
    ) AS b
  ON a.birthyear = b.birthyear 
WHERE MONTH(a.birthdate) = 7 ;

উত্পন্ন টেবিলের জন্য কোডটির নকল লক্ষ্য করুন a। আরও জটিল প্রশ্নগুলিতে কোডটি একাধিকবার লিখতে হবে।


পুনরাবৃত্তি (কোডের নকল) এড়ানোর জন্য, ভেরিয়েবল এবং অস্থায়ী সারণী ব্যবহার করা ভাল না?
পেসারিয়ার 18

আমি কোডটির নকল সম্পর্কে চিন্তা করব না তবে পারফরম্যান্সের কারণে আমি অস্থায়ী টেবিলগুলি সহ একটি সংস্করণ বিবেচনা করব এবং চেষ্টা করব।
ypercubeᵀᴹ

1
আপনি কেন বলেন যে আপনি কোডের নকল সম্পর্কে চিন্তা করবেন না? এটি নিখুঁত অগোছালো এবং অ  শুকনো
পেসারিয়ার

1
@ পেসারিয়ার ডিআরওয়াই সর্বদা ডিবি কোডের সাথে প্রাসঙ্গিক নয়।
জেএনকে

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

2

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

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

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

আমি এই উত্তরটি কেবল একটি অনুরূপ থ্রেডে দেখেছি যা মাইএসকিউএল সহ 3 টি কার্যকার্য স্পষ্টভাবে প্রকাশ করে :

  • অস্থায়ী সারণী
  • প্রাপ্ত টেবিলগুলি
  • ইনলাইন মতামত (কার্যকরভাবে বিধিটি কী উপস্থাপন করে - সেগুলি বিনিময়যোগ্য)

/programming//a/1382618/2906290

এবং মাইএসকিউএল পদ্ধতির একটি উদাহরণ যা অস্থায়ী টেবিলগুলি তৈরি করে এবং ফেলে দেয় যদি আপনি আপনার অধিবেশন চালিয়ে যান এবং এই সংস্থানগুলি মুক্ত করতে চান (আমি এটি কেবল সিনট্যাক্সের উদাহরণ হিসাবে ব্যবহার করব): /programming//a/ 5553145/2906290

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