ওরাকলে কি উইথ ক্লজের মাইএসকিউএল সমতুল্য?
ওরাকলে কি উইথ ক্লজের মাইএসকিউএল সমতুল্য?
উত্তর:
এখানে নেই. (যতক্ষণ না) কেউ এর বিকাশ না করে (মাইএসকিউএল ওপেন সোর্স, যে কেউ অবদান রাখতে পারে 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
। আরও জটিল প্রশ্নগুলিতে কোডটি একাধিকবার লিখতে হবে।
এটি কাজ করবে তবে এটি দুঃখের বিষয় এটি WITH ধারাটি ব্যবহার করার সুবিধা প্রদান করবে না, এটি একই প্রশ্নটি বেশ কয়েকবার কার্যকর করা হবে না (জটিল প্রশ্নগুলি পুনরায় আর ধীরে ধীরে হতে পারে এবং ডাটাবেস ইঞ্জিনটির জন্য খুব দাবিদার হতে পারে; আমি এটি ভোগ করেছি) ।
আমি মূল অধ্যায়টিতে সংজ্ঞায়িত প্রতিটি নির্বাচনকে তার নিজের অস্থায়ী সারণিতে সন্নিবেশ করানোর পরামর্শ দেব এবং সেগুলি কোয়েরির ভিতরে ব্যবহার করব । মাইএসকিউএলে, ব্যবহারকারীর সেশন শেষ হয়ে গেলে অস্থায়ী টেবিলটি নিজেই নামবে।
সম্পাদনা করুন:
আমি এই উত্তরটি কেবল একটি অনুরূপ থ্রেডে দেখেছি যা মাইএসকিউএল সহ 3 টি কার্যকার্য স্পষ্টভাবে প্রকাশ করে :
/programming//a/1382618/2906290
এবং মাইএসকিউএল পদ্ধতির একটি উদাহরণ যা অস্থায়ী টেবিলগুলি তৈরি করে এবং ফেলে দেয় যদি আপনি আপনার অধিবেশন চালিয়ে যান এবং এই সংস্থানগুলি মুক্ত করতে চান (আমি এটি কেবল সিনট্যাক্সের উদাহরণ হিসাবে ব্যবহার করব): /programming//a/ 5553145/2906290